<?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>170502</bug_id>
          
          <creation_ts>2017-04-05 04:17:33 -0700</creation_ts>
          <short_desc>[WTF] Introduce Thread class and use RefPtr&lt;Thread&gt; and align Windows Threading implementation semantics to Pthread one</short_desc>
          <delta_ts>2017-04-19 18:54:43 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170027</blocked>
    
    <blocked>171029</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1294464</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-05 04:17:33 -0700</bug_when>
    <thetext>Currently, Windows Threading implementation is largely different. For example, once the thread is detached, we cannot do anything in Windows threading implementation. However, in Pthread Threading implementation, we can take various information and we can do several operations since the thread still remains in ThreadMap.

In this bug, we would like to introduce RefPtr&lt;Thread&gt; class instead of ThreadIdentifier. Even if the actual thread is dead, RefPtr&lt;Thread&gt; is valid and we can still get various information (like, thread is already dead).
And Thread class should have various useful methods, like suspend and resume. They should be carried from JSC&apos;s heap/.

And by using RefPtr&lt;Thread&gt;, we can drop ThreadMap. Currently, we always need to look up the platform thread information from the hash map. Instead, RefPtr&lt;Thread&gt; holds this information. And RefPtr&lt;Thread&gt;&apos;s actual thread lifetime is managed by thread exit handler registered by using ThreadSpecific&lt;&gt; thing, which is similar to the current ThreadIdentifierDataPthreads.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294465</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-05 04:18:49 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #0)
&gt; Currently, Windows Threading implementation is largely different. For
&gt; example, once the thread is detached, we cannot do anything in Windows
&gt; threading implementation. However, in Pthread Threading implementation, we
&gt; can take various information and we can do several operations since the
&gt; thread still remains in ThreadMap.
&gt; 
&gt; In this bug, we would like to introduce RefPtr&lt;Thread&gt; class instead of
&gt; ThreadIdentifier. Even if the actual thread is dead, RefPtr&lt;Thread&gt; is valid
&gt; and we can still get various information (like, thread is already dead).
&gt; And Thread class should have various useful methods, like suspend and
&gt; resume. They should be carried from JSC&apos;s heap/.
&gt; 
&gt; And by using RefPtr&lt;Thread&gt;, we can drop ThreadMap. Currently, we always
&gt; need to look up the platform thread information from the hash map. Instead,
&gt; RefPtr&lt;Thread&gt; holds this information. And RefPtr&lt;Thread&gt;&apos;s actual thread
&gt; lifetime is managed by thread exit handler registered by using
&gt; ThreadSpecific&lt;&gt; thing, which is similar to the current
&gt; ThreadIdentifierDataPthreads.cpp.

And this will drop giant lock for ThreadMap. Each RefPtr&lt;Thread&gt; should have a fine-grained lock to guard it from simultaneous accesses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294571</commentid>
    <comment_count>2</comment_count>
      <attachid>306299</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-05 11:16:09 -0700</bug_when>
    <thetext>Created attachment 306299
WIP

WIP: GTK and JSCOnly work on Linux. Only WTF &amp; JSC are changed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295285</commentid>
    <comment_count>3</comment_count>
      <attachid>306488</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 05:19:26 -0700</bug_when>
    <thetext>Created attachment 306488
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295287</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 05:22:39 -0700</bug_when>
    <thetext>Attachment 306488 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadHolderPthreads.cpp:35:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:413:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:436:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:528:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:513:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:33:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WTF/wtf/Threading.h:180:  The parameter name &quot;handle&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/Threading.h:180:  The parameter name &quot;threadID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/workers/WorkerThread.cpp:196:  &apos;thread&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedThread&apos;.  [readability/naming/protected] [4]
Total errors found: 11 in 99 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295293</commentid>
    <comment_count>5</comment_count>
      <attachid>306490</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 06:11:14 -0700</bug_when>
    <thetext>Created attachment 306490
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295294</commentid>
    <comment_count>6</comment_count>
      <attachid>306491</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 06:15:35 -0700</bug_when>
    <thetext>Created attachment 306491
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295295</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 06:17:35 -0700</bug_when>
    <thetext>Attachment 306491 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:399:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:513:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 4 in 98 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295297</commentid>
    <comment_count>8</comment_count>
      <attachid>306493</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 06:21:37 -0700</bug_when>
    <thetext>Created attachment 306493
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295298</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 06:23:17 -0700</bug_when>
    <thetext>Attachment 306493 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:399:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:513:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 4 in 99 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295303</commentid>
    <comment_count>10</comment_count>
      <attachid>306495</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 06:42:31 -0700</bug_when>
    <thetext>Created attachment 306495
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295306</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 06:45:15 -0700</bug_when>
    <thetext>Attachment 306495 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:399:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:513:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 4 in 97 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295307</commentid>
    <comment_count>12</comment_count>
      <attachid>306496</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 06:45:28 -0700</bug_when>
    <thetext>Created attachment 306496
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295308</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 06:48:40 -0700</bug_when>
    <thetext>Attachment 306496 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:399:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:513:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 4 in 97 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295316</commentid>
    <comment_count>14</comment_count>
      <attachid>306499</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 07:14:41 -0700</bug_when>
    <thetext>Created attachment 306499
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295317</commentid>
    <comment_count>15</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 07:18:18 -0700</bug_when>
    <thetext>Attachment 306499 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingPthreads.cpp:399:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:513:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 4 in 97 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295319</commentid>
    <comment_count>16</comment_count>
      <attachid>306501</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 07:33:32 -0700</bug_when>
    <thetext>Created attachment 306501
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295334</commentid>
    <comment_count>17</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 08:25:28 -0700</bug_when>
    <thetext>Attachment 306501 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:245:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 3 in 97 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295339</commentid>
    <comment_count>18</comment_count>
      <attachid>306506</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 08:42:40 -0700</bug_when>
    <thetext>Created attachment 306506
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295343</commentid>
    <comment_count>19</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 08:44:56 -0700</bug_when>
    <thetext>Attachment 306506 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:246:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 3 in 96 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295369</commentid>
    <comment_count>20</comment_count>
      <attachid>306513</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 09:51:04 -0700</bug_when>
    <thetext>Created attachment 306513
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295371</commentid>
    <comment_count>21</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 10:05:14 -0700</bug_when>
    <thetext>Attachment 306513 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:246:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 3 in 97 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295415</commentid>
    <comment_count>22</comment_count>
      <attachid>306521</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-07 11:46:22 -0700</bug_when>
    <thetext>Created attachment 306521
WIP

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295418</commentid>
    <comment_count>23</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 11:48:40 -0700</bug_when>
    <thetext>Attachment 306521 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadHolderWin.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadingWin.cpp:251:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderPthreads.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 3 in 97 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295782</commentid>
    <comment_count>24</comment_count>
      <attachid>306617</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-09 04:58:56 -0700</bug_when>
    <thetext>Created attachment 306617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295783</commentid>
    <comment_count>25</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-09 05:00:28 -0700</bug_when>
    <thetext>Attachment 306617 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingWin.cpp:251:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolder.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/PlatformRegisters.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:82:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:82:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:96:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 6 in 99 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295786</commentid>
    <comment_count>26</comment_count>
      <attachid>306619</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-09 05:56:27 -0700</bug_when>
    <thetext>Created attachment 306619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295787</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-09 05:58:54 -0700</bug_when>
    <thetext>Attachment 306619 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingWin.cpp:251:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolder.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/PlatformRegisters.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:84:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 6 in 99 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295788</commentid>
    <comment_count>28</comment_count>
      <attachid>306620</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-09 06:15:49 -0700</bug_when>
    <thetext>Created attachment 306620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295789</commentid>
    <comment_count>29</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-09 06:18:28 -0700</bug_when>
    <thetext>Attachment 306620 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingWin.cpp:251:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolder.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/PlatformRegisters.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:84:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 6 in 99 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295790</commentid>
    <comment_count>30</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-09 07:02:50 -0700</bug_when>
    <thetext>OK, ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296302</commentid>
    <comment_count>31</comment_count>
      <attachid>306620</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-10 23:40:46 -0700</bug_when>
    <thetext>Comment on attachment 306620
Patch

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

Looks good so far, but not finished reviewing yet. Here are some comments for now ...

&gt; Source/JavaScriptCore/heap/MachineStackMarker.cpp:143
&gt; -Thread* MachineThreads::machineThreadForCurrentThread()
&gt; +JSThread* MachineThreads::machineThreadForCurrentThread()

This function being named machineThreadForCurrentThread() returning a JSThread* suggests to me that either:
1. JSThread should be renamed MachineThread, or
2. machineThreadForCurrentThread() should be renamed jsThreadForCurrentThread().

I understand that affinity between the JSThread and JS code running on the thread.  However, I think MachineThread might be the better name.  Here&apos;s why: there is one MachineThread for each WTF::Thread that the VM has ever run on, while conceptually, there is only one JS thread running per VM at any one moment.  If a VM used to run on MachineThread M1 but now only runs on M2, it still needs to keep track of M1 even though M2 is the real JS thread (thread running JS) now.

Hence, MachineThread is the better name because it describes a record of the machine thread that this VM once ran on.  My proposal is to go with (1) rename JSThread to MachineThread.  Do you agree?

&gt; Source/JavaScriptCore/heap/MachineStackMarker.cpp:374
&gt; +                    &quot;JavaScript garbage collection encountered an invalid thread (err 0x%x): Thread [%d/%d: %p] id %p.&quot;,
&gt; +                    result.error(), index, numberOfThreads, thread, reinterpret_cast&lt;void*&gt;(thread-&gt;threadID()));

You should use %d now instead of %p for thread-&gt;threadID() because ThreadIdentifier is a uint32_t.

&gt; Source/WTF/wtf/MainThread.cpp:191
&gt; -bool canAccessThreadLocalDataForThread(ThreadIdentifier threadId)
&gt; +bool canAccessThreadLocalDataForThread(ThreadIdentifier thread)
&gt;  {
&gt; -    return threadId == currentThread();
&gt; +    return thread == currentThread();

nit: Why not stick with threadId or just id?  Elsewhere, when we expect thread to be a WTF::Thread* and  threadId/threadID/id to be a ThreadIdentifier.  I think it&apos;s best to stay consistent.

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:313
&gt; +    ASSERT_WITH_MESSAGE(this != &amp;current(), &quot;Currently we don&apos;t support suspend the current thread itself.&quot;);

Can you make this a RELEASE_ASSERT_WITH_MESSAGE()?  I don&apos;t think thread suspension is in any hot path, and it&apos;s better to fail an assertion than end up &quot;deadlocking&quot; oneself with self suspension.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296308</commentid>
    <comment_count>32</comment_count>
      <attachid>306620</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-11 01:17:03 -0700</bug_when>
    <thetext>Comment on attachment 306620
Patch

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

Thanks. I&apos;ll soon upload the patch with the fix.

&gt;&gt; Source/JavaScriptCore/heap/MachineStackMarker.cpp:143
&gt;&gt; +JSThread* MachineThreads::machineThreadForCurrentThread()
&gt; 
&gt; This function being named machineThreadForCurrentThread() returning a JSThread* suggests to me that either:
&gt; 1. JSThread should be renamed MachineThread, or
&gt; 2. machineThreadForCurrentThread() should be renamed jsThreadForCurrentThread().
&gt; 
&gt; I understand that affinity between the JSThread and JS code running on the thread.  However, I think MachineThread might be the better name.  Here&apos;s why: there is one MachineThread for each WTF::Thread that the VM has ever run on, while conceptually, there is only one JS thread running per VM at any one moment.  If a VM used to run on MachineThread M1 but now only runs on M2, it still needs to keep track of M1 even though M2 is the real JS thread (thread running JS) now.
&gt; 
&gt; Hence, MachineThread is the better name because it describes a record of the machine thread that this VM once ran on.  My proposal is to go with (1) rename JSThread to MachineThread.  Do you agree?

Agreed. The name &quot;JSThread&quot; is misleading since it actually includes all the threads that run the target VM at least once.
I&apos;ll rename JSThread to MachineThread.

&gt;&gt; Source/JavaScriptCore/heap/MachineStackMarker.cpp:374
&gt;&gt; +                    result.error(), index, numberOfThreads, thread, reinterpret_cast&lt;void*&gt;(thread-&gt;threadID()));
&gt; 
&gt; You should use %d now instead of %p for thread-&gt;threadID() because ThreadIdentifier is a uint32_t.

Right. Maybe, `%u` is better. Fixed.

&gt;&gt; Source/WTF/wtf/MainThread.cpp:191
&gt;&gt; +    return thread == currentThread();
&gt; 
&gt; nit: Why not stick with threadId or just id?  Elsewhere, when we expect thread to be a WTF::Thread* and  threadId/threadID/id to be a ThreadIdentifier.  I think it&apos;s best to stay consistent.

Right. We should keep using threadId here. Fixed.

&gt;&gt; Source/WTF/wtf/ThreadingPthreads.cpp:313
&gt;&gt; +    ASSERT_WITH_MESSAGE(this != &amp;current(), &quot;Currently we don&apos;t support suspend the current thread itself.&quot;);
&gt; 
&gt; Can you make this a RELEASE_ASSERT_WITH_MESSAGE()?  I don&apos;t think thread suspension is in any hot path, and it&apos;s better to fail an assertion than end up &quot;deadlocking&quot; oneself with self suspension.

Right. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296310</commentid>
    <comment_count>33</comment_count>
      <attachid>306785</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-11 01:19:49 -0700</bug_when>
    <thetext>Created attachment 306785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296313</commentid>
    <comment_count>34</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-11 01:22:57 -0700</bug_when>
    <thetext>Attachment 306785 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingWin.cpp:251:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolder.h:32:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/PlatformRegisters.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:84:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 6 in 98 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296663</commentid>
    <comment_count>35</comment_count>
      <attachid>306785</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-11 23:50:13 -0700</bug_when>
    <thetext>Comment on attachment 306785
Patch

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

r=me with outstanding issues resolved.

&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:282
&gt; -    , m_threadIdentifier(0)
&gt; +    , m_thread(nullptr)

You can skip this.  A RefPtr&lt;T&gt; is null by default.

&gt; Source/WTF/wtf/ParallelJobsGeneric.h:57
&gt; -            : m_threadID(0)
&gt; +            : m_thread(nullptr)

I think you can skip this.  A RefPtr&lt;T&gt; is null by default.

&gt; Source/WTF/wtf/ParkingLot.cpp:806
&gt; +            callback(currentThreadData-&gt;thread.get(), currentThreadData-&gt;address);

Is this correct?  currentThreadData-&gt;thread.get() returns a WTF::Thread*.  The lambda is expecting a WTF::Thread&amp;.  How can this work?  I see that the EWS bots are all happy.  What am I missing?

&gt; Source/WTF/wtf/ThreadHolder.cpp:49
&gt; +        // Ideally we&apos;d have this as a release assert everywhere, but that would hurt performane.

/performane/performance/.

&gt; Source/WTF/wtf/ThreadHolder.h:33
&gt; +#ifndef ThreadHolder_h
&gt; +#define ThreadHolder_h

Please change to use &quot;#pragma once&quot; instead.

&gt; Source/WTF/wtf/ThreadHolder.h:82
&gt; +#endif // ThreadHolder_h

Please remove.

&gt; Source/WTF/wtf/ThreadHolderWin.cpp:63
&gt; +    if (holder)

I think you should ASSERT(holder != InvalidThreadHolder) here to make it crash earlier.

&gt; Source/WTF/wtf/ThreadHolderWin.cpp:84
&gt; +         : m_holder(holder)

Please fix the indentation here.

&gt; Source/WTF/wtf/ThreadHolderWin.cpp:107
&gt; +        // Fill the FLS with the non-nullptr value. While FLS destructor won&apos;t be called for that,
&gt; +        // non-nullptr value tells us that we already destructed ThreadHolder. It leads incorrect
&gt; +        // use of Thread::current() crash.

I suggest replacing &quot;It leads incorrect use of Thread::current() crash.&quot; with &quot;This allows us to detect incorrect use of Thread::current() after this point because it will crash.&quot;

&gt; Source/WTF/wtf/Threading.h:81
&gt; +    // Returns ThreadIdentifier directly. It is useful if the user only cares about identity
&gt; +    // of threads and ensure the thread lifetime. While Thread::current() is not safe if it is called
&gt; +    // from the destructor of the other TLS data, currentID() always returns meaningful thread ID.

I&apos;m a bit confused by what you mean by &quot;and ensure the thread lifetime&quot; here.  Can you please clarify?

&gt; Source/WTF/wtf/Threading.h:115
&gt; +    // Internal platform-specific Thread::create implementation.
&gt; +    static RefPtr&lt;Thread&gt; createInternal(ThreadFunction, void*, const char* threadName);

Let&apos;s make this private.

&gt; Source/WTF/wtf/Threading.h:132
&gt; +#if USE(PTHREADS) &amp;&amp; !OS(DARWIN)
&gt; +    static void signalHandlerSuspendResume(int, siginfo_t*, void* ucontext);
&gt;  #endif

Let&apos;s make this private.

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:267
&gt; +    // The thread has already exited, do nothing.
&gt;      // The thread hasn&apos;t exited yet, so don&apos;t clean anything up. Just signal that we&apos;ve already joined on it so that it will clean up after itself.

This comment is a bit confusing.  It seems to say that the thread has both &quot;already exited&quot; and &quot;hasn&apos;t exited yet&quot;.  I suggest changing it to say:
&quot;If the thread has already exited, then do nothing.
If the thread hasn&apos;t exited yet, then just signal that we&apos;ve already joined on it.
In both cases, ThreadHolder::destruct() will take care of removing the thread from the threadMap.&quot;

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:313
&gt; +    RELEASE_ASSERT_WITH_MESSAGE(id() != currentThread(), &quot;We do not support suspend the current thread itself.&quot;);

typo: /suspend/suspending/.

&gt; Source/WTF/wtf/ThreadingWin.cpp:165
&gt;  void initializeThreading()
&gt;  {
&gt; -    static bool isInitialized;
&gt; -    
&gt; -    if (isInitialized)
&gt; -        return;
&gt; -
&gt; -    isInitialized = true;
&gt; -
&gt; -    WTF::double_conversion::initialize();
&gt; -    // StringImpl::empty() does not construct its static string in a threadsafe fashion,
&gt; -    // so ensure it has been initialized from here.
&gt; -    StringImpl::empty();
&gt; -    threadMapMutex();
&gt; -    initializeRandomNumberGenerator();
&gt; -    wtfThreadData();
&gt; -    initializeDates();
&gt; -}
&gt; -
&gt; -static HashMap&lt;DWORD, HANDLE&gt;&amp; threadMap()
&gt; -{
&gt; -    static NeverDestroyed&lt;HashMap&lt;DWORD, HANDLE&gt;&gt; map;
&gt; -    return map;
&gt; +    static std::once_flag initializeKey;
&gt; +    std::call_once(initializeKey, [] {
&gt; +        WTF::double_conversion::initialize();
&gt; +        ThreadHolder::initializeOnce();
&gt; +        // StringImpl::empty() does not construct its static string in a threadsafe fashion,
&gt; +        // so ensure it has been initialized from here.
&gt; +        StringImpl::empty();
&gt; +        initializeRandomNumberGenerator();
&gt; +        wtfThreadData();
&gt; +        initializeDates();
&gt; +    });
&gt;  }

This is identical to the PThread one with the exception of the PThread one needing to do some extra work for !OS(DARWIN).  Over the years, I&apos;ve found that I&apos;ve occasionally needed to add new things to initialize to initializeThreading().  Note also that most of the things initialized in this list are not specific to thread implementation, but are system wide things that we want to initialize only once.  It would be good to only have one copy of it.  Can you move this to a common Threading.cpp, and have it call a initializePlatformThreading() function instead that is defined differently for each platform?  I think that that would be cleaner.

&gt; Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.cpp:44
&gt; -    , m_renderThread(0)
&gt; +    , m_renderThread(nullptr)

This is not needed.

&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.h:72
&gt; +    RefPtr&lt;Thread&gt; m_thread { nullptr };

The { nullptr } initialization is not needed.

&gt; Source/WebCore/page/ResourceUsageThread.h:65
&gt; +    RefPtr&lt;Thread&gt; m_thread { nullptr };

The { nullptr } initialization is not needed.

&gt; Source/WebCore/page/scrolling/ScrollingThread.cpp:38
&gt; -    : m_threadIdentifier(0)
&gt; +    : m_thread(nullptr)

You can skip this.  A RefPtr&lt;T&gt; is null by default.

&gt; Source/WebCore/platform/audio/HRTFDatabaseLoader.cpp:67
&gt; +    : m_databaseLoaderThread(nullptr)

Initialization not needed.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:111
&gt; +        RefPtr&lt;Thread&gt; m_thread { nullptr };

Initialization not needed.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleImpl.h:95
&gt; +    RefPtr&lt;Thread&gt; m_workerThread { nullptr };

You don&apos;t need the initializer.  A RefPtr&lt;T&gt; is null by default.

&gt; Source/WebCore/workers/WorkerThread.cpp:102
&gt; -    : m_threadID(0)
&gt; +    : m_thread(nullptr)

You can skip this.  A RefPtr&lt;T&gt; is null by default.

&gt; Source/WebKit/Storage/StorageThread.cpp:43
&gt; -    : m_threadID(0)
&gt; +    : m_thread(nullptr)

You can skip this.  A RefPtr&lt;T&gt; is null by default.

&gt; Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:-54
&gt; -                        EXPECT_NE(0u, currentThread());

Why is this removed?

&gt; Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:182
&gt; +    RefPtr&lt;Thread&gt; lastAwoken { nullptr };

Initialization not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296707</commentid>
    <comment_count>36</comment_count>
      <attachid>306785</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-12 03:25:30 -0700</bug_when>
    <thetext>Comment on attachment 306785
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:282
&gt;&gt; +    , m_thread(nullptr)
&gt; 
&gt; You can skip this.  A RefPtr&lt;T&gt; is null by default.

Fixed.

&gt;&gt; Source/WTF/wtf/ParallelJobsGeneric.h:57
&gt;&gt; +            : m_thread(nullptr)
&gt; 
&gt; I think you can skip this.  A RefPtr&lt;T&gt; is null by default.

Fixed.

&gt;&gt; Source/WTF/wtf/ParkingLot.cpp:806
&gt;&gt; +            callback(currentThreadData-&gt;thread.get(), currentThreadData-&gt;address);
&gt; 
&gt; Is this correct?  currentThreadData-&gt;thread.get() returns a WTF::Thread*.  The lambda is expecting a WTF::Thread&amp;.  How can this work?  I see that the EWS bots are all happy.  What am I missing?

currentThreadData-&gt;thread.get() returns a WTF::Thread&amp; since thread is Ref&lt;Thread&gt;, not RefPtr&lt;Thread&gt;.

&gt;&gt; Source/WTF/wtf/ThreadHolder.cpp:49
&gt;&gt; +        // Ideally we&apos;d have this as a release assert everywhere, but that would hurt performane.
&gt; 
&gt; /performane/performance/.

Oops, thanks. Fixed.

&gt;&gt; Source/WTF/wtf/ThreadHolder.h:33
&gt;&gt; +#define ThreadHolder_h
&gt; 
&gt; Please change to use &quot;#pragma once&quot; instead.

Changed.

&gt;&gt; Source/WTF/wtf/ThreadHolder.h:82
&gt;&gt; +#endif // ThreadHolder_h
&gt; 
&gt; Please remove.

Removed.

&gt;&gt; Source/WTF/wtf/ThreadHolderWin.cpp:63
&gt;&gt; +    if (holder)
&gt; 
&gt; I think you should ASSERT(holder != InvalidThreadHolder) here to make it crash earlier.

Yeah, right. Fixed.

&gt;&gt; Source/WTF/wtf/ThreadHolderWin.cpp:84
&gt;&gt; +         : m_holder(holder)
&gt; 
&gt; Please fix the indentation here.

Oops, fixed.

&gt;&gt; Source/WTF/wtf/ThreadHolderWin.cpp:107
&gt;&gt; +        // use of Thread::current() crash.
&gt; 
&gt; I suggest replacing &quot;It leads incorrect use of Thread::current() crash.&quot; with &quot;This allows us to detect incorrect use of Thread::current() after this point because it will crash.&quot;

Nice, fixed.

&gt;&gt; Source/WTF/wtf/Threading.h:81
&gt;&gt; +    // from the destructor of the other TLS data, currentID() always returns meaningful thread ID.
&gt; 
&gt; I&apos;m a bit confused by what you mean by &quot;and ensure the thread lifetime&quot; here.  Can you please clarify?

It means that we cannot know whether the thread corresponding to the thread ID is alive / dead.
If we use this, we should know this fact.

And while Pthread ThreadIdentifier is monotonically increasing, I suspect that Windows&apos; one is not because Windows implementation just uses GetCurrentThreadId().
But looking the code in WebKit, I guess some code relies on this monotonically increasing characteristics. I think it may be a long-living bug.
We should investigate it in a separate patch.
Changed the description.

&gt;&gt; Source/WTF/wtf/Threading.h:115
&gt;&gt; +    static RefPtr&lt;Thread&gt; createInternal(ThreadFunction, void*, const char* threadName);
&gt; 
&gt; Let&apos;s make this private.

Nice. Fixed.

&gt;&gt; Source/WTF/wtf/Threading.h:132
&gt;&gt;  #endif
&gt; 
&gt; Let&apos;s make this private.

Nice.

&gt;&gt; Source/WTF/wtf/ThreadingPthreads.cpp:267
&gt;&gt;      // The thread hasn&apos;t exited yet, so don&apos;t clean anything up. Just signal that we&apos;ve already joined on it so that it will clean up after itself.
&gt; 
&gt; This comment is a bit confusing.  It seems to say that the thread has both &quot;already exited&quot; and &quot;hasn&apos;t exited yet&quot;.  I suggest changing it to say:
&gt; &quot;If the thread has already exited, then do nothing.
&gt; If the thread hasn&apos;t exited yet, then just signal that we&apos;ve already joined on it.
&gt; In both cases, ThreadHolder::destruct() will take care of removing the thread from the threadMap.&quot;

Nice, fixed.

&gt;&gt; Source/WTF/wtf/ThreadingPthreads.cpp:313
&gt;&gt; +    RELEASE_ASSERT_WITH_MESSAGE(id() != currentThread(), &quot;We do not support suspend the current thread itself.&quot;);
&gt; 
&gt; typo: /suspend/suspending/.

Fixed.

&gt;&gt; Source/WTF/wtf/ThreadingWin.cpp:165
&gt;&gt;  }
&gt; 
&gt; This is identical to the PThread one with the exception of the PThread one needing to do some extra work for !OS(DARWIN).  Over the years, I&apos;ve found that I&apos;ve occasionally needed to add new things to initialize to initializeThreading().  Note also that most of the things initialized in this list are not specific to thread implementation, but are system wide things that we want to initialize only once.  It would be good to only have one copy of it.  Can you move this to a common Threading.cpp, and have it call a initializePlatformThreading() function instead that is defined differently for each platform?  I think that that would be cleaner.

Yeah, sounds nice. It decreases the chance to miss to add things in both Pthread / Win initializeThreading. Fixed.

&gt;&gt; Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.cpp:44
&gt;&gt; +    , m_renderThread(nullptr)
&gt; 
&gt; This is not needed.

Dropped.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseThread.h:72
&gt;&gt; +    RefPtr&lt;Thread&gt; m_thread { nullptr };
&gt; 
&gt; The { nullptr } initialization is not needed.

Dropped.

&gt;&gt; Source/WebCore/page/ResourceUsageThread.h:65
&gt;&gt; +    RefPtr&lt;Thread&gt; m_thread { nullptr };
&gt; 
&gt; The { nullptr } initialization is not needed.

Dropped.

&gt;&gt; Source/WebCore/page/scrolling/ScrollingThread.cpp:38
&gt;&gt; +    : m_thread(nullptr)
&gt; 
&gt; You can skip this.  A RefPtr&lt;T&gt; is null by default.

Dropped.

&gt;&gt; Source/WebCore/platform/audio/HRTFDatabaseLoader.cpp:67
&gt;&gt; +    : m_databaseLoaderThread(nullptr)
&gt; 
&gt; Initialization not needed.

Dropped.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:111
&gt;&gt; +        RefPtr&lt;Thread&gt; m_thread { nullptr };
&gt; 
&gt; Initialization not needed.

Dropped.

&gt;&gt; Source/WebCore/platform/network/curl/SocketStreamHandleImpl.h:95
&gt;&gt; +    RefPtr&lt;Thread&gt; m_workerThread { nullptr };
&gt; 
&gt; You don&apos;t need the initializer.  A RefPtr&lt;T&gt; is null by default.

Dropped.

&gt;&gt; Source/WebCore/workers/WorkerThread.cpp:102
&gt;&gt; +    : m_thread(nullptr)
&gt; 
&gt; You can skip this.  A RefPtr&lt;T&gt; is null by default.

Dropped.

&gt;&gt; Source/WebKit/Storage/StorageThread.cpp:43
&gt;&gt; +    : m_thread(nullptr)
&gt; 
&gt; You can skip this.  A RefPtr&lt;T&gt; is null by default.

Dropped.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:-54
&gt;&gt; -                        EXPECT_NE(0u, currentThread());
&gt; 
&gt; Why is this removed?

Oops, added.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:182
&gt;&gt; +    RefPtr&lt;Thread&gt; lastAwoken { nullptr };
&gt; 
&gt; Initialization not needed.

Dropped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296708</commentid>
    <comment_count>37</comment_count>
      <attachid>306904</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-12 03:26:04 -0700</bug_when>
    <thetext>Created attachment 306904
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296709</commentid>
    <comment_count>38</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-12 03:27:36 -0700</bug_when>
    <thetext>Attachment 306904 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:100:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 98 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296710</commentid>
    <comment_count>39</comment_count>
      <attachid>306905</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-12 03:49:59 -0700</bug_when>
    <thetext>Created attachment 306905
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296713</commentid>
    <comment_count>40</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-12 04:03:11 -0700</bug_when>
    <thetext>Attachment 306905 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingWin.cpp:237:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ThreadHolderWin.cpp:100:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 98 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296716</commentid>
    <comment_count>41</comment_count>
      <attachid>306785</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-12 05:02:50 -0700</bug_when>
    <thetext>Comment on attachment 306785
Patch

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

&gt; Source/WTF/wtf/ThreadingWin.cpp:305
&gt; +    // It is OK because FLSAlloc&apos;s callback will be called even before there are some open handles.
&gt; +    // This easily ensures that all the thread resources are automatically closed.
&gt; +    if (m_handle)
&gt; +        CloseHandle(m_handle);

One thing I changed a bit is that I moved this CloseHandle part to ~Thread() since m_handle can be used in waitForCompletion even after the thread is already dead.
But ideally, this handle can be closed more aggressively (for example, after waitForCompletion, we can drop this handle.).
I&apos;ll upload the patch for this separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296717</commentid>
    <comment_count>42</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-12 05:08:38 -0700</bug_when>
    <thetext>Committed r215265: &lt;http://trac.webkit.org/changeset/215265&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296738</commentid>
    <comment_count>43</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-12 08:52:55 -0700</bug_when>
    <thetext>r215268</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296739</commentid>
    <comment_count>44</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-12 08:57:25 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #43)
&gt; r215268

Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306299</attachid>
            <date>2017-04-05 11:16:09 -0700</date>
            <delta_ts>2017-04-07 05:19:24 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170406031607.patch</filename>
            <type>text/plain</type>
            <size>119244</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ODUyN2UyMWI0MmUxM2MxYjJjOTE2OWY1YWUwMWE5NTVkOTRlYWRjLi4xYzFmYzZjYzVjY2ZmYWZi
ODk3ZTNiODc3MDZiYzA2NTdiYzcwYmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw3MCBAQAogMjAxNy0wNC0wNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogYjMvYWlyL3Rlc3RhaXIuY3BwOgor
ICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVT
dXBlclNhbXBsZXIpOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6CisgICAgICAgICog
ZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAoSlND
OjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgor
ICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjptYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6cmVtb3ZlVGhyZWFkSWZGb3VuZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpU
aHJlYWREYXRhOjpUaHJlYWREYXRhKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGE6OnN1c3BlbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFk
RGF0YTo6cmVzdW1lKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6
OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFja3MpOgorICAgICAgICAocHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVz
dW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6
On5UaHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmg6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpnZXRSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjp0aHJlYWRJRCk6
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpwbGF0Zm9ybVRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlND
OjpJQ1N0YXRzOjpJQ1N0YXRzKToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgor
ICAgICAgICAqIGppdC9JQ1N0YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1
bmN0aW9uRG9sbGFyQWdlbnRTdGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5l
ZWRlZCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xv
Y2s6OmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpT
TG9jazo6b3duZXJUaHJlYWQpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKToKKyAgICAgICAgKiBydW50aW1lL1BsYXRmb3JtVGhyZWFkLmg6IFJlbW92
ZWQuCisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdQcm9maWxlcjo6Y3JlYXRlVGhyZWFkSWZOZWNlc3NhcnkpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKToKKyAgICAgICAgKiBydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6
OlZNOjpvd25lclRocmVhZCk6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1U
cmFwczo6ZmlyZVRyYXApOgorICAgICAgICAqIHRvb2xzL0hlYXBWZXJpZmllci5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cHJpbnRWZXJpZmljYXRpb25IZWFkZXIpOgorCisyMDE3
LTA0LTA1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAg
IFtKU0NdIFN1cHByZXNzIHdhcm5pbmdzIGluIEdDQwogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTRlMDkzNjc0ZjJjODgwOTg0
MjcwZmQxNDk1ZmMwMTY4NWU0YjdmOS4uM2U0YzY3ODAwOTY3NmVjNjlmYTI5YmUyMWQxMzNlYjk2
NjU4NGIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMTYgQEAKIDIwMTctMDQtMDUgIFl1c3VrZSBTdXp1a2kg
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVh
ZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGlu
ZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5j
cHA6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAg
IChXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6aXNNYWluVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToKKyAg
ICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3VyZUhh
bmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IpOgor
ICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUpOgorICAgICAgICAq
IHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRp
dGlvbmFsbHlJbXBsKToKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6dW5wYXJrT25lKToKKyAg
ICAgICAgKFdURjo6UGFya2luZ0xvdDo6dW5wYXJrT25lSW1wbCk6CisgICAgICAgIChXVEY6OlBh
cmtpbmdMb3Q6OnVucGFya0NvdW50KToKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9yRWFj
aEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChXVEY6OlBhcmtp
bmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oOgor
ICAgICAgICAoV1RGOjpSZWN1cnNpdmVMb2NrQWRhcHRlcjo6bG9jayk6CisgICAgICAgIChXVEY6
OlJlY3Vyc2l2ZUxvY2tBZGFwdGVyOjp0cnlMb2NrKToKKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6
CisgICAgICAgIChXVEY6OlJlZlB0cjo6UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmg6CisgICAgICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlv
bjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmNw
cDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKToKKyAgICAgICAg
KFdURjo6dGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmR1bXApOgorICAgICAgICAoV1RGOjpub3JtYWxpemVU
aHJlYWROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6
OmlkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlk
Sm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKiB3dGYv
VGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRs
ZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6Cisg
ICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6ZXN0YWJsaXNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFk
SG9sZGVyKToKKyAgICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6VGhyZWFkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp+VGhyZWFkKToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNo
YW5nZVByaW9yaXR5KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6
CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpj
cmVhdGVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6ZGlkRXhpdCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFsKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpzdXNwZW5kKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpy
ZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChX
VEY6OlB0aHJlYWRTdGF0ZTo6UHRocmVhZFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
UHRocmVhZFN0YXRlOjpqb2luYWJsZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRo
cmVhZFN0YXRlOjpwdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRocmVh
ZFN0YXRlOjpkaWRCZWNvbWVEZXRhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJl
YWRTdGF0ZTo6ZGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6
ZGlkSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6aGFzRXhpdGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppZGVudGlmaWVy
QnlQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZXN0YWJsaXNoSWRlbnRp
ZmllckZvclB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpwdGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFu
Z2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6dGhyZWFkRGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OmN1cnJlbnRUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzaWduYWxUaHJlYWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjpz
dXNwZW5kVGhyZWFkKToKKyAgICAgICAgKFdURjo6cmVzdW1lVGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6Z2V0U3VzcGVuZGVkVGhyZWFkUmVnaXN0ZXJzKToKKyAgICAgICAgKiB3dGYvV2Vha1B0ci5o
OgorICAgICAgICAoV1RGOjpXZWFrUmVmZXJlbmNlOjpnZXQpOgorICAgICAgICAoV1RGOjpXZWFr
UmVmZXJlbmNlOjpjbGVhcik6CisgICAgICAgIChXVEY6OldlYWtSZWZlcmVuY2U6OldlYWtSZWZl
cmVuY2UpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpXb3Jr
UXVldWU6OmNvbmN1cnJlbnRBcHBseSk6CisgICAgICAgICogd3RmL1dvcmtRdWV1ZS5oOgorICAg
ICAgICAqIHd0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwOgorICAgICAgICAoV29ya1F1
ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUlu
dmFsaWRhdGUpOgorICAgICAgICAqIHd0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51
eC5jcHA6CisgICAgICAgIChXVEY6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcjo6RXZlbnRGRFBvbGxl
cjo6RXZlbnRGRFBvbGxlcik6CisgICAgICAgIChXVEY6Ok1lbW9yeVByZXNzdXJlSGFuZGxlcjo6
RXZlbnRGRFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIpOgorCisyMDE3LTA0LTA1ICBZdXN1a2UgU3V6
dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAgIFtKU0NdIFN1cHByZXNzIHdh
cm5pbmdzIGluIEdDQwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNTAxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcAppbmRleCBlNzgwODZjM2E5NjEyYTJmMGI0ZDdhYWYx
YWRjN2JhMWExMDFjNTQ3Li5kZmE1YWYxN2NhMTA2YmM0ZjA3Y2I5MDJlYjQyODIwZTAwMTgzZjc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRT
d2FwVGVzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJl
QW5kU3dhcFRlc3QuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2Fw
KCkKIHsKICAgICBCaXRtYXAgYml0bWFwOwogICAgIGNvbnN0IGludCBudW1UaHJlYWRzID0gNTsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEc1tudW1UaHJlYWRzXTsKKyAgICBSZWZQdHI8
VGhyZWFkPiB0aHJlYWRJRHNbbnVtVGhyZWFkc107CiAgICAgRGF0YSBkYXRhW251bVRocmVhZHNd
OwogCiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci90ZXN0YWlyLmNwcAppbmRleCA4N2IzNTNhYTM3OTI1Y2ExZTJmYTg0MTE5OTc2YWRm
MGIxZTA3YmFhLi5jOTE3NzA3OTU4OGY4NmQ0MzFhMjhiYzA3NGQ0ZmUyZTNmMTNkYzQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKQEAgLTE5MTMsMTAgKzE5MTMs
MTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0g
ICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxU
aHJlYWQ+PiB0aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6
Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVu
ZCgKLSAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRl
KAogICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0g
KCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xOTMzLDggKzE5MzMsOCBA
QCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAg
IH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVh
ZD4gdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKaW5kZXggMDE5OTZhZjcxYWI0ZjA5ZWI0OWI3MDExYzE3ZGJjOTNjNDBjZTg3YS4uOTA0NjU2
NDg4N2I2YjNhNGFmYWMzNTlkYzEwYzUwMzg0ZDc0ZGVmYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAKQEAgLTE2ODUwLDEwICsxNjg1MCwxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFy
KiBmaWx0ZXIpCiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmll
cj4gdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3Jlcygp
OyBpLS07KSB7CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhy
ZWFkKAorICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3Ri
MyB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAg
IGZvciAoOzspIHsKQEAgLTE2ODcwLDggKzE2ODcwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciog
ZmlsdGVyKQogICAgICAgICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkIDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24odGhyZWFkKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisg
ICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJT
YW1wbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIu
Y3BwCmluZGV4IGE0ZTIxZjlmYTNjZDQ3MjFlYTI2NzVlMDZlNGQ1MzBjNWJhOTViMzUuLmU5YjFm
NWMyZjBiYzI3YjAyOTMxMGM1NTgxNTIwYjFiNTUyMjU5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHZv
aWQgaW5pdGlhbGl6ZVN1cGVyU2FtcGxlcigpCiAgICAgaWYgKCFPcHRpb25zOjp1c2VTdXBlclNh
bXBsZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY3JlYXRlVGhyZWFkKAorICAgIFRocmVh
ZDo6Y3JlYXRlKAogICAgICAgICAiSlNDIFN1cGVyIFNhbXBsZXIiLAogICAgICAgICBbXSAoKSB7
CiAgICAgICAgICAgICBjb25zdCBpbnQgc2xlZXBRdWFudHVtID0gMTA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCmluZGV4IGNlZjk5MGNiNDgzM2E2YmI5NDcxYmQw
OGE1MDRlNTVmYjQ3ZGY0NTguLmFkMGVjYzY5YTc3ZDE3MmNmNGJjMWVmYWM5M2RmOTMwMjdjMDA5
ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCkBAIC0xNDQs
NyArMTQ0LDcgQEAgY2xhc3MgV29ya2xpc3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGlj
VGhyZWFkIHsKICAgICAgICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0
ZWRcbiIpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fcmVsYXRpdmVQcmlvcml0eSkKLSAgICAg
ICAgICAgIGNoYW5nZVRocmVhZFByaW9yaXR5KGN1cnJlbnRUaHJlYWQoKSwgbV9yZWxhdGl2ZVBy
aW9yaXR5KTsKKyAgICAgICAgICAgIFRocmVhZDo6Y3VycmVudCgpLmNoYW5nZVByaW9yaXR5KG1f
cmVsYXRpdmVQcmlvcml0eSk7CiAgICAgICAgIAogICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7CiAgICAgICAgIG1fbG9uZ0xp
dmVkU3RhdGUgPSBzdGQ6Om1ha2VfdW5pcXVlPExvbmdMaXZlZFN0YXRlPigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4
IDc4OGE2YzM2MjM2OWM1OGRhZDI5YTYwYTM4NzEwNDRlNDY0ZWQzMDUuLjJiODI0ZWNmZGU1ODkz
YjJjNmI3MDZmNDcwMmVjZDIyOTVkMjM1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgY2xh
c3MgQXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyIHsKIHB1YmxpYzoKICAgICBBc3luY2hyb25vdXNE
aXNhc3NlbWJsZXIoKQogICAgIHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJBc3luY2hyb25vdXMg
RGlzYXNzZW1ibGVyIiwgWyZdICgpIHsgcnVuKCk7IH0pOworICAgICAgICBUaHJlYWQ6OmNyZWF0
ZSgiQXN5bmNocm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBlbnF1ZXVlKHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+
IHRhc2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDNhZWUzMDEwNGY1Mjkx
YTI4NzY0YTVjZGVlNWFhOGYwY2E3MmFkMzEuLjcyMjNiMjBjOWRmYmExMDQzMDk4YTc4NTc0YmEy
OGE2OTRjMDQ1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDksNyAr
MzQ5LDcgQEAgdm9pZCBIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiAgICAgICAgICAgICBt
X3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29udGludW91c2x5ID0gdHJ1ZTsKICAgICAgICAgICAgIG1f
Y29sbGVjdENvbnRpbnVvdXNseUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgfQotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQp
OworICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9u
KCk7CiAgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQpAQCAtMjY4MSw3ICsy
NjgxLDcgQEAgdm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQogICAgIG1faXNTYWZl
VG9Db2xsZWN0ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVv
dXNseSgpKSB7Ci0gICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCA9IGNyZWF0ZVRo
cmVhZCgKKyAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkID0gV1RGOjpUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICJKU0MgREVCVUcgQ29udGludW91cyBHQyIsCiAgICAgICAg
ICAgICBbdGhpc10gKCkgewogICAgICAgICAgICAgICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRp
bWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRl
eCBkMDY1NzAxNmJlZWY5YTg5ZDA2ZGYyNzk3MTdlNzcwYjE2NGE0NzE0Li5kNjc4MzdhZmVmMTMw
MWY5NjcyZjYwZWEyOWM0M2ZjODU5N2RlYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjY2
LDcgKzY2Nyw3IEBAIGNsYXNzIEhlYXAgewogICAgIExvY2sgbV9jb2xsZWN0Q29udGludW91c2x5
TG9jazsKICAgICBDb25kaXRpb24gbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uOwogICAg
IGJvb2wgbV9zaG91bGRTdG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSB7IGZhbHNlIH07Ci0gICAg
VGhyZWFkSWRlbnRpZmllciBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyAwIH07CisgICAg
UmVmUHRyPFdURjo6VGhyZWFkPiBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyBudWxscHRy
IH07CiAgICAgCiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ1N0YXJ0VGltZTsKICAgICBNb25v
dG9uaWNUaW1lIG1fbGFzdEdDRW5kVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCmluZGV4IGI4NWI3NjQ4ZTJmNWQxOWZhMjJkNzYz
ZjdiY2RlZjhmNDRjNDJjODguLjUzNTM5MzU1ZDBjMTNkNjI4NjVkN2Y3OTU3MDdkODI0NDU5MjZk
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcApAQCAtNjQsNTYgKzY0LDYgQEAKICNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CiAjZW5k
aWYKIAotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0j
aW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJl
c3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xv
YmFsU2lnbmFsTG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxw
dHIgfTsKLQotc3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGlu
dCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFk
IGxvY2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAg
IEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2Nh
bEN1cnJlbnRUaHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2ln
bmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVz
dW1lIHNpZ3N1c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0
c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2ln
bmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxh
dGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlv
biBhbHdheXMgcHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBw
ZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZv
cmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3Jv
dXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVh
ZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4
dC51Y19yZWdzOwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4
dCA9IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3Vz
cGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8v
IHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdl
IGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJz
Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJf
MDQuaHRtbCN0YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBt
ZW1vcnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBp
cyBjb3JyZWN0bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxp
bmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAg
c2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAg
Ly8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRo
aXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgot
ICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5k
bGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2ln
bmFsU2V0OwotICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNl
dCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3Vz
cGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRv
IHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERh
dGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFE
UykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0KICNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2UgV1RGOwpAQCAtMjE4LDE1ICsxNjgsOSBAQCBUaHJlYWQqIE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKQogICAgIHJldHVybiBuZXcgVGhyZWFkKHRo
cmVhZERhdGEoKSk7CiB9CiAKLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6b3BlcmF0b3I9
PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0Citib29sIE1hY2hpbmVUaHJlYWRz
OjpUaHJlYWQ6Om9wZXJhdG9yPT0oV1RGOjpUaHJlYWQmIG90aGVyKSBjb25zdAogewotI2lmIE9T
KERBUldJTikgfHwgT1MoV0lORE9XUykKLSAgICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQg
PT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9lcXVh
bChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3RoZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5
IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKKyAgICByZXR1cm4g
ZGF0YS0+dGhyZWFkSUQgPT0gJm90aGVyOwogfQogCiB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRD
dXJyZW50VGhyZWFkKCkKQEAgLTI1MSw5ICsxOTUsOSBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjph
ZGRDdXJyZW50VGhyZWFkKCkKIFRocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRG
b3JDdXJyZW50VGhyZWFkKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhy
ZWFkc011dGV4KTsKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQ
bGF0Zm9ybVRocmVhZCgpOworICAgIFdURjo6VGhyZWFkJiBpZCA9IFdURjo6VGhyZWFkOjpjdXJy
ZW50KCk7CiAgICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRo
cmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkID09IHBs
YXRmb3JtVGhyZWFkKQorICAgICAgICBpZiAoKnRocmVhZCA9PSBpZCkKICAgICAgICAgICAgIHJl
dHVybiB0aHJlYWQ7CiAgICAgfQogCkBAIC0yODMsMjIgKzIyNywyMSBAQCB2b2lkIFRIUkVBRF9T
UEVDSUZJQ19DQUxMIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWQodm9pZCogcCkKICAgICAg
ICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVU
aHJlYWRJZkZvdW5kKGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpKTsKKyAgICAgICAgbWFjaGluZVRo
cmVhZHMtPnJlbW92ZVRocmVhZElmRm91bmQoV1RGOjpUaHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAg
fQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLXZvaWQgTWFjaGluZVRo
cmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQp
Cit2b2lkIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFdURjo6VGhyZWFkJiBp
ZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKICAg
ICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOwotICAgIGlmICgqdCA9PSBwbGF0Zm9y
bVRocmVhZCkgeworICAgIGlmICgqdCA9PSBpZCkgewogICAgICAgICBtX3JlZ2lzdGVyZWRUaHJl
YWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsKICAgICAgICAgZGVsZXRlIHQ7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKICAg
ICAgICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdDsgdCA9IHQtPm5leHQp
IHsKLSAgICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgICAgICAgICAg
aWYgKCp0ID09IGlkKSB7CiAgICAgICAgICAgICAgICAgbGFzdC0+bmV4dCA9IHQtPm5leHQ7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMjMsMTc2ICsyNjYsMjUg
QEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0
aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3QKIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpU
aHJlYWREYXRhKCkKIHsKICAgICBhdXRvIHN0YWNrQm91bmRzID0gd3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCk7Ci0gICAgcGxhdGZvcm1UaHJlYWQgPSBjdXJyZW50UGxhdGZvcm1UaHJlYWQoKTsKKyAg
ICB0aHJlYWRJRCA9ICZXVEY6OlRocmVhZDo6Y3VycmVudCgpOwogICAgIHN0YWNrQmFzZSA9IHN0
YWNrQm91bmRzLm9yaWdpbigpOwogICAgIHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0K
LSNpZiBPUyhXSU5ET1dTKQotICAgIEFTU0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50
VGhyZWFkSWQoKSk7Ci0gICAgYm9vbCBpc1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVI
YW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50
UHJvY2VzcygpLAotICAgICAgICAgICAgJnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwg
RFVQTElDQVRFX1NBTUVfQUNDRVNTKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwp
OwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3Vy
cmVudFRocmVhZC5zdG9yZSh0aGlzKTsKLQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJv
Y2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5p
dGlhbGl6ZVNpZ25hbEhhbmRsZXI7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25h
bEhhbmRsZXIsIFtdIHsKLSAgICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAg
ICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKLSAgICAgICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFk
U3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRT
aWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0Ff
UkVTVEFSVCB8IFNBX1NJR0lORk87Ci0gICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lLCAmYWN0aW9uLCAwKTsKLSAgICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAg
c2lnZW1wdHlzZXQoJm1hc2spOwotICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7Ci0gICAgcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0K
LSAgICBzZW1faW5pdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFi
bGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBo
b3JlLiAqLyAwKTsKLSNlbmRpZgotfQotCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRo
cmVhZERhdGEoKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgQ2xvc2VIYW5kbGUocGxhdGZvcm1U
aHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgIHNl
bV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSNlbmRpZgogfQogCiBib29s
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKCkKIHsKLSNpZiBPUyhEQVJXSU4p
Ci0gICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc3VzcGVuZChwbGF0Zm9ybVRocmVh
ZCk7Ci0gICAgcmV0dXJuIHJlc3VsdCA9PSBLRVJOX1NVQ0NFU1M7Ci0jZWxpZiBPUyhXSU5ET1dT
KQotICAgIGJvb2wgdGhyZWFkSXNTdXNwZW5kZWQgPSAoU3VzcGVuZFRocmVhZChwbGF0Zm9ybVRo
cmVhZEhhbmRsZSkgIT0gKERXT1JEKS0xKTsKLSAgICBBU1NFUlQodGhyZWFkSXNTdXNwZW5kZWQp
OwotICAgIHJldHVybiB0aHJlYWRJc1N1c3BlbmRlZDsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpICE9IHBsYXRmb3Jt
VGhyZWFkLCAiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgc3VzcGVuZCB0aGUgY3VycmVudCB0
aHJlYWQgaXRzZWxmLiIpOwotICAgIHsKLSAgICAgICAgLy8gRHVyaW5nIHN1c3BlbmQsIHN1c3Bl
bmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFk
cy4KLSAgICAgICAgLy8gV2UgdXNlIGdsb2JhbCBsb2NrIGluc3RlYWQgb2YgcGVyIHRocmVhZCBs
b2NrLgotICAgICAgICAvLyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhc2UsIHRoZXJlIGFyZSB0
aHJlYWRzIEEgYW5kIEIuCi0gICAgICAgIC8vIEFuZCBBIGF0dGVtcHQgdG8gc3VzcGVuZCBCIGFu
ZCBCIGF0dGVtcHQgdG8gc3VzcGVuZCBBLgotICAgICAgICAvLyBBIGFuZCBCIHNlbmQgc2lnbmFs
cy4gQW5kIGxhdGVyLCBzaWduYWxzIGFyZSBkZWxpdmVyZWQgdG8gQSBhbmQgQi4KLSAgICAgICAg
Ly8gSW4gdGhhdCBjYXNlLCBib3RoIHdpbGwgYmUgc3VzcGVuZGVkLgotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2soZ2xvYmFsU2lnbmFsTG9jayk7Ci0gICAgICAgIGlmICghc3VzcGVuZENvdW50KSB7
Ci0gICAgICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSBwdGhyZWFkX3Np
Z3F1ZXVlLiBJdCBhbGxvd3MgdXMgdG8gcGFzcyB0aGUgYXJndW1lbnQgdG8gdGhlIHNpZ25hbCBo
YW5kbGVyLgotICAgICAgICAgICAgLy8gQnV0IGl0IGNhbiBiZSB1c2VkIGluIGEgZmV3IHBsYXRm
b3JtcywgbGlrZSBMaW51eC4KLSAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIHVzZSBUaHJlYWQq
IHN0b3JlZCBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdG8gcGFzcyBpdCB0byB0aGUgc2ln
bmFsIGhhbmRsZXIuCi0gICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKHBsYXRmb3JtVGhyZWFk
LCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZW1fd2FpdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3Vt
ZSk7Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3Bl
cmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3Npbmcg
aXMgZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRlZC5zdG9yZSh0cnVlLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKLSAgICAgICAgfQotICAgICAgICArK3N1c3BlbmRDb3VudDsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3YXkgdG8gc3VzcGVuZCB0
aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgorICAgIHJldHVybiB0aHJlYWRJRC0+c3Vz
cGVuZCgpOwogfQogCiB2b2lkIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpyZXN1bWUoKQog
ewotI2lmIE9TKERBUldJTikKLSAgICB0aHJlYWRfcmVzdW1lKHBsYXRmb3JtVGhyZWFkKTsKLSNl
bGlmIE9TKFdJTkRPV1MpCi0gICAgUmVzdW1lVGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsK
LSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyByZXN1bWUsIHN1
c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhy
ZWFkcy4KLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAg
ICBpZiAoc3VzcGVuZENvdW50ID09IDEpIHsKLSAgICAgICAgICAgIC8vIFdoZW4gYWxsb3dpbmcg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpbnRlcnJ1cHQgaW4gdGhlIHNpZ25hbCBoYW5kbGVyIGJ5
IHNpZ3N1c3BlbmQgYW5kIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYWN0dWFsbHkgaXNzdWVk
LAotICAgICAgICAgICAgLy8gdGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNhbGxl
ZCBvbmNlIGFnYWluLgotICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBk
aXN0aW5ndWlzaCB0aGUgaGFuZGxlciBpbnZvY2F0aW9uIGZvciBzdXNwZW5kIGFuZCByZXN1bWUu
Ci0gICAgICAgICAgICAvLyAxLiBVc2UgZGlmZmVyZW50IHNpZ25hbCBudW1iZXJzLiBBbmQgY2hl
Y2sgdGhlIHNpZ25hbCBudW1iZXIgaW4gdGhlIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyAyLiBV
c2Ugc29tZSBhcmd1bWVudHMgdG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBhbmQgcmVzdW1lIGluIHRo
ZSBoYW5kbGVyLiBJZiBwdGhyZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2VkLCB3ZSBjYW4gdGFrZSB0
aGlzLgotICAgICAgICAgICAgLy8gMy4gVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpdGggYXRv
bWljIHZhcmlhYmxlcyBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBJbiB0
aGlzIGltcGxlbWVudGFpdG9uLCB3ZSB0YWtlICgzKS4gc3VzcGVuZGVkIGZsYWcgaXMgdXNlZCB0
byBkaXN0aW5ndWlzaCBpdC4KLSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1U
aHJlYWQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1l
KTsKLSAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVy
YXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBp
cyBkb25lLgotICAgICAgICAgICAgc3VzcGVuZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKLSAgICAgICAgfQotICAgICAgICAtLXN1c3BlbmRDb3VudDsKLSAgICB9
Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3YXkgdG8gcmVzdW1lIHRocmVhZHMgb24gdGhpcyBwbGF0
Zm9ybQotI2VuZGlmCisgICAgdGhyZWFkSUQtPnJlc3VtZSgpOwogfQogCiBzaXplX3QgTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMm
IHJlZ2lzdGVycykKIHsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0
ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShYODYp
Ci0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsKLSAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0jZWxp
ZiBDUFUoWDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NUQVRF
NjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURf
U1RBVEU2NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQUENf
VEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQ
UENfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291
bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5zaWdu
ZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQpCi0g
ICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0
aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vsc2UK
LSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVybl90
IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVh
ZF9zdGF0ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NV
Q0NFU1MpIHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYXZh
U2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRl
IHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBy
dW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6ZW9m
KHVpbnRwdHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQotICAg
IHJlZ3MuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MOwot
ICAgIEdldFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAgICBy
ZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9f
R0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5lQ29u
dGV4dDsKLSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMpOwot
I2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJpYnV0
ZSk7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BFTkJT
RCkKLSAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAgcHRo
cmVhZF9hdHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRp
ZgotI2Vsc2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90
aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwotICAg
IHB0aHJlYWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNl
bmRpZgotICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aHJl
YWQgcmVnaXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgorICAgIFdURjo6UGxhdGZvcm1S
ZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsKKyAgICByZXR1cm4gdGhyZWFkSUQtPmdl
dFJlZ2lzdGVycyhyZWdzKTsKIH0KIAogdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6
OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKQEAgLTU0OCwxNiArMzQwLDYgQEAgdm9p
ZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0
CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCi12b2lkIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWREYXRhOjpmcmVlUmVnaXN0ZXJzKFRocmVhZERhdGE6OlJlZ2lzdGVycyYg
cmVnaXN0ZXJzKQotewotICAgIFRocmVhZERhdGE6OlJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsKLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5E
T1dTKSAmJiAhT1MoREFSV0lOKSAmJiAhKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNf
XykpICYmIEVOQUJMRShKSVQpKQotICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZyZWdzLmF0dHJp
YnV0ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWdzKTsKLSNlbmRpZgotfQotCiBzdGF0
aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKIHsKICAgICBpbnQgcmVkWm9uZUFk
anVzdG1lbnQgPSAwOwpAQCAtNjMxLDggKzQxMyw2IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OnRy
eUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVf
CiAgICAgaWYgKGNhbkNvcHkpCiAgICAgICAgIGNvcHlNZW1vcnkoc3RhdGljX2Nhc3Q8Y2hhcio+
KGJ1ZmZlcikgKyAqc2l6ZSwgc3RhY2suZmlyc3QsIHN0YWNrLnNlY29uZCk7CiAgICAgKnNpemUg
Kz0gc3RhY2suc2Vjb25kOwotCi0gICAgdGhyZWFkLT5mcmVlUmVnaXN0ZXJzKHJlZ2lzdGVycyk7
CiB9CiAKIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qq
IHNpemUpCkBAIC02NDQsMTQgKzQyNCwxNCBAQCBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBidWZmZQogCiAg
ICAgKnNpemUgPSAwOwogCi0gICAgUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQgPSBjdXJy
ZW50UGxhdGZvcm1UaHJlYWQoKTsKKyAgICBXVEY6OlRocmVhZCYgaWQgPSBXVEY6OlRocmVhZDo6
Y3VycmVudCgpOwogICAgIGludCBudW1iZXJPZlRocmVhZHMgPSAwOyAvLyBVc2luZyAwIHRvIGRl
bm90ZSB0aGF0IHdlIGhhdmVuJ3QgY291bnRlZCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgeWV0Lgog
ICAgIGludCBpbmRleCA9IDE7CiAgICAgVGhyZWFkKiB0aHJlYWRzVG9CZURlbGV0ZWQgPSBudWxs
cHRyOwogCiAgICAgVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51bGxwdHI7CiAgICAgZm9yIChU
aHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgaW5kZXgrKykgewot
ICAgICAgICBpZiAoKnRocmVhZCAhPSBwbGF0Zm9ybVRocmVhZCkgeworICAgICAgICBpZiAoKnRo
cmVhZCAhPSBpZCkgewogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhyZWFkLT5zdXNwZW5k
KCk7CiAjaWYgT1MoREFSV0lOKQogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CkBAIC02NjEs
MTIgKzQ0MSwxMiBAQCBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
a3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBidWZmZQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBSZS1kbyB0aGUgc3VzcGVuc2lv
biB0byBnZXQgdGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3IgbG9nZ2luZy4KLSAgICAgICAg
ICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1c3BlbmQodGhyZWFkLT5wbGF0
Zm9ybVRocmVhZCgpKTsKKyAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0gdGhy
ZWFkX3N1c3BlbmQodGhyZWFkLT50aHJlYWRJRCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
ZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKIAogICAgICAgICAgICAgICAgIFdURlJlcG9ydEVycm9y
KF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwKLSAgICAgICAgICAgICAg
ICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFs
aWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVhZCAl
cC4iLAotICAgICAgICAgICAgICAgICAgICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywg
dGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVu
Y291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVw
XSBpZCAlcC4iLAorICAgICAgICAgICAgICAgICAgICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhy
ZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnRocmVhZElEKCkp
KTsKIAogICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgaW52YWxpZCB0aHJlYWQgb24gdGhlIHRo
cmVhZHNUb0JlRGVsZXRlZCBsaXN0LgogICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGp1c3Qg
ZGVsZXRlIGl0IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRlZCBvdGhlcgpAQCAtNjk1LDEy
ICs0NzUsMTIgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKICAgICB9CiAKICAgICBmb3IgKFRo
cmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJl
YWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAg
ICAgIGlmICgqdGhyZWFkICE9IGlkKQogICAgICAgICAgICAgdHJ5Q29weU90aGVyVGhyZWFkU3Rh
Y2sodGhyZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsKICAgICB9CiAKICAgICBmb3IgKFRo
cmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJl
YWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAg
ICAgIGlmICgqdGhyZWFkICE9IGlkKQogICAgICAgICAgICAgdGhyZWFkLT5yZXN1bWUoKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFj
a01hcmtlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmgKaW5kZXggZDE5NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNkODdmNzk5NDQ4N2YyMi4uMTc0NDgw
YmNlYTdjYjZjMjYxNGUxNDc3NDdlYmEwYjg2Y2M0YWExNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKQEAgLTIyLDI1ICsyMiwxMiBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtVGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Nj
b3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogCi0jaWYgVVNF
KFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzZW1h
cGhvcmUuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLS8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBt
YWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCi0vLyBU
aGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3
b3JrYXJvdW5kIGNhbiBiZQotLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wu
Ci0vLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIw
NzA3OQotI2lmIE9TKEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNvbnRleHQuaD4KLSNlbmRpZgotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2tTZXQ7CkBAIC02OCw3ICs1
NSw2IEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBUaHJlYWREYXRhKCk7Ci0gICAgICAgIH5UaHJl
YWREYXRhKCk7CiAKICAgICAgICAgc3RhdGljIFRocmVhZERhdGEqIGNyZWF0ZUZvckN1cnJlbnRU
aHJlYWQoKTsKIApAQCAtNzksMzkgKzY1LDE3IEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICAg
ICAgICAgICAgIHZvaWQqIGluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0OwogICAgICAgICAgICAg
dm9pZCogbGxpbnRQQygpIGNvbnN0OwogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxF
UikKLSAgICAgICAgICAgIAotI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAgICAgICAg
ICAgIHVzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0gTWFjaGluZUNvbnRleHQ6OlBsYXRmb3JtUmVn
aXN0ZXJzOwotI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5B
QkxFKEpJVCkKLSAgICAgICAgICAgIHVzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0gbWNvbnRleHRf
dDsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICAgICAgICAgIHN0cnVjdCBQbGF0Zm9ybVJlZ2lz
dGVycyB7Ci0gICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRlOwotICAgICAg
ICAgICAgfTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHRocmVhZCByZWdpc3RlciBzdHJ1Y3QgZm9y
IHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotCi0gICAgICAgICAgICBQbGF0Zm9ybVJlZ2lzdGVycyBy
ZWdzOworICAgICAgICAgICAgV1RGOjpQbGF0Zm9ybVJlZ2lzdGVycyByZWdzOwogICAgICAgICB9
OwogCiAgICAgICAgIGJvb2wgc3VzcGVuZCgpOwogICAgICAgICB2b2lkIHJlc3VtZSgpOwogICAg
ICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVycyYpOwotICAgICAgICB2b2lkIGZyZWVS
ZWdpc3RlcnMoUmVnaXN0ZXJzJik7CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBj
YXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAgIFBsYXRmb3JtVGhyZWFkIHBs
YXRmb3JtVGhyZWFkOworICAgICAgICBSZWZQdHI8V1RGOjpUaHJlYWQ+IHRocmVhZElEOwogICAg
ICAgICB2b2lkKiBzdGFja0Jhc2U7CiAgICAgICAgIHZvaWQqIHN0YWNrRW5kOwotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgICAgIEhBTkRMRSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNlbGlmIFVTRShQ
VEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3JlRm9yU3VzcGVu
ZFJlc3VtZTsKLSAgICAgICAgbWNvbnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKLSAg
ICAgICAgaW50IHN1c3BlbmRDb3VudCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9taWM8Ym9vbD4g
c3VzcGVuZGVkIHsgZmFsc2UgfTsKLSNlbmRpZgogICAgIH07CiAKICAgICBjbGFzcyBUaHJlYWQg
ewpAQCAtMTIzLDE2ICs4NywxNSBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICAgICAg
c3RhdGljIFRocmVhZCogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwogCi0gICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oV1RGOjpUaHJl
YWQmIG90aGVyKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KFdURjo6VGhyZWFkJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAogICAgICAgICBib29s
IHN1c3BlbmQoKSB7IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0KICAgICAgICAgdm9pZCByZXN1
bWUoKSB7IGRhdGEtPnJlc3VtZSgpOyB9CiAgICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVn
aXN0ZXJzJiByZWdzKSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3RlcnMocmVncyk7IH0KLSAgICAg
ICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykgeyBkYXRhLT5mcmVlUmVnaXN0
ZXJzKHJlZ3MpOyB9CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3Rh
Y2sodm9pZCogc3RhY2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1cmVTdGFjayhzdGFja1RvcCk7
IH0KIAotICAgICAgICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQoKSB7IHJl
dHVybiBkYXRhLT5wbGF0Zm9ybVRocmVhZDsgfQorICAgICAgICBjb25zdCBXVEY6OlRocmVhZCog
dGhyZWFkSUQoKSB7IHJldHVybiBkYXRhLT50aHJlYWRJRC5nZXQoKTsgfQogICAgICAgICB2b2lk
KiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0Jhc2U7IH0KICAgICAgICAg
dm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0VuZDsgfQogCkBAIC0x
NTIsOCArMTE1LDcgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogCiAgICAgc3RhdGljIHZvaWQg
VEhSRUFEX1NQRUNJRklDX0NBTEwgcmVtb3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFkPgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQ
bGF0Zm9ybVRocmVhZCk7CisgICAgdm9pZCByZW1vdmVUaHJlYWRJZkZvdW5kKFdURjo6VGhyZWFk
Jik7CiAKICAgICBMb2NrIG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleDsKICAgICBUaHJlYWQqIG1f
cmVnaXN0ZXJlZFRocmVhZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAppbmRl
eCAyMDgwY2Q5MzQ1ODMzZDJkMjMyYjhhOWNkNmYzZGJmZWJlMDVjYjIzLi5lMGFiZjI5OGJmYmUy
ZWVlYzM0MjViNjYwOWNlNzIxMzNjNDFjZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0lDU3RhdHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNT
dGF0cy5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgQXRvbWljPElDU3RhdHMqPiBJQ1N0YXRzOjpzX2lu
c3RhbmNlOwogCiBJQ1N0YXRzOjpJQ1N0YXRzKCkKIHsKLSAgICBtX3RocmVhZCA9IGNyZWF0ZVRo
cmVhZCgKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAiSlNDIElDU3Rh
dHMiLAogICAgICAgICBbdGhpc10gKCkgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKQEAgLTg0LDcgKzg0LDcgQEAgSUNTdGF0czo6fklDU3RhdHMoKQogICAgICAgICBt
X2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKICAgICB9CiAgICAgCi0gICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24obV90aHJlYWQpOworICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
fQogCiB2b2lkIElDU3RhdHM6OmFkZChjb25zdCBJQ0V2ZW50JiBldmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9JQ1N0YXRzLmgKaW5kZXggZTc1Y2ZkZjRkNGQ5ZDdkY2JmMWEzMWE5ODI5NDE5MmU1
NWI5Y2ZiMC4uZWI3ZTFlOTJjZTk3ZGQxZDk1MDg5NzI3Yzg0YTljNWVjN2Y1N2M3YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKQEAgLTE3OSw3ICsxNzksNyBAQCBjbGFzcyBJQ1N0
YXRzIHsKIHByaXZhdGU6CiAKICAgICBTcGVjdHJ1bTxJQ0V2ZW50LCB1aW50NjRfdD4gbV9zcGVj
dHJ1bTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+
IG1fdGhyZWFkOwogICAgIExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsK
ICAgICBib29sIG1fc2hvdWxkU3RvcCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4
IDU5YjYyNzNkZWFiMWRkNTlmZDc1OTQxY2Q2ZTYxMTQ5Mjg3OTI0NzAuLjc1YWM2MGQ5YjM0NjA4
MWNiNjcwNjllZGVkMzUyODU0M2ZiZDNkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0yNTQ0
LDcgKzI1NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFy
QWdlbnRTdGFydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgQ29uZGl0aW9uIGRpZFN0YXJ0Q29uZGl0
aW9uOwogICAgIGJvb2wgZGlkU3RhcnQgPSBmYWxzZTsKICAgICAKLSAgICBUaHJlYWRJZGVudGlm
aWVyIHRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBU
aHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBBZ2VudCIsCiAgICAgICAgIFtzb3VyY2VDb2Rl
LCAmZGlkU3RhcnRMb2NrLCAmZGlkU3RhcnRDb25kaXRpb24sICZkaWRTdGFydF0gKCkgewogICAg
ICAgICAgICAgQ29tbWFuZExpbmUgY29tbWFuZExpbmUoMCwgbnVsbHB0cik7CkBAIC0yNTcxLDcg
KzI1NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdl
bnRTdGFydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWNj
ZXNzOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKLSAgICBkZXRhY2hUaHJlYWQo
dGhyZWFkKTsKKyAgICB0aHJlYWQtPmRldGFjaCgpOwogICAgIAogICAgIHsKICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhkaWRTdGFydExvY2spOwpAQCAtMzMxMSw3ICszMzExLDcgQEAg
c3RhdGljIHZvaWQgc3RhcnRUaW1lb3V0VGhyZWFkSWZOZWVkZWQoKQogICAgICAgICAgICAgZGF0
YUxvZygiV0FSTklORzogdGltZW91dCBzdHJpbmcgaXMgbWFsZm9ybWVkLCBnb3QgIiwgdGltZW91
dFN0cmluZywKICAgICAgICAgICAgICAgICAiIGJ1dCBleHBlY3RlZCBhIG51bWJlci4gTm90IHVz
aW5nIGEgdGltZW91dC5cbiIpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNyZWF0ZVRo
cmVhZCh0aW1lb3V0VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOworICAgICAg
ICAgICAgVGhyZWFkOjpjcmVhdGUodGltZW91dFRocmVhZE1haW4sIDAsICJqc2MgVGltZW91dCBU
aHJlYWQiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCmluZGV4IDAxYjFmZTEyN2U4YjczMWZiNTNiN2MyY2RiOTllZTE5ZGQ1YWRhNjguLjYzMjJl
NzMzMjI5MjExNGYwZTI1NGE4ZTFlZjEzZGE1YzQxOTUxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgSlNMb2NrOjps
b2NrKGludHB0cl90IGxvY2tDb3VudCkKICAgICAgICAgbV9sb2NrLmxvY2soKTsKICAgICB9CiAK
LSAgICBtX293bmVyVGhyZWFkID0gY3VycmVudFRocmVhZCgpOworICAgIG1fb3duZXJUaHJlYWQg
PSAmVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBt
X2hhc093bmVyVGhyZWFkID0gdHJ1ZTsKICAgICBBU1NFUlQoIW1fbG9ja0NvdW50KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKaW5kZXggMGMzNTg0N2U0MjNlNjRiYzcwNTAz
ZDVlMWQ4NWQ0ODA1MDlkYmU3NC4uYWE3ZGQ4ZDVmZjY5MDkyODQwODAxM2Q5YzQ5MjQwYWFmODQx
MzQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKQEAgLTkyLDEzICs5
MiwxMyBAQCBjbGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2Nr
PiB7CiAKICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKLSAgICBzdGQ6Om9wdGlvbmFs
PFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFkKCkgY29uc3QKKyAgICBzdGQ6Om9wdGlvbmFs
PFJlZlB0cjxUaHJlYWQ+PiBvd25lclRocmVhZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
bV9oYXNPd25lclRocmVhZCkKICAgICAgICAgICAgIHJldHVybiBtX293bmVyVGhyZWFkOwogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KLSAgICBib29sIGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9oYXNPd25lclRocmVhZCAmJiBtX293bmVyVGhyZWFk
ID09IGN1cnJlbnRUaHJlYWQoKTsgfQorICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soKSB7IHJldHVybiBtX2hhc093bmVyVGhyZWFkICYmIG1fb3duZXJUaHJlYWQgPT0gJlRocmVh
ZDo6Y3VycmVudCgpOyB9CiAKICAgICB2b2lkIHdpbGxEZXN0cm95Vk0oVk0qKTsKIApAQCAtMTM1
LDcgKzEzNSw3IEBAIGNsYXNzIEpTTG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxK
U0xvY2s+IHsKICAgICAvLyBkaWZmZXJlbnQgdGhyZWFkLCBhbmQgYW4gb3B0aW9uYWwgaXMgdnVs
bmVyYWJsZSB0byByYWNlcy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2OTA0MiNjNgogICAgIGJvb2wgbV9oYXNPd25lclRocmVhZCB7IGZhbHNl
IH07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVyVGhyZWFkOworICAgIFJlZlB0cjxUaHJl
YWQ+IG1fb3duZXJUaHJlYWQ7CiAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7CiAgICAgdW5zaWdu
ZWQgbV9sb2NrRHJvcERlcHRoOwogICAgIGJvb2wgbV9zaG91bGRSZWxlYXNlSGVhcEFjY2VzczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFk
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDE5N2U3M2M4NDEyYTgwZjM2MTQwYzdhZDg2ZWM3
NjRmYWMyOTM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBPUyhEQVJXSU4pIHx8IE9TKFVOSVgpCi0j
aW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhX
SU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNp
ZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+Ci0jZWxpZiBPUyhXSU5E
T1dTKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
I2lmIE9TKERBUldJTikKLXR5cGVkZWYgbWFjaF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxp
ZiBPUyhXSU5ET1dTKQotdHlwZWRlZiBEV09SRCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIFVTRShQ
VEhSRUFEUykKLXR5cGVkZWYgcHRocmVhZF90IFBsYXRmb3JtVGhyZWFkOwotI2VuZGlmIC8vIE9T
KERBUldJTikKLSAgICAKLWlubGluZSBQbGF0Zm9ybVRocmVhZCBjdXJyZW50UGxhdGZvcm1UaHJl
YWQoKQotewotI2lmIE9TKERBUldJTikKLSAgICByZXR1cm4gcHRocmVhZF9tYWNoX3RocmVhZF9u
cChwdGhyZWFkX3NlbGYoKSk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBHZXRDdXJy
ZW50VGhyZWFkSWQoKTsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICByZXR1cm4gcHRocmVhZF9z
ZWxmKCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IDdkMzdhNjc0
YWJhMDk0NzIzMTg0OTNiMzNiYzg5ZmUzZmFkOThhOWQuLjcxZGVkYmNlZWU0MDQzZWUwMTA5ODk2
ZDc1NTI1NGI3NTNlZjcyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBTYW1wbGlu
Z1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShjb25zdCBBYnN0cmFjdExvY2tlciYp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBwcm9maWxl
ciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJqc2Muc2Ft
cGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90aHJlYWRJZGVudGlm
aWVyID0gVGhyZWFkOjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci50aHJlYWQiLCBbcHJv
ZmlsZXJdIHsKICAgICAgICAgcHJvZmlsZXItPnRpbWVyTG9vcCgpOwogICAgIH0pOwogfQpAQCAt
MzYwLDcgKzM2MCw2IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCBB
YnN0cmFjdExvY2tlciYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAgICAgICAgICAgICAg
Y2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAgICAg
ICAgICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CiAg
ICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAgICAg
ICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0
ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0N2Y5ZTY3
NjhhZDQzN2JiMThlMGE4YWJjNzk1YmQ2Y2YuLjRjZjk2ZTgzYTRiNDcxMzNhYmY2MWI1ZTNkZWY1
M2FiYmE0YzI4ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgKQEAgLTE5NSw3ICsxOTUsNyBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVy
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1f
bGFzdFRpbWU7CiAgICAgTG9jayBtX2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVh
ZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWRJZGVudGlmaWVyOwogICAg
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQqIG1fanNjRXhlY3V0aW9uVGhyZWFkOwogICAgIGJvb2wg
bV9pc1BhdXNlZDsKICAgICBib29sIG1faXNTaHV0RG93bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5NWY0NmUuLmU5
N2MzMTg1ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENvZGVCbG9jayos
IGNvbnN0IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAgc3RkOjpvcHRp
b25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBp
TG9jay0+b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+
IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9
CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNkNDYzYjcyZjMz
ZTQ2NGI3YjVhNTlkMDExOTM4ZjY5Li5kNTBjNjRmZDljN2ZmZTM5NGIzMmM0MWUxM2Y3MzJkMzFh
M2I3ZTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAt
NDU1LDcgKzQ1NSw3IEBAIHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAg
ICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhy
ZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhy
ZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2lnbmFsVGhyZWFkKG9wdGlvbmFsT3duZXJUaHJlYWQu
dmFsdWUoKSwgU0lHVVNSMSk7CisgICAgICAgICAgICAgICAgb3B0aW9uYWxPd25lclRocmVhZC52
YWx1ZSgpLT5zaWduYWwoU0lHVVNSMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAKQEAgLTQ5Myw3ICs0OTMsNyBAQCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJh
cHM6OkV2ZW50VHlwZSBldmVudFR5cGUpCiAgICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3Qg
YmxvY2suCiAgICAgICAgIFJlZlB0cjxTaWduYWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5l
dyBTaWduYWxTZW5kZXIodm0oKSwgZXZlbnRUeXBlKSk7CiAgICAgICAgIGFkZFNpZ25hbFNlbmRl
cihzZW5kZXIuZ2V0KCkpOwotICAgICAgICBjcmVhdGVUaHJlYWQoImpzYy52bXRyYXBzLnNpZ25h
bGxpbmcudGhyZWFkIiwgW3NlbmRlcl0geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZt
dHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBbc2VuZGVyXSB7CiAgICAgICAgICAgICBzZW5kZXIt
PnNlbmQoKTsKICAgICAgICAgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSGVhcFZlcmlmaWVyLmNwcAppbmRleCA1NDI2ZDk4ZGU2NjJjOWE0M2FmY2NiYTFiYjYwNTRi
OWY5ODgwZDhhLi40Mjg2YjIzZTAyNTA5YWFkNDdkMGI5ZDRmYmZjZjQ5ZmViODkxYmIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcApAQCAtMTQzLDcg
KzE0Myw3IEBAIHZvaWQgSGVhcFZlcmlmaWVyOjpwcmludFZlcmlmaWNhdGlvbkhlYWRlcigpCiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9oZWFwLT5jb2xsZWN0aW9uU2NvcGUoKSk7CiAgICAgQ29sbGVj
dGlvblNjb3BlIHNjb3BlID0gY3VycmVudEN5Y2xlKCkuc2NvcGU7CiAgICAgTW9ub3RvbmljVGlt
ZSBnY0N5Y2xlVGltZXN0YW1wID0gY3VycmVudEN5Y2xlKCkudGltZXN0YW1wOwotICAgIGRhdGFM
b2coIlZlcmlmeWluZyBoZWFwIGluIFtwIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiLCB0Iiwg
Y3VycmVudFRocmVhZCgpLCAiXSB2bSAiLAorICAgIGRhdGFMb2coIlZlcmlmeWluZyBoZWFwIGlu
IFtwIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiLCB0IiwgVGhyZWFkOjpjdXJyZW50KCksICJd
IHZtICIsCiAgICAgICAgIFJhd1BvaW50ZXIobV9oZWFwLT52bSgpKSwgIiBvbiAiLCBzY29wZSwg
IiBHQyBAICIsIGdjQ3ljbGVUaW1lc3RhbXAsICJcbiIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvQXV0b21hdGlj
VGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3ZjAw
Li40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F1
dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVh
ZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIAogICAgIG1faGFzVW5kZXJseWlu
Z1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVh
dGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAg
ICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAgICAgIFs9XSAoKSB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVh
ZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51ZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNo
KCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1NWZlYmEyYzcu
LmYzZWIwODUwZDllZWM2NGQwOTNjZTk5MTQ2MDAzZTlmODk4NGUyYzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CkBAIC0xMjgsNyArMTI4LDYgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU3RyaW5nRXh0
cmFzLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAg
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCiAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aAogICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJlYWRpbmcuaApAQCAtMzMzLDEyICszMzIs
OCBAQCBpZiAoV0lOMzIpCiAgICAgICAgIFRocmVhZGluZ1dpbi5jcHAKICAgICApCiBlbHNlICgp
Ci0gICAgbGlzdChBUFBFTkQgV1RGX0hFQURFUlMKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5oCi0gICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAg
IE9TQWxsb2NhdG9yUG9zaXguY3BwCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuY3BwCiAgICAgICAgIFRocmVhZGluZ1B0aHJlYWRzLmNwcAogICAgICkKIGVuZGlmICgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L01haW5UaHJlYWQuY3BwCmluZGV4IDAyNDk1NDRjNTE4ZTgyYWZmMTcwNWRlMTllYzk2NWFiOThi
MWQxMDYuLjUyNWY4MDJjODNlNTZkNzBiNjk0MWU1NDliYzdjYmUxM2ExMGFmNjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01h
aW5UaHJlYWQuY3BwCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMg
Ym9vbCBjYWxsYmFja3NQYXVzZWQ7IC8vIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIG9ubHkgYWNj
ZXNzZWQgZnJvbSBtYWluIHRocmVhZC4KICNpZiAhT1MoREFSV0lOKSAmJiAhVVNFKEdMSUIpCi1z
dGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsKK3N0YXRpYyBUaHJl
YWQqIG1haW5UaHJlYWRJZGVudGlmaWVyOwogI2VuZGlmCiAKIHN0YXRpYyBTdGF0aWNMb2NrIG1h
aW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXg7CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBpbml0
aWFsaXplTWFpblRocmVhZCgpCiAgICAgaW5pdGlhbGl6ZWRNYWluVGhyZWFkID0gdHJ1ZTsKIAog
ICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBtYWluVGhyZWFkSWRlbnRpZmllciA9IGN1
cnJlbnRUaHJlYWQoKTsKKyAgICBtYWluVGhyZWFkSWRlbnRpZmllciA9ICZUaHJlYWQ6OmN1cnJl
bnQoKTsKIAogICAgIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKTsKICAgICBpbml0aWFs
aXplR0NUaHJlYWRzKCk7CkBAIC0xODEsMTQgKzE4MSwxNCBAQCB2b2lkIHNldE1haW5UaHJlYWRD
YWxsYmFja3NQYXVzZWQoYm9vbCBwYXVzZWQpCiAjaWYgIU9TKERBUldJTikgJiYgIVVTRShHTElC
KQogYm9vbCBpc01haW5UaHJlYWQoKQogewotICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0g
bWFpblRocmVhZElkZW50aWZpZXI7CisgICAgcmV0dXJuICZUaHJlYWQ6OmN1cnJlbnQoKSA9PSBt
YWluVGhyZWFkSWRlbnRpZmllcjsKIH0KICNlbmRpZgogCiAjaWYgIVVTRShXRUJfVEhSRUFEKQot
Ym9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJZCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZCYg
dGhyZWFkKQogewotICAgIHJldHVybiB0aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCk7CisgICAg
cmV0dXJuICZ0aHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpOwogfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBiL1NvdXJjZS9XVEYvd3RmL01haW5U
aHJlYWQuaAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3NjgzY2U1NTA4ZGQ4ZDdmMWQ3N2FmLi4z
ODk4ZGNjOWI0Mzk0N2VhOTJmZTg0ODAzYTU5NzQwZTMwOWYwNzc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5o
CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQcmludFN0cmVhbTsK
IAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgVGhyZWFkSWRlbnRp
ZmllciA9IHVpbnQ2NF90OwogCiAvLyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVh
ZC4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1NvdXJjZS9X
VEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCmluZGV4IDQ0ZGJjNTZlODBjMzBjNGUxNjk1
NmU1NTdjMzMwYTljYjRhMzQzNjMuLjMyZWQwZTkxYzE5MzE0OTExMTRiMzZhOWQ1MjE1Yzk2ODBm
ZTgzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC0xNzksNyAr
MTc5LDcgQEAgY2xhc3MgTWVtb3J5UHJlc3N1cmVIYW5kbGVyIHsKICNpZiBVU0UoR0xJQikKICAg
ICAgICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKICNlbHNlCi0gICAgICAgIFRocmVhZElk
ZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWRJRDsK
ICNlbmRpZgogICAgIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFs
bGVsSm9ic0dlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5j
cHAKaW5kZXggNDAyM2Y0M2U2ZjIwYTM4ZTEwM2U3YzlhMmU0ZjBmN2UwNjEwNTcxNC4uOTA4OTJh
YTQ5NzE0OGJmZDdhMmUyMTkwNzA2MWMxMWYxYzJjODUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxs
ZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgYm9vbCBQYXJhbGxlbEVudmlyb25t
ZW50OjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVu
dCkKICAgICB9CiAKICAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBj
cmVhdGVUaHJlYWQoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRo
cmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOworICAgICAgICBtX3RocmVhZElEID0gVGhy
ZWFkOjpjcmVhdGUoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRo
cmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOwogCiAgICAgaWYgKG1fdGhyZWFkSUQpCiAg
ICAgICAgIG1fcGFyZW50ID0gcGFyZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFy
YWxsZWxKb2JzR2VuZXJpYy5oIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5o
CmluZGV4IDQ1ODQwN2M0Y2I0YTNmOTk1YzkwYzU1NTYyN2MxY2JkMjJiNDFiNWMuLjcxYjc2NDQz
OGU2YmY5M2ZmZTIyOTFiNWFlNzMyNTJkMDgxNWYxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpv
YnNHZW5lcmljLmgKQEAgLTU0LDcgKzU0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7
CiAgICAgY2xhc3MgVGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRocmVhZFByaXZh
dGU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRocmVhZFByaXZhdGUoKQotICAgICAgICAgICAg
OiBtX3RocmVhZElEKDApCisgICAgICAgICAgICA6IG1fdGhyZWFkSUQobnVsbHB0cikKICAgICAg
ICAgICAgICwgbV9ydW5uaW5nKGZhbHNlKQogICAgICAgICAgICAgLCBtX3BhcmVudCgwKQogICAg
ICAgICB7CkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAg
ICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWQodm9pZCopOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBSZWZQdHI8VGhyZWFk
PiBtX3RocmVhZElEOwogICAgICAgICBib29sIG1fcnVubmluZzsKICAgICAgICAgUGFyYWxsZWxF
bnZpcm9ubWVudCogbV9wYXJlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuY3BwIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKaW5kZXggZTZjNjc4YmVm
YzBmMTkwYTIyM2U5YWRkYjJjYzU4MTBiNTZlMWMxNC4uNjIyZWY3MTVjZjVkZTMzMmNmYzNhYTgx
NDI3ZmNmMTE2OTEyMTU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAg
c3RydWN0IFRocmVhZERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkRGF0
YT4gewogICAgIFRocmVhZERhdGEoKTsKICAgICB+VGhyZWFkRGF0YSgpOwogCi0gICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOworICAgIFJlZjxUaHJlYWQ+IHRocmVhZElkZW50
aWZpZXI7CiAgICAgCiAgICAgTXV0ZXggcGFya2luZ0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9u
IHBhcmtpbmdDb25kaXRpb247CkBAIC04MSw3ICs4MSw3IEBAIHN0cnVjdCBCdWNrZXQgewogICAg
IHZvaWQgZW5xdWV1ZShUaHJlYWREYXRhKiBkYXRhKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5x
dWV1ZWluZyAiLCBSYXdQb2ludGVyKGRhdGEpLCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50
ZXIoZGF0YS0+YWRkcmVzcyksICIgb250byAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7Cisg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBlbnF1ZXVl
aW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihk
YXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKICAgICAg
ICAgQVNTRVJUKGRhdGEtPmFkZHJlc3MpOwogICAgICAgICBBU1NFUlQoIWRhdGEtPm5leHRJblF1
ZXVlKTsKICAgICAgICAgCkBAIC05OSwxMSArOTksMTEgQEAgc3RydWN0IEJ1Y2tldCB7CiAgICAg
dm9pZCBnZW5lcmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogZGVxdWV1ZWluZyBmcm9tIGJ1Y2tldCBhdCAiLCBSYXdQb2ludGVyKHRoaXMpLCAi
XG4iKSk7CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAi
OiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmICghcXVldWVIZWFkKSB7CiAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogZW1wdHkuXG4iKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6
OmN1cnJlbnQoKSwgIjogZW1wdHkuXG4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMTQzLDE0ICsxNDMsMTQgQEAgc3RydWN0IEJ1Y2tldCB7CiAgICAgICAgIHdoaWxl
IChzaG91bGRDb250aW51ZSkgewogICAgICAgICAgICAgVGhyZWFkRGF0YSogY3VycmVudCA9ICpj
dXJyZW50UHRyOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGdvdCB0aHJlYWQgIiwgUmF3UG9pbnRl
cihjdXJyZW50KSwgIlxuIikpOworICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhy
ZWFkOjpjdXJyZW50KCksICI6IGdvdCB0aHJlYWQgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIlxu
IikpOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgRGVxdWV1ZVJlc3VsdCByZXN1bHQgPSBmdW5jdG9yKGN1cnJlbnQsIHRpbWVU
b0JlRmFpcik7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICAgICAgY2Fz
ZSBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU6CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBj
dXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcihjdXJyZW50UHRyKSwgIiwgKmN1cnJlbnRQdHIgPSAi
LCBSYXdQb2ludGVyKCpjdXJyZW50UHRyKSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBjdXJyZW50UHRyID0gIiwgUmF3
UG9pbnRlcihjdXJyZW50UHRyKSwgIiwgKmN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKCpjdXJy
ZW50UHRyKSwgIlxuIikpOwogICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKICAg
ICAgICAgICAgICAgICBjdXJyZW50UHRyID0gJigqY3VycmVudFB0ciktPm5leHRJblF1ZXVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHN0cnVjdCBCdWNrZXQg
ewogICAgICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICAgICAgY2FzZSBEZXF1ZXVl
UmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IGRlcXVldWVpbmcgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIiBmcm9tICIsIFJhd1BvaW50ZXIo
dGhpcyksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJl
YWQ6OmN1cnJlbnQoKSwgIjogZGVxdWV1ZWluZyAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiIGZy
b20gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOwogICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50ID09IHF1ZXVlVGFpbCkKICAgICAgICAgICAgICAgICAgICAgcXVldWVUYWlsID0gcHJldmlv
dXM7CiAgICAgICAgICAgICAgICAgZGlkRGVxdWV1ZSA9IHRydWU7CkBAIC0yNzEsNyArMjcxLDcg
QEAgSGFzaHRhYmxlKiBlbnN1cmVIYXNodGFibGUoKQogICAgICAgICAgICAgY3VycmVudEhhc2h0
YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG1heExvYWRGYWN0b3IpOwogICAgICAgICAgICAgaWYg
KGhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIGN1cnJlbnRIYXNodGFibGUp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIGluaXRpYWwgaGFzaHRh
YmxlICIsIFJhd1BvaW50ZXIoY3VycmVudEhhc2h0YWJsZSksICJcbiIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogY3JlYXRlZCBp
bml0aWFsIGhhc2h0YWJsZSAiLCBSYXdQb2ludGVyKGN1cnJlbnRIYXNodGFibGUpLCAiXG4iKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIYXNodGFibGU7CiAgICAgICAgICAgICB9
CiAKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQg
bnVtVGhyZWFkcykKICAgICBIYXNodGFibGUqIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2Fk
KCk7CiAgICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0
YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRG
YWN0b3IpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRI
YXNodGFibGUtPnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3Is
ICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCks
ICI6IG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8g
IiwgbnVtVGhyZWFkcywgIiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTM1OCw3ICszNTgsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNp
emUodW5zaWduZWQgbnVtVGhyZWFkcykKICAgICBvbGRIYXNodGFibGUgPSBoYXNodGFibGUubG9h
ZCgpOwogICAgIGlmIChvbGRIYXNodGFibGUgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPihvbGRIYXNo
dGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1UaHJlYWRzKSA+PSBtYXhMb2Fk
RmFjdG9yKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGFmdGVyIGxvY2tpbmcsIG5vIG5lZWQgdG8gcmVoYXNo
IGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwgbnVtVGhyZWFkcywgIiA+PSAi
LCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRo
cmVhZDo6Y3VycmVudCgpLCAiOiBhZnRlciBsb2NraW5nLCBubyBuZWVkIHRvIHJlaGFzaCBiZWNh
dXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRocmVhZHMsICIgPj0gIiwgbWF4
TG9hZEZhY3RvciwgIlxuIikpOwogICAgICAgICB1bmxvY2tIYXNodGFibGUoYnVja2V0c1RvVW5s
b2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3OCwxNCArMzc4LDE0IEBAIHZvaWQg
ZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQogICAgIAogICAgIEhhc2h0
YWJsZSogbmV3SGFzaHRhYmxlID0gSGFzaHRhYmxlOjpjcmVhdGUobmV3U2l6ZSk7CiAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBj
cmVhdGVkIG5ldyBoYXNodGFibGU6ICIsIFJhd1BvaW50ZXIobmV3SGFzaHRhYmxlKSwgIlxuIikp
OworICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBjcmVhdGVk
IG5ldyBoYXNodGFibGU6ICIsIFJhd1BvaW50ZXIobmV3SGFzaHRhYmxlKSwgIlxuIikpOwogICAg
IGZvciAoVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA6IHRocmVhZERhdGFzKSB7CiAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IHJlaGFzaGluZyB0aHJlYWQgZGF0YSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiIHdp
dGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsK
KyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHJlaGFz
aGluZyB0aHJlYWQgZGF0YSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiIHdpdGggYWRkcmVz
cyA9ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKICAgICAgICAg
dW5zaWduZWQgaGFzaCA9IGhhc2hBZGRyZXNzKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBuZXdIYXNodGFibGUtPnNpemU7CiAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsKICAgICAg
ICAgQnVja2V0KiBidWNrZXQgPSBuZXdIYXNodGFibGUtPmRhdGFbaW5kZXhdLmxvYWQoKTsKICAg
ICAgICAgaWYgKCFidWNrZXQpIHsKICAgICAgICAgICAgIGlmIChyZXVzYWJsZUJ1Y2tldHMuaXNF
bXB0eSgpKQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNp
Z25lZCBudW1UaHJlYWRzKQogfQogCiBUaHJlYWREYXRhOjpUaHJlYWREYXRhKCkKLSAgICA6IHRo
cmVhZElkZW50aWZpZXIoY3VycmVudFRocmVhZCgpKQorICAgIDogdGhyZWFkSWRlbnRpZmllcihU
aHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAgICB1bnNpZ25lZCBjdXJyZW50TnVtVGhyZWFkczsKICAg
ICBmb3IgKDs7KSB7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBlbnF1ZXVlKGNvbnN0IHZvaWQq
IGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nIG9udG8gYnVja2V0ICIsIFJhd1BvaW50
ZXIoYnVja2V0KSwgIiB3aXRoIGluZGV4ICIsIGluZGV4LCAiIGZvciBhZGRyZXNzICIsIFJhd1Bv
aW50ZXIoYWRkcmVzcyksICIgd2l0aCBoYXNoICIsIGhhc2gsICJcbiIpKTsKKyAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGVucXVldWVpbmcgb250byBi
dWNrZXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiIHdpdGggaW5kZXggIiwgaW5kZXgsICIgZm9y
IGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIiB3aXRoIGhhc2ggIiwgaGFzaCwgIlxu
IikpOwogICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOwogCiAgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgdGhlIGhhc2h0YWJsZSBjb3VsZCBoYXZlIHJlaGFzaGVkIHVuZGVyIHVzLgpAQCAtNDk4
LDcgKzQ5OCw3IEBAIGJvb2wgZW5xdWV1ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQogICAgICAgICBib29sIHJlc3VsdDsKICAgICAgICAgaWYgKHRocmVhZERh
dGEpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwcm9jZWVkaW5nIHRvIGVucXVldWUgIiwgUmF3
UG9pbnRlcih0aHJlYWREYXRhKSwgIlxuIikpOworICAgICAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHByb2NlZWRpbmcgdG8gZW5xdWV1ZSAiLCBSYXdQ
b2ludGVyKHRocmVhZERhdGEpLCAiXG4iKSk7CiAgICAgICAgICAgICBidWNrZXQtPmVucXVldWUo
dGhyZWFkRGF0YSk7CiAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICB9IGVsc2UK
QEAgLTU2Nyw3ICs1NjcsNyBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQ
YXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAgY29uc3QgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5cbiIpKTsKKyAgICAgICAg
ZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogcGFya2luZy5cbiIpKTsKICAg
ICAKICAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOwogICAgIG1lLT50b2tlbiA9
IDA7CkBAIC02NjEsNyArNjYxLDcgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1
bHQgUGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHlJbXBsKAogTkVWRVJfSU5MSU5FIFBhcmtp
bmdMb3Q6OlVucGFya1Jlc3VsdCBQYXJraW5nTG90Ojp1bnBhcmtPbmUoY29uc3Qgdm9pZCogYWRk
cmVzcykKIHsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IHVucGFya2luZyBvbmUuXG4iKSk7CisgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHVucGFya2luZyBvbmUuXG4iKSk7CiAgICAgCiAg
ICAgVW5wYXJrUmVzdWx0IHJlc3VsdDsKIApAQCAtNzA2LDcgKzcwNiw3IEBAIE5FVkVSX0lOTElO
RSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwoCiAgICAgY29uc3QgU2NvcGVkTGFtYmRh
PGludHB0cl90KFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCk+JiBjYWxsYmFjaykKIHsKICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IHVucGFya2luZyBvbmUgdGhlIGhhcmQgd2F5LlxuIikpOworICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiB1bnBhcmtpbmcgb25lIHRoZSBoYXJkIHdheS5cbiIp
KTsKICAgICAKICAgICBSZWZQdHI8VGhyZWFkRGF0YT4gdGhyZWFkRGF0YTsKICAgICBib29sIHRp
bWVUb0JlRmFpciA9IGZhbHNlOwpAQCAtNzUxLDcgKzc1MSw3IEBAIE5FVkVSX0lOTElORSB1bnNp
Z25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25l
ZCBjb3VuCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIGNvdW50ID0g
IiwgY291bnQsICIgZnJvbSAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiLlxuIikpOworICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiB1bnBhcmtpbmcgY291bnQg
PSAiLCBjb3VudCwgIiBmcm9tICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIuXG4iKSk7CiAgICAg
CiAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWREYXRhPiwgOD4gdGhyZWFkRGF0YXM7CiAgICAgZGVx
dWV1ZSgKQEAgLTc2MSw3ICs3NjEsNyBAQCBORVZFUl9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xv
dDo6dW5wYXJrQ291bnQoY29uc3Qgdm9pZCogYWRkcmVzcywgdW5zaWduZWQgY291bgogICAgICAg
ICBCdWNrZXRNb2RlOjpJZ25vcmVFbXB0eSwKICAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVt
ZW50LCBib29sKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogT2JzZXJ2aW5nIGVsZW1lbnQgd2l0
aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihlbGVtZW50LT5hZGRyZXNzKSwgIlxuIikpOworICAg
ICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IE9ic2Vy
dmluZyBlbGVtZW50IHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZWxlbWVudC0+YWRkcmVz
cyksICJcbiIpKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3Mp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6Oklnbm9yZTsKICAgICAgICAg
ICAgIHRocmVhZERhdGFzLmFwcGVuZChlbGVtZW50KTsKQEAgLTc3Myw3ICs3NzMsNyBAQCBORVZF
Ul9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrQ291bnQoY29uc3Qgdm9pZCogYWRk
cmVzcywgdW5zaWduZWQgY291bgogCiAgICAgZm9yIChSZWZQdHI8VGhyZWFkRGF0YT4mIHRocmVh
ZERhdGEgOiB0aHJlYWREYXRhcykgewogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9p
bnRlcih0aHJlYWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJl
YWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhU
aHJlYWQ6OmN1cnJlbnQoKSwgIjogdW5wYXJraW5nICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS5n
ZXQoKSksICIgd2l0aCBhZGRyZXNzICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyks
ICJcbiIpKTsKICAgICAgICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgICAgICB7
CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2sp
OwpAQCAtNzgzLDcgKzc4Myw3IEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1
bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VuCiAgICAgfQogCiAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgp
LCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJl
YWQ6OmN1cnJlbnQoKSwgIjogZG9uZSB1bnBhcmtpbmcuXG4iKSk7CiAgICAgCiAgICAgcmV0dXJu
IHRocmVhZERhdGFzLnNpemUoKTsKIH0KQEAgLTc5Myw3ICs3OTMsNyBAQCBORVZFUl9JTkxJTkUg
dm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwoY29uc3Qgdm9pZCogYWRkcmVzcykKICAgICB1bnBh
cmtDb3VudChhZGRyZXNzLCBVSU5UX01BWCk7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIFBhcmtp
bmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZp
ZXIsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQorTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9p
ZCopPiYgY2FsbGJhY2spCiB7CiAgICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9
IGxvY2tIYXNodGFibGUoKTsKIApAQCAtODAzLDcgKzgwMyw3IEBAIE5FVkVSX0lOTElORSB2b2lk
IFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElk
ZW50aWZpCiAgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGZvciAoVGhyZWFkRGF0YSogY3VycmVudFRocmVhZERhdGEgPSBidWNrZXQtPnF1ZXVlSGVh
ZDsgY3VycmVudFRocmVhZERhdGE7IGN1cnJlbnRUaHJlYWREYXRhID0gY3VycmVudFRocmVhZERh
dGEtPm5leHRJblF1ZXVlKQotICAgICAgICAgICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEt
PnRocmVhZElkZW50aWZpZXIsIGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsKKyAgICAgICAg
ICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLmdldCgpLCBj
dXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAgIAogICAgIHVubG9ja0hhc2h0
YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmluZGV4IDdkNWZiMTdlZmEwMmFi
NzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTljN2I3ZmQ0Y2M2YWNhZTM2MmFl
YTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBjbGFzcyBQ
YXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHN0YXRpYyB2b2lk
IGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAgIGZvckVhY2hJbXBsKHNj
b3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4oZnVuYykp
OworICAgICAgICBmb3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChUaHJlYWQmLCBjb25z
dCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNzEsNyArMTcxLDcgQEAg
Y2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVu
cGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IFNjb3BlZExh
bWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lk
KFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFk
JiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oIGIvU291cmNlL1dURi93dGYv
UmVjdXJzaXZlTG9ja0FkYXB0ZXIuaAppbmRleCA5N2EyNDNiOTBiY2FjMDBiMmQ3ZWVjZGYyN2Uw
NDI1ZmM1MmQ2N2E3Li4wNzY2MmM5MzFhMWU3NTAxM2RiMTE2MDBiMDc4MmU1NjU5OGRlZTRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xh
c3MgUmVjdXJzaXZlTG9ja0FkYXB0ZXIgewogICAgIAogICAgIHZvaWQgbG9jaygpCiAgICAgewot
ICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1lID0gY3VycmVudFRocmVhZCgpOworICAgICAgICBU
aHJlYWRJZGVudGlmaWVyIG1lID0gVGhyZWFkOjpjdXJyZW50KCkuaWQoKTsKICAgICAgICAgaWYg
KG1lID09IG1fb3duZXIpIHsKICAgICAgICAgICAgIG1fcmVjdXJzaW9uQ291bnQrKzsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgUmVjdXJzaXZlTG9ja0FkYXB0
ZXIgewogICAgIAogICAgIGJvb2wgdHJ5TG9jaygpCiAgICAgewotICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyIG1lID0gY3VycmVudFRocmVhZCgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1l
ID0gVGhyZWFkOjpjdXJyZW50KCkuaWQoKTsKICAgICAgICAgaWYgKG1lID09IG1fb3duZXIpIHsK
ICAgICAgICAgICAgIG1fcmVjdXJzaW9uQ291bnQrKzsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9S
ZWZQdHIuaAppbmRleCBmZTE2MzBjOTczNWI1ZmY1MzUzY2IyYzU1OGUzMTA1ODEyNDc4N2Q4Li4y
NzdlNjc1ZGIzYzU1NWQ1ZTRjNmNlMDQ5NDY4ODc0ZDM2NzY5NTljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9SZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaApAQCAtNDIs
NyArNDIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHIgewogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzUmVmUHRyID0gdHJ1ZTsKIAotICAgIEFMV0FZU19JTkxJTkUg
UmVmUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0ZXhw
ciBSZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgUmVmUHRy
KFQqIHB0cikgOiBtX3B0cihwdHIpIHsgcmVmSWZOb3ROdWxsKHB0cik7IH0KICAgICBBTFdBWVNf
SU5MSU5FIFJlZlB0cihjb25zdCBSZWZQdHImIG8pIDogbV9wdHIoby5tX3B0cikgeyByZWZJZk5v
dE51bGwobV9wdHIpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmVmUHRyKGNvbnN0IFJl
ZlB0cjxVPiYgbykgOiBtX3B0cihvLmdldCgpKSB7IHJlZklmTm90TnVsbChtX3B0cik7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGIvU291
cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKaW5kZXggOTQzZmQ2ZDc5ZDA5
NDQyNTUwM2FjODk3MzFiMGEwNmE2YWM0MGZmZC4uY2IyNzVmNzAxMmNmZTU2NjFlNDllMGI0ZmYw
ZDljNjIxYjBlNDk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
LmgKQEAgLTI5LDYgKzI5LDggQEAKICNpZm5kZWYgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uX2gK
ICNkZWZpbmUgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uX2gKIAorI2luY2x1ZGUgIlRocmVhZGlu
Zy5oIgorCiBuYW1lc3BhY2UgV1RGIHsKIAogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24p
KHZvaWQqIGFyZ3VtZW50KTsKQEAgLTM2LDEzICszOCwxNSBAQCB0eXBlZGVmIHZvaWQgKCpUaHJl
YWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOwogc3RydWN0IFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBkYXRhKQor
ICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgUmVm
UHRyPFRocmVhZD4mJiB0aHJlYWQsIHZvaWQqIGRhdGEpCiAgICAgICAgIDogZnVuY3Rpb24oZnVu
Y3Rpb24pCisgICAgICAgICwgdGhyZWFkKFdURk1vdmUodGhyZWFkKSkKICAgICAgICAgLCBkYXRh
KGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uOworICAg
IFJlZlB0cjxUaHJlYWQ+IHRocmVhZDsKICAgICB2b2lkKiBkYXRhOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5jcHAKaW5kZXggYzFkYzM1MDE5MDNhYjc2YjM3MDQ2ZDkzMzNmOTMyYTNlZjBjNmM2ZS4uZDEz
MjNhNjc1N2U3OWNmNmQzNzQ0NTZhZTA4MjIwZDk2YjE0ODNkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3Bw
CkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsKICAgICBNdXRleCBj
cmVhdGlvbk11dGV4OwogfTsKIAotY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25z
dCBjaGFyKiB0aHJlYWROYW1lKQorY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVUaHJlYWRO
YW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFWRShQVEhSRUFEX1NFVE5BTUVf
TlApCiAgICAgcmV0dXJuIHRocmVhZE5hbWU7CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyB2b2lk
IHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsKICAgICB9CiAKLSAgICBpbml0aWFsaXpl
Q3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUpOworICAgIFRocmVhZDo6aW5pdGlh
bGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKIAogICAgIGF1dG8gZW50
cnlQb2ludCA9IFdURk1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7CiAKQEAgLTkyLDI0ICs5Miwy
NCBAQCBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAg
IGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCitSZWZQdHI8VGhy
ZWFkPiBUaHJlYWQ6OmNyZWF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBb
ZW50cnlQb2ludCwgZGF0YV0geworICAgICAgICBlbnRyeVBvaW50KGRhdGEpOworICAgIH0pOwor
fQorCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludCkKIHsKICAgICBOZXdUaHJlYWRDb250ZXh0KiBj
b250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5UG9pbnQp
LCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhlY3V0aW5n
IHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAgICBNdXRl
eExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAKLSAgICByZXR1cm4gY3Jl
YXRlVGhyZWFkSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7Ci19Ci0K
LVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQs
IHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVRocmVh
ZChuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0gewotICAgICAgICBlbnRyeVBvaW50KGRhdGEpOwot
ICAgIH0pOworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKHRocmVhZEVudHJ5UG9p
bnQsIGNvbnRleHQsIG5hbWUpOwogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRl
cmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShR
T1NfQ0xBU1NFUykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEyMCw3
ICsxMjAsNyBAQCB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVs
YXRpdmVQcmlvcml0eSkKICNlbmRpZgogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJ
bml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRo
cmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFP
U19DTEFTU0VTKQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTQ4LDQg
KzE0OCwxMCBAQCBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdp
bmFsQ2xhc3MpCiB9CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9pZCk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oCmluZGV4IDZiNTU4YjNlMWQ1MTdlODEwYzVlYThmNmIyY2E0NDA1YWNm
MDEyZDIuLjdkNTVlYTAxZGJkNmMyYTRjZTUxMzY2MWVkYjUwZDE2YjRjMDlhYzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICogQ29weXJp
Z2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFrdGl4LmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcwICs0MSwxNzcgQEAKICNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvV29yZExv
Y2suaD4KKworI2lmICFPUyhEQVJXSU4pICYmICFPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHNpZ25h
bC5oPgorLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRfdCBhbmQgdWNvbnRl
eHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KKy8vIFRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkIGlu
IEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2FuIGJlCisvLyByZW1v
dmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4KKy8vIGh0dHBzOi8vYnVncy5mcmVlYnNk
Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc5CisjaWYgT1MoRlJFRUJTRCkKKyNp
bmNsdWRlIDx1Y29udGV4dC5oPgorI2VuZGlmCisjZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7Cisj
aWYgIUNPTVBJTEVSKE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2NoZWQu
aD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCiAKLXR5cGVkZWYgdWludDMyX3QgVGhy
ZWFkSWRlbnRpZmllcjsKLXR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1
bWVudCk7CisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKIAot
Ly8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQg
aXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9u
IHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBv
bmx5IAotLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQu
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CisjaWYgIU9T
KERBUldJTikKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNlbmRpZgogCi0vLyBSZXR1cm5zIDAg
aWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KLS8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEg
bGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhy
ZWFkLgotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CiAKLS8vIE1hcmsg
dGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KLS8vIHJl
bGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBs
b3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4KLVdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlv
cml0eSA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNl
ckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwogCi1XVEZfRVhQT1JUX1BSSVZB
VEUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyLCBpbnQpOwotV1RGX0VY
UE9SVF9QUklWQVRFIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVy
KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVy
KTsKK25hbWVzcGFjZSBXVEYgewogCi0vLyBEZXByZWNhdGVkIGZ1bmN0aW9uLXBvaW50ZXItYmFz
ZWQgdGhyZWFkIGNyZWF0aW9uLgotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIg
Y3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFt
ZSk7CisjaWYgT1MoREFSV0lOKQorCisjaWYgQ1BVKFg4NikKK3R5cGVkZWYgaTM4Nl90aHJlYWRf
c3RhdGVfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShYODZfNjQpCit0eXBlZGVmIHg4
Nl90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKFBQQykKK3R5
cGVkZWYgcHBjX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKFBQ
QzY0KQordHlwZWRlZiBwcGNfdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNl
bGlmIENQVShBUk0pCit0eXBlZGVmIGFybV90aHJlYWRfc3RhdGVfdCBQbGF0Zm9ybVJlZ2lzdGVy
czsKKyNlbGlmIENQVShBUk02NCkKK3R5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZv
cm1SZWdpc3RlcnM7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYK
IAotLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGltcGxlbWVudGF0
aW9uLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlv
biwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworI2VsaWYgT1MoV0lORE9XUykKIAot
Ly8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotLy8gSGVscGZ1
bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9tIHdp
dGhpbiB0aGUgdGhyZWFkLgotdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUpOwordXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhU
OwogCi1jb25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShY
ODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMp
KQogCi0jaWYgVVNFKFBUSFJFQURTKQotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRlbnRpZmll
ciwgaW50IHNpZ25hbE51bWJlcik7Ci0jZW5kaWYKK3VzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0g
bWNvbnRleHRfdDsKKworI2Vsc2UKKworc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKKyAgICB2
b2lkKiBzdGFja1BvaW50ZXI7Cit9OwogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKLVdURl9F
WFBPUlRfUFJJVkFURSBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190KTsK
ICNlbmRpZgogCi19IC8vIG5hbWVzcGFjZSBXVEYKKy8vIE1vbm90b25pY2FsbHkgaW5jcmVhc2lu
ZyBJRCBmb3IgdGhyZWFkcy4gV2hpbGUgcG9pbnRlciB0byBUaHJlYWQgY2FuIGJlIHJldXNlZCBp
ZiB0aGUgc2FtZSBtZW1vcnkgaXMgYWxsb2NhdGVkLAorLy8gVGhyZWFkSWRlbnRpZmllciBpcyBh
bHdheXMgZGlmZmVyZW50IGJldHdlZW4gZGlmZmVyZW50IHRocmVhZHMuCit1c2luZyBUaHJlYWRJ
ZGVudGlmaWVyID0gdWludDY0X3Q7Cit0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9p
ZCogYXJndW1lbnQpOworCitjbGFzcyBUaHJlYWRIb2xkZXI7CitjbGFzcyBQcmludFN0cmVhbTsK
KworY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewor
cHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRIb2xkZXI7CisKKyAgICBUaHJlYWQoKTsK
KyAgICB+VGhyZWFkKCk7CiAKLXVzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdU
Rjo6Y3JlYXRlVGhyZWFkOwotdXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwotdXNpbmcgV1RGOjpj
aGFuZ2VUaHJlYWRQcmlvcml0eTsKLXVzaW5nIFdURjo6ZGV0YWNoVGhyZWFkOwotdXNpbmcgV1RG
Ojp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbjsKKyAgICAvLyBSZXR1cm5zIG51bGxwdHIgaWYgdGhy
ZWFkIGNyZWF0aW9uIGZhaWxlZC4KKyAgICAvLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxp
dGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVh
ZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZShj
b25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKFRocmVhZEZ1bmN0aW9u
IGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7CisKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjaGFuZ2VQcmlvcml0eShpbnQpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBp
bnQgd2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXRh
Y2goKTsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHN1c3BlbmQoKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCByZXN1bWUoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6
ZV90IGdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYpOwogCiAjaWYgVVNFKFBUSFJFQURT
KQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
c2lnbmFsKGludCBzaWduYWxOdW1iZXIpOwogI2VuZGlmCiAKKyAgICAvLyBNYXJrIHRoZSBjdXJy
ZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9uc2l2ZW5lc3MuCisgICAgLy8gcmVsYXRp
dmVQcmlvcml0eSBpcyBhIHZhbHVlIGluIHRoZSByYW5nZSBbLTE1LCAwXSB3aGVyZSBhIGxvd2Vy
IHZhbHVlIGluZGljYXRlcyBhIGxvd2VyIHByaW9yaXR5LgorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0
aXZlUHJpb3JpdHkgPSAwKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0
Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwor
CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdURjo6c2V0R2xvYmFsTWF4UU9TQ2xhc3M7
Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNz
X3QpOwogI2VuZGlmCiAKKyAgICAvLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVU
aHJlYWQgaW1wbGVtZW50YXRpb24uCisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZUlu
dGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisK
KyAgICAvLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAg
Ly8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNl
dCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisK
KyAgICB2b2lkIGVzdGFibGlzaChwdGhyZWFkX3QgaGFuZGxlKTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhhbmRsZXJT
dXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpOworCisgICAgVGhy
ZWFkSWRlbnRpZmllciBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworcHJpdmF0ZToKKyAg
ICBlbnVtIEpvaW5hYmxlU3RhdGUgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3Rh
dGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KKyAgICAgICAgSm9pbmFibGUsCisKKyAg
ICAgICAgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMg
dGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBj
YW4gYmUgYQorICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVh
ZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1h
aW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pCisgICAgICAgIC8vIGFuZCB3
aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFr
ZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncworICAgICAg
ICAvLyBub2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNl
IHdhaXRPblRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgorICAgICAgICBK
b2luZWQsCisKKyAgICAgICAgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2Fu
IG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0
YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgorICAgICAgICBEZXRhY2hlZCwK
KyAgICB9OworCisgICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9q
b2luYWJsZVN0YXRlOyB9CisgICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJs
ZVN0YXRlID0gRGV0YWNoZWQ7IH0KKyAgICB2b2lkIGRpZEV4aXQoKTsKKyAgICB2b2lkIGRpZEpv
aW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkg
eyByZXR1cm4gbV9kaWRFeGl0OyB9CisKKyAgICBXb3JkTG9jayBtX211dGV4OworICAgIHB0aHJl
YWRfdCBtX2hhbmRsZTsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1faWQgeyAwIH07CisgICAgSm9p
bmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJsZSB9OworICAgIGJvb2wgbV9kaWRF
eGl0IHsgZmFsc2UgfTsKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbV9wbGF0Zm9y
bVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3QgbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOwor
ICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKKyAgICB1bnNpZ25lZCBt
X3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBzdGQ6OmF0b21pYzxib29sPiBtX3N1c3BlbmRlZCB7
IGZhbHNlIH07CisjZW5kaWYKK307CisKKy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQg
ZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5Lgor
Ly8gRGFyd2luIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNhbGwg
aXQgZnJvbSBhbnkgdGhyZWFkLCB0aGUgb25seQorLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUg
Y2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlRocmVh
ZDsKKwogI2VuZGlmIC8vIFRocmVhZGluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5j
cHAKaW5kZXggZjVjZWUzYzE3NzgyZjY2YWY5YjA0Y2M3ZDU2Y2ExZGE1YTY5MmQwZi4uNTdjNmRi
NzFjYzUwZjM4MTQ5MmVhNTBkOTVkMTQ0ZGVkMWRhMGNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHly
aWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MywxMSAr
NDQsMTIgQEAKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKICNpbmNsdWRl
ICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCiAjaW5jbHVkZSAiVGhyZWFkU3BlY2lm
aWMuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4K
ICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgotI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8d3RmL1dvcmRMb2NrLmg+CiAKICNpZiAhQ09NUElMRVIoTVNWQykKICNpbmNsdWRlIDxs
aW1pdHMuaD4KQEAgLTYwLDE0MyArNjIsMTMxIEBACiAjZW5kaWYKIAogI2lmICFPUyhEQVJXSU4p
Ci0jaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdURiB7CiAKLWNsYXNzIFB0aHJlYWRTdGF0ZSB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBKb2luYWJsZVN0YXRlIHsKLSAgICAgICAg
Sm9pbmFibGUsIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUg
am9pbmVkIG9uLgotCi0gICAgICAgIEpvaW5lZCwgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMg
dGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRl
IGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYSAKLSAgICAgICAgICAgICAgICAvLyBwZXJp
b2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0
aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29t
cGxldGlvbiB0byBydW4pIAotICAgICAgICAgICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERpZEV4
aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5kIGRl
bGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncyAKLSAgICAgICAgICAgICAgICAvLyBu
b2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRP
blRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgotCi0gICAgICAgIERldGFj
aGVkIC8vIFRoZSB0aHJlYWQgaGFzIGJlZW4gZGV0YWNoZWQgYW5kIGNhbiBubyBsb25nZXIgYmUg
am9pbmVkIG9uLiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkIG11c3QgdGFrZSBjYXJlIG9mIGNs
ZWFuaW5nIHVwIGFmdGVyIGl0c2VsZi4KLSAgICB9OwotCi0gICAgLy8gQ3VycmVudGx5IGFsbCB0
aHJlYWRzIGNyZWF0ZWQgYnkgV1RGIHN0YXJ0IG91dCBhcyBqb2luYWJsZS4gCi0gICAgUHRocmVh
ZFN0YXRlKHB0aHJlYWRfdCBoYW5kbGUpCi0gICAgICAgIDogbV9qb2luYWJsZVN0YXRlKEpvaW5h
YmxlKQotICAgICAgICAsIG1fZGlkRXhpdChmYWxzZSkKLSAgICAgICAgLCBtX3B0aHJlYWRIYW5k
bGUoaGFuZGxlKQotICAgIHsKLSAgICB9Ci0KLSAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3Rh
dGUoKSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KLSAgICBwdGhyZWFkX3QgcHRocmVhZEhh
bmRsZSgpIHsgcmV0dXJuIG1fcHRocmVhZEhhbmRsZTsgfQotICAgIHZvaWQgZGlkQmVjb21lRGV0
YWNoZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVkOyB9Ci0gICAgdm9pZCBkaWRFeGl0
KCkgeyBtX2RpZEV4aXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBkaWRKb2luKCkgeyBtX2pvaW5hYmxl
U3RhdGUgPSBKb2luZWQ7IH0KLSAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1fZGlkRXhp
dDsgfQorI2lmICFPUyhEQVJXSU4pCiAKLXByaXZhdGU6Ci0gICAgSm9pbmFibGVTdGF0ZSBtX2pv
aW5hYmxlU3RhdGU7Ci0gICAgYm9vbCBtX2RpZEV4aXQ7Ci0gICAgcHRocmVhZF90IG1fcHRocmVh
ZEhhbmRsZTsKLX07CisvLyBXZSB1c2UgU0lHVVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUgbWFj
aGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3JlLgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCBp
bnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7CitzdGF0aWMgc3RkOjphdG9taWM8
VGhyZWFkKj4gdGFyZ2V0VGhyZWFkIHsgbnVsbHB0ciB9Oworc3RhdGljIFN0YXRpY1dvcmRMb2Nr
IGdsb2JhbFN1c3BlbmRMb2NrIHsgfTsKIAotdHlwZWRlZiBIYXNoTWFwPFRocmVhZElkZW50aWZp
ZXIsIHN0ZDo6dW5pcXVlX3B0cjxQdGhyZWFkU3RhdGU+PiBUaHJlYWRNYXA7Cit2b2lkIFRocmVh
ZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29u
dGV4dCkKK3sKKyAgICAvLyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20g
c2lnbmFsIGhhbmRsZXJzIGlzIGFsbG93ZWQuCisgICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRU
aHJlYWQubG9hZCgpOworCisgICAgaWYgKHRocmVhZC0+bV9zdXNwZW5kZWQubG9hZChzdGQ6Om1l
bW9yeV9vcmRlcl9hY3F1aXJlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHNpZ25hbCBoYW5kbGVy
IGludm9jYXRpb24gdGhhdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlc3VtZSBzaWdzdXNw
ZW5kLgorICAgICAgICAvLyBTbyB0aGlzIGhhbmRsZXIgaW52b2NhdGlvbiBpdHNlbGYgc2hvdWxk
IG5vdCBwcm9jZXNzLgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHNpZ25hbCBjb21lcywg
Zmlyc3QsIHRoZSBzeXN0ZW0gY2FsbHMgc2lnbmFsIGhhbmRsZXIuIEFuZCBsYXRlciwgc2lnc3Vz
cGVuZCB3aWxsIGJlIHJlc3VtZWQuIFNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gYWx3YXlzIHBy
ZWNlZGVzLgorICAgICAgICAvLyBTbywgdGhlIHByb2JsZW0gbmV2ZXIgaGFwcGVucyB0aGF0IHN1
c3BlbmRlZC5zdG9yZSh0cnVlLCAuLi4pIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBoYW5k
bGVyIGlzIGNhbGxlZC4KKyAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxp
bmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvc2lnc3VzcGVuZC5odG1sCisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLXZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQoVGhyZWFkSWRlbnRpZmll
cik7Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci12b2lkIHRocmVhZFdh
c0pvaW5lZChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICB1Y29udGV4dF90KiB1c2VyQ29udGV4dCA9
IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCk7CisjaWYgQ1BVKFBQQykKKyAgICB0
aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSAqdXNlckNvbnRleHQtPnVjX21jb250
ZXh0LnVjX3JlZ3M7CisjZWxzZQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4
dCA9IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKKyNlbmRpZgogCi1zdGF0aWMgTXV0ZXgmIHRo
cmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4
OwotICAgIHJldHVybiBtdXRleDsKKyAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUg
dGhhdCB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMt
c2lnbmFsLXNhZmUgZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9t
IGEgc2lnbmFsIGhhbmRsZXIuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxp
bmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8w
MworICAgIC8vCisgICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQg
ZW5zdXJlcyB0aGF0IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4K
KyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9i
YXNlZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFkLT5t
X3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBj
b25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBjYWxs
aW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMg
ZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCBy
ZWN1cnNpdmVseS4KKyAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2ZpbGxz
ZXQoJmJsb2NrZWRTaWduYWxTZXQpOworICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNl
dCk7CisKKyAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFk
IGlzIHJlc3VtZWQuCisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5k
UmVzdW1lKTsKIH0KIAorI2VuZGlmIC8vICFPUyhEQVJXSU4pCisKIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCiB7Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZDsKLQotICAgIGlmIChp
c0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10gewor
ICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIC8v
IFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5n
IGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAorICAgICAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJl
ZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgorICAgICAgICBTdHJpbmdJbXBsOjplbXB0eSgpOwor
ICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CisgICAgICAgIHd0ZlRo
cmVhZERhdGEoKTsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CiAKLSAgICBpc0luaXRpYWxp
emVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsK
LSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGlj
IHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQgaGFz
IGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0g
ICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9y
KCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCk7Ci0gICAgd3Rm
VGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOworI2lmICFPUyhEQVJXSU4pCisg
ICAgICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlv
bi4KKyAgICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
IGluIHRoZSBoYW5kbGVyLgorICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwg
YmUgYWxsb3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgorICAgICAgICBzdHJ1Y3Qg
c2lnYWN0aW9uIGFjdGlvbjsKKyAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsK
KyAgICAgICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSk7CisKKyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IFRocmVhZDo6c2lnbmFsSGFuZGxl
clN1c3BlbmRSZXN1bWU7CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBT
QV9TSUdJTkZPOworICAgICAgICBzaWdhY3Rpb24oU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFj
dGlvbiwgMCk7CisjZW5kaWYKKyAgICB9KTsKIH0KIAotc3RhdGljIFRocmVhZE1hcCYgdGhyZWFk
TWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTWFwPiBtYXA7Ci0gICAg
cmV0dXJuIG1hcDsKLX0KK2NsYXNzIFRocmVhZEhvbGRlciB7CitwdWJsaWM6CisgICAgZnJpZW5k
IGNsYXNzIFRocmVhZDsKKyAgICBzdGF0aWMgVGhyZWFkSG9sZGVyJiBjdXJyZW50KCk7CisgICAg
c3RhdGljIHZvaWQgZXN0YWJsaXNoKFRocmVhZCYpOwogCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmll
ciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRs
ZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7CisgICAgflRo
cmVhZEhvbGRlcigpOwogCi0gICAgVGhyZWFkTWFwOjppdGVyYXRvciBpID0gdGhyZWFkTWFwKCku
YmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJlYWRI
YW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+
a2V5OwotICAgIH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxs
cHRyIH07Cit9OwogCi0gICAgcmV0dXJuIDA7CitUaHJlYWRIb2xkZXImIFRocmVhZEhvbGRlcjo6
Y3VycmVudCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZFNwZWNpZmljPFRo
cmVhZEhvbGRlciwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IGhvbGRlcjsKKyAgICByZXR1cm4gKmhv
bGRlci5nZXQoKTsKIH0KIAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRp
ZmllckZvclB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQordm9p
ZCBUaHJlYWRIb2xkZXI6OmVzdGFibGlzaChUaHJlYWQmIHRocmVhZCkKIHsKLSAgICBBU1NFUlQo
IWlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUocHRocmVhZEhhbmRsZSkpOwotICAgIE11dGV4TG9j
a2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmll
ciBpZGVudGlmaWVyQ291bnQgPSAxOwotICAgIHRocmVhZE1hcCgpLmFkZChpZGVudGlmaWVyQ291
bnQsIHN0ZDo6bWFrZV91bmlxdWU8UHRocmVhZFN0YXRlPihwdGhyZWFkSGFuZGxlKSk7Ci0gICAg
cmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOworICAgIGN1cnJlbnQoKS5tX3RocmVhZCA9ICZ0aHJl
YWQ7CiB9CiAKLXN0YXRpYyBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKFRocmVhZElkZW50aWZpZXIgaWQpCitUaHJlYWRIb2xkZXI6On5UaHJl
YWRIb2xkZXIoKQogewotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpLT5wdGhyZWFkSGFu
ZGxlKCk7CisgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZC0+ZGlkRXhpdCgpOwog
fQogCiBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKICAg
ICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIGNyZWF0ZVRocmVhZEludGVybmFsLgogICAg
IGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7Ci0gICAg
aW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19CisgICAgaW52b2NhdGlvbi0+dGhyZWFkLT5lc3RhYmxpc2gocHRocmVhZF9zZWxmKCkp
OwogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9u
IGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQotewotICAgIGF1dG8gaW52b2Nh
dGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBv
aW50LCBkYXRhKTsKLSAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwotICAgIHB0aHJlYWRfYXR0
cl90IGF0dHI7Ci0gICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotI2lmIEhBVkUoUU9TX0NM
QVNTRVMpCi0gICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xhc3NfbnAoJmF0dHIsIGFkanVzdGVk
UU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKSwgMCk7Ci0jZW5kaWYKLSAgICBpbnQg
ZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAmYXR0ciwgd3RmVGhyZWFkRW50
cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0
dHIpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCB3dGZUaHJlYWRFbnRy
eVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAg
IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpLmVzdGFibGlzaCgqaW52b2NhdGlvbi0+dGhyZWFkKTsK
KyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRyOwogCi0gICAgLy8gQmFsYW5jZWQgYnkg
c3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0ZlRocmVhZEVudHJ5UG9pbnQuCi0gICAg
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJbnZvY2F0aW9uID0gaW52b2NhdGlvbi5y
ZWxlYXNlKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24pOwotCi0gICAgcmV0
dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7Cisg
ICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CisgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBj
aGFyKiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFN
RV9OUCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFkTmFtZSh0aHJlYWRO
YW1lKSk7CkBAIC0yMDYsMTIyICsxOTYsMTIgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiAgICAgVU5VU0VEX1BBUkFNKHRocmVh
ZE5hbWUpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gaWRlbnRpZmllckJ5
UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgQVNTRVJUKGlkKTsKLSAgICBUaHJl
YWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Ci19Ci0gICAgCi12b2lkIGNoYW5nZVRo
cmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKLXsKLSAg
ICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAg
IHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFk
eUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0gICAgfQot
Ci0gICAgaW50IHBvbGljeTsKLSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0KLSAgICBp
ZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsICZwb2xpY3ksICZwYXJhbSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOwot
Ci0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBhcmFt
KTsKLX0KLQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRocmVh
ZElEKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBsb2NrIGFjcm9zcyB0
aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBvdXIgdGhyZWFkIGFuZCBjYXVz
ZSBkZWFkbG9jay4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkp
OwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUp
OwotICAgIH0KLQotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKHB0aHJlYWRIYW5k
bGUsIDApOwotCi0gICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKLSAgICAgICAgTE9HX0VS
Uk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWlu
ZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCi0gICAgICAg
IExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5lZC5c
biIsIHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgp
KTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsK
LSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+am9pbmFibGVTdGF0ZSgpID09
IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOwotCi0gICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFk
eSBleGl0ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgotICAgIGlmIChzdGF0ZS0+aGFzRXhpdGVk
KCkpCi0gICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgLy8gVGhlIHRo
cmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1c3Qg
c2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxsIGNs
ZWFuIHVwIGFmdGVyIGl0c2VsZi4KLSAgICBlbHNlCi0gICAgICAgIHN0YXRlLT5kaWRKb2luKCk7
Ci0KLSAgICByZXR1cm4gam9pblJlc3VsdDsKLX0KLQotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHB0aHJlYWRfdCBwdGhyZWFk
SGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRo
cmVhZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0KLSAgICBpbnQgZGV0YWNoUmVz
dWx0ID0gcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0gICAgaWYgKGRldGFjaFJlc3Vs
dCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8g
YmUgZGV0YWNoZWRcbiIsIHRocmVhZElEKTsKLQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0
aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYgKHN0
YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsK
LSAgICBlbHNlCi0gICAgICAgIHRocmVhZE1hcCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29tZURl
dGFjaGVkKCk7Ci19Ci0KLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQ
dGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBBU1NF
UlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7Ci0KLSAgICBpZiAoc3RhdGUt
PmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKQotICAgICAgICB0aHJl
YWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRU
aHJlYWQoKQotewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJZGVudGlmaWVyRGF0
YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJuIGlkOwotCi0gICAg
Ly8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3Rh
Ymxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRs
ZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemUo
aWQpOwotICAgIHJldHVybiBpZDsKLX0KLQotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJRCwgaW50IHNpZ25hbE51bWJlcikKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVh
ZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAg
ICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLSAgICBpbnQgZXJyTm8gPSBwdGhy
ZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVyKTsKLSAgICByZXR1cm4gIWVyck5v
OyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KKyNpZiAhT1MoREFSV0lOKQorICAgIHNpZ3Nl
dF90IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2FkZHNldCgmbWFzaywg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NL
LCAmbWFzaywgMCk7CisjZW5kaWYKIH0KIAogTXV0ZXg6Ok11dGV4KCkKQEAgLTQxNSw2ICsyOTUs
MjgxIEBAIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQogICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCAhcmVzdWx0KTsKIH0KIAorVGhyZWFkOjpUaHJlYWQoKQorICAgIDogbV9qb2lu
YWJsZVN0YXRlKEpvaW5hYmxlKQorICAgICwgbV9kaWRFeGl0KGZhbHNlKQoreworI2lmICFPUyhE
QVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25s
eSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0
aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgorfQorCitUaHJlYWQ6On5UaHJlYWQoKQorewor
I2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJl
c3VtZSk7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChwdGhyZWFkX3QgaGFu
ZGxlKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRs
ZSA9IGhhbmRsZTsKKyAgICBpZiAoIW1faWQpIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6YXRvbWlj
PFRocmVhZElkZW50aWZpZXI+IHByb3ZpZGVyIHsgMCB9OworICAgICAgICBtX2lkID0gKytwcm92
aWRlcjsKKyNpZiBPUyhEQVJXSU4pCisgICAgICAgIG1fcGxhdGZvcm1UaHJlYWQgPSBwdGhyZWFk
X21hY2hfdGhyZWFkX25wKGhhbmRsZSk7CisjZW5kaWYKKyAgICB9Cit9CisKK3ZvaWQgVGhyZWFk
OjpjaGFuZ2VQcmlvcml0eShpbnQgZGVsdGEpCit7CisgICAgcHRocmVhZF90IGhhbmRsZTsKKyAg
ICB7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFu
ZGxlID0gbV9oYW5kbGU7CisgICAgfQorCisgICAgaW50IHBvbGljeTsKKyAgICBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gcGFyYW07CisKKyAgICBpZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKGhhbmRsZSwg
JnBvbGljeSwgJnBhcmFtKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFyYW0uc2NoZWRfcHJp
b3JpdHkgKz0gZGVsdGE7CisKKyAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0oaGFuZGxlLCBwb2xp
Y3ksICZwYXJhbSk7Cit9CisKK2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKK3sKKyAg
ICBwdGhyZWFkX3QgaGFuZGxlOworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBpbnQg
am9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihoYW5kbGUsIDApOworCisgICAgaWYgKGpvaW5SZXN1
bHQgPT0gRURFQURMSykKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICVsbHUg
d2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCBtX2lkKTsKKyAgICBl
bHNlIGlmIChqb2luUmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIg
JWxsdSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5lZC5cbiIsIG1faWQpOworCisgICAgV29yZExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIEFTU0VSVChqb2luYWJsZVN0YXRlKCkgPT0gUHRo
cmVhZFN0YXRlOjpKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4
aXRlZCwgZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBz
byBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5
IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAg
IGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2lu
UmVzdWx0OworfQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICBwdGhyZWFkX3QgaGFu
ZGxlOworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAg
ICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBpbnQgZGV0YWNoUmVzdWx0ID0g
cHRocmVhZF9kZXRhY2goaGFuZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAgICBM
T0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJWxsdSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVk
XG4iLCBtX2lkKTsKKworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURl
dGFjaGVkKCk7Cit9CisKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwoVGhy
ZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciopCit7CisgICAg
UmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CisgICAgYXV0byBp
bnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVu
dHJ5UG9pbnQsIHRocmVhZC5wdHIoKSwgZGF0YSk7CisgICAgcHRocmVhZF90IHRocmVhZEhhbmRs
ZTsKKyAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRy
KTsKKyNpZiBIQVZFKFFPU19DTEFTU0VTKQorICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2NsYXNz
X25wKCZhdHRyLCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCksIDAp
OworI2VuZGlmCisgICAgaW50IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwg
JmF0dHIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOworICAgIHB0aHJl
YWRfYXR0cl9kZXN0cm95KCZhdHRyKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRh
ICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVlX3B0
ciBjb25zdHJ1Y3RvciBpbiB3dGZUaHJlYWRFbnRyeVBvaW50LgorICAgIFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbiogbGVha2VkSW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOworICAg
IFVOVVNFRF9QQVJBTShsZWFrZWRJbnZvY2F0aW9uKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNo
KHRocmVhZEhhbmRsZSk7CisgICAgcmV0dXJuIHRocmVhZDsKK30KKworVGhyZWFkJiBUaHJlYWQ6
OmN1cnJlbnQoKQoreworICAgIFRocmVhZEhvbGRlciYgaG9sZGVyID0gVGhyZWFkSG9sZGVyOjpj
dXJyZW50KCk7CisgICAgaWYgKGhvbGRlci5tX3RocmVhZCkKKyAgICAgICAgcmV0dXJuICpob2xk
ZXIubV90aHJlYWQ7CisKKyAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElk
ZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQg
PSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKKyAgICB0aHJlYWQtPmVzdGFibGlzaChwdGhyZWFk
X3NlbGYoKSk7CisgICAgaG9sZGVyLmVzdGFibGlzaCh0aHJlYWQuZ2V0KCkpOworICAgIHJldHVy
biB0aHJlYWQuZ2V0KCk7Cit9CisKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgbV9kaWRFeGl0ID0gdHJ1ZTsKK30KKwor
Ym9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQoreworICAgIHB0aHJlYWRfdCBo
YW5kbGU7CisgICAgeworICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Cisg
ICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOworICAgIH0KKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFk
X2tpbGwoaGFuZGxlLCBzaWduYWxOdW1iZXIpOworICAgIHJldHVybiAhZXJyTm87IC8vIEEgMCBl
cnJObyBtZWFucyBzdWNjZXNzLgorfQorCisvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciBy
ZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgorLy8g
V2UgdXNlIGdsb2JhbCBsb2NrIGluc3RlYWQgb2YgcGVyIHRocmVhZCBsb2NrLgorLy8gQ29uc2lk
ZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFkcyBBIGFuZCBCLgorLy8gQW5k
IEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCisvLyBB
IGFuZCBCIHNlbmQgc2lnbmFscy4gQW5kIGxhdGVyLCBzaWduYWxzIGFyZSBkZWxpdmVyZWQgdG8g
QSBhbmQgQi4KKy8vIEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KK2Jvb2wg
VGhyZWFkOjpzdXNwZW5kKCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRoaXMgIT0gJmN1
cnJlbnQoKSwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJlbnQg
dGhyZWFkIGl0c2VsZi4iKTsKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Cisj
aWYgT1MoREFSV0lOKQorICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQo
bV9wbGF0Zm9ybVRocmVhZCk7CisgICAgcmV0dXJuIHJlc3VsdCA9PSBLRVJOX1NVQ0NFU1M7Cisj
ZWxzZQorICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRM
b2NrKTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRDb3VudCkgeworICAgICAgICAgICAgLy8gSWRl
YWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVz
IHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgICAg
IC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0Zm9ybXMsIGxpa2UgTGludXguCisg
ICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVh
ZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAg
ICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAgICAgICAgaWYgKHB0aHJlYWRf
a2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2VtX3dhaXQoJm1fc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5zdXJl
cyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhlIGFi
b3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVkLnN0b3JlKHRy
dWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAgICAgICsrbV9z
dXNwZW5kQ291bnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorfQorCisv
LyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVk
IGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorICAgIHRocmVh
ZF9yZXN1bWUobV9wbGF0Zm9ybVRocmVhZCk7CisjZWxzZQorICAgIHsKKyAgICAgICAgV29yZExv
Y2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKG1fc3VzcGVu
ZENvdW50ID09IDEpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYWxsb3dpbmcgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSBpbnRlcnJ1cHQgaW4gdGhlIHNpZ25hbCBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQg
YW5kIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYWN0dWFsbHkgaXNzdWVkLAorICAgICAgICAg
ICAgLy8gdGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWlu
LgorICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkaXN0aW5ndWlzaCB0
aGUgaGFuZGxlciBpbnZvY2F0aW9uIGZvciBzdXNwZW5kIGFuZCByZXN1bWUuCisgICAgICAgICAg
ICAvLyAxLiBVc2UgZGlmZmVyZW50IHNpZ25hbCBudW1iZXJzLiBBbmQgY2hlY2sgdGhlIHNpZ25h
bCBudW1iZXIgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgICAgICAvLyAyLiBVc2Ugc29tZSBhcmd1
bWVudHMgdG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBhbmQgcmVzdW1lIGluIHRoZSBoYW5kbGVyLiBJ
ZiBwdGhyZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2VkLCB3ZSBjYW4gdGFrZSB0aGlzLgorICAgICAg
ICAgICAgLy8gMy4gVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpdGggYXRvbWljIHZhcmlhYmxl
cyBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICAvLyBJbiB0aGlzIGltcGxlbWVu
dGFpdG9uLCB3ZSB0YWtlICgzKS4gc3VzcGVuZGVkIGZsYWcgaXMgdXNlZCB0byBkaXN0aW5ndWlz
aCBpdC4KKyAgICAgICAgICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgICAg
IGlmIChwdGhyZWFkX2tpbGwobV9oYW5kbGUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVT
UkNIKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNlbV93YWl0KCZtX3Nl
bWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVy
IGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxs
IHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCisgICAgICAgICAgICBtX3N1c3BlbmRlZC5z
dG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIH0KKyAgICAg
ICAgLS1tX3N1c3BlbmRDb3VudDsKKyAgICB9CisjZW5kaWYKK30KKworc2l6ZV90IFRocmVhZDo6
Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7CisgICAgV29yZExv
Y2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyNpZiBDUFUoWDg2KQor
ICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHNpemVvZihyZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7
CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOwor
I2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NU
QVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJF
QURfU1RBVEU2NDsKKyNlbGlmIENQVShQUEMpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBD
X1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0g
UFBDX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShQUEM2NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291
bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWdu
ZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVf
Zmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNlCisj
ZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAga2Vybl9yZXR1cm5fdCBy
ZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKG1fcGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVh
ZF9zdGF0ZV90KSZyZWdpc3RlcnMsICZ1c2VyQ291bnQpOworICAgIGlmIChyZXN1bHQgIT0gS0VS
Tl9TVUNDRVNTKSB7CisgICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElO
RV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24g
ZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBU
aGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0YSwgd2hp
Y2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOworICAgICAgICBDUkFTSCgpOworICAgIH0K
KyAgICByZXR1cm4gdXNlckNvdW50ICogc2l6ZW9mKHVpbnRwdHJfdCk7CisjZWxpZiAoT1MoRlJF
RUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkg
fHwgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykpCisgICAgcmVnaXN0ZXJzID0g
bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKKyAgICByZXR1cm4gc2l6ZW9mKFBsYXRmb3JtUmVn
aXN0ZXJzKTsKKyNlbHNlCisgICAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRlOworICAgIHB0aHJl
YWRfYXR0cl9pbml0KCZhdHRyaWJ1dGUpOworI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhO
RVRCU0QpCisjaWYgIU9TKE9QRU5CU0QpCisgICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1
bmRvcmZAa2RlLm9yZworICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAobV9oYW5kbGUsICZhdHRyaWJ1
dGUpOworI2VuZGlmCisjZWxzZQorICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1w
b3J0YWJsZTsgb3RoZXIgUE9TSVggc3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0ZXJu
YXRpdmVzCisgICAgcHRocmVhZF9nZXRhdHRyX25wKG1faGFuZGxlLCAmYXR0cmlidXRlKTsKKyNl
bmRpZgorCisgICAgdm9pZCogc3RhY2tCYXNlID0gMDsKKyAgICBzaXplX3Qgc3RhY2tTaXplID0g
MDsKKyNpZiBPUyhPUEVOQlNEKQorICAgIHN0YWNrX3Qgc3M7CisgICAgaW50IHJjID0gcHRocmVh
ZF9zdGFja3NlZ19ucChwdGhyZWFkX3NlbGYoKSwgJnNzKTsKKyAgICBzdGFja0Jhc2UgPSAodm9p
ZCopKChzaXplX3QpIHNzLnNzX3NwIC0gc3Muc3Nfc2l6ZSk7CisgICAgc3RhY2tTaXplID0gc3Mu
c3Nfc2l6ZTsKKyNlbHNlCisgICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZhdHRy
aWJ1dGUsICZzdGFja0Jhc2UsICZzdGFja1NpemUpOworI2VuZGlmCisgICAgKHZvaWQpcmM7IC8v
IEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21laG93PyBTZWVtcyBmYXRhbC4KKyAgICBB
U1NFUlQoc3RhY2tCYXNlKTsKKyAgICByZWdpc3RlcnMuc3RhY2tQb2ludGVyID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7CisKKyAgICBwdGhyZWFkX2F0dHJfZGVz
dHJveSgmYXR0cmlidXRlKTsKKworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5j
cHAKaW5kZXggNTRiNDNlZmVmMzVjZDY2MzJhNzAwODE1MDdhNWIzNzk5ZGVmYjZmYi4uNmM3NzM4
ZjQyMTY2ZDg1YmQ1OWY0MjI4NjYzMDUwOTJiMzRlODhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4u
Y3BwCkBAIC0yNjgsNiArMjY4LDMwIEBAIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgp
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KEdldEN1cnJlbnRUaHJl
YWRJZCgpKTsKIH0KIAorYm9vbCBzdXNwZW5kVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjdXJyZW50VGhyZWFkKCkgIT0gdGhyZWFk
SUQsICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVh
ZCBpdHNlbGYuIik7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwor
ICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRNYXAoKS5nZXQoaWQpOworICAgIHJldHVy
biAoU3VzcGVuZFRocmVhZCh0aHJlYWRIYW5kbGUpICE9IChEV09SRCktMSk7Cit9CisKK3ZvaWQg
cmVzdW1lVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0
aHJlYWRNYXAoKS5nZXQoaWQpOworICAgIFJlc3VtZVRocmVhZCh0aHJlYWRIYW5kbGUpOworfQor
CitzaXplX3QgZ2V0U3VzcGVuZGVkVGhyZWFkUmVnaXN0ZXJzKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJl
YWRNYXAoKS5nZXQoaWQpOworICAgIHJlZ2lzdGVycy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lO
VEVHRVIgfCBDT05URVhUX0NPTlRST0w7CisgICAgR2V0VGhyZWFkQ29udGV4dCh0aHJlYWRIYW5k
bGUsICZyZWdpc3RlcnMpOworICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7Cit9CisKIE11dGV4
OjpNdXRleCgpCiB7CiAgICAgbV9tdXRleC5tX3JlY3Vyc2lvbkNvdW50ID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaApp
bmRleCBmMTUxNjBiZWM3MzZlZTczMDZhMGE2NjVjNmQ5MzA0Y2I0MzViNmI2Li5iMjAwNjJjYWU2
YWE0MTZlMmI1NzcyZDE3NjZjODFlYjYwYWNiYjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9XZWFrUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvV2Vha1B0ci5oCkBAIC01Miw3ICs1Miw3
IEBAIGNsYXNzIFdlYWtSZWZlcmVuY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2Vh
a1JlZmVyZW5jZTxUPj4gewogI2lmIFVTRShXRUJfVEhSRUFEKQogICAgICAgICBBU1NFUlQoY2Fu
QWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKG1fYm91bmRUaHJlYWQpKTsKICNlbHNlCi0g
ICAgICAgIEFTU0VSVChtX2JvdW5kVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAg
IEFTU0VSVChtX2JvdW5kVGhyZWFkID09IFRocmVhZDo6Y3VycmVudCgpLmlkKCkpOwogI2VuZGlm
CiAgICAgICAgIHJldHVybiBtX3B0cjsKICAgICB9CkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIFdl
YWtSZWZlcmVuY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2Vha1JlZmVyZW5jZTxU
Pj4gewogI2lmIFVTRShXRUJfVEhSRUFEKQogICAgICAgICBBU1NFUlQoY2FuQWNjZXNzVGhyZWFk
TG9jYWxEYXRhRm9yVGhyZWFkKG1fYm91bmRUaHJlYWQpKTsKICNlbHNlCi0gICAgICAgIEFTU0VS
VChtX2JvdW5kVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgIEFTU0VSVChtX2Jv
dW5kVGhyZWFkID09IFRocmVhZDo6Y3VycmVudCgpLmlkKCkpOwogI2VuZGlmCiAgICAgICAgIG1f
cHRyID0gbnVsbHB0cjsKICAgICB9CkBAIC03Niw3ICs3Niw3IEBAIGNsYXNzIFdlYWtSZWZlcmVu
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2Vha1JlZmVyZW5jZTxUPj4gewogICAg
IGV4cGxpY2l0IFdlYWtSZWZlcmVuY2UoVCogcHRyKQogICAgICAgICA6IG1fcHRyKHB0cikKICNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgICwgbV9ib3VuZFRocmVhZChjdXJyZW50VGhyZWFkKCkpCisg
ICAgICAgICwgbV9ib3VuZFRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKS5pZCgpKQogI2VuZGlmCiAg
ICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IGIyYTBhNzlmNGFiNWFhYzI4OWIxNjlm
OTJiYmMxYTgwNTg1MmNhMzIuLjk3MzBmY2YwZjA5MjFmZGVkOTBmODlmMTI5MGU3NzQ5MGI1Mzk3
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6
Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKHNpegogCiAgICAgICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0
aHJlYWRDb3VudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhyZWFk
Q291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoY3JlYXRlVGhy
ZWFkKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQb29sIFdvcmtlciAldSIsIGkpLnV0ZjgoKS5kYXRh
KCksIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVuZChUaHJlYWQ6OmNy
ZWF0ZShTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBpKS51dGY4KCkuZGF0
YSgpLCBbdGhpc10gewogICAgICAgICAgICAgICAgICAgICB0aHJlYWRCb2R5KCk7CiAgICAgICAg
ICAgICAgICAgfSkpOwogICAgICAgICAgICAgfQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgV29y
a1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoc2l6CiAgICAgICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICAgICAg
RGVxdWU8Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPio+IG1fcXVldWU7CiAKLSAgICAgICAg
VmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fd29ya2VyczsKKyAgICAgICAgVmVjdG9yPFJlZlB0
cjxUaHJlYWQ+PiBtX3dvcmtlcnM7CiAgICAgfTsKIAogICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8VGhyZWFkUG9vbD4gdGhyZWFkUG9vbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKaW5kZXggYTQ3ZjIxZTIw
ZDMxYmM4YmY3MzE4ZjQxYjk1N2FiMzY2YzE5MTUwMy4uNzYzNDVjMDY5MzE2NGY2OGNhNGIxYzY2
NDQ4NGEyNzNjYzZlOGJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgK
KysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBjbGFz
cyBXb3JrUXVldWUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25EaXNwYXRjaGVyIHsKIAogICAgIEhB
TkRMRSBtX3RpbWVyUXVldWU7CiAjZWxpZiBVU0UoR0xJQl9FVkVOVF9MT09QKSB8fCBVU0UoR0VO
RVJJQ19FVkVOVF9MT09QKQotICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVldWVUaHJlYWQ7
CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrUXVldWVUaHJlYWQ7CiAgICAgTG9jayBtX2luaXRp
YWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1
bkxvb3BDb25kaXRpb247CiAgICAgUnVuTG9vcCogbV9ydW5Mb29wOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKaW5kZXggOTM0YTM4Y2JiZTY0YmJmZmFlYjRk
MzdkZjFiOGQ5OTUyYjg4NTM0NC4uZGE4NzVkMWZhMDRjZWY1MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0
NDYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmlj
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBA
IC0zNSw3ICszNSw3IEBACiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0
IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRp
YWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKG5hbWUsIFt0aGlzXSB7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZShuYW1lLCBbdGhpc10gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAg
bV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAgaWYgKG1fcnVuTG9vcCkKICAgICAg
ICAgbV9ydW5Mb29wLT5zdG9wKCk7CiAgICAgaWYgKG1fd29ya1F1ZXVlVGhyZWFkKSB7Ci0gICAg
ICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVhZCk7Ci0gICAgICAgIG1fd29ya1F1ZXVl
VGhyZWFkID0gMDsKKyAgICAgICAgbV93b3JrUXVldWVUaHJlYWQtPmRldGFjaCgpOworICAgICAg
ICBtX3dvcmtRdWV1ZVRocmVhZCA9IG51bGxwdHI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKaW5kZXggZDFm
ZTI1MjBiNzQwMWI5YzAxNGJkMTlhYWJlNGRlMWMzN2MwY2RkNS4uYmQyYjdiYjU3Y2Q1NWU0ZTlk
OTU4MjBhODIyNDYyN2QwZGQ5NzMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvbGludXgv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4
L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcApAQCAtMTE3LDcgKzExNywxMCBAQCBNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIoaW50IGZkLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKAogICAgIH0sIHRoaXMsIG51bGxwdHIpOwogICAgIGdfc291cmNl
X2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgbnVsbHB0cik7CiAjZWxzZQotICAgIG1fdGhyZWFkSUQg
PSBjcmVhdGVUaHJlYWQoIldURjogTWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwgW3RoaXNdIHsgcmVh
ZEFuZE5vdGlmeSgpOyB9CisgICAgbV90aHJlYWRJRCA9IFRocmVhZDo6Y3JlYXRlKCJXVEY6IE1l
bW9yeVByZXNzdXJlSGFuZGxlciIsCisgICAgICAgIFt0aGlzXSB7CisgICAgICAgICAgICByZWFk
QW5kTm90aWZ5KCk7CisgICAgICAgIH0pOwogI2VuZGlmCiB9CiAKQEAgLTEyNyw3ICsxMzAsNyBA
QCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKCkK
ICNpZiBVU0UoR0xJQikKICAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsKICNl
bHNlCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkSUQtPmRldGFj
aCgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBkYWYwYjQzMmQ1ZDU0YjIwMmY2NzgxNmM1Y2JlYjkxMjAxM2Y5ZWY2Li44
ZmE0MWZjODhmNmFmOTdiY2VkYjQ4OWQyOGJhODY1OGY4M2FjZjU0IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTct
MDQtMDUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAg
W1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBh
bGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVh
ZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAgICAgIChydW5KYXZh
U2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAg
ICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChydW5UaHJlYWQpOgorICAgICAgICAodGVzdFRo
cmVhZElkZW50aWZpZXJNYXApOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Nv
bmRpdGlvbi5jcHA6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpydW5Mb2NrVGVzdCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHA6CisKIDIwMTctMDQtMDUgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDI0NzIpOiBE
YXRhIERldGVjdGlvbiBvdmVyd3JpdGVzIGV4aXN0aW5nIGxpbmtzIGluIGRldGVjdGVkIHJhbmdl
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcAppbmRleCBl
MmY5YmFkZTZjYTdjMjY5NDg1YTRjZGNiZTYwOTljMzZiYTAyMTk4Li5kYzIzYWUyMmE4NWUwYzk5
NTMxNjdmOTk4NTllYzlkZWU0M2YxN2ZiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZh
U2NyaXB0VGhyZWFkaW5nLmNwcApAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgTG9jayYgamF2YVNj
cmlwdFRocmVhZHNNdXRleCgpCiAgICAgcmV0dXJuIHN0YXRpY011dGV4OwogfQogCi10eXBlZGVm
IEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gVGhyZWFkU2V0OwordHlwZWRlZiBIYXNoU2V0PFJl
ZlB0cjxUaHJlYWQ+PiBUaHJlYWRTZXQ7CiBzdGF0aWMgVGhyZWFkU2V0JiBqYXZhU2NyaXB0VGhy
ZWFkcygpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFRocmVhZFNldCwg
c3RhdGljSmF2YVNjcmlwdFRocmVhZHMsICgpKTsKQEAgLTEwOCwxMCArMTA4LDkgQEAgdm9pZCBy
dW5KYXZhU2NyaXB0VGhyZWFkKHZvaWQqKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKLSAgICAgICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRldGFj
aFRocmVhZCh0aHJlYWQpOworICAgICAgICBUaHJlYWQ6OmN1cnJlbnQoKS5kZXRhY2goKTsKICAg
ICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5yZW1vdmUodGhyZWFkKTsKLSAgICAgICAgamF2YVNj
cmlwdFRocmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAw
KSk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6Y3JlYXRlKCZydW5K
YXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTI4
LDcgKzEyNyw3IEBAIHZvaWQgc3RhcnRKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytpKQotICAgICAgICBqYXZhU2NyaXB0
VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsK
KyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUoJnJ1bkphdmFT
Y3JpcHRUaHJlYWQsIDAsIDApKTsKIH0KIAogdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQpA
QCAtMTM4LDcgKzEzNyw3IEBAIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICAgICAg
amF2YVNjcmlwdFRocmVhZHNTaG91bGRUZXJtaW5hdGUgPSB0cnVlOwogICAgIH0KIAotICAgIFZl
Y3RvcjxUaHJlYWRJZGVudGlmaWVyLCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0aHJlYWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPiwgamF2YVNjcmlwdFRocmVhZHNDb3VudD4gdGhyZWFk
czsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0
ZXgoKSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihqYXZhU2NyaXB0VGhyZWFkcygpLCB0aHJlYWRz
KTsKQEAgLTE0Niw3ICsxNDUsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAg
fQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50OyAr
K2kpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbaV0pOworICAgICAg
ICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgewogICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGZiNGQyNmZjY2ViNzBjNGI1MzIwMTBk
YTg1ZmI5Y2U3ODU1YzEzODQuLjFiOTdhMTk5N2NlZjNkYzQzYjVkZTgxNDMzNzhkMzA2NzJlY2Yx
ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTEw
NDksNyArMTA0OSw3IEBAIHN0YXRpYyB2b2lkIHNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVz
Rm9yVGVzdGluZygpCiBzdGF0aWMgdm9pZCBydW5UaHJlYWQodm9pZCogYXJnKQogewogICAgIHN0
YXRpYyBUaHJlYWRJZGVudGlmaWVyIHByZXZpb3VzSWQgPSAwOwotICAgIFRocmVhZElkZW50aWZp
ZXIgY3VycmVudElkID0gY3VycmVudFRocmVhZCgpOworICAgIGN1cnJlbnRJZCA9IFRocmVhZDo6
Y3VycmVudCgpLmlkKCk7CiAgICAgLy8gVmVyaWZ5IDIgc3VjY2Vzc2l2ZSB0aHJlYWRzIGRvIG5v
dCBnZXQgdGhlIHNhbWUgSWQuCiAgICAgQVNTRVJUKHByZXZpb3VzSWQgIT0gY3VycmVudElkKTsK
ICAgICBwcmV2aW91c0lkID0gY3VycmVudElkOwpAQCAtMTA3Miw4ICsxMDcyLDggQEAgc3RhdGlj
IHZvaWQgdGVzdFRocmVhZElkZW50aWZpZXJNYXAoKQogICAgIHB0aHJlYWRfam9pbihwdGhyZWFk
LCAwKTsKIAogICAgIC8vIE5vdyBjcmVhdGUgYW5vdGhlciB0aHJlYWQgdXNpbmcgV1RGLiBPbiBP
U1gsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZSBwdGhyZWFkIGhhbmRsZQotICAgIC8vIGJ1dCBzaG91
bGQgZ2V0IGEgZGlmZmVyZW50IFRocmVhZElkZW50aWZpZXIuCi0gICAgY3JlYXRlVGhyZWFkKHJ1
blRocmVhZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0ZXN0Iik7CisgICAgLy8gYnV0IHNob3VsZCBn
ZXQgYSBkaWZmZXJlbnQgUmVmUHRyPFRocmVhZD4uCisgICAgVGhyZWFkOjpjcmVhdGUocnVuVGhy
ZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsKIH0KIAogc3RhdGljIHZvaWQgYWxsb2Nh
dGVHbG9iYWxDb250cm9sbGVycygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Db25kaXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29u
ZGl0aW9uLmNwcAppbmRleCA4NDg1MjczNTFmNjA2M2ZjMjYzNjg3ODA1NmQ5YzI0ZGJhYmU4M2Rj
Li43NzIxNjM2Yjc3ODA3ZjEzOTUxZWExMTJmYmQ0MTNlOGZhYzQ2MGJjIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlv
biBmdWxsQ29uZGl0aW9uOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IGNvbnN1bWVy
VGhyZWFkczsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gcHJvZHVjZXJUaHJlYWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gY29uc3VtZXJUaHJlYWRzOworICAgIFZlY3RvcjxS
ZWZQdHI8VGhyZWFkPj4gcHJvZHVjZXJUaHJlYWRzOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBy
ZWNlaXZlZDsKICAgICBMb2NrIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiQ29uc3VtZXIgdGhy
ZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewpA
QCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbXB0eUNvbmRpdGlvbiwgbG9ja2VyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91
bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVl
dWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlv
biBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBx
dWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHko
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICBz
bGVlcChkZWxheSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTsp
IHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpj
cmVhdGUoCiAgICAgICAgICAgICAiUHJvZHVjZXIgVGhyZWFkIiwKICAgICAgICAgICAgIFsmXSAo
KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2Vz
UGVyUHJvZHVjZXI7ICsraSkgewpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgcnVuVGVzdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ29uZGl0aW9uLCBsb2NrZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBD
aGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1h
eFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVvdXQpOwpAQCAtMTU1LDggKzE1NSw4IEBAIHZvaWQgcnVuVGVz
dCgKICAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAg
ICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1
Y2VyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRp
Zmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVj
ZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9ja2VyKGxvY2spOwpA
QCAtMTY0LDggKzE2NCw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICB9CiAgICAgZW1wdHlDb25kaXRp
b24ubm90aWZ5QWxsKCk7CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRp
ZmllciA6IGNvbnN1bWVyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlm
aWVyIDogY29uc3VtZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogCiAgICAgRVhQRUNUX0VRKG51bVByb2R1Y2VycyAqIG51bU1lc3NhZ2Vz
UGVyUHJvZHVjZXIsIHJlY2VpdmVkLnNpemUoKSk7CiAgICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJl
Z2luKCksIHJlY2VpdmVkLmVuZCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5j
cHAKaW5kZXggNTU3NjMwMmQ2OTBkZmNhMzU5OTI5MjhiMWM4NTNjNzYyMmU0NWZiOS4uNmE0ZTUz
OGY1NmY0NmQxNzdhM2Y2MmYxZGRlYjNhNGQwYWYyYWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTG9jay5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVu
c2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNp
Z25lZAogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFr
ZV91bmlxdWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8ZG91YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFk
R3JvdXBzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAq
IG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+
W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVh
ZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVh
ZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKICAg
ICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOwogCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7Ci0g
ICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAg
KyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAiTG9jayB0ZXN0IHRocmVhZCIsCiAgICAgICAgICAg
ICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCBudW1JdGVyYXRpb25zLCB3
b3JrUGVyQ3JpdGljYWxTZWN0aW9uXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBy
dW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQ
ZXJHcm91cCwgdW5zaWduZWQKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4
ID0gbnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykK
LSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOwor
ICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAg
IGRvdWJsZSBleHBlY3RlZCA9IDA7CiAgICAgZm9yICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRo
cmVhZHNQZXJHcm91cDsgaS0tOykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1BhcmtpbmdMb3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFy
a2luZ0xvdC5jcHAKaW5kZXggYzY3ZTFlMDgxNWE4M2FmYTkzMzNlMmFjOWEyYmQ3OGI2N2IxNjQ1
Yi4uNWFmOWM3YzgyN2IyMWUyMWQ4ZGY5MzA1MjYwZDZmZmVlNjhmYmQxYyAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKQEAgLTQ4LDE2ICs0OCwxNCBA
QCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bVRocmVhZHM7IGktLTspIHsKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKAot
ICAgICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICBUaHJlYWQ6OmNy
ZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAogICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05F
KDB1LCBjdXJyZW50VGhyZWFkKCkpOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrZXIobG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRo
cmVhZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhy
ZWFkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoVGhyZWFkOjpjdXJyZW50
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9ICZUaHJlYWQ6OmN1cnJl
bnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgfQpAQCAtNjUsMTYgKzYzLDE2IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgdm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2lu
Z2xlVW5wYXJrSW5kZXgpCiAgICAgewotICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4p
OworICAgICAgICBFWFBFQ1RfVFJVRShudWxscHRyID09IGxhc3RBd29rZW4pOwogICAgICAgICAK
ICAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7Ci0gICAgICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyLCA4PiBxdWV1ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxUaHJl
YWQ+LCA4PiBxdWV1ZTsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAg
IFsmXSAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRy
ZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qg
dm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhv
cmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIHF1ZXVl
LmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQo
JnRocmVhZElkZW50aWZpZXIpOwogCiAgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVz
cysrOwogICAgICAgICAgICAgfSk7CkBAIC04NywxMiArODUsMTIgQEAgc3RydWN0IFNpbmdsZUxh
dGNoVGVzdCB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tl
cihsb2NrKTsKICAgICAgICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJ
bmRleCArIDEpCiAgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAg
ICAgICAgIEVYUEVDVF9ORSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShudWxscHRyICE9IGxhc3RBd29rZW4pOwogICAgICAgICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5
KCkgJiYgcXVldWVbMF0gIT0gbGFzdEF3b2tlbikgewogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ildva2UgdXAgd3JvbmcgdGhyZWFkOiBxdWV1ZSA9ICIsIGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFz
dCBhd29rZW4gPSAiLCBsYXN0QXdva2VuLCAiXG4iKTsKICAgICAgICAgICAgICAgICBFWFBFQ1Rf
RVEocXVldWVbMF0sIGxhc3RBd29rZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFz
dEF3b2tlbiA9IDA7CisgICAgICAgICAgICBsYXN0QXdva2VuID0gbnVsbHB0cjsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTAwLDcgKzk4LDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAg
UGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwg
Y29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2
b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9y
ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIApAQCAtMTE0
LDcgKzExMiw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgICAgIG51bVdhaXRp
bmdPbkFkZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAg
ICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAg
ICAgICBbJl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAg
ICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKQEAgLTEyOSw4ICsxMjcsOCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0
IHsKICAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwogICAgICAgICB9CiAK
LSAgICAgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRz
KQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7
CisgICAgICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMp
CisgICAgICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
IH0KIAogICAgIC8vIFNlbWFwaG9yZSBvcGVyYXRpb25zLgpAQCAtMTc5LDkgKzE3Nyw5IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgIEF0b21pYzxpbnQ+IHNlbWFwaG9yZTsKICAgICBz
dGQ6Om11dGV4IGxvY2s7CiAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uOwot
ICAgIEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gYXdha2U7Ci0gICAgVmVjdG9yPFRocmVhZElk
ZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBsYXN0QXdva2VuIHsgMCB9
OworICAgIEhhc2hTZXQ8UmVmPFRocmVhZD4+IGF3YWtlOworICAgIFZlY3RvcjxSZWZQdHI8VGhy
ZWFkPj4gdGhyZWFkczsKKyAgICBSZWZQdHI8VGhyZWFkPiBsYXN0QXdva2VuIHsgbnVsbHB0ciB9
OwogfTsKIAogdm9pZCBydW5QYXJraW5nVGVzdCh1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25l
ZCBkZWxheSwgdW5zaWduZWQgbnVtVGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306488</attachid>
            <date>2017-04-07 05:19:26 -0700</date>
            <delta_ts>2017-04-07 06:11:12 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407211924.patch</filename>
            <type>text/plain</type>
            <size>230981</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5kYWRjMzZjMGJmMTQ1NjQ5
ZTY5YjkwMjdkOWFjNTAyMWU1MjdkMGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6b3duZXJUaHJl
YWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAgIChKU0M6OmZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2Vu
ZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6ZmlyZVRyYXApOgorICAgICAgICAq
IHRvb2xzL0hlYXBWZXJpZmllci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cHJp
bnRWZXJpZmljYXRpb25IZWFkZXIpOgorCiAyMDE3LTA0LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVcGRhdGUgdGhlIHByaW9y
aXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVjMGJiNTBkODUwY2Nk
NWZkNGVjNTBkYzk0NDg4MzRjZmM2Y2NjM2QuLmQxMjI5N2IyZTZiZWFmMTlkODRiOTIzNzc1NWM5
ZjY0M2NiYjM0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcwIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6
dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBU
aHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJl
YWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNw
cDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwOgorICAgICAgICAq
IGJlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHA6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHA6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6Cisg
ICAgICAgIChXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6aXNNYWlu
VGhyZWFkKToKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFk
KToKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVz
c3VyZUhhbmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6Cisg
ICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tG
b3IpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAgIChXVEY6
OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUpOgorICAg
ICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6cGFy
a0NvbmRpdGlvbmFsbHlJbXBsKToKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6dW5wYXJrT25l
KToKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6dW5wYXJrT25lSW1wbCk6CisgICAgICAgIChX
VEY6OlBhcmtpbmdMb3Q6OnVucGFya0NvdW50KToKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6
Zm9yRWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChXVEY6
OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9SZWN1cnNpdmVMb2NrQWRhcHRl
ci5oOgorICAgICAgICAoV1RGOjpSZWN1cnNpdmVMb2NrQWRhcHRlcjo6bG9jayk6CisgICAgICAg
IChXVEY6OlJlY3Vyc2l2ZUxvY2tBZGFwdGVyOjp0cnlMb2NrKToKKyAgICAgICAgKiB3dGYvUmVm
UHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0cjo6UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6CisgICAgICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFk
R3JvdXAuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRm
b3JtVGhyZWFkLmguCisgICAgICAgICogd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAu
CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChX
VEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRI
b2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUp
OgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYv
VGhyZWFkSG9sZGVyUHRocmVhZHMuaDogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRo
cmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAg
ICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3Rm
L1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwLgorICAgICAgICAoV1RGOjpUaHJlYWRI
b2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAg
ICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdURjo6VGhyZWFk
SG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlcldpbi5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKToKKyAgICAgICAgKFdURjo6
dGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OnNldEdsb2JhbE1heFFPU0NsYXNzKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkdW1wKToK
KyAgICAgICAgKFdURjo6bm9ybWFsaXplVGhyZWFkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmNyZWF0ZVRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbnRlcmFjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbml0aWF0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRHbG9iYWxN
YXhRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmFkanVzdGVkUU9TQ2xhc3MpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFk
OjppZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6YWRkT25FeGl0Q2FsbGJhY2spOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmpvaW5hYmxlU3RhdGUpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OmRpZEJlY29tZURldGFjaGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpk
aWRKb2luKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpoYXNFeGl0ZWQpOgorICAgICAgICAoV1RG
OjpjdXJyZW50VGhyZWFkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAg
ICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVD
dXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVh
ZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhy
ZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6flRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkRXhpdCk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6ZXN0YWJsaXNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpj
aGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24p
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRJRCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFs
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6
OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6UHRocmVhZFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpqb2luYWJsZVN0YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpwdGhyZWFkSGFuZGxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpkaWRCZWNvbWVEZXRhY2hlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkRXhpdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlB0aHJlYWRTdGF0ZTo6aGFzRXhpdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhy
ZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjppZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6ZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFk
eUhlbGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkRGlkRXhp
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpzaWduYWxUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRp
bmdXaW4uY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAg
KFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRl
SW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OmN1cnJlbnRJRCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6VGhyZWFkKToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjp+VGhyZWFkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRF
eGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29t
cGxldGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6Cisg
ICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhy
ZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50
aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
ZGV0YWNoVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL1dlYWtQdHIuaDoKKyAgICAgICAgKFdURjo6V2Vha1JlZmVy
ZW5jZTo6Z2V0KToKKyAgICAgICAgKFdURjo6V2Vha1JlZmVyZW5jZTo6Y2xlYXIpOgorICAgICAg
ICAoV1RGOjpXZWFrUmVmZXJlbmNlOjpXZWFrUmVmZXJlbmNlKToKKyAgICAgICAgKiB3dGYvV29y
a1F1ZXVlLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkpOgor
ICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiB3dGYvY29jb2EvV29ya1F1ZXVl
Q29jb2EuY3BwOgorICAgICAgICAoV1RGOjpkaXNwYXRjaFFPU0NsYXNzKToKKyAgICAgICAgKiB3
dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRl
KToKKyAgICAgICAgKiB3dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwOgor
ICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50
RkRQb2xsZXIpOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQ
b2xsZXI6On5FdmVudEZEUG9sbGVyKToKKyAgICAgICAgKiB3dGYvbWFjL01haW5UaHJlYWRNYWMu
bW06CisgICAgICAgIChXVEY6OmluaXRpYWxpemVBcHBsaWNhdGlvblVJVGhyZWFkSWRlbnRpZmll
cik6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVXZWJUaHJlYWRJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToKKwogMjAxNy0wNC0w
NyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDg3M2QzNzkzNDg0ZGRkNjA4YmNjNTlhMDBhNWJlZjU5MmNhYzBiNmQu
LjlkZjZmYTFmMTc2YTUzODZmNWY4NGNjNGQyMDM0OWRlNDYxZjdmZmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw3OSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2Ug
UmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9u
IHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpJREJTZXJ2ZXIpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmg6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
OjpzdGFydFJlbmRlcmluZyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6
Z2V0VGhyZWFkSUQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVU
aHJlYWRGb3JEZWJ1Z2dpbmcpOgorICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxPbkZpbGVUaHJlYWQpOgorICAgICAgICAqIGxvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6
Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmg6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVz
YWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OmNy
ZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQu
aDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFz
ZUxvYWRlcjo6SFJURkRhdGFiYXNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRh
YmFzZUxvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZE
YXRhYmFzZUxvYWRlcjo6d2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252
b2x2ZXI6OlJldmVyYkNvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2
ZXI6On5SZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVS
ZWFkZXJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlv
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VH
U3RyZWFtZXIuY3BwOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3Ry
ZWFtaW5nQ2xpZW50Ojp+UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmxvYWRlclJ1bkxvb3ApOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3Rh
cnRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2Vy
OjpzdG9wVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6c3RhcnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6c3RvcFRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJl
YWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6dGhyZWFkSUQpOgorCiAyMDE3LTA0LTA3ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBVcGRhdGUgdGhlIHByaW9yaXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3VyY2VzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDJiMzliOThjNzQ5Njk2NjRkMjcwZGFjNTgwOTc3ZjEyOTVkMWZiZmUuLjc4NTM4
MTQ4NjQzYjU2ODYyMzZiMTBhZWQyNzg2NjlhZmVhZWFkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxU
aHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRp
Y3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVRocmVhZDo6flN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVh
ZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiBT
dG9yYWdlL1N0b3JhZ2VUaHJlYWQuaDoKKwogMjAxNy0wNC0wNiAgSm9zZXBoIFBlY29yYXJvICA8
cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVy
ZSBFeHRyYSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVuIHRoZXJlIGlzIGEgV2ViIEluc3BlY3Rv
ciBGcm9udGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGE1MmNkN2FjZGQxMjI2M2U2NWFmMTk2YmEwMDMzMDIx
MzhiOTFlNjYuLjUxNDQ1ZTdiYzUzNjlkYjEzN2IzMDkyZDg4OWI5MGYxYTJiOWM0YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNz
IGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxl
bWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlP
Q2hhbm5lbFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5l
bDo6cmVhZFN5bmNJblRocmVhZCk6CisgICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVBy
ZXNzdXJlTW9uaXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRv
cjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vz
cyk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIg
bWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcAppbmRleCBlNzgwODZjM2E5NjEyYTJmMGI0ZDdh
YWYxYWRjN2JhMWExMDFjNTQ3Li40M2FlZjA3Nzk3MGNmZWRiMmNhYzA0NjNmY2Q5ZWNjYTI5ZDE1
MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVB
bmRTd2FwVGVzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21w
YXJlQW5kU3dhcFRlc3QuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRT
d2FwKCkKIHsKICAgICBCaXRtYXAgYml0bWFwOwogICAgIGNvbnN0IGludCBudW1UaHJlYWRzID0g
NTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEc1tudW1UaHJlYWRzXTsKKyAgICBSZWZQ
dHI8VGhyZWFkPiB0aHJlYWRzW251bVRocmVhZHNdOwogICAgIERhdGEgZGF0YVtudW1UaHJlYWRz
XTsKIAogICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwpAQCAtMTA3LDEyICsxMDcsMTIg
QEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAoKQogICAgICAgICBkYXRhW2ldLmlkID0gaTsKICAg
ICAgICAgZGF0YVtpXS5udW1UaHJlYWRzID0gbnVtVGhyZWFkczsKICAgICAgICAgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IHRocmVhZEZ1bmMgPSBzdGQ6OmJpbmQoc2V0Qml0VGhyZWFkRnVuYywgJmRh
dGFbaV0pOwotICAgICAgICB0aHJlYWRJRHNbaV0gPSBjcmVhdGVUaHJlYWQoInNldEJpdFRocmVh
ZEZ1bmMiLCB0aHJlYWRGdW5jKTsKKyAgICAgICAgdGhyZWFkc1tpXSA9IFRocmVhZDo6Y3JlYXRl
KCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhyZWFkRnVuYyk7CiAgICAgfQogCiAgICAgcHJpbnRmKCJX
YWl0aW5nIGZvciAlZCB0aHJlYWRzIHRvIGpvaW5cbiIsIG51bVRocmVhZHMpOwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsgaSsrKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbih0aHJlYWRJRHNbaV0pOworICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxl
dGlvbigpOwogCiAgICAgcHJpbnRmKCJQQVNTOiBDb21wYXJlQW5kU3dhcCB0ZXN0IGNvbXBsZXRl
ZCB3aXRob3V0IGEgaGFuZ1xuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDcyMTdiNWM4NTUxYTU4ZTZjZmQwMGM1YmQxZjJkYWExMDI1ZjQwOGUuLjdkMjAzNmJlODYxNmZm
NTM4NjdlNWUwNzk1NjVmZGE1YTc4ODUxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0yNDY3LDcgKzI0NjcsNiBAQAogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJ
bnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRDk0RjJFMTcxRTNFMjMwMEJF
NzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovOyB9
OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUZFRTQzRkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFNDNGQ0QxRTY2
NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENv
bXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZG
QzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rp
b24gKi8KQEAgLTUwOTMsNyArNTA5Miw2IEBACiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYg
LyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcDsgcGF0aCA9IEFQSS90
ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkVEQTUwRDUxQjk3RjREOTAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxv
d1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdTdGFja092
ZXJmbG93VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQx
IC8qIFBsYXRmb3JtVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFB
RTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90
ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0g
QVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjg1NCw3ICs2ODUyLDYgQEAKIAkJCQlGNjkyQTg3ODAyNTU1
OTdEMDFGRjYwRjcgLyogT3BlcmF0aW9ucy5oICovLAogCQkJCTBGRTIyOEVBMTQzNkFCMjMwMDE5
NkM0OCAvKiBPcHRpb25zLmNwcCAqLywKIAkJCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyog
T3B0aW9ucy5oICovLAotCQkJCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRo
cmVhZC5oICovLAogCQkJCTg2ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5o
ICovLAogCQkJCTE0NzM0MURGMURDMkNFOTYwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5j
cHAgKi8sCiAJCQkJMTQ3MzQxRDMxREMwMkU2RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxl
LmggKi8sCkBAIC05MzM0LDcgKzkzMzEsNiBAQAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMx
OCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFDMUE2RTUwMUUw
MDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFFMUE2RTUwMUUw
MDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVFNDNG
Q0UxRTY2NDE3MTAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9s
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvdGVzdGFpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwCmluZGV4IDg3YjM1M2FhMzc5MjVjYTFlMmZhODQxMTk5NzZhZGYwYjFlMDdiYWEu
LmM5MTc3MDc5NTg4Zjg2ZDQzMWEyOGJjMDc0ZDRmZTJlM2YxM2RjNDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcApAQCAtMTkxMywxMCArMTkxMywxMCBAQCB2b2lk
IHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8
VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRo
cmVhZHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQ
cm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAg
ICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAg
ICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTE5MzMsOCArMTkzMyw4IEBAIHZvaWQgcnVu
KGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgfQogCi0gICAg
Zm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWQg
OiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgY3Jh
c2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAw
MTk5NmFmNzFhYjRmMDllYjQ5YjcwMTFjMTdkYmM5M2M0MGNlODdhLi45MDQ2NTY0ODg3YjZiM2E0
YWZhYzM1OWRjMTBjNTAzODRkNzRkZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cApAQCAtMTY4NTAsMTAgKzE2ODUwLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikK
IAogICAgIExvY2sgbG9jazsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRz
OworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsK
ICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAg
ICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIs
CiAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykg
ewpAQCAtMTY4NzAsOCArMTY4NzAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAg
ICAgICAgICAgICAgICAgfSkpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0
aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQp
OworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhy
ZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKaW5kZXgg
YTRlMjFmOWZhM2NkNDcyMWVhMjY3NWUwNmU0ZDUzMGM1YmE5NWIzNS4uZTliMWY1YzJmMGJjMjdi
MDI5MzEwYzU1ODE1MjBiMWI1NTIyNTk3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbml0aWFs
aXplU3VwZXJTYW1wbGVyKCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVN1cGVyU2FtcGxlcigpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjcmVhdGVUaHJlYWQoCisgICAgVGhyZWFkOjpjcmVhdGUo
CiAgICAgICAgICJKU0MgU3VwZXIgU2FtcGxlciIsCiAgICAgICAgIFtdICgpIHsKICAgICAgICAg
ICAgIGNvbnN0IGludCBzbGVlcFF1YW50dW0gPSAxMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5jcHAKaW5kZXggY2VmOTkwY2I0ODMzYTZiYjk0NzFiZDA4YTUwNGU1NWZi
NDdkZjQ1OC4uYWQwZWNjNjlhNzdkMTcyY2Y0YmMxZWZhYzkzZGY5MzAyN2MwMDllNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBA
QCBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewog
ICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBUaHJlYWQgc3RhcnRlZFxuIik7CiAg
ICAgICAgIAogICAgICAgICBpZiAobV9yZWxhdGl2ZVByaW9yaXR5KQotICAgICAgICAgICAgY2hh
bmdlVGhyZWFkUHJpb3JpdHkoY3VycmVudFRocmVhZCgpLCBtX3JlbGF0aXZlUHJpb3JpdHkpOwor
ICAgICAgICAgICAgVGhyZWFkOjpjdXJyZW50KCkuY2hhbmdlUHJpb3JpdHkobV9yZWxhdGl2ZVBy
aW9yaXR5KTsKICAgICAgICAgCiAgICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29tcGlsYXRpb25TY29wZT4oKTsKICAgICAgICAgbV9sb25nTGl2ZWRTdGF0ZSA9
IHN0ZDo6bWFrZV91bmlxdWU8TG9uZ0xpdmVkU3RhdGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKaW5kZXggNzg4YTZjMzYy
MzY5YzU4ZGFkMjlhNjBhMzg3MTA0NGU0NjRlZDMwNS4uMmI4MjRlY2ZkZTU4OTNiMmM2YjcwNmY0
NzAyZWNkMjI5NWQyMzU1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fz
c2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBBc3luY2hy
b25vdXNEaXNhc3NlbWJsZXIgewogcHVibGljOgogICAgIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxl
cigpCiAgICAgewotICAgICAgICBjcmVhdGVUaHJlYWQoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJs
ZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJBc3luY2hy
b25vdXMgRGlzYXNzZW1ibGVyIiwgWyZdICgpIHsgcnVuKCk7IH0pOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGVucXVldWUoc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggM2FlZTMwMTA0ZjUyOTFhMjg3NjRhNWNk
ZWU1YWE4ZjBjYTcyYWQzMS4uNzIyM2IyMGM5ZGZiYTEwNDMwOThhNzg1NzRiYTI4YTY5NGMwNDVi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM0OSw3ICszNDksNyBAQCB2
b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKICAgICAgICAgICAgIG1fc2hvdWxkU3Rv
cENvbGxlY3RpbmdDb250aW51b3VzbHkgPSB0cnVlOwogICAgICAgICAgICAgbV9jb2xsZWN0Q29u
dGludW91c2x5Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICB9Ci0gICAgICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCk7CisgICAgICAg
IG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQCB2
b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCiAgICAgbV9pc1NhZmVUb0NvbGxlY3Qg
PSB0cnVlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsK
LSAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAg
ICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgPSBXVEY6OlRocmVhZDo6Y3JlYXRlKAog
ICAgICAgICAgICAgIkpTQyBERUJVRyBDb250aW51b3VzIEdDIiwKICAgICAgICAgICAgIFt0aGlz
XSAoKSB7CiAgICAgICAgICAgICAgICAgTW9ub3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDE2
YmVlZjlhODlkMDZkZjI3OTcxN2U3NzBiMTY0YTQ3MTQuLmQ2NzgzN2FmZWYxMzAxZjk2NzJmNjBl
YTI5YzQzZmM4NTk3ZGViOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTQ5LDYg
KzQ5LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC02NjYsNyArNjY3LDcg
QEAgY2xhc3MgSGVhcCB7CiAgICAgTG9jayBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrOwogICAg
IENvbmRpdGlvbiBtX2NvbGxlY3RDb250aW51b3VzbHlDb25kaXRpb247CiAgICAgYm9vbCBtX3No
b3VsZFN0b3BDb2xsZWN0aW5nQ29udGludW91c2x5IHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCB7IDAgfTsKKyAgICBSZWZQdHI8V1RG
OjpUaHJlYWQ+IG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCB7IG51bGxwdHIgfTsKICAgICAK
ICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEdDU3RhcnRUaW1lOwogICAgIE1vbm90b25pY1RpbWUg
bV9sYXN0R0NFbmRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hp
bmVTdGFja01hcmtlci5jcHAKaW5kZXggYjg1Yjc2NDhlMmY1ZDE5ZmEyMmQ3NjNmN2JjZGVmOGY0
NGM0MmM4OC4uNGZmZGY5Y2M0ZTNjMzYwNmIxZGE5YTk0MDc3ZmM3NGM4ODZlYzE4OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBA
IC02NCw2MyArNjQsMTMgQEAKICNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CiAjZW5kaWYKIAotI2lm
IFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8
c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNo
aW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFs
TG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQot
c3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5m
b190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0
b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRU
aHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRs
ZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1
c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91
bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVz
LCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdz
dXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMg
cHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQg
c3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhh
bmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29u
bGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdz
OwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJD
b250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxs
ZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0
IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxs
IHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91
cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0
YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFy
cmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0
bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2
OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3Qo
JnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hp
bmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxl
ciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNv
IGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhp
cyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5v
dCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0Owot
ICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tl
ZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxv
Y2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0
IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9T
KFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0KICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRo
cmVhZDsKK3VzaW5nIEpTVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFz
cyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVh
ZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTQ0
LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNp
ZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBM
b2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgp
OwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAg
ICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdp
c3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0Owog
ICAgICAgICBkZWxldGUgdDsKICAgICAgICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMg
TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVjaWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwg
Q2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRocmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEu
Z2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0
aHJlYWREYXRhKQotICAgIDogZGF0YSh0aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWRE
YXRhKTsKLX0KLQotVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJy
ZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQot
Ci1ib29sIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1U
aHJlYWQmIG90aGVyKSBjb25zdAotewotI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAg
ICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3Ro
ZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlz
IHBsYXRmb3JtCi0jZW5kaWYKLX0KLQogdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRo
cmVhZCgpCiB7CiAgICAgaWYgKHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JN
YWNoaW5lVGhyZWFkcykpIHsKQEAgLTIzOSw3ICsxNjEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRz
OjphZGRDdXJyZW50VGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVh
ZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJl
YWQqIHRocmVhZCA9IG5ldyBKU1RocmVhZCh0aGlzKTsKICAgICB0aHJlYWRTcGVjaWZpY1NldCht
X3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRocmVhZHMsIHRoaXMpOwogCiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7CkBAIC0yNDgsMTIgKzE3MCwxMiBAQCB2
b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAgICBtX3JlZ2lzdGVyZWRU
aHJlYWRzID0gdGhyZWFkOwogfQogCi1UaHJlYWQqIE1hY2hpbmVUaHJlYWRzOjptYWNoaW5lVGhy
ZWFkRm9yQ3VycmVudFRocmVhZCgpCitKU1RocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVU
aHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3Rl
cmVkVGhyZWFkc011dGV4KTsKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1
cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lz
dGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBp
ZiAoKnRocmVhZCA9PSBwbGF0Zm9ybVRocmVhZCkKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0g
Y3VycmVudFRocmVhZCgpOworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0
aHJlYWQtPnRocmVhZElEKCkgPT0gaWQpCiAgICAgICAgICAgICByZXR1cm4gdGhyZWFkOwogICAg
IH0KIApAQCAtMjgzLDIyICsyMDUsMjEgQEAgdm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBNYWNo
aW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKHZvaWQqIHApCiAgICAgICAgICAgICByZXR1cm47CiAj
ZW5kaWYKIAotICAgICAgICBtYWNoaW5lVGhyZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJy
ZW50UGxhdGZvcm1UaHJlYWQoKSk7CisgICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJl
YWRJZkZvdW5kKGN1cnJlbnRUaHJlYWQoKSk7CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBQbGF0Zm9ybVRocmVhZD4KLXZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91
bmQoUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpy
ZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIgaWQpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgVGhyZWFkKiB0ID0gbV9yZWdp
c3RlcmVkVGhyZWFkczsKLSAgICBpZiAoKnQgPT0gcGxhdGZvcm1UaHJlYWQpIHsKKyAgICBKU1Ro
cmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0g
aWQpIHsKICAgICAgICAgbV9yZWdpc3RlcmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMt
Pm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCog
bGFzdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7CisgICAgICAgIEpTVGhyZWFkKiBsYXN0ID0gbV9y
ZWdpc3RlcmVkVGhyZWFkczsKICAgICAgICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+
bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsKLSAgICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRo
cmVhZCkgeworICAgICAgICAgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAg
ICAgICAgICBsYXN0LT5uZXh0ID0gdC0+bmV4dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KQEAgLTMyMCwxODIgKzI0MSwyMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpn
YXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9v
dAogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tUb3As
IGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja09yaWdpbiwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxv
Y2tzKTsKIH0KIAotTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEoKQorTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkOjpKU1RocmVhZChNYWNoaW5lVGhyZWFkcyopCisgICAgOiBu
ZXh0KG51bGxwdHIpCisgICAgLCBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewog
ICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0
Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0
YWNrQm91bmRzLm9yaWdpbigpOwotICAgIHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0K
LSNpZiBPUyhXSU5ET1dTKQotICAgIEFTU0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50
VGhyZWFkSWQoKSk7Ci0gICAgYm9vbCBpc1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVI
YW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50
UHJvY2VzcygpLAotICAgICAgICAgICAgJnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwg
RFVQTElDQVRFX1NBTUVfQUNDRVNTKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwp
OwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3Vy
cmVudFRocmVhZC5zdG9yZSh0aGlzKTsKLQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJv
Y2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5p
dGlhbGl6ZVNpZ25hbEhhbmRsZXI7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25h
bEhhbmRsZXIsIFtdIHsKLSAgICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAg
ICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKLSAgICAgICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFk
U3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRT
aWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0Ff
UkVTVEFSVCB8IFNBX1NJR0lORk87Ci0gICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lLCAmYWN0aW9uLCAwKTsKLSAgICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAg
c2lnZW1wdHlzZXQoJm1hc2spOwotICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7Ci0gICAgcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0K
LSAgICBzZW1faW5pdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFi
bGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBo
b3JlLiAqLyAwKTsKLSNlbmRpZgorICAgIG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2lu
KCk7CisgICAgbV9zdGFja0VuZCA9IHN0YWNrQm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6flRocmVhZERhdGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6Z2V0UmVnaXN0ZXJzKEpTVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsK
LSNpZiBPUyhXSU5ET1dTKQotICAgIENsb3NlSGFuZGxlKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsK
LSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICBzZW1fZGVzdHJveSgmc2Vt
YXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0jZW5kaWYKKyAgICBXVEY6OlBsYXRmb3JtUmVnaXN0
ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7CisgICAgcmV0dXJuIG1fdGhyZWFkLT5nZXRSZWdp
c3RlcnMocmVncyk7CiB9CiAKLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnN1c3Bl
bmQoKQotewotI2lmIE9TKERBUldJTikKLSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVh
ZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFkKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IEtFUk5fU1VD
Q0VTUzsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgYm9vbCB0aHJlYWRJc1N1c3BlbmRlZCA9IChT
dXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKSAhPSAoRFdPUkQpLTEpOwotICAgIEFT
U0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7Ci0gICAgcmV0dXJuIHRocmVhZElzU3VzcGVuZGVkOwot
I2VsaWYgVVNFKFBUSFJFQURTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY3VycmVudFBsYXRm
b3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1UaHJlYWQsICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9y
dCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7Ci0gICAgewotICAgICAgICAv
LyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRl
ZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sg
aW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCi0gICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xs
b3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KLSAgICAgICAgLy8gQW5kIEEg
YXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCi0gICAgICAg
IC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJl
ZCB0byBBIGFuZCBCLgotICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNw
ZW5kZWQuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAg
ICAgaWYgKCFzdXNwZW5kQ291bnQpIHsKLSAgICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxk
IGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBh
cmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBCdXQgaXQgY2Fu
IGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgotICAgICAgICAgICAgLy8g
SW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFn
ZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAgICAgIGlmIChwdGhy
ZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNI
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHNlbV93YWl0KCZz
ZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmll
ciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFs
bCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgotICAgICAgICAgICAgc3VzcGVuZGVkLnN0
b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAg
ICsrc3VzcGVuZENvdW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0jZXJyb3Ig
TmVlZCBhIHdheSB0byBzdXNwZW5kIHRocmVhZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19
Ci0KLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3VtZSgpCi17Ci0jaWYgT1Mo
REFSV0lOKQotICAgIHRocmVhZF9yZXN1bWUocGxhdGZvcm1UaHJlYWQpOwotI2VsaWYgT1MoV0lO
RE9XUykKLSAgICBSZXN1bWVUaHJlYWQocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNF
KFBUSFJFQURTKQotICAgIHsKLSAgICAgICAgLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciBy
ZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAg
ICAgICBMb2NrSG9sZGVyIGxvY2soZ2xvYmFsU2lnbmFsTG9jayk7Ci0gICAgICAgIGlmIChzdXNw
ZW5kQ291bnQgPT0gMSkgewotICAgICAgICAgICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVu
ZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBhY3R1YWxseSBpc3N1ZWQsCi0gICAgICAg
ICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIgaXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdh
aW4uCi0gICAgICAgICAgICAvLyBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNo
IHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAgICAgICAg
ICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2lnbmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2ln
bmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFy
Z3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNwZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIu
IElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJlIHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCi0gICAg
ICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxvY2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFi
bGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVt
ZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNwZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1
aXNoIGl0LgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotICAgICAg
ICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBh
bHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCi0g
ICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVh
c2UpOwotICAgICAgICB9Ci0gICAgICAgIC0tc3VzcGVuZENvdW50OwotICAgIH0KLSNlbHNlCi0j
ZXJyb3IgTmVlZCBhIHdheSB0byByZXN1bWUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5k
aWYKLX0KLQotc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpnZXRSZWdpc3RlcnMo
VGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVn
aXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIE9T
KERBUldJTikKLSNpZiBDUFUoWDg2KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBzaXplb2Yo
cmVncykvc2l6ZW9mKGludCk7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkz
ODZfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1c2VyX2Nv
dW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3Jf
dCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUoUFBDKSAKLSAgICB1bnNp
Z25lZCB1c2VyX2NvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3Rh
dGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShQUEM2NCkK
LSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAg
IHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxp
ZiBDUFUoQVJNKQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NP
VU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRF
OwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFE
X1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9U
SFJFQURfU1RBVEU2NDsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRp
ZgotCi0gICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKHBsYXRmb3Jt
VGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3RhdGVfdCkmcmVncywgJnVzZXJfY291bnQpOwotICAg
IGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIFdURlJlcG9ydEZhdGFsRXJy
b3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJl
Y2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHBy
b2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90
IHN1cHBvcnRlZC4iLCByZXN1bHQpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICByZXR1
cm4gdXNlcl9jb3VudCAqIHNpemVvZih1aW50cHRyX3QpOwotLy8gZW5kIE9TKERBUldJTikKLQot
I2VsaWYgT1MoV0lORE9XUykKLSAgICByZWdzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdF
UiB8IENPTlRFWFRfQ09OVFJPTDsKLSAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFk
SGFuZGxlLCAmcmVncyk7Ci0gICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKLSNlbGlmICgoT1Mo
RlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICByZWdz
ID0gc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7Ci0gICAgcmV0dXJuIHNpemVvZihSZWdpc3RlcnM6
OlBsYXRmb3JtUmVnaXN0ZXJzKTsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX2F0
dHJfaW5pdCgmcmVncy5hdHRyaWJ1dGUpOwotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhO
RVRCU0QpCi0jaWYgIU9TKE9QRU5CU0QpCi0gICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1
bmRvcmZAa2RlLm9yZwotICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAocGxhdGZvcm1UaHJlYWQsICZy
ZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rp
b24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVu
dCBucCBhbHRlcm5hdGl2ZXMKLSAgICBwdGhyZWFkX2dldGF0dHJfbnAocGxhdGZvcm1UaHJlYWQs
ICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0jZXJyb3Ig
TmVlZCBhIHdheSB0byBnZXQgdGhyZWFkIHJlZ2lzdGVycyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5k
aWYKLX0KLQotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3Rh
Y2tQb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0
ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9X
UykgfHwgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQp
KQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwpAQCAtNTE5
LDcgKzI4MCw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6
OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
Ci12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50
ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmZy
YW1lUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAo
T1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29u
dGV4dDo6ZnJhbWVQb2ludGVyKHJlZ3MpOwpAQCAtNTI4LDcgKzI4OSw3IEBAIHZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiAj
ZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJ
TikgfHwgT1MoV0lORE9XUykgfHwgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkK
ICAgICByZXR1cm4gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdzKTsKQEAg
LTUzNyw3ICsyOTgsNyBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAogI2VuZGlmCiB9CiAKLXZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAordm9pZCog
TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewog
ICAgIC8vIExMSW50IHVzZXMgcmVnVDQgYXMgUEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5E
T1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICsz
MDksNiBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGlu
dFBDKCkgY29uc3QKIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZv
aWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6
UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykg
JiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmlu
ZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3ko
JnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlm
Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGlu
dCByZWRab25lQWRqdXN0bWVudCA9IDA7CkBAIC01NzMsMTcgKzMyNCwxNyBAQCBzdGF0aWMgaW5s
aW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1l
bnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFk
RGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXpl
X3Q+IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9w
KQogewotICAgIGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNr
QmFzZSk7CisgICAgY2hhciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9z
dGFja0Jhc2UpOwogICAgIGNoYXIqIGVuZCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihzdGFja1RvcCkpKTsKICAgICBBU1NFUlQoYmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVu
ZFdpdGhSZWRab25lID0gZW5kICsgb3NSZWRab25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSkgPT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGVuZFdpdGhSZWRab25lKSk7CiAKLSAgICBpZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFja0VuZCkK
LSAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3Rh
Y2tFbmQpOworICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IG1fc3RhY2tFbmQpCisgICAgICAgIGVu
ZFdpdGhSZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tFbmQpOwog
CiAgICAgc3RkOjpzd2FwKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5ICszNjcs
OSBAQCBzdGF0aWMgdm9pZCBjb3B5TWVtb3J5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBz
aXplX3Qgc2l6ZSkKIC8vIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5Q29weU90
aGVyVGhyZWFkU3RhY2sgaXMgb25seSBjYWxsZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBzaXplKQog
Ly8gb3BlcmF0aW9uLiBBcyB0aGUgaGVhcCBpcyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIgdGhhbiB0
aGUgc3RhY2sgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBtaW5pbWFsLgogLy8gU2VlOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hpbmVUaHJl
YWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVy
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnRy
eUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6
ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUpCiB7Ci0gICAgVGhyZWFkOjpSZWdpc3RlcnMgcmVn
aXN0ZXJzOworICAgIEpTVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCBy
ZWdpc3RlcnNTaXplID0gdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6
OnBhaXI8dm9pZCosIHNpemVfdD4gc3RhY2sgPSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3Rl
cnMuc3RhY2tQb2ludGVyKCkpOwogCkBAIC02MzEsOCArMzgyLDYgQEAgdm9pZCBNYWNoaW5lVGhy
ZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZl
ciwgc2l6ZV8KICAgICBpZiAoY2FuQ29weSkKICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2Fz
dDxjaGFyKj4oYnVmZmVyKSArICpzaXplLCBzdGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAg
ICAqc2l6ZSArPSBzdGFjay5zZWNvbmQ7Ci0KLSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVn
aXN0ZXJzKTsKIH0KIAogYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3Rh
Y2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHks
IHNpemVfdCogc2l6ZSkKQEAgLTY0NCwzNiArMzkzLDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6
OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1
ZmZlCiAKICAgICAqc2l6ZSA9IDA7CiAKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVh
ZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBj
dXJyZW50VGhyZWFkKCk7CiAgICAgaW50IG51bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAg
dG8gZGVub3RlIHRoYXQgd2UgaGF2ZW4ndCBjb3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5
ZXQuCiAgICAgaW50IGluZGV4ID0gMTsKLSAgICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9
IG51bGxwdHI7CisgICAgSlNUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CiAK
LSAgICBUaHJlYWQqIHByZXZpb3VzVGhyZWFkID0gbnVsbHB0cjsKLSAgICBmb3IgKFRocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7Ci0gICAgICAg
IGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nl
c3MgPSB0aHJlYWQtPnN1c3BlbmQoKTsKKyAgICBKU1RocmVhZCogcHJldmlvdXNUaHJlYWQgPSBu
dWxscHRyOworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7
IHRocmVhZDsgaW5kZXgrKykgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlk
KSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lmIE9T
KERBUldJTikKLSAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKICAgICAgICAgICAgICAgICBpZiAoIW51bWJlck9mVGhyZWFkcykgewotICAgICAg
ICAgICAgICAgICAgICBmb3IgKFRocmVhZCogY291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJlZFRo
cmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNvdW50ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5uZXh0
KQorICAgICAgICAgICAgICAgICAgICBmb3IgKEpTVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9y
ZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRU
aHJlYWQtPm5leHQpCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlRocmVhZHMrKzsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
UmUtZG8gdGhlIHN1c3BlbnNpb24gdG8gZ2V0IHRoZSBhY3R1YWwgZmFpbHVyZSByZXN1bHQgZm9y
IGxvZ2dpbmcuCi0gICAgICAgICAgICAgICAga2Vybl9yZXR1cm5fdCBlcnJvciA9IHRocmVhZF9z
dXNwZW5kKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGVycm9yICE9IEtFUk5fU1VDQ0VTUyk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0
LmVycm9yKCkgIT0gS0VSTl9TVUNDRVNTKTsKIAogICAgICAgICAgICAgICAgIFdURlJlcG9ydEVy
cm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwKLSAgICAgICAgICAg
ICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGlu
dmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVh
ZCAlcC4iLAotICAgICAgICAgICAgICAgICAgICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhyZWFk
cywgdGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnBsYXRmb3JtVGhyZWFk
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9u
IGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6
ICVwXSBpZCAlcC4iLAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3IoKSwgaW5kZXgs
IG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQt
PnRocmVhZElEKCkpKTsKIAogICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgaW52YWxpZCB0aHJl
YWQgb24gdGhlIHRocmVhZHNUb0JlRGVsZXRlZCBsaXN0LgogICAgICAgICAgICAgICAgIC8vIFdl
IGNhbid0IGp1c3QgZGVsZXRlIGl0IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRlZCBvdGhl
cgogICAgICAgICAgICAgICAgIC8vIHRocmVhZHMsIGFuZCB0aGV5IG1heSBzdGlsbCBiZSBob2xk
aW5nIHRoZSBDIGhlYXAgbG9jayB3aGljaAogICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgZm9y
IGRlbGV0aW5nIHRoZSBpbnZhbGlkIHRocmVhZC4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAgICAg
ICAgICAgICAvLyBkZWZlciB0aGUgZGVsZXRpb24gdGlsbCBhZnRlciB3ZSBoYXZlIHJlc3VtZWQg
YWxsIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFk
LT5uZXh0OworICAgICAgICAgICAgICAgIEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5u
ZXh0OwogICAgICAgICAgICAgICAgIHRocmVhZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsK
ICAgICAgICAgICAgICAgICB0aHJlYWRzVG9CZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4Nywy
NSArNDM0LDI1IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNr
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAg
VU5VU0VEX1BBUkFNKG51bWJlck9mVGhyZWFkcyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
cHJldmlvdXNUaHJlYWQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNj
ZXNzKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlm
CiAgICAgICAgIH0KICAgICAgICAgcHJldmlvdXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRo
cmVhZCA9IHRocmVhZC0+bmV4dDsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0g
bV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAg
ICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5l
eHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAg
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKHRocmVhZCwgYnVmZmVyLCBjYXBhY2l0eSwgc2l6ZSk7
CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7
IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9
IHBsYXRmb3JtVGhyZWFkKQorICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0
aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpCiAgICAgICAgICAgICB0aHJlYWQtPnJlc3VtZSgpOwog
ICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRo
cmVhZDsgKSB7Ci0gICAgICAgIFRocmVhZCogbmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAg
ICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7
CisgICAgICAgIEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICBk
ZWxldGUgdGhyZWFkOwogICAgICAgICB0aHJlYWQgPSBuZXh0VGhyZWFkOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggZDE5
NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNkODdmNzk5NDQ4N2YyMi4uOTE5N2M0NDA4Y2UyZmQ0ZWU2
YWEzZDE0YTdjNjllNmY4Y2ExMDk0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmgKQEAgLTIyLDI1ICsyMiwxMiBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVGhyZWFk
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogCi0jaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNp
bmNsdWRlIDxzaWduYWwuaD4KLS8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0
X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCi0vLyBUaGlzIGJ1ZyBoYXMg
YmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNh
biBiZQotLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wuCi0vLyBodHRwczov
L2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQotI2lmIE9T
KEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNvbnRleHQuaD4KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2tTZXQ7CkBAIC02NCwxMyArNTEsMTAgQEAgY2xh
c3MgTWFjaGluZVRocmVhZHMgewogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJy
ZW50VGhyZWFkKCk7IC8vIE9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBj
YW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogCi0gICAgY2xhc3Mg
VGhyZWFkRGF0YSB7CisgICAgY2xhc3MgSlNUaHJlYWQgewogICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRocmVhZERhdGEoKTsKLSAgICAgICAg
flRocmVhZERhdGEoKTsKLQotICAgICAgICBzdGF0aWMgVGhyZWFkRGF0YSogY3JlYXRlRm9yQ3Vy
cmVudFRocmVhZCgpOworICAgICAgICBKU1RocmVhZChNYWNoaW5lVGhyZWFkcyopOwogCiAgICAg
ICAgIHN0cnVjdCBSZWdpc3RlcnMgewogICAgICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVyKCkg
Y29uc3Q7CkBAIC03OSw4NCArNjMsNDAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAgICAg
ICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lk
KiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQot
ICAgICAgICAgICAgCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAgICAg
dXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBNYWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdpc3Rl
cnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUo
SklUKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90Owot
I2VsaWYgVVNFKFBUSFJFQURTKQotICAgICAgICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJz
IHsKLSAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAgICAg
ICB9OwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgdGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3IgdGhp
cyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAgICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7
CisgICAgICAgICAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07CiAK
LSAgICAgICAgYm9vbCBzdXNwZW5kKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgICAg
IHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJlZ2lz
dGVycyhSZWdpc3RlcnMmKTsKKyAgICAgICAgRXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0Zm9y
bVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpIHsgcmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7IH0K
KyAgICAgICAgdm9pZCByZXN1bWUoKSB7IG1fdGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAgICBz
aXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFpcjx2
b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAgIFBs
YXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkOwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7Ci0g
ICAgICAgIHZvaWQqIHN0YWNrRW5kOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRMRSBw
bGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikK
LSAgICAgICAgc2VtX3Qgc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNvbnRl
eHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3VudCB7
IDAgfTsKLSAgICAgICAgc3RkOjphdG9taWM8Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSNl
bmRpZgotICAgIH07Ci0KLSAgICBjbGFzcyBUaHJlYWQgewotICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLSAgICAgICAgVGhyZWFkKFRocmVhZERhdGEqKTsKLQotICAgIHB1YmxpYzoK
LSAgICAgICAgdXNpbmcgUmVnaXN0ZXJzID0gVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0gICAg
ICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgICAgICBib29sIHN1c3BlbmQoKSB7IHJl
dHVybiBkYXRhLT5zdXNwZW5kKCk7IH0KLSAgICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEtPnJl
c3VtZSgpOyB9Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7
IHJldHVybiBkYXRhLT5nZXRSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVlUmVn
aXN0ZXJzKFJlZ2lzdGVycyYgcmVncykgeyBkYXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9Ci0g
ICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tU
b3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1cmVTdGFjayhzdGFja1RvcCk7IH0KLQotICAgICAgICBj
b25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5wbGF0
Zm9ybVRocmVhZDsgfQotICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBk
YXRhLT5zdGFja0Jhc2U7IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVy
biBkYXRhLT5zdGFja0VuZDsgfQorICAgICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBzdGFj
a0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBzdGFj
a0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQqIG5l
eHQ7Ci0gICAgICAgIFRocmVhZERhdGEqIGRhdGE7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0Owor
ICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1fdGhyZWFkOworICAgICAgICB2b2lkKiBtX3N0YWNr
QmFzZTsKKyAgICAgICAgdm9pZCogbV9zdGFja0VuZDsKICAgICB9OwogCiAgICAgTG9jayYgZ2V0
TG9jaygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleDsgfQotICAgIFRocmVhZCog
dGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9y
ZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgfQotICAgIFRocmVhZCogbWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKKyAg
ICBKU1RocmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3Qg
eyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9y
ZWdpc3RlcmVkVGhyZWFkczsgfQorICAgIEpTVGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVu
dFRocmVhZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQo
Q29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1
cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0gICAgdm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhU
aHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKKyAgICB2b2lkIHRyeUNv
cHlPdGhlclRocmVhZFN0YWNrKEpTVGhyZWFkKiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6
ZV90Kik7CiAgICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKIAogICAgIHN0YXRpYyB2
b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIHJlbW92ZVRocmVhZCh2b2lkKik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLSAgICB2b2lkIHJlbW92ZVRocmVhZElmRm91
bmQoUGxhdGZvcm1UaHJlYWQpOworICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJlYWRJ
ZGVudGlmaWVyKTsKIAogICAgIExvY2sgbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwotICAgIFRo
cmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICBKU1RocmVhZCogbV9yZWdpc3RlcmVkVGhy
ZWFkczsKICAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNo
aW5lVGhyZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SUNTdGF0cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCmluZGV4
IDIwODBjZDkzNDU4MzNkMmQyMzJiOGE5Y2Q2ZjNkYmZlYmUwNWNiMjMuLmUwYWJmMjk4YmZiZTJl
ZWVjMzQyNWI2NjA5Y2U3MjEzM2M0MWNkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSUNTdGF0cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0
YXRzLmNwcApAQCAtNTgsNyArNTgsNyBAQCBBdG9taWM8SUNTdGF0cyo+IElDU3RhdHM6OnNfaW5z
dGFuY2U7CiAKIElDU3RhdHM6OklDU3RhdHMoKQogewotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhy
ZWFkKAorICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgSUNTdGF0
cyIsCiAgICAgICAgIFt0aGlzXSAoKSB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOwpAQCAtODQsNyArODQsNyBAQCBJQ1N0YXRzOjp+SUNTdGF0cygpCiAgICAgICAgIG1f
Y29uZGl0aW9uLm5vdGlmeUFsbCgpOwogICAgIH0KICAgICAKLSAgICB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihtX3RocmVhZCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiB9
CiAKIHZvaWQgSUNTdGF0czo6YWRkKGNvbnN0IElDRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaAppbmRleCBlNzVjZmRmNGQ0ZDlkN2RjYmYxYTMxYTk4Mjk0MTkyZTU1
YjljZmIwLi5lYjdlMWU5MmNlOTdkZDFkOTUwODk3MjdjODRhOWM1ZWM3ZjU3YzdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaApAQCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIElDU3Rh
dHMgewogcHJpdmF0ZToKIAogICAgIFNwZWN0cnVtPElDRXZlbnQsIHVpbnQ2NF90PiBtX3NwZWN0
cnVtOwotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4g
bV90aHJlYWQ7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwog
ICAgIGJvb2wgbV9zaG91bGRTdG9wIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXgg
NTliNjI3M2RlYWIxZGQ1OWZkNzU5NDFjZDZlNjExNDkyODc5MjQ3MC4uNzVhYzYwZDliMzQ2MDgx
Y2I2NzA2OWVkZWQzNTI4NTQzZmJkM2Q4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI1NDQs
NyArMjU0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJB
Z2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBDb25kaXRpb24gZGlkU3RhcnRDb25kaXRp
b247CiAgICAgYm9vbCBkaWRTdGFydCA9IGZhbHNlOwogICAgIAotICAgIFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKAogICAgICAgICAiSlNDIEFnZW50IiwKICAgICAgICAgW3NvdXJjZUNvZGUs
ICZkaWRTdGFydExvY2ssICZkaWRTdGFydENvbmRpdGlvbiwgJmRpZFN0YXJ0XSAoKSB7CiAgICAg
ICAgICAgICBDb21tYW5kTGluZSBjb21tYW5kTGluZSgwLCBudWxscHRyKTsKQEAgLTI1NzEsNyAr
MjU3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2Vu
dFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nl
c3M7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0
aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiAgICAgCiAgICAgewogICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGRpZFN0YXJ0TG9jayk7CkBAIC0zMzExLDcgKzMzMTEsNyBAQCBz
dGF0aWMgdm9pZCBzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCgpCiAgICAgICAgICAgICBkYXRh
TG9nKCJXQVJOSU5HOiB0aW1lb3V0IHN0cmluZyBpcyBtYWxmb3JtZWQsIGdvdCAiLCB0aW1lb3V0
U3RyaW5nLAogICAgICAgICAgICAgICAgICIgYnV0IGV4cGVjdGVkIGEgbnVtYmVyLiBOb3QgdXNp
bmcgYSB0aW1lb3V0LlxuIik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3JlYXRlVGhy
ZWFkKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CisgICAgICAg
ICAgICBUaHJlYWQ6OmNyZWF0ZSh0aW1lb3V0VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRo
cmVhZCIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggMDFiMWZlMTI3ZThiNzMxZmI1M2I3YzJjZGI5OWVlMTlkZDVhZGE2OC4uNjMyMmU3
MzMyMjkyMTE0ZjBlMjU0YThlMWVmMTNkYTVjNDE5NTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBKU0xvY2s6Omxv
Y2soaW50cHRyX3QgbG9ja0NvdW50KQogICAgICAgICBtX2xvY2subG9jaygpOwogICAgIH0KIAot
ICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgbV9vd25lclRocmVhZCA9
ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1f
aGFzT3duZXJUaHJlYWQgPSB0cnVlOwogICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAppbmRleCAwYzM1ODQ3ZTQyM2U2NGJjNzA1MDNk
NWUxZDg1ZDQ4MDUwOWRiZTc0Li5hYTdkZDhkNWZmNjkwOTI4NDA4MDEzZDljNDkyNDBhYWY4NDEz
NDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaApAQCAtOTIsMTMgKzky
LDEzIEBAIGNsYXNzIEpTTG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+
IHsKIAogICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8
VGhyZWFkSWRlbnRpZmllcj4gb3duZXJUaHJlYWQoKSBjb25zdAorICAgIHN0ZDo6b3B0aW9uYWw8
UmVmUHRyPFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICht
X2hhc093bmVyVGhyZWFkKQogICAgICAgICAgICAgcmV0dXJuIG1fb3duZXJUaHJlYWQ7CiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIGJvb2wgY3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKSB7IHJldHVybiBtX2hhc093bmVyVGhyZWFkICYmIG1fb3duZXJUaHJlYWQg
PT0gY3VycmVudFRocmVhZCgpOyB9CisgICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9j
aygpIHsgcmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSAmVGhyZWFk
OjpjdXJyZW50KCk7IH0KIAogICAgIHZvaWQgd2lsbERlc3Ryb3lWTShWTSopOwogCkBAIC0xMzUs
NyArMTM1LDcgQEAgY2xhc3MgSlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpT
TG9jaz4gewogICAgIC8vIGRpZmZlcmVudCB0aHJlYWQsIGFuZCBhbiBvcHRpb25hbCBpcyB2dWxu
ZXJhYmxlIHRvIHJhY2VzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY5MDQyI2M2CiAgICAgYm9vbCBtX2hhc093bmVyVGhyZWFkIHsgZmFsc2Ug
fTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fb3duZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVh
ZD4gbV9vd25lclRocmVhZDsKICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICB1bnNpZ25l
ZCBtX2xvY2tEcm9wRGVwdGg7CiAgICAgYm9vbCBtX3Nob3VsZFJlbGVhc2VIZWFwQWNjZXNzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MTk3ZTczYzg0MTJhODBmMzYxNDBjN2FkODZlYzc2
NGZhYzI5MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIE9TKERBUldJTikgfHwgT1MoVU5JWCkKLSNp
bmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJ
TkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lm
IE9TKERBUldJTikKLSNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KLSNlbGlmIE9TKFdJTkRP
V1MpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0j
aWYgT1MoREFSV0lOKQotdHlwZWRlZiBtYWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlm
IE9TKFdJTkRPV1MpCi10eXBlZGVmIERXT1JEIFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgVVNFKFBU
SFJFQURTKQotdHlwZWRlZiBwdGhyZWFkX3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZW5kaWYgLy8gT1Mo
REFSV0lOKQotICAgIAotaW5saW5lIFBsYXRmb3JtVGhyZWFkIGN1cnJlbnRQbGF0Zm9ybVRocmVh
ZCgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhyZWFkX25w
KHB0aHJlYWRfc2VsZigpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIEdldEN1cnJl
bnRUaHJlYWRJZCgpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHJldHVybiBwdGhyZWFkX3Nl
bGYoKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXggN2QzN2E2NzRh
YmEwOTQ3MjMxODQ5M2IzM2JjODlmZTNmYWQ5OGE5ZC4uYjFlMDE1NDM4MzdhOGY4M2E5ODRiMzIz
Y2Y4ZmU5ZmQ5Y2QzOTE4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBGcmFtZVdh
bGtlciB7CiAgICAgYm9vbCBpc1ZhbGlkRnJhbWVQb2ludGVyKHZvaWQqIGV4ZWMpCiAgICAgewog
ICAgICAgICB1aW50OF90KiBmcENhc3QgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGV4ZWMpOwot
ICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5t
YWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsg
dGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhy
ZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVh
ZHNMaXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJl
YWQtPm5leHQpIHsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNrQmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0
YWNrTGltaXQgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrQmFzZSk7CkBAIC0zMDQsNyArMzA0LDcgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShjb25zdCBBYnN0
cmFjdExvY2tlciYpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2Zp
bGVyPiBwcm9maWxlciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKCJqc2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90
aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci50
aHJlYWQiLCBbcHJvZmlsZXJdIHsKICAgICAgICAgcHJvZmlsZXItPnRpbWVyTG9vcCgpOwogICAg
IH0pOwogfQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNh
bXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAg
ICAgIExvY2tIb2xkZXIgY29kZUJsb2NrU2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQo
KS5nZXRMb2NrKCkpOwogICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2Nr
ZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0TG9jaygpKTsKIAotICAgICAg
ICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOworICAg
ICAgICBhdXRvIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOwog
ICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewogICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0
aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBjYW4ndCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVz
ZSB0aGUgSlNDIHRocmVhZAogICAgICAgICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxv
YyBsb2NrLgpAQCAtMzU0LDEzICszNTQsMTIgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtl
U2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAg
ICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CiAgICAgICAgICAgICB2b2lk
KiBsbGludFBDOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRz
OjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgTWFjaGluZVRo
cmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgIG1f
anNjRXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAg
ICAgICBtYWNoaW5lRnJhbWUgPSByZWdpc3RlcnMuZnJhbWVQb2ludGVyKCk7CiAgICAgICAgICAg
ICAgICAgY2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsK
ICAgICAgICAgICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVy
KCk7CiAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkg
b2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0
N2Y5ZTY3NjhhZDQzN2JiMThlMGE4YWJjNzk1YmQ2Y2YuLmRkNDIwMGNmMTVkYzA4NTUwYWYzYzI5
NWFmNzc2OTg0ZGE2MDdkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAgLTE5NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1wbGluZ1By
b2ZpbGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsK
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91
YmxlIG1fbGFzdFRpbWU7CiAgICAgTG9jayBtX2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBt
X3RocmVhZElkZW50aWZpZXI7Ci0gICAgTWFjaGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVj
dXRpb25UaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWRJZGVudGlmaWVyOworICAg
IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZCogbV9qc2NFeGVjdXRpb25UaHJlYWQ7CiAgICAgYm9v
bCBtX2lzUGF1c2VkOwogICAgIGJvb2wgbV9pc1NodXREb3duOwogICAgIGJvb2wgbV9uZWVkc1Jl
cG9ydEF0RXhpdCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5
OWEyNmZjYTFjMjFmM2QwNDQwNDczYjQ0MmU4OWRjOWE0OTVmNDZlLi5lOTdjMzE4NWZjNmYyYzYy
ODRhZTcxYmViOTA1YzAyZTM0OWE3NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
QEAgLTY1OSw3ICs2NTksNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBsb2dFdmVudChDb2RlQmxvY2sqLCBjb25zdCBjaGFyKiBz
dW1tYXJ5LCBjb25zdCBGdW5jJiBmdW5jKTsKIAotICAgIHN0ZDo6b3B0aW9uYWw8VGhyZWFkSWRl
bnRpZmllcj4gb3duZXJUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2stPm93bmVyVGhy
ZWFkKCk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPFJlZlB0cjxUaHJlYWQ+PiBvd25lclRocmVhZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQogCiAgICAgVk1UcmFw
cyYgdHJhcHMoKSB7IHJldHVybiBtX3RyYXBzOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggNTI3NjNmODUzZDQ2M2I3MmYzM2U0NjRiN2I1YTU5ZDAx
MTkzOGY2OS4uMjcyYzRkZWZhODU1ZmMzOWIwY2Q0MTAxZTVlN2U0YjJiZGMwZGJkNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKQEAgLTExMCw3ICsxMTAsNyBA
QCBzdGF0aWMgRXhwZWN0ZWQ8c3RkOjpwYWlyPFZNKiwgU3RhY2tCb3VuZHM+LCBWTVRyYXBzOjpF
cnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhYwogICAgICAgICAgICAgcmV0dXJuIFZNSW5zcGVjdG9y
OjpGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsgLy8gVHJ5IG5leHQgVk0uCiAgICAgICAgIH0KIAot
ICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQqIHRocmVhZCA9IG1hY2hpbmVUaHJl
YWRzLnRocmVhZHNMaXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
KiB0aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNM
b2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0Jhc2UoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCh0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgaWYgKHN0YWNrUG9pbnRlciA8
PSB0aHJlYWQtPnN0YWNrQmFzZSgpICYmIHN0YWNrUG9pbnRlciA+PSB0aHJlYWQtPnN0YWNrRW5k
KCkpIHsKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2Vu
ZCgpCiAgICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9u
YWxPd25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9u
YWxPd25lclRocmVhZCkgewotICAgICAgICAgICAgICAgIHNpZ25hbFRocmVhZChvcHRpb25hbE93
bmVyVGhyZWFkLnZhbHVlKCksIFNJR1VTUjEpOworICAgICAgICAgICAgICAgIG9wdGlvbmFsT3du
ZXJUaHJlYWQudmFsdWUoKS0+c2lnbmFsKFNJR1VTUjEpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogCkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBWTVRyYXBzOjpmaXJl
VHJhcChWTVRyYXBzOjpFdmVudFR5cGUgZXZlbnRUeXBlKQogICAgICAgICAvLyBmaXJlVHJhcCgp
IGRvZXMgbm90IGJsb2NrLgogICAgICAgICBSZWZQdHI8U2lnbmFsU2VuZGVyPiBzZW5kZXIgPSBh
ZG9wdFJlZihuZXcgU2lnbmFsU2VuZGVyKHZtKCksIGV2ZW50VHlwZSkpOwogICAgICAgICBhZGRT
aWduYWxTZW5kZXIoc2VuZGVyLmdldCgpKTsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJqc2Mudm10
cmFwcy5zaWduYWxsaW5nLnRocmVhZCIsIFtzZW5kZXJdIHsKKyAgICAgICAgVGhyZWFkOjpjcmVh
dGUoImpzYy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0gewogICAgICAgICAg
ICAgc2VuZGVyLT5zZW5kKCk7CiAgICAgICAgIH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZpZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAKaW5kZXggNTQyNmQ5OGRlNjYyYzlhNDNhZmNj
YmExYmI2MDU0YjlmOTg4MGQ4YS4uNDI4NmIyM2UwMjUwOWFhZDQ3ZDBiOWQ0ZmJmY2Y0OWZlYjg5
MWJiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmll
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAK
QEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEhlYXBWZXJpZmllcjo6cHJpbnRWZXJpZmljYXRpb25I
ZWFkZXIoKQogICAgIFJFTEVBU0VfQVNTRVJUKG1faGVhcC0+Y29sbGVjdGlvblNjb3BlKCkpOwog
ICAgIENvbGxlY3Rpb25TY29wZSBzY29wZSA9IGN1cnJlbnRDeWNsZSgpLnNjb3BlOwogICAgIE1v
bm90b25pY1RpbWUgZ2NDeWNsZVRpbWVzdGFtcCA9IGN1cnJlbnRDeWNsZSgpLnRpbWVzdGFtcDsK
LSAgICBkYXRhTG9nKCJWZXJpZnlpbmcgaGVhcCBpbiBbcCIsIGdldEN1cnJlbnRQcm9jZXNzSUQo
KSwgIiwgdCIsIGN1cnJlbnRUaHJlYWQoKSwgIl0gdm0gIiwKKyAgICBkYXRhTG9nKCJWZXJpZnlp
bmcgaGVhcCBpbiBbcCIsIGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIiwgdCIsIFRocmVhZDo6Y3Vy
cmVudCgpLCAiXSB2bSAiLAogICAgICAgICBSYXdQb2ludGVyKG1faGVhcC0+dm0oKSksICIgb24g
Iiwgc2NvcGUsICIgR0MgQCAiLCBnY0N5Y2xlVGltZXN0YW1wLCAiXG4iKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU4ZjE5YjU2ZDMzY2I4OGE2
ZmI0OWQ2ZTVmM2I2MDk3ODZiYzBjYy4uNzQxNDhhODAxNGIyZWUwY2U1MTEyNjZjYmE0YThhNzRl
ZWQyNjg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0z
MjUsOCArMzI1LDggQEAKIAkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMy
RDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJQThBNDc0NDYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5o
ICovOyB9OwogCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi87
IH07Ci0JCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0
aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmNwcCAqLzsgfTsKLQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0
aHJlYWRzLmggKi87IH07CisJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3Bw
ICovOyB9OworCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVh
ZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3
MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oICovOyB9OwogCQlB
OEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi87IH07CiAJCUE4QTQ3NDRE
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovOyB9OwpAQCAtNzI4LDggKzcyOCw4IEBACiAJCUE4
QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRGdW5jdGlv
bkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUxQTgyNUIwMDQx
MjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhv
bGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRo
cmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThB
NDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRp
bmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTE2NCw4ICsxMTY0LDggQEAKIAkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAv
KiBTeXN0ZW1UcmFjaW5nLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovLAotCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywKLQkJCQlBOEE0NzMzMTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oICovLAorCQkJ
CUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8s
CisJCQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmgg
Ki8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8sCiAJ
CQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAogCQkJCUE4QTQ3
MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCkBAIC0xNjE4
LDcgKzE2MTgsNyBAQAogCQkJCTFDQ0RCMTRGMUU1NjY4OTgwMDZDNzNDMCAvKiBUZXh0QnJlYWtJ
dGVyYXRvcklDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZG
IC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
aCBpbiBIZWFkZXJzICovLAorCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRI
b2xkZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xODQzLDcgKzE4NDMsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAv
KiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERB
MDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMx
ODFDOTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMu
bW0gaW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5j
aG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2
YWJmNjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJj
M2I3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVz
dC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAK
QEAgLTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0
eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0
b3I8VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJ
ZGVudGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBj
b25zdW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVh
ZHM7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2Vp
dmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTsp
IHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAg
ICAgICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBD
aGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNo
b3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUg
fHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0
eSgpKQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1
bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhy
ZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Q
cm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlm
aWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAg
WyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVz
c2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlv
biBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBx
dWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAi
OiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwg
c2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8
IG1heFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEg
KzEzOCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0
eUNvbmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSk7Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7Cisg
ICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3Ig
KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAg
ICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9y
IChSZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJl
YWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWly
bmVzc1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5
NGYuLjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3Ry
dWN0IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNp
Z25lZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50
aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihu
dW1UaHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRo
cmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwog
ICAgIAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03
MCw3ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAg
ICAgIGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJ
bmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9
IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAg
ICAgICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBA
IHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTsp
Ci0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4
XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24o
KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1Nw
ZWVkVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5k
ZXggNTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3
MDZjMTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5j
aG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2Nr
U3BlZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3Mg
PSBzdGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91
cHMpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3Jk
cyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91
cHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAq
IG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhy
ZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1U
aHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJv
b2wga2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJr
IHsKICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsg
dGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5k
ZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisg
ICAgICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdy
b3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAg
ICJCZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5k
ZXgsICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1J
dGVyYXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3Jk
ID0gMDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2Vl
cEdvaW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXgg
PSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQot
ICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0p
OworICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAKICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIv
U291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4
M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5
YjE3ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUs
NyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQog
ICAgIAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhy
ZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAg
ICAgICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAs
NyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250
aW51ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJl
YWQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0
aHJlYWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5
NTUzY2IzMGE3NmEyYTg1NWZlYmEyYzcuLmI1MGJiYmMzYmYzYWQyYjFmZGQxMzQ1MzQ4NjU0YWIx
ZDQxOGNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xMjgsNyArMTI4LDYgQEAgc2V0KFdU
Rl9IRUFERVJTCiAgICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAg
ICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCiAg
ICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJl
YWRpbmcuaApAQCAtMzI5LDE2ICszMjgsMTQgQEAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwog
aWYgKFdJTjMyKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAgIE9TQWxsb2Nh
dG9yV2luLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAgICAgIFRocmVhZFNw
ZWNpZmljV2luLmNwcAogICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAgKQogZWxzZSAoKQot
ICAgIGxpc3QoQVBQRU5EIFdURl9IRUFERVJTCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaAotICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAgICBP
U0FsbG9jYXRvclBvc2l4LmNwcAotICAgICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAgICAgVGhyZWFkaW5n
UHRocmVhZHMuY3BwCiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L01haW5UaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKaW5kZXggMDI0
OTU0NGM1MThlODJhZmYxNzA1ZGUxOWVjOTY1YWI5OGIxZDEwNi4uNTI1ZjgwMmM4M2U1NmQ3MGI2
OTQxZTU0OWJjN2NiZTEzYTEwYWY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRo
cmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHN0YXRpYyBib29sIGNhbGxiYWNrc1BhdXNlZDsgLy8g
VGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgb25seSBhY2Nlc3NlZCBmcm9tIG1haW4gdGhyZWFkLgog
I2lmICFPUyhEQVJXSU4pICYmICFVU0UoR0xJQikKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIG1h
aW5UaHJlYWRJZGVudGlmaWVyOworc3RhdGljIFRocmVhZCogbWFpblRocmVhZElkZW50aWZpZXI7
CiAjZW5kaWYKIAogc3RhdGljIFN0YXRpY0xvY2sgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRl
eDsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCkKICAgICBp
bml0aWFsaXplZE1haW5UaHJlYWQgPSB0cnVlOwogCiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygp
OwotICAgIG1haW5UaHJlYWRJZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOworICAgIG1haW5U
aHJlYWRJZGVudGlmaWVyID0gJlRocmVhZDo6Y3VycmVudCgpOwogCiAgICAgaW5pdGlhbGl6ZU1h
aW5UaHJlYWRQbGF0Zm9ybSgpOwogICAgIGluaXRpYWxpemVHQ1RocmVhZHMoKTsKQEAgLTE4MSwx
NCArMTgxLDE0IEBAIHZvaWQgc2V0TWFpblRocmVhZENhbGxiYWNrc1BhdXNlZChib29sIHBhdXNl
ZCkKICNpZiAhT1MoREFSV0lOKSAmJiAhVVNFKEdMSUIpCiBib29sIGlzTWFpblRocmVhZCgpCiB7
Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBtYWluVGhyZWFkSWRlbnRpZmllcjsKKyAg
ICByZXR1cm4gJlRocmVhZDo6Y3VycmVudCgpID09IG1haW5UaHJlYWRJZGVudGlmaWVyOwogfQog
I2VuZGlmCiAKICNpZiAhVVNFKFdFQl9USFJFQUQpCi1ib29sIGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkKQorYm9vbCBjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkJiB0aHJlYWQpCiB7Ci0gICAgcmV0dXJuIHRo
cmVhZElkID09IGN1cnJlbnRUaHJlYWQoKTsKKyAgICByZXR1cm4gJnRocmVhZCA9PSAmVGhyZWFk
OjpjdXJyZW50KCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWFp
blRocmVhZC5oIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCmluZGV4IDI1ZDhmNzY2ZGNm
Yjg3OWExZDc2ODNjZTU1MDhkZDhkN2YxZDc3YWYuLmY2ZDUxNTBjZmRjZDlmY2RmMDA3NzU0ZDhj
YjM5ZWQyZDVmMjM5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKQEAgLTM3LDkgKzM3LDkgQEAKIAogbmFt
ZXNwYWNlIFdURiB7CiAKLWNsYXNzIFByaW50U3RyZWFtOworY2xhc3MgVGhyZWFkOwogCi10eXBl
ZGVmIHVpbnQzMl90IFRocmVhZElkZW50aWZpZXI7CitjbGFzcyBQcmludFN0cmVhbTsKIAogLy8g
TXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwpAQCAtNTQsNyArNTQsNyBAQCBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRNYWluVGhyZWFkQ2FsbGJhY2tzUGF1c2VkKGJvb2wgcGF1c2VkKTsK
IAogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNNYWluVGhyZWFkKCk7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSBib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJlYWRJZGVu
dGlmaWVyKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0
YUZvclRocmVhZChUaHJlYWQmKTsKIAogI2lmIFVTRShXRUJfVEhSRUFEKQogV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaXNXZWJUaHJlYWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01l
bW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5k
bGVyLmgKaW5kZXggZGZkZGYwYTk1NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2YzdiZC4uNDEy
OGY1Y2Q3MWE3ZGIyZjRmZDcwMzI5NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1vcnlQcmVz
c3VyZUhhbmRsZXIgewogI2lmIFVTRShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1f
c291cmNlOwogI2Vsc2UKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAg
ICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIvU291cmNl
L1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIwYTM4ZTEw
M2U3YzlhMmU0ZjBmN2UwNjEwNTcxNC4uOTA4OTJhYTQ5NzE0OGJmZDdhMmUyMTkwNzA2MWMxMWYx
YzJjODUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTk0LDcg
Kzk0LDcgQEAgYm9vbCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0cnlMb2Nr
Rm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkKICAgICB9CiAKICAgICBpZiAoIW1fdGhy
ZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoJlBhcmFsbGVsRW52aXJv
bm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtl
ciIpOworICAgICAgICBtX3RocmVhZElEID0gVGhyZWFkOjpjcmVhdGUoJlBhcmFsbGVsRW52aXJv
bm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtl
ciIpOwogCiAgICAgaWYgKG1fdGhyZWFkSUQpCiAgICAgICAgIG1fcGFyZW50ID0gcGFyZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oIGIvU291cmNl
L1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCmluZGV4IDQ1ODQwN2M0Y2I0YTNmOTk1Yzkw
YzU1NTYyN2MxY2JkMjJiNDFiNWMuLjcxYjc2NDQzOGU2YmY5M2ZmZTIyOTFiNWFlNzMyNTJkMDgx
NWYxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKQEAgLTU0LDcgKzU0LDcg
QEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgY2xhc3MgVGhyZWFkUHJpdmF0ZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFRocmVhZFByaXZhdGU+IHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFRocmVhZFByaXZhdGUoKQotICAgICAgICAgICAgOiBtX3RocmVhZElEKDApCisgICAgICAgICAg
ICA6IG1fdGhyZWFkSUQobnVsbHB0cikKICAgICAgICAgICAgICwgbV9ydW5uaW5nKGZhbHNlKQog
ICAgICAgICAgICAgLCBtX3BhcmVudCgwKQogICAgICAgICB7CkBAIC03NCw3ICs3NCw3IEBAIGNs
YXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJl
YWQodm9pZCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3Ro
cmVhZElEOworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZElEOwogICAgICAgICBib29s
IG1fcnVubmluZzsKICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCogbV9wYXJlbnQ7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIvU291cmNlL1dURi93dGYv
UGFya2luZ0xvdC5jcHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5YWRkYjJjYzU4MTBiNTZl
MWMxNC4uNjIyZWY3MTVjZjVkZTMzMmNmYzNhYTgxNDI3ZmNmMTE2OTEyMTU3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFy
a2luZ0xvdC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVhZERhdGEgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRocmVhZERhdGEoKTsKICAg
ICB+VGhyZWFkRGF0YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
OworICAgIFJlZjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXI7CiAgICAgCiAgICAgTXV0ZXggcGFy
a2luZ0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25kaXRpb247CkBAIC04MSw3
ICs4MSw3IEBAIHN0cnVjdCBCdWNrZXQgewogICAgIHZvaWQgZW5xdWV1ZShUaHJlYWREYXRhKiBk
YXRhKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyAiLCBSYXdQb2ludGVyKGRhdGEp
LCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZGF0YS0+YWRkcmVzcyksICIgb250byAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KFRocmVhZDo6Y3VycmVudCgpLCAiOiBlbnF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIg
d2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihkYXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJh
d1BvaW50ZXIodGhpcyksICJcbiIpKTsKICAgICAgICAgQVNTRVJUKGRhdGEtPmFkZHJlc3MpOwog
ICAgICAgICBBU1NFUlQoIWRhdGEtPm5leHRJblF1ZXVlKTsKICAgICAgICAgCkBAIC05OSwxMSAr
OTksMTEgQEAgc3RydWN0IEJ1Y2tldCB7CiAgICAgdm9pZCBnZW5lcmljRGVxdWV1ZShjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZGVxdWV1ZWluZyBmcm9tIGJ1
Y2tldCBhdCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0
ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKICAgICAgICAgCiAgICAgICAgIGlmICghcXVl
dWVIZWFkKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW1wdHkuXG4iKSk7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZW1wdHkuXG4iKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTQzLDE0ICsxNDMsMTQgQEAg
c3RydWN0IEJ1Y2tldCB7CiAgICAgICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgewogICAgICAg
ICAgICAgVGhyZWFkRGF0YSogY3VycmVudCA9ICpjdXJyZW50UHRyOwogICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IGdvdCB0aHJlYWQgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIlxuIikpOworICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGdvdCB0aHJl
YWQgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIlxuIikpOwogICAgICAgICAgICAgaWYgKCFjdXJy
ZW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgRGVxdWV1ZVJlc3VsdCBy
ZXN1bHQgPSBmdW5jdG9yKGN1cnJlbnQsIHRpbWVUb0JlRmFpcik7CiAgICAgICAgICAgICBzd2l0
Y2ggKHJlc3VsdCkgewogICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU6CiAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjdXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcihj
dXJyZW50UHRyKSwgIiwgKmN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKCpjdXJyZW50UHRyKSwg
IlxuIikpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBjdXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcihjdXJyZW50UHRyKSwgIiwgKmN1
cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKCpjdXJyZW50UHRyKSwgIlxuIikpOwogICAgICAgICAg
ICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKICAgICAgICAgICAgICAgICBjdXJyZW50UHRyID0g
JigqY3VycmVudFB0ciktPm5leHRJblF1ZXVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTU5LDcgKzE1OSw3IEBAIHN0cnVjdCBCdWNrZXQgewogICAgICAgICAgICAgICAgIEZBTExUSFJP
VUdIOwogICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToK
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRlcXVldWVpbmcgIiwgUmF3UG9pbnRlcihj
dXJyZW50KSwgIiBmcm9tICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZGVxdWV1ZWlu
ZyAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiIGZyb20gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxu
IikpOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IHF1ZXVlVGFpbCkKICAgICAgICAg
ICAgICAgICAgICAgcXVldWVUYWlsID0gcHJldmlvdXM7CiAgICAgICAgICAgICAgICAgZGlkRGVx
dWV1ZSA9IHRydWU7CkBAIC0yNzEsNyArMjcxLDcgQEAgSGFzaHRhYmxlKiBlbnN1cmVIYXNodGFi
bGUoKQogICAgICAgICAgICAgY3VycmVudEhhc2h0YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG1h
eExvYWRGYWN0b3IpOwogICAgICAgICAgICAgaWYgKGhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKG51bGxwdHIsIGN1cnJlbnRIYXNodGFibGUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVh
ZCgpLCAiOiBjcmVhdGVkIGluaXRpYWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIoY3VycmVudEhh
c2h0YWJsZSksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhU
aHJlYWQ6OmN1cnJlbnQoKSwgIjogY3JlYXRlZCBpbml0aWFsIGhhc2h0YWJsZSAiLCBSYXdQb2lu
dGVyKGN1cnJlbnRIYXNodGFibGUpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnJlbnRIYXNodGFibGU7CiAgICAgICAgICAgICB9CiAKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lk
IGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFkcykKICAgICBIYXNodGFibGUq
IG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CiAgICAgaWYgKG9sZEhhc2h0YWJsZSAm
JiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxk
b3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0b3IpIHsKICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8g
bmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUsICIgLyAiLCBudW1U
aHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1
c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwgbnVtVGhyZWFkcywgIiA+PSAiLCBtYXhM
b2FkRmFjdG9yLCAiXG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1OCw3ICsz
NTgsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFkcykKICAg
ICBvbGRIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOwogICAgIGlmIChvbGRIYXNodGFibGUg
JiYgc3RhdGljX2Nhc3Q8ZG91YmxlPihvbGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8
ZG91YmxlPihudW1UaHJlYWRzKSA+PSBtYXhMb2FkRmFjdG9yKSB7CiAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGFm
dGVyIGxvY2tpbmcsIG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5z
aXplLCAiIC8gIiwgbnVtVGhyZWFkcywgIiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7Cisg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBhZnRlciBs
b2NraW5nLCBubyBuZWVkIHRvIHJlaGFzaCBiZWNhdXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwg
IiAvICIsIG51bVRocmVhZHMsICIgPj0gIiwgbWF4TG9hZEZhY3RvciwgIlxuIikpOwogICAgICAg
ICB1bmxvY2tIYXNodGFibGUoYnVja2V0c1RvVW5sb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM3OCwxNCArMzc4LDE0IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25l
ZCBudW1UaHJlYWRzKQogICAgIAogICAgIEhhc2h0YWJsZSogbmV3SGFzaHRhYmxlID0gSGFzaHRh
YmxlOjpjcmVhdGUobmV3U2l6ZSk7CiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIG5ldyBoYXNodGFibGU6ICIsIFJh
d1BvaW50ZXIobmV3SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KFRocmVhZDo6Y3VycmVudCgpLCAiOiBjcmVhdGVkIG5ldyBoYXNodGFibGU6ICIsIFJhd1BvaW50
ZXIobmV3SGFzaHRhYmxlKSwgIlxuIikpOwogICAgIGZvciAoVGhyZWFkRGF0YSogdGhyZWFkRGF0
YSA6IHRocmVhZERhdGFzKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHJlaGFzaGluZyB0aHJlYWQgZGF0YSAi
LCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIo
dGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHJlaGFzaGluZyB0aHJlYWQgZGF0YSAiLCBSYXdQb2lu
dGVyKHRocmVhZERhdGEpLCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0
YS0+YWRkcmVzcyksICJcbiIpKTsKICAgICAgICAgdW5zaWduZWQgaGFzaCA9IGhhc2hBZGRyZXNz
KHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBu
ZXdIYXNodGFibGUtPnNpemU7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIp
KTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGlu
ZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsKICAgICAgICAgQnVja2V0KiBidWNrZXQgPSBuZXdIYXNo
dGFibGUtPmRhdGFbaW5kZXhdLmxvYWQoKTsKICAgICAgICAgaWYgKCFidWNrZXQpIHsKICAgICAg
ICAgICAgIGlmIChyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpKQpAQCAtNDIzLDcgKzQyMyw3IEBA
IHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQogfQogCiBUaHJl
YWREYXRhOjpUaHJlYWREYXRhKCkKLSAgICA6IHRocmVhZElkZW50aWZpZXIoY3VycmVudFRocmVh
ZCgpKQorICAgIDogdGhyZWFkSWRlbnRpZmllcihUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAgICB1
bnNpZ25lZCBjdXJyZW50TnVtVGhyZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC00ODUsNyArNDg1
LDcgQEAgYm9vbCBlbnF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1
ZXVlaW5nIG9udG8gYnVja2V0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIiB3aXRoIGluZGV4ICIs
IGluZGV4LCAiIGZvciBhZGRyZXNzICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIgd2l0aCBoYXNo
ICIsIGhhc2gsICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpj
dXJyZW50KCksICI6IGVucXVldWVpbmcgb250byBidWNrZXQgIiwgUmF3UG9pbnRlcihidWNrZXQp
LCAiIHdpdGggaW5kZXggIiwgaW5kZXgsICIgZm9yIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRy
ZXNzKSwgIiB3aXRoIGhhc2ggIiwgaGFzaCwgIlxuIikpOwogICAgICAgICBidWNrZXQtPmxvY2su
bG9jaygpOwogCiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGhhc2h0YWJsZSBjb3VsZCBo
YXZlIHJlaGFzaGVkIHVuZGVyIHVzLgpAQCAtNDk4LDcgKzQ5OCw3IEBAIGJvb2wgZW5xdWV1ZShj
b25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgICAgICBib29s
IHJlc3VsdDsKICAgICAgICAgaWYgKHRocmVhZERhdGEpIHsKICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiBwcm9jZWVkaW5nIHRvIGVucXVldWUgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIlxuIikp
OworICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6
IHByb2NlZWRpbmcgdG8gZW5xdWV1ZSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiXG4iKSk7
CiAgICAgICAgICAgICBidWNrZXQtPmVucXVldWUodGhyZWFkRGF0YSk7CiAgICAgICAgICAgICBy
ZXN1bHQgPSB0cnVlOwogICAgICAgICB9IGVsc2UKQEAgLTU2Nyw3ICs1NjcsNyBAQCBORVZFUl9J
TkxJTkUgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxs
eUltcGwoCiAgICAgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewog
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQo
KSwgIjogcGFya2luZy5cbiIpKTsKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1
cnJlbnQoKSwgIjogcGFya2luZy5cbiIpKTsKICAgICAKICAgICBUaHJlYWREYXRhKiBtZSA9IG15
VGhyZWFkRGF0YSgpOwogICAgIG1lLT50b2tlbiA9IDA7CkBAIC02NjEsNyArNjYxLDcgQEAgTkVW
RVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFya2luZ0xvdDo6cGFya0NvbmRpdGlv
bmFsbHlJbXBsKAogTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCBQYXJraW5n
TG90Ojp1bnBhcmtPbmUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBv
bmUuXG4iKSk7CisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6
IHVucGFya2luZyBvbmUuXG4iKSk7CiAgICAgCiAgICAgVW5wYXJrUmVzdWx0IHJlc3VsdDsKIApA
QCAtNzA2LDcgKzcwNiw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya09u
ZUltcGwoCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFBhcmtpbmdMb3Q6OlVucGFy
a1Jlc3VsdCk+JiBjYWxsYmFjaykKIHsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBvbmUgdGhlIGhhcmQgd2F5
LlxuIikpOworICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiB1
bnBhcmtpbmcgb25lIHRoZSBoYXJkIHdheS5cbiIpKTsKICAgICAKICAgICBSZWZQdHI8VGhyZWFk
RGF0YT4gdGhyZWFkRGF0YTsKICAgICBib29sIHRpbWVUb0JlRmFpciA9IGZhbHNlOwpAQCAtNzUx
LDcgKzc1MSw3IEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3Vu
dChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VuCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRU
aHJlYWQoKSwgIjogdW5wYXJraW5nIGNvdW50ID0gIiwgY291bnQsICIgZnJvbSAiLCBSYXdQb2lu
dGVyKGFkZHJlc3MpLCAiLlxuIikpOworICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6
Y3VycmVudCgpLCAiOiB1bnBhcmtpbmcgY291bnQgPSAiLCBjb3VudCwgIiBmcm9tICIsIFJhd1Bv
aW50ZXIoYWRkcmVzcyksICIuXG4iKSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWRE
YXRhPiwgOD4gdGhyZWFkRGF0YXM7CiAgICAgZGVxdWV1ZSgKQEAgLTc2MSw3ICs3NjEsNyBAQCBO
RVZFUl9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrQ291bnQoY29uc3Qgdm9pZCog
YWRkcmVzcywgdW5zaWduZWQgY291bgogICAgICAgICBCdWNrZXRNb2RlOjpJZ25vcmVFbXB0eSwK
ICAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50LCBib29sKSB7CiAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogT2JzZXJ2aW5nIGVsZW1lbnQgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihl
bGVtZW50LT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoVGhyZWFkOjpjdXJyZW50KCksICI6IE9ic2VydmluZyBlbGVtZW50IHdpdGggYWRkcmVzcyA9
ICIsIFJhd1BvaW50ZXIoZWxlbWVudC0+YWRkcmVzcyksICJcbiIpKTsKICAgICAgICAgICAgIGlm
IChlbGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIERl
cXVldWVSZXN1bHQ6Oklnbm9yZTsKICAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZChlbGVt
ZW50KTsKQEAgLTc3Myw3ICs3NzMsNyBAQCBORVZFUl9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xv
dDo6dW5wYXJrQ291bnQoY29uc3Qgdm9pZCogYWRkcmVzcywgdW5zaWduZWQgY291bgogCiAgICAg
Zm9yIChSZWZQdHI8VGhyZWFkRGF0YT4mIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgewogICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLmdldCgpKSwgIiB3
aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOwor
ICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogdW5wYXJr
aW5nICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS5nZXQoKSksICIgd2l0aCBhZGRyZXNzICIsIFJh
d1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKICAgICAgICAgQVNTRVJUKHRo
cmVhZERhdGEtPmFkZHJlc3MpOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOwpAQCAtNzgzLDcgKzc4Myw3IEBAIE5FVkVS
X0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRy
ZXNzLCB1bnNpZ25lZCBjb3VuCiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsK
KyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZG9uZSB1bnBh
cmtpbmcuXG4iKSk7CiAgICAgCiAgICAgcmV0dXJuIHRocmVhZERhdGFzLnNpemUoKTsKIH0KQEAg
LTc5Myw3ICs3OTMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwo
Y29uc3Qgdm9pZCogYWRkcmVzcykKICAgICB1bnBhcmtDb3VudChhZGRyZXNzLCBVSU5UX01BWCk7
CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNj
b3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNr
KQorTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVk
TGFtYmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCiB7CiAgICAgVmVj
dG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKIApAQCAtODAz
LDcgKzgwMyw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNv
bnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpCiAgICAgICAgIGlmICghYnVja2V0
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoVGhyZWFkRGF0YSogY3VycmVu
dFRocmVhZERhdGEgPSBidWNrZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERhdGE7IGN1cnJl
bnRUaHJlYWREYXRhID0gY3VycmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQotICAgICAgICAg
ICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIsIGN1cnJlbnRU
aHJlYWREYXRhLT5hZGRyZXNzKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWRE
YXRhLT50aHJlYWRJZGVudGlmaWVyLmdldCgpLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7
CiAgICAgfQogICAgIAogICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFy
a2luZ0xvdC5oCmluZGV4IDdkNWZiMTdlZmEwMmFiNzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYu
LmI2ZDg4MzBkMTljN2I3ZmQ0Y2M2YWNhZTM2MmFlYTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykK
ICAgICB7Ci0gICAgICAgIGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElk
ZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4oZnVuYykpOworICAgICAgICBmb3JFYWNoSW1wbChzY29w
ZWRMYW1iZGFSZWY8dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAK
IHByaXZhdGU6CkBAIC0xNzEsNyArMTcxLDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0
IHZvaWQqIGFkZHJlc3MsIGNvbnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQp
PiYgY2FsbGJhY2spOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVh
Y2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZv
aWQqKT4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwo
Y29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWN1cnNpdmVM
b2NrQWRhcHRlci5oIGIvU291cmNlL1dURi93dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaAppbmRl
eCA5N2EyNDNiOTBiY2FjMDBiMmQ3ZWVjZGYyN2UwNDI1ZmM1MmQ2N2E3Li41MjU5MzRjZGRkMGVi
NGNjYmU3MzMwOTA4ZDgwMGNiNjljZDQ0YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9S
ZWN1cnNpdmVMb2NrQWRhcHRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlY3Vyc2l2ZUxvY2tB
ZGFwdGVyLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVjdXJzaXZlTG9ja0FkYXB0ZXIgewog
ICAgIAogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1l
ID0gY3VycmVudFRocmVhZCgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1lID0gVGhyZWFk
OjpjdXJyZW50SUQoKTsKICAgICAgICAgaWYgKG1lID09IG1fb3duZXIpIHsKICAgICAgICAgICAg
IG1fcmVjdXJzaW9uQ291bnQrKzsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTYxLDcgKzYxLDcg
QEAgY2xhc3MgUmVjdXJzaXZlTG9ja0FkYXB0ZXIgewogICAgIAogICAgIGJvb2wgdHJ5TG9jaygp
CiAgICAgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1lID0gY3VycmVudFRocmVhZCgpOwor
ICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1lID0gVGhyZWFkOjpjdXJyZW50SUQoKTsKICAgICAg
ICAgaWYgKG1lID09IG1fb3duZXIpIHsKICAgICAgICAgICAgIG1fcmVjdXJzaW9uQ291bnQrKzsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVm
UHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaAppbmRleCBmZTE2MzBjOTczNWI1ZmY1MzUz
Y2IyYzU1OGUzMTA1ODEyNDc4N2Q4Li4yNzdlNjc1ZGIzYzU1NWQ1ZTRjNmNlMDQ5NDY4ODc0ZDM2
NzY5NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9SZWZQdHIuaApAQCAtNDIsNyArNDIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBSZWZQdHIgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzUmVmUHRyID0gdHJ1
ZTsKIAotICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIGNvbnN0ZXhwciBSZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQog
ICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKFQqIHB0cikgOiBtX3B0cihwdHIpIHsgcmVmSWZOb3RO
dWxsKHB0cik7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihjb25zdCBSZWZQdHImIG8pIDog
bV9wdHIoby5tX3B0cikgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gUmVmUHRyKGNvbnN0IFJlZlB0cjxVPiYgbykgOiBtX3B0cihvLmdldCgpKSB7IHJl
ZklmTm90TnVsbChtX3B0cik7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uLmgKaW5kZXggOTQzZmQ2ZDc5ZDA5NDQyNTUwM2FjODk3MzFiMGEwNmE2YWM0MGZmZC4uY2Iy
NzVmNzAxMmNmZTU2NjFlNDllMGI0ZmYwZDljNjIxYjBlNDk5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKKysrIGIvU291cmNlL1dURi93dGYv
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKQEAgLTI5LDYgKzI5LDggQEAKICNpZm5kZWYgVGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uX2gKICNkZWZpbmUgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
X2gKIAorI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCiBuYW1lc3BhY2UgV1RGIHsKIAogdHlwZWRl
ZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKQEAgLTM2LDEzICszOCwx
NSBAQCB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOwogc3Ry
dWN0IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9u
IGZ1bmN0aW9uLCB2b2lkKiBkYXRhKQorICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbihUaHJl
YWRGdW5jdGlvbiBmdW5jdGlvbiwgUmVmUHRyPFRocmVhZD4mJiB0aHJlYWQsIHZvaWQqIGRhdGEp
CiAgICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgdGhyZWFkKFdURk1vdmUo
dGhyZWFkKSkKICAgICAgICAgLCBkYXRhKGRhdGEpCiAgICAgewogICAgIH0KIAogICAgIFRocmVh
ZEZ1bmN0aW9uIGZ1bmN0aW9uOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZDsKICAgICB2b2lk
KiBkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkR3JvdXAuaCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZEdyb3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ3NTA3Y2U0NzcxZGRj
MmM5MWUyMzBjNDhhM2Y4ZjlmM2E2NWEwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEdyb3VwLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIFRocmVhZEdyb3VwIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShU
aHJlYWRHcm91cCk7CitwdWJsaWM6Citwcml2YXRlOgorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkSG9sZGVyUHRocmVhZHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlYWRkODViMjQzNDZmNTI0MmUzY2Qw
MTkxOGI2N2U5OWM2OTVkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJl
YWRzLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworI2lmIE9TKEhVUkQpCisvLyBQVEhS
RUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwgc28gZXhw
bGljaXRseSBkZWZpbmUgaXQgaGVyZS4KKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAxMDI0Cisj
ZWxzZQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitw
dGhyZWFkX2tleV90IFRocmVhZEhvbGRlcjo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCit2
b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVy
KCkKK3sKKyAgICBtX3RocmVhZC0+ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgm
bV9rZXksIGRlc3RydWN0KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIENSQVNIKCk7Cit9CisK
K1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9r
ZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhv
bGRlcio+KHB0aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xk
ZXI6OmluaXRpYWxpemUoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsK
KyAgICAgICAgLy8gSWRlYWxseSB3ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2
ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2
aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRp
ZG4ndCBjYWxsCisgICAgICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5v
dWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkg
IT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXks
IG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRl
cjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50
aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJU
KHRocmVhZElkZW50aWZpZXJEYXRhKTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+
bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRh
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1f
aXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Ig
a2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFk
LXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgorICAgIHB0aHJlYWRfc2V0c3BlY2lm
aWMobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRIb2xkZXJQdGhyZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVh
ZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42YTNjZWRmMTU4MDM1ZmNjNjQzZDMyZjVlMmVkMjI1NjdlNzBlYzNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMu
aApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRocmVhZEhvbGRlclB0aHJlYWRzX2gKKyNk
ZWZpbmUgVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3Bl
Y2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1
Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlCisvLyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAuIEl0IGFz
c3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFz
cyBkZXN0cnVjdGlvbi4KK2NsYXNzIFRocmVhZEhvbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVGhyZWFkSG9sZGVyKTsKK3B1YmxpYzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7CisKKyAg
ICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgor
ICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5k
IGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgp
OworCisgICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRIb2xkZXIg
aW50byB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
KFRocmVhZCYpOworCisgICAgLy8gUmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdl
IHdhcyBub3QgaW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIFRocmVhZEhvbGRlciogY3VycmVudCgp
OworCisgICAgVGhyZWFkJiB0aHJlYWQoKSB7IHJldHVybiBtX3RocmVhZC5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIFRocmVhZEhvbGRlcihUaHJlYWQmIHRocmVhZCkKKyAgICAgICAgOiBtX3Ro
cmVhZCh0aHJlYWQpCisgICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVk
IDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKKyAgICAvLyAtIGZpcnN0LCB3aGVuIGFs
bCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNp
bXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKKyAgICAvLyBhbmQgcmUtc2V0
cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0
byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFk
LXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4g
LSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFk
TWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZv
aWQqIGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVz
dHJveWVkT25jZTsKKyAgICBzdGF0aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiMDhjY2RhOWMyNWI0NjA3YzE1
ODFjMGZmZWI4YWZkMGQ4ZGYwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJXaW4uaCIKKworI2luY2x1ZGUgIlRocmVhZGlu
Zy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworRFdPUkQgVGhyZWFkSG9sZGVyOjptX2tleSA9IDA7
CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQpOworCitUaHJlYWRIb2xkZXI6On5UaHJlYWRI
b2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRFeGl0KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAgRFdPUkQgbV9rZXkgPSBGbHNBbGxvYyhkZXN0
cnVjdG9yKTsKKyAgICBpZiAobV9rZXkgPT0gRkxTX09VVF9PRl9JTkRFWEVTKQorICAgICAgICBD
UkFTSCgpOworfQorCitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KEZsc0dldFZhbHVlKG1fa2V5KSk7
Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKFRocmVhZCYgdGhyZWFkKQorewor
ICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMg
YXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZv
cm1hbmUuCisgICAgICAgIC8vIEhhdmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMg
dGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2FsbAorICAgICAgICAvLyBXVEY6OmluaXRpYWxp
emVUaHJlYWRpbmcoKSBzb29uIGVub3VnaCIgYnVncyBpbiByZWxlYXNlIG1vZGUuCisgICAgICAg
IEZsc1NldFZhbHVlKG1fa2V5LCBuZXcgVGhyZWFkSG9sZGVyKHRocmVhZCkpOworICAgIH0KK30K
Kwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAgVGhyZWFk
SG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+
KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7CisKKyAgICBpZiAodGhy
ZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7CisgICAgICAgIGRlbGV0ZSB0
aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRocmVh
ZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7CisgICAgLy8gUmUtc2V0
dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0
ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KKyAg
ICBGbHNTZXRWYWx1ZShtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5o
IGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjljYmJhOTk3
OWI2ZWY5NzhiODEwN2MxNzJiMzFmNDgwNWJmMzU0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
VGhyZWFkSG9sZGVyV2luX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyV2luX2gKKworI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEhvbGRzIFRocmVhZCBp
biB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgRkxTIDItcGFzcyBkZXN0
cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8vIFRocmVhZCBmcm9tIHRocmVhZE1hcC4gSXQg
YXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmljIHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1w
YXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFkSG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGljOgorICAgIH5UaHJlYWRIb2xkZXIoKTsKKwor
ICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUu
CisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBh
bmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNl
KCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRl
ciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3Jh
Z2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBzdGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50
KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisK
K3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRocmVhZCYgdGhyZWFkKQorICAgICAgICA6IG1f
dGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxzZSkKKyAgICB7
CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxs
ZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4g
YWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQg
c2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJworICAgIC8vIGFuZCByZS1z
ZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBtYWtlIFdpbiB0byBj
YWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNw
ZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0
aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFw
LCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQq
IGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJv
eWVkT25jZTsKKyAgICBzdGF0aWMgRFdPUkQgbV9rZXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFRocmVhZEhvbGRlcldpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2NTcyMWRkMTY5YmZmMTQzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShQVEhSRUFEUykKLQotI2luY2x1
ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLQotI2luY2x1ZGUgIlRocmVhZGlu
Zy5oIgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQg
aW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgotI2Rl
ZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNlbHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRpZmll
ckRhdGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01BWDsKLQotdm9pZCB0aHJlYWREaWRFeGl0KFRo
cmVhZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVudGlmaWVyRGF0YTo6flRocmVhZElkZW50aWZp
ZXJEYXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0KG1faWRlbnRpZmllcik7Ci19Ci0KLXZvaWQg
VGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCkKLXsKLSAgICBpbnQgZXJyb3Ig
PSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBkZXN0cnVjdCk7Ci0gICAgaWYgKGVycm9yKQot
ICAgICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIFRocmVhZElkZW50aWZpZXJE
YXRhOjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01B
WCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3Rh
dGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEqPihwdGhyZWFkX2dldHNwZWNpZmljKG1fa2V5
KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllckRhdGEgPyB0aHJlYWRJZGVudGlmaWVy
RGF0YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6
aW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmll
cigpKTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQg
ZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVydCBwZXJmb3JtYW5lLgotICAgIC8vIEhhdmlu
ZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRu
J3QgY2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBi
dWdzIGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxFQVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFE
X0tFWVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCBuZXcgVGhyZWFkSWRl
bnRpZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6ZGVzdHJ1
Y3Qodm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRp
ZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KGRhdGEpOwotICAg
IEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci0KLSAgICBpZiAodGhyZWFkSWRlbnRpZmll
ckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlm
aWVyRGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRocmVhZElkZW50aWZpZXJE
YXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUgdmFs
dWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVy
IHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KLSAgICBwdGhyZWFkX3Nl
dHNwZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcyNWJkMjc1ZTcyZWJkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotI2RlZmluZSBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNw
YWNlIFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElkZW50aWZpZXIgaW4gdGhlIHRocmVhZC1zcGVj
aWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVj
dGlvbiB0byByZWxpYWJseSByZW1vdmUKLS8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aHJlYWRN
YXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVs
dGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNzIFRocmVhZElkZW50aWZpZXJEYXRhIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJZGVudGlmaWVyRGF0YSk7Ci1wdWJsaWM6Ci0g
ICAgflRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0KLSAgICAvLyBPbmUgdGltZSBpbml0aWFsaXph
dGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgotICAgIC8vIFRoaXMgbWV0aG9kIG11c3Qg
YmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4K
LSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQg
cHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVudGlmaWVyRGF0YSBpbnRvIHRocmVhZC1zcGVj
aWZpYyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkSWRlbnRpZmll
ciBpZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3Rv
cmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlk
ZW50aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YShUaHJlYWRJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
Ci0gICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hl
biB0aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJl
cnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50
byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFn
YWluIGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRl
c3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUs
IHdlIHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJZGVudGlmaWVyIGZyb20gdGhlIHRocmVhZE1h
cCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lk
KiBkYXRhKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwotICAgIGJvb2wg
bV9pc0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGljIHB0aHJlYWRfa2V5X3QgbV9rZXk7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFRocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmluZGV4IGMxZGMzNTAxOTAzYWI3NmIzNzA0NmQ5
MzMzZjkzMmEzZWYwYzZjNmUuLmYxMDQ1OTQ4ZDI1ZTQ0ZmQ4ODU3N2E5OTIyMzkwOWU2ZjU2Mjlh
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtNDUsNyArNDUsNyBAQCBzdHJ1Y3QgTmV3VGhyZWFk
Q29udGV4dCB7CiAgICAgTXV0ZXggY3JlYXRpb25NdXRleDsKIH07CiAKLWNvbnN0IGNoYXIqIG5v
cm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK2NvbnN0IGNoYXIqIFRo
cmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogewogI2lm
IEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQogICAgIHJldHVybiB0aHJlYWROYW1lOwpAQCAtODIs
NyArODIsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRh
KQogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAg
ICAgfQogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1l
KTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+
bmFtZSk7CiAKICAgICBhdXRvIGVudHJ5UG9pbnQgPSBXVEZNb3ZlKGNvbnRleHQtPmVudHJ5UG9p
bnQpOwogCkBAIC05MiwyNCArOTIsMjQgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2
b2lkKiBjb250ZXh0RGF0YSkKICAgICBlbnRyeVBvaW50KCk7CiB9CiAKLVRocmVhZElkZW50aWZp
ZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBl
bnRyeVBvaW50KQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUoVGhyZWFkRnVuY3Rpb24g
ZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4g
VGhyZWFkOjpjcmVhdGUobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICAgICAgZW50cnlQ
b2ludChkYXRhKTsKKyAgICB9KTsKK30KKworUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUo
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCiB7CiAg
ICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFt
ZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgeyB9IH07CiAKICAgICAvLyBQcmV2ZW50IHRoZSB0aHJl
YWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1bnRpbCB3ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgdGhyZWFk
IGlkZW50aWZpZXIuCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0
ZXgpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZEludGVybmFsKHRocmVhZEVudHJ5UG9pbnQs
IGNvbnRleHQsIG5hbWUpOworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKHRocmVh
ZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0
ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFy
KiBuYW1lKQotewotICAgIHJldHVybiBjcmVhdGVUaHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRh
dGFdIHsKLSAgICAgICAgZW50cnlQb2ludChkYXRhKTsKLSAgICB9KTsKLX0KLQotdm9pZCBzZXRD
dXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lk
IFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVBy
aW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJp
b3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNV
c2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiAjZW5kaWYKIH0KIAotdm9pZCBz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5KQordm9p
ZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlv
cml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElz
VXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKICNpZiBIQVZFKFFPU19DTEFTU0VT
KQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1heFFPU2NsYXNzIHsgUU9TX0NMQVNTX1VOU1BF
Q0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xh
c3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xh
c3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhtYXhD
bGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3MgPSBtYXhDbGFzczsKIH0KIAotcW9zX2NsYXNz
X3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNzKQorcW9zX2NsYXNz
X3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB7
CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9IFFPU19DTEFTU19VTlNQRUNJRklFRCkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFsQ2xhc3MsIGdsb2JhbE1heFFPU2NsYXNzKTsK
QEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFz
c190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9pZCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2YjU1OGIzZTFkNTE3ZTgxMGM1ZWE4ZjZiMmNh
NDQwNWFjZjAxMmQyLi5iZGE3YTcxZTZkMWExYzhhNjJhNGQ5MmZlMmUxZTQ4Mjg5MTAzNmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3MiArMzksMjI3IEBA
CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUg
PHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+
CisKKyNpZiAhT1MoREFSV0lOKSAmJiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDxzaWduYWwuaD4K
Ky8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3Qg
YXZhaWxhYmxlIG9uIEZyZWVCU0QuCisvLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVl
QlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQorLy8gcmVtb3ZlZCBh
ZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wuCisvLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcv
YnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQorI2lmIE9TKEZSRUVCU0QpCisjaW5jbHVk
ZSA8dWNvbnRleHQuaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhQ09NUElMRVIoTVNWQykKKyNp
bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPHN5cy90aW1l
Lmg+CisjZW5kaWYKKworI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2Vu
ZGlmCisKKyNpZiAhT1MoREFSV0lOKQorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2VuZGlmCisK
KwogCiBuYW1lc3BhY2UgV1RGIHsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVy
OworI2lmIE9TKERBUldJTikKKworI2lmIENQVShYODYpCit0eXBlZGVmIGkzODZfdGhyZWFkX3N0
YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoWDg2XzY0KQordHlwZWRlZiB4ODZf
dGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShQUEMpCit0eXBl
ZGVmIHBwY190aHJlYWRfc3RhdGVfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShQUEM2
NCkKK3R5cGVkZWYgcHBjX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxp
ZiBDUFUoQVJNKQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7
CisjZWxpZiBDUFUoQVJNNjQpCit0eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3Jt
UmVnaXN0ZXJzOworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisK
KyNlbGlmIE9TKFdJTkRPV1MpCisKK3VzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0gQ09OVEVYVDsK
KworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShYODYp
IHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKQor
Cit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7CisKKyNlbHNlCisKK3N0cnVj
dCBQbGF0Zm9ybVJlZ2lzdGVycyB7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworfTsKKworI2Vu
ZGlmCisKK3VzaW5nIFRocmVhZElkZW50aWZpZXIgPSB1aW50MzJfdDsKIHR5cGVkZWYgdm9pZCAo
KlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CiAKLS8vIFRoaXMgZnVuY3Rpb24gbXVz
dCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCBy
ZXBlYXRlZGx5LgotLy8gRGFyd2luIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlz
IE9LIHRvIGNhbGwgaXQgZnJvbSBhbnkgdGhyZWFkLCB0aGUgb25seSAKLS8vIHJlcXVpcmVtZW50
IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRyYW50LgotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOworY2xhc3MgVGhyZWFkSG9sZGVyOworY2xhc3Mg
UHJpbnRTdHJlYW07CiAKLS8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgot
Ly8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZv
cm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhy
ZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogdGhyZWFkTmFtZSwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KTsKK2NsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkSG9sZGVyOwog
Ci0vLyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9uc2l2ZW5l
c3MuCi0vLyByZWxhdGl2ZVByaW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTUsIDBd
IHdoZXJlIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJpb3JpdHkuCi1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJl
bGF0aXZlUHJpb3JpdHkgPSAwKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgflRocmVhZCgpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRl
bnRpZmllciBjdXJyZW50VGhyZWFkKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VU
aHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyLCBpbnQpOwotV1RGX0VYUE9SVF9QUklWQVRF
IGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyKTsKLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICAvLyBS
ZXR1cm5zIG51bGxwdHIgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KKyAgICAvLyBUaGUgdGhy
ZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBw
YXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJl
ZlB0cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4g
Y3JlYXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIq
IG5hbWUpOwogCi0vLyBEZXByZWNhdGVkIGZ1bmN0aW9uLXBvaW50ZXItYmFzZWQgdGhyZWFkIGNy
ZWF0aW9uLgotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
KFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgLy8g
UmV0dXJucyBUaHJlYWQgb2JqZWN0LiBOb3RlIHRoYXQgaXQgY2FuIGJlIChhIGJpdCkgY29zdGx5
IGluIFdpbmRvd3MuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJl
bnQoKTsKIAotLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGltcGxl
bWVudGF0aW9uLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRG
dW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIC8vIFJldHVybnMg
VGhyZWFkSWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9ubHkg
Y2FyZXMgYWJvdXQgaWRlbnRpdHkKKyAgICAvLyBvZiB0aHJlYWRzIGFuZCBlbnN1cmUgdGhlIHRo
cmVhZCBsaWZldGltZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZElkZW50
aWZpZXIgY3VycmVudElEKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0
aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5h
bWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6ZUN1
cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VQcmlvcml0eShpbnQpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBpbnQgd2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkZXRhY2goKTsKIAotY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFy
KiB0aHJlYWROYW1lKTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5k
RXJyb3IgPSBrZXJuX3JldHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBs
YXRmb3JtU3VzcGVuZEVycm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQ
bGF0Zm9ybVN1c3BlbmRFcnJvciA9IERXT1JEOworI2VuZGlmCisKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgRXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+IHN1c3BlbmQoKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXN1bWUoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IGdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYpOwogCiAjaWYgVVNFKFBU
SFJFQURTKQotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRlbnRpZmllciwgaW50IHNpZ25hbE51
bWJlcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc2lnbmFsKGludCBzaWduYWxOdW1i
ZXIpOwogI2VuZGlmCiAKKyAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJp
bmcgVUkgcmVzcG9uc2l2ZW5lc3MuCisgICAgLy8gcmVsYXRpdmVQcmlvcml0eSBpcyBhIHZhbHVl
IGluIHRoZSByYW5nZSBbLTE1LCAwXSB3aGVyZSBhIGxvd2VyIHZhbHVlIGluZGljYXRlcyBhIGxv
d2VyIHByaW9yaXR5LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlcklu
aXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOworCiAjaWYgSEFWRShRT1NfQ0xBU1NF
UykKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFz
c190KTsKLVdURl9FWFBPUlRfUFJJVkFURSBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFv
c19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0R2xvYmFs
TWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
cW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CiAjZW5kaWYKIAotfSAv
LyBuYW1lc3BhY2UgV1RGCisgICAgLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgVGhyZWFk
OjpjcmVhdGUgaW1wbGVtZW50YXRpb24uCisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0
ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7
CiAKLXVzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6Y3JlYXRlVGhyZWFk
OwotdXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwotdXNpbmcgV1RGOjpjaGFuZ2VUaHJlYWRQcmlv
cml0eTsKLXVzaW5nIFdURjo6ZGV0YWNoVGhyZWFkOwotdXNpbmcgV1RGOjp3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbjsKKyAgICAvLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6
YXRpb24uCisgICAgLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFt
ZSBtdXN0IGJlIHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgorICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CiAKICNpZiBVU0UoUFRIUkVBRFMpCi11c2luZyBXVEY6OnNpZ25hbFRocmVhZDsK
KyAgICB2b2lkIGVzdGFibGlzaChwdGhyZWFkX3QgaGFuZGxlKTsKKyNlbHNlCisgICAgdm9pZCBl
c3RhYmxpc2goSEFORExFIGhhbmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCk7CiAjZW5k
aWYKIAotI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi11c2luZyBXVEY6OnNldEdsb2JhbE1heFFPU0Ns
YXNzOwotdXNpbmcgV1RGOjphZGp1c3RlZFFPU0NsYXNzOworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhhbmRsZXJTdXNwZW5k
UmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpOworCisgICAgVGhyZWFkSWRl
bnRpZmllciBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgYWRkT25FeGl0
Q2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKFRocmVhZCYpPiBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIG1fb25FeGl0Q2FsbGJhY2suYXBwZW5kKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVGhyZWFkJiB0aHJlYWQpCisgICAgeworICAgICAgICByZXR1
cm4gaWQoKSA9PSB0aHJlYWQuaWQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgVGhyZWFkJiB0aHJlYWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQoKSAhPSB0aHJlYWQu
aWQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkKCk7CisKKyAgICBlbnVtIEpvaW5h
YmxlU3RhdGUgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUuIFRoZSB0aHJl
YWQgY2FuIGJlIGpvaW5lZCBvbi4KKyAgICAgICAgSm9pbmFibGUsCisKKyAgICAgICAgLy8gU29t
ZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFs
bHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYQorICAg
ICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hp
Y2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2Fp
dE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pCisgICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERp
ZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5k
IGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncworICAgICAgICAvLyBub2JvZHkg
ZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVh
ZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgorICAgICAgICBKb2luZWQsCisKKyAg
ICAgICAgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBi
ZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2Yg
Y2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgorICAgICAgICBEZXRhY2hlZCwKKyAgICB9OworCisg
ICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRl
OyB9CisgICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRlID0gRGV0
YWNoZWQ7IH0KKyAgICB2b2lkIGRpZEV4aXQoKTsKKyAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9p
bmFibGVTdGF0ZSA9IEpvaW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9k
aWRFeGl0OyB9CisKKyAgICBXb3JkTG9jayBtX211dGV4OworICAgIFRocmVhZElkZW50aWZpZXIg
bV9pZCB7IDAgfTsKKyAgICBKb2luYWJsZVN0YXRlIG1fam9pbmFibGVTdGF0ZSB7IEpvaW5hYmxl
IH07CisgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0
aW9uPHZvaWQoVGhyZWFkJik+PiBtX29uRXhpdENhbGxiYWNrOworI2lmIFVTRShQVEhSRUFEUykK
KyAgICBwdGhyZWFkX3QgbV9oYW5kbGU7CisjaWYgT1MoREFSV0lOKQorICAgIG1hY2hfcG9ydF90
IG1fcGxhdGZvcm1UaHJlYWQ7CisjZWxzZQorICAgIHNlbV90IG1fc2VtYXBob3JlRm9yU3VzcGVu
ZFJlc3VtZTsKKyAgICBtY29udGV4dF90IG1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7CisgICAg
dW5zaWduZWQgbV9zdXNwZW5kQ291bnQgeyAwIH07CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9z
dXNwZW5kZWQgeyBmYWxzZSB9OwogI2VuZGlmCisjZWxpZiBPUyhXSU4pCisgICAgSEFORExFIG1f
aGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5c3RlbQorI2VuZGlmCit9OworCisvLyBU
aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBz
YWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8g
dGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkK
Ky8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRyYW50LgorV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOworCitpbmxpbmUgVGhy
ZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gVGhyZWFkOjpjdXJy
ZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGhyZWFkSWRl
bnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwog
CiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApp
bmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZjYTFkYTVhNjkyZDBmLi5lNmIyNGI3MmRj
MmIxNDA1M2E2NDRlNmJiZGJiMGNhNGU0ZWFjNTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRo
cmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICogQ29weXJpZ2h0
IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFrdGl4LmNvbT4KICAqIENvcHly
aWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDEzICs0Miwx
MyBAQAogI2luY2x1ZGUgIlJhbmRvbU51bWJlclNlZWQuaCIKICNpbmNsdWRlICJTdGRMaWJFeHRy
YXMuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKLSNpbmNsdWRlICJU
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCi0jaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMu
aCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIgorI2luY2x1ZGUgPGVycm5vLmg+
CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWRE
YXRhLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KIAog
I2lmICFDT01QSUxFUihNU1ZDKQogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNjAsMTQzICs2MSwx
MTIgQEAKICNlbmRpZgogCiAjaWYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KKyNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3Mg
UHRocmVhZFN0YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBlbnVtIEpvaW5hYmxlU3RhdGUgewotICAgICAgICBKb2luYWJsZSwgLy8gVGhlIGRlZmF1bHQg
dGhyZWFkIHN0YXRlLiBUaGUgdGhyZWFkIGNhbiBiZSBqb2luZWQgb24uCi0KLSAgICAgICAgSm9p
bmVkLCAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0
aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNh
biBiZSBhIAotICAgICAgICAgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0
aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQg
dGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikgCi0gICAgICAg
ICAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhy
ZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5j
ZSB0aGVyZSdzIAotICAgICAgICAgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhl
IHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxy
ZWFkeSByZXR1cm5lZCkuCi0KLSAgICAgICAgRGV0YWNoZWQgLy8gVGhlIHRocmVhZCBoYXMgYmVl
biBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQs
IHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgot
ICAgIH07Ci0KLSAgICAvLyBDdXJyZW50bHkgYWxsIHRocmVhZHMgY3JlYXRlZCBieSBXVEYgc3Rh
cnQgb3V0IGFzIGpvaW5hYmxlLiAKLSAgICBQdGhyZWFkU3RhdGUocHRocmVhZF90IGhhbmRsZSkK
LSAgICAgICAgOiBtX2pvaW5hYmxlU3RhdGUoSm9pbmFibGUpCi0gICAgICAgICwgbV9kaWRFeGl0
KGZhbHNlKQotICAgICAgICAsIG1fcHRocmVhZEhhbmRsZShoYW5kbGUpCi0gICAgewotICAgIH0K
LQotICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0dXJuIG1fam9pbmFibGVT
dGF0ZTsgfQotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlKCkgeyByZXR1cm4gbV9wdGhyZWFk
SGFuZGxlOyB9Ci0gICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRl
ID0gRGV0YWNoZWQ7IH0KLSAgICB2b2lkIGRpZEV4aXQoKSB7IG1fZGlkRXhpdCA9IHRydWU7IH0K
LSAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQotICAgIGJv
b2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9Ci0KLXByaXZhdGU6Ci0gICAgSm9p
bmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGU7Ci0gICAgYm9vbCBtX2RpZEV4aXQ7Ci0gICAgcHRo
cmVhZF90IG1fcHRocmVhZEhhbmRsZTsKLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxUaHJlYWRJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UHRocmVhZFN0YXRlPj4gVGhyZWFkTWFwOworI2lmICFP
UyhEQVJXSU4pCiAKLXZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQoVGhyZWFkSWRlbnRpZmll
cik7Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci12b2lkIHRocmVhZFdh
c0pvaW5lZChUaHJlYWRJZGVudGlmaWVyKTsKKy8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQg
YW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCitzdGF0aWMgY29u
c3RleHByIGNvbnN0IGludCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lID0gU0lHVVNSMjsKK3N0YXRp
YyBzdGQ6OmF0b21pYzxUaHJlYWQqPiB0YXJnZXRUaHJlYWQgeyBudWxscHRyIH07CitzdGF0aWMg
U3RhdGljV29yZExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFk
TWFwTXV0ZXgoKQordm9pZCBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwg
c2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZDsKLQotICAgIGlmIChp
c0luaXRpYWxpemVkKQorICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2NhbCBhdG9taWMgdHlwZXMg
ZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJlYWQqIHRocmVhZCA9IHRh
cmdldFRocmVhZC5sb2FkKCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1c3BlbmRlZC5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhh
bmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNp
Z3N1c3BlbmQuCisgICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBz
aG91bGQgbm90IHByb2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gc2lnbmFsIGNv
bWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBz
aWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdh
eXMgcHJlY2VkZXMuCisgICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRo
YXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhl
IGhhbmRsZXIgaXMgY2FsbGVkLgorICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3Jn
L29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKICAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5
KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBm
YXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhl
cmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAg
IGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6aW5pdGlhbGl6ZU9uY2UoKTsKLSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlh
bGl6ZURhdGVzKCk7Ci19CisgICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2Fz
dDx1Y29udGV4dF90Kj4odWNvbnRleHQpOworI2lmIENQVShQUEMpCisgICAgdGhyZWFkLT5tX3N1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdz
OworI2Vsc2UKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSB1c2VyQ29u
dGV4dC0+dWNfbWNvbnRleHQ7CisjZW5kaWYKIAotc3RhdGljIFRocmVhZE1hcCYgdGhyZWFkTWFw
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTWFwPiBtYXA7Ci0gICAgcmV0
dXJuIG1hcDsKKyAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRo
cmVhZCBpcyBzdXNwZW5kZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUg
ZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhh
bmRsZXIuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5
NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMworICAgIC8vCisg
ICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0
IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KKyAgICAvLyBodHRw
Oi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9j
aGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFkLT5tX3NlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5
IHNpZ2FjdGlvbidzIHNhX21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3Bl
bmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRo
aXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4K
KyAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRT
aWduYWxTZXQpOworICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSk7CisgICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7CisKKyAgICAv
LyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQu
CisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKIH0K
IAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjb25z
dCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRo
cmVhZE1hcE11dGV4KCkpOwotCi0gICAgVGhyZWFkTWFwOjppdGVyYXRvciBpID0gdGhyZWFkTWFw
KCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJl
YWRIYW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgICAgICByZXR1cm4g
aS0+a2V5OwotICAgIH0KKyNlbmRpZiAvLyAhT1MoREFSV0lOKQogCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFk
SGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKK3ZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCiB7Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJl
YWRIYW5kbGUpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0g
ICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckNvdW50ID0gMTsKLSAgICB0aHJl
YWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCBzdGQ6Om1ha2VfdW5pcXVlPFB0aHJlYWRTdGF0
ZT4ocHRocmVhZEhhbmRsZSkpOwotICAgIHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShp
bml0aWFsaXplS2V5LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKKyAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpOworICAgICAg
ICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0
cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8gc28gZW5zdXJlIGl0IGhh
cyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHko
KTsKKyAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOworICAgICAgICB3
dGZUaHJlYWREYXRhKCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygpOworCisjaWYgIU9TKERB
UldJTikKKyAgICAgICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25m
aWd1cmF0aW9uLgorICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3Bl
bmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCisgICAgICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNh
X21hc2spOworICAgICAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lKTsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gVGhyZWFkOjpzaWdu
YWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVT
VEFSVCB8IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lLCAmYWN0aW9uLCAwKTsKKyNlbmRpZgorICAgIH0pOwogfQogCi1zdGF0aWMgcHRocmVhZF90
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZChUaHJlYWRJZGVu
dGlmaWVyIGlkKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKCkKIHsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKS0+cHRocmVhZEhh
bmRsZSgpOworI2lmICFPUyhEQVJXSU4pCisgICAgc2lnc2V0X3QgbWFzazsKKyAgICBzaWdlbXB0
eXNldCgmbWFzayk7CisgICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKKyNlbmRpZgog
fQogCiBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAg
ICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIGNyZWF0ZVRocmVhZEludGVybmFsLgorICAg
IC8vIEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbC4KICAg
ICBhdXRvIGludm9jYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uPihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwotICAg
IGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQotewotICAgIGF1dG8g
aW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihl
bnRyeVBvaW50LCBkYXRhKTsKLSAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwotICAgIHB0aHJl
YWRfYXR0cl90IGF0dHI7Ci0gICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotI2lmIEhBVkUo
UU9TX0NMQVNTRVMpCi0gICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xhc3NfbnAoJmF0dHIsIGFk
anVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKSwgMCk7Ci0jZW5kaWYKLSAg
ICBpbnQgZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAmYXR0ciwgd3RmVGhy
ZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0gICAgcHRocmVhZF9hdHRyX2Rlc3Ry
b3koJmF0dHIpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCB3dGZUaHJl
YWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQorICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAg
ICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRyOwogCi0gICAgLy8gQmFsYW5jZWQgYnkgc3Rk
Ojp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0ZlRocmVhZEVudHJ5UG9pbnQuCi0gICAgVGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJbnZvY2F0aW9uID0gaW52b2NhdGlvbi5yZWxl
YXNlKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24pOwotCi0gICAgcmV0dXJu
IGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAg
aW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFy
KiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9O
UCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFkTmFtZSh0aHJlYWROYW1l
KSk7CkBAIC0yMDUsMTIzICsxNzUsNyBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRo
cmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gaWRlbnRpZmll
ckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgQVNTRVJUKGlkKTsKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Ci19Ci0gICAgCi12b2lkIGNoYW5n
ZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKLXsK
LSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
ICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxy
ZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0gICAg
fQotCi0gICAgaW50IHBvbGljeTsKLSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0KLSAg
ICBpZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsICZwb2xpY3ksICZwYXJh
bSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRh
OwotCi0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBh
cmFtKTsKLX0KLQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRo
cmVhZElEKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBsb2NrIGFjcm9z
cyB0aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBvdXIgdGhyZWFkIGFuZCBj
YXVzZSBkZWFkbG9jay4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJX
aXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5k
bGUpOwotICAgIH0KLQotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKHB0aHJlYWRI
YW5kbGUsIDApOwotCi0gICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKLSAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRy
eWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCi0gICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5l
ZC5cbiIsIHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElE
KTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+am9pbmFibGVTdGF0ZSgp
ID09IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOwotCi0gICAgLy8gVGhlIHRocmVhZCBoYXMgYWxy
ZWFkeSBleGl0ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgotICAgIGlmIChzdGF0ZS0+aGFzRXhp
dGVkKCkpCi0gICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgLy8gVGhl
IHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1
c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxs
IGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KLSAgICBlbHNlCi0gICAgICAgIHN0YXRlLT5kaWRKb2lu
KCk7Ci0KLSAgICByZXR1cm4gam9pblJlc3VsdDsKLX0KLQotdm9pZCBkZXRhY2hUaHJlYWQoVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHB0aHJlYWRfdCBwdGhy
ZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxk
KHRocmVhZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0KLSAgICBpbnQgZGV0YWNo
UmVzdWx0ID0gcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0gICAgaWYgKGRldGFjaFJl
c3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUg
dG8gYmUgZGV0YWNoZWRcbiIsIHRocmVhZElEKTsKLQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUg
PSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYg
KHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElE
KTsKLSAgICBlbHNlCi0gICAgICAgIHRocmVhZE1hcCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29t
ZURldGFjaGVkKCk7Ci19Ci0KLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAg
ICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBB
U1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7Ci0KLSAgICBpZiAoc3Rh
dGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKQotICAgICAgICB0
aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKQotewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJuIGlkOwotCi0g
ICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBl
c3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhh
bmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxp
emUoaWQpOwotICAgIHJldHVybiBpZDsKLX0KLQotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJRCwgaW50IHNpZ25hbE51bWJlcikKLXsKLSAgICBwdGhyZWFkX3QgcHRo
cmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0g
cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsK
LSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLSAgICBpbnQgZXJyTm8gPSBw
dGhyZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVyKTsKLSAgICByZXR1cm4gIWVy
ck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KKyAgICBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0KIAogTXV0ZXg6Ok11dGV4KCkKQEAgLTQxNSw2
ICsyNjksMjcyIEBAIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQogICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKIH0KIAorVGhyZWFkOjpUaHJlYWQoKQoreworI2lm
ICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwg
LyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVl
IGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgorfQorCitUaHJlYWQ6On5UaHJlYWQo
KQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAg
IHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX2Rp
ZEV4aXQgPSB0cnVlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRD
YWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0
YWJsaXNoKHB0aHJlYWRfdCBoYW5kbGUpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIGlmICghbV9pZCkgeworICAgICAg
ICBzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkSWRlbnRpZmllcj4gcHJvdmlkZXIgeyAwIH07Cisg
ICAgICAgIG1faWQgPSArK3Byb3ZpZGVyOworI2lmIE9TKERBUldJTikKKyAgICAgICAgbV9wbGF0
Zm9ybVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxlKTsKKyNlbmRpZgorICAg
IH0KK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpbnQgcG9saWN5OworICAgIHN0
cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworICAgIGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0o
bV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCisgICAgICAgIHJldHVybjsKKworICAgIHBhcmFt
LnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOworCisgICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKG1f
aGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7Cit9CisKK2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0
aW9uKCkKK3sKKyAgICBwdGhyZWFkX3QgaGFuZGxlOworICAgIHsKKyAgICAgICAgV29yZExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9
CisKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihoYW5kbGUsIDApOworCisgICAg
aWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVu
dGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9p
ZCk7CisgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJ
ZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwgbV9pZCk7CisKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUo
KSA9PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwg
ZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24n
dCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5l
ZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICgh
aGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0
OworfQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKG1faGFu
ZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIlRocmVhZElk
ZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwgbV9pZCk7CisKKyAgICBp
ZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOworfQorCitSZWZQ
dHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQoreworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIHRocmVhZC5n
ZXQoKSwgZGF0YSk7CisgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsKKyAgICBwdGhyZWFkX2F0
dHJfdCBhdHRyOworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyNpZiBIQVZFKFFPU19D
TEFTU0VTKQorICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2NsYXNzX25wKCZhdHRyLCBhZGp1c3Rl
ZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCksIDApOworI2VuZGlmCisgICAgaW50
IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgJmF0dHIsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZh
dHRyKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50
cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVlX3B0ciBjb25zdHJ1Y3RvciBpbiB3
dGZUaHJlYWRFbnRyeVBvaW50LgorICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiogbGVha2Vk
SW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOworICAgIFVOVVNFRF9QQVJBTShsZWFr
ZWRJbnZvY2F0aW9uKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSk7Cisg
ICAgcmV0dXJuIHRocmVhZDsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQoreworICAg
IFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChk
YXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAgICAvLyBOb3QgYSBXVEYt
Y3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4K
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOworICAg
IHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBUaHJlYWRIb2xkZXI6Omlu
aXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7Cit9CisKK1RocmVhZElkZW50aWZpZXIg
VGhyZWFkOjpjdXJyZW50SUQoKQoreworICAgIHJldHVybiBjdXJyZW50KCkuaWQoKTsKK30KKwor
Ym9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQoreworICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5k
bGUsIHNpZ25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5z
IHN1Y2Nlc3MuCit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwg
UGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0aGlzICE9
ICZjdXJyZW50KCksICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJy
ZW50IHRocmVhZCBpdHNlbGYuIik7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworI2lmIE9TKERBUldJTikKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNw
ZW5kKG1fcGxhdGZvcm1UaHJlYWQpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
I2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9yIHJlc3Vt
ZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAgICAg
IC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4KKyAgICAg
ICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFkcyBBIGFu
ZCBCLgorICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBhdHRlbXB0
IHRvIHN1c3BlbmQgQS4KKyAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFuZCBsYXRl
ciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCisgICAgICAgIC8vIEluIHRoYXQg
Y2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9j
a2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRDb3VudCkgewor
ICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9zaWdx
dWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwgaGFu
ZGxlci4KKyAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0Zm9y
bXMsIGxpa2UgTGludXguCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBz
dG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNpZ25h
bCBoYW5kbGVyLgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAg
ICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7CisgICAgICAgICAgICBzZW1fd2FpdCgmbV9z
ZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmll
ciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFs
bCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9zdXNwZW5kZWQu
c3RvcmUodHJ1ZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIH0KKyAgICAg
ICAgKyttX3N1c3BlbmRDb3VudDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYK
K30KKwordm9pZCBUaHJlYWQ6OnJlc3VtZSgpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2Vy
KG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyAgICB0aHJlYWRfcmVzdW1lKG1fcGxhdGZvcm1U
aHJlYWQpOworI2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQg
b3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4K
KyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAg
ICAgaWYgKG1fc3VzcGVuZENvdW50ID09IDEpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYWxsb3dp
bmcgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpbnRlcnJ1cHQgaW4gdGhlIHNpZ25hbCBoYW5kbGVy
IGJ5IHNpZ3N1c3BlbmQgYW5kIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYWN0dWFsbHkgaXNz
dWVkLAorICAgICAgICAgICAgLy8gdGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNh
bGxlZCBvbmNlIGFnYWluLgorICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0
byBkaXN0aW5ndWlzaCB0aGUgaGFuZGxlciBpbnZvY2F0aW9uIGZvciBzdXNwZW5kIGFuZCByZXN1
bWUuCisgICAgICAgICAgICAvLyAxLiBVc2UgZGlmZmVyZW50IHNpZ25hbCBudW1iZXJzLiBBbmQg
Y2hlY2sgdGhlIHNpZ25hbCBudW1iZXIgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgICAgICAvLyAy
LiBVc2Ugc29tZSBhcmd1bWVudHMgdG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBhbmQgcmVzdW1lIGlu
IHRoZSBoYW5kbGVyLiBJZiBwdGhyZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2VkLCB3ZSBjYW4gdGFr
ZSB0aGlzLgorICAgICAgICAgICAgLy8gMy4gVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpdGgg
YXRvbWljIHZhcmlhYmxlcyBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICAvLyBJ
biB0aGlzIGltcGxlbWVudGFpdG9uLCB3ZSB0YWtlICgzKS4gc3VzcGVuZGVkIGZsYWcgaXMgdXNl
ZCB0byBkaXN0aW5ndWlzaCBpdC4KKyAgICAgICAgICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlz
KTsKKyAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwobV9oYW5kbGUsIFNpZ1RocmVhZFN1c3Bl
bmRSZXN1bWUpID09IEVTUkNIKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHNlbV93YWl0KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgLy8g
UmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhl
Y3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCisgICAgICAgICAg
ICBtX3N1c3BlbmRlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgLS1tX3N1c3BlbmRDb3VudDsKKyAgICB9CisjZW5kaWYKK30KKwor
c2l6ZV90IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMp
Cit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikK
KyNpZiBDUFUoWDg2KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHNpemVvZihyZWdpc3RlcnMp
IC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZf
VEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQg
PSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShQUEMpCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxh
dm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShQUEM2NCkKKyAgICB1
bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShB
Uk0pCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlm
IENQVShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRf
Q09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RB
VEU2NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAg
a2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKG1fcGxhdGZvcm1UaHJlYWQs
IGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsICZ1c2VyQ291bnQpOworICAgIGlm
IChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3Io
X19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiSmF2YVNjcmlwdCBnYXJi
YWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBh
biBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNp
ZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOworICAgICAgICBD
UkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gdXNlckNvdW50ICogc2l6ZW9mKHVpbnRwdHJfdCk7
CisjZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiAoQ1BVKFg4Nikg
fHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykpCisg
ICAgcmVnaXN0ZXJzID0gbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKKyAgICByZXR1cm4gc2l6
ZW9mKFBsYXRmb3JtUmVnaXN0ZXJzKTsKKyNlbHNlCisgICAgcHRocmVhZF9hdHRyX3QgYXR0cmli
dXRlOworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGUpOworI2lmIEhBVkUoUFRIUkVB
RF9OUF9IKSB8fCBPUyhORVRCU0QpCisjaWYgIU9TKE9QRU5CU0QpCisgICAgLy8gZS5nLiBvbiBG
cmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZworICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAobV9o
YW5kbGUsICZhdHRyaWJ1dGUpOworI2VuZGlmCisjZWxzZQorICAgIC8vIEZJWE1FOiB0aGlzIGZ1
bmN0aW9uIGlzIG5vbi1wb3J0YWJsZTsgb3RoZXIgUE9TSVggc3lzdGVtcyBtYXkgaGF2ZSBkaWZm
ZXJlbnQgbnAgYWx0ZXJuYXRpdmVzCisgICAgcHRocmVhZF9nZXRhdHRyX25wKG1faGFuZGxlLCAm
YXR0cmlidXRlKTsKKyNlbmRpZgorCisgICAgdm9pZCogc3RhY2tCYXNlID0gMDsKKyAgICBzaXpl
X3Qgc3RhY2tTaXplID0gMDsKKyAgICBpbnQgcmMgPSBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soJmF0
dHJpYnV0ZSwgJnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7CisgICAgQVNTRVJUX1VOVVNFRChyYywg
cmMgPT0gMCk7CisgICAgQVNTRVJUKHN0YWNrQmFzZSk7CisgICAgcmVnaXN0ZXJzLnN0YWNrUG9p
bnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXplOworCisgICAg
cHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHJpYnV0ZSk7CisKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IDU0YjQzZWZlZjM1Y2Q2NjMyYTcwMDgxNTA3YTViMzc5
OWRlZmI2ZmIuLjAxODdlN2QwMzgwNjVlOGU2NTA3YzU2ZDg4MTgxYzFjNGFhZTU1YzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtMTQwLDcwICsxNDAsMzkgQEAgdm9pZCBpbml0aWFsaXpl
Q3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbmRpZgog
fQogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0
aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkOwotICAg
IAotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpc0luaXRp
YWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUo
KTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3Rh
dGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQg
aGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7
Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJh
dG9yKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQot
Ci1zdGF0aWMgSGFzaE1hcDxEV09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxEV09SRCwgSEFORExFPj4gbWFwOwotICAgIHJldHVy
biBtYXA7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3Rk
OjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9u
Y2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3Qg
aXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNv
IGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmlu
Z0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3Io
KTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsK
KyAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIo
RFdPUkQgdGhyZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWduZWQgX19z
dGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFwKCkuY29u
dGFpbnModGhyZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRocmVhZEhh
bmRsZSk7Ci19CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0
ZUludGVybmFsLgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+
KHBhcmFtKSk7CiAKLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJl
YWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJlYWRIb2xk
ZXI6OmluaXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhy
ZWFkID0gbnVsbHB0cjsKIAotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlm
aWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVh
ZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotICAg
IHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwg
d3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52
b2NhdGlvbi0+ZGF0YSk7Ci0KICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBj
cmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJ
bnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFy
KiB0aHJlYWROYW1lKQogeworICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcg
VGhyZWFkKCkpOwogICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKKyAg
ICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUgdGhyZWFk
SGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0
ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVy
KSk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpAQCAtMjE5
LDUxICsxODgsMzAgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJl
YWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURfUEFSQU0o
bGVha2VkSW52b2NhdGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVhZElk
ZW50aWZpZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVu
dGlmaWVyKHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1cm4gdGhy
ZWFkSUQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlm
aWVyKTsKKyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5
KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK1RocmVhZCYgVGhyZWFkOjpj
dXJyZW50KCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIFRocmVhZEhvbGRlciogZGF0
YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1
cm4gZGF0YS0+dGhyZWFkKCk7CiAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBjb3JyZXNwb25kIHRv
IGFuIGFjdGl2ZSB0aHJlYWQiLCB0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQg
dGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVm
PFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAKLSAgICBTZXRUaHJl
YWRQcmlvcml0eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7
Ci19CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBib29sIGlzU3VjY2Vzc2Z1bCA9IER1cGxpY2F0
ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJl
bnRQcm9jZXNzKCksICZoYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIEFTU0VSVCh0aHJlYWRJ
RCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50
aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBMT0dfRVJS
T1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0
aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09SRCBqb2lu
UmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRFKTsKLSAg
ICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJl
YWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0
IiwgdGhyZWFkSUQpOwotCi0gICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAgICBjbGVh
clRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotCi0gICAgcmV0dXJuIGpvaW5S
ZXN1bHQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7CisgICAg
VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJuIHRocmVh
ZC5nZXQoKTsKIH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCkKLXsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9
IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJlYWRIYW5k
bGUpCi0gICAgICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRI
YW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBjdXJy
ZW50VGhyZWFkKCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQogewogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJyZW50VGhyZWFkSWQo
KSk7CiB9CkBAIC00OTIsNiArNDQwLDk5IEBAIERXT1JEIGFic29sdXRlVGltZVRvV2FpdFRpbWVv
dXRJbnRlcnZhbChkb3VibGUgYWJzb2x1dGVUaW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
V09SRD4oKGFic29sdXRlVGltZSAtIGN1cnJlbnRUaW1lKSAqIDEwMDAuMCk7CiB9CiAKK1RocmVh
ZDo6VGhyZWFkKCkKK3sKK30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwordm9pZCBUaHJl
YWQ6OmRpZEV4aXQoKQoreworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgICAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgICAgICAvLyBJdCBpcyBPSyBi
ZWNhdXNlIEZMU0FsbG9jJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgdGhl
cmUgYXJlIHNvbWUgb3BlbiBoYW5kbGVzLgorICAgICAgICAvLyBUaGlzIGVhc2lseSBlbnN1cmVz
IHRoYXQgYWxsIHRoZSB0aHJlYWQgcmVzb3VyY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZC4K
KyAgICAgICAgaWYgKG1faGFuZGxlKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUobV9oYW5kbGUp
OworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRDYWxsYmFjaykKKyAg
ICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNoKEhBTkRM
RSBoYW5kbGUsIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgV29yZExvY2tIb2xk
ZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1faWQgPSB0
aHJlYWRJRDsKK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sK
KyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0VGhyZWFkUHJpb3Jp
dHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7Cit9CisKK2ludCBU
aHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIHsK
KyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUg
PSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmds
ZU9iamVjdChoYW5kbGUsIElORklOSVRFKTsKKyAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZB
SUxFRCkKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0
byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CisKKyAgICBXb3JkTG9ja0hv
bGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBKb2lu
YWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8gbm90aGlu
Zy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBh
bnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBz
byB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFzRXhpdGVk
KCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0OworfQorCit2
b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBXZSBmb2xsb3cgdGhlIHB0aHJlYWQgc2Vt
YW50aWNzOiBldmVuIGFmdGVyIHRoZSBkZXRhY2ggaXMgY2FsbGVkLAorICAgIC8vIHdlIHN0aWxs
IGNhbiBwZXJmb3JtIG9wZXJhdGlvbiBvbnRvIHRoZSB0aHJlYWQuIFRvIGRvIHNvLCB3ZSBkbwor
ICAgIC8vIG5vdGhpbmcgaGVyZSBpbiBXaW5kb3dzLiBDbG9zZUhhbmRsZSB3aWxsIGJlIGNhbGxl
ZCBhdXRvbWF0aWNhbGx5CisgICAgLy8gYnkgdGhlIEZMUyBkZXN0cnVjdG9yIG9uIHRocmVhZCB0
ZXJtaW5hdGlvbi4KKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaWYg
KCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KKworYXV0byBU
aHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJvcj4K
K3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgRFdPUkQgcmVzdWx0
ID0gU3VzcGVuZFRocmVhZChtX2hhbmRsZSk7CisgICAgaWYgKHJlc3VsdCAhPSAoRFdPUkQpLTEp
CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7
Cit9CisKKy8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUg
ZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQor
eworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBSZXN1bWVUaHJlYWQo
bV9oYW5kbGUpOworfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7
CisgICAgcmVnaXN0ZXJzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRf
Q09OVFJPTDsKKyAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxlLCAmcmVn
aXN0ZXJzKTsKKyAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9XZWFrUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9XZWFrUHRyLmgKaW5kZXggZjE1MTYwYmVjNzM2
ZWU3MzA2YTBhNjY1YzZkOTMwNGNiNDM1YjZiNi4uZGViYWUzYjUwM2ZmMTkwMGYwNTA1YjM2YTQy
ZGJmMWI4YjkxNTI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV2Vha1B0ci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaApAQCAtNTIsNyArNTIsNyBAQCBjbGFzcyBXZWFrUmVm
ZXJlbmNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYWtSZWZlcmVuY2U8VD4+IHsK
ICNpZiBVU0UoV0VCX1RIUkVBRCkKICAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2Fs
RGF0YUZvclRocmVhZChtX2JvdW5kVGhyZWFkKSk7CiAjZWxzZQotICAgICAgICBBU1NFUlQobV9i
b3VuZFRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCkpOworICAgICAgICBBU1NFUlQobV9ib3VuZFRo
cmVhZCA9PSBUaHJlYWQ6OmN1cnJlbnRJRCgpKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gbV9w
dHI7CiAgICAgfQpAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBXZWFrUmVmZXJlbmNlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYWtSZWZlcmVuY2U8VD4+IHsKICNpZiBVU0UoV0VCX1RI
UkVBRCkKICAgICAgICAgQVNTRVJUKGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCht
X2JvdW5kVGhyZWFkKSk7CiAjZWxzZQotICAgICAgICBBU1NFUlQobV9ib3VuZFRocmVhZCA9PSBj
dXJyZW50VGhyZWFkKCkpOworICAgICAgICBBU1NFUlQobV9ib3VuZFRocmVhZCA9PSBUaHJlYWQ6
OmN1cnJlbnRJRCgpKTsKICNlbmRpZgogICAgICAgICBtX3B0ciA9IG51bGxwdHI7CiAgICAgfQpA
QCAtNzYsNyArNzYsNyBAQCBjbGFzcyBXZWFrUmVmZXJlbmNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFdlYWtSZWZlcmVuY2U8VD4+IHsKICAgICBleHBsaWNpdCBXZWFrUmVmZXJlbmNl
KFQqIHB0cikKICAgICAgICAgOiBtX3B0cihwdHIpCiAjaWZuZGVmIE5ERUJVRwotICAgICAgICAs
IG1fYm91bmRUaHJlYWQoY3VycmVudFRocmVhZCgpKQorICAgICAgICAsIG1fYm91bmRUaHJlYWQo
VGhyZWFkOjpjdXJyZW50SUQoKSkKICNlbmRpZgogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNw
cAppbmRleCBiMmEwYTc5ZjRhYjVhYWMyODliMTY5ZjkyYmJjMWE4MDU4NTJjYTMyLi45NzMwZmNm
MGYwOTIxZmRlZDkwZjg5ZjEyOTBlNzc0OTBiNTM5NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAg
LTc0LDcgKzc0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRl
cmF0aW9ucywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKIAogICAgICAgICAgICAgbV93
b3JrZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFkQ291bnQpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBtX3dvcmtlcnMuYXBwZW5kKGNyZWF0ZVRocmVhZChTdHJpbmc6OmZvcm1hdCgiVGhyZWFk
UG9vbCBXb3JrZXIgJXUiLCBpKS51dGY4KCkuZGF0YSgpLCBbdGhpc10geworICAgICAgICAgICAg
ICAgIG1fd29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoU3RyaW5nOjpmb3JtYXQoIlRocmVh
ZFBvb2wgV29ya2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKICAgICAgICAgICAg
ICAgICAgICAgdGhyZWFkQm9keSgpOwogICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAg
IH0KQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNp
emVfdCBpdGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogICAgICAgICBD
b25kaXRpb24gbV9jb25kaXRpb247CiAgICAgICAgIERlcXVlPGNvbnN0IHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4qPiBtX3F1ZXVlOwogCi0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBt
X3dvcmtlcnM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gbV93b3JrZXJzOwogICAg
IH07CiAKICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFRocmVhZFBvb2w+IHRocmVhZFBv
b2w7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYv
d3RmL1dvcmtRdWV1ZS5oCmluZGV4IGE0N2YyMWUyMGQzMWJjOGJmNzMxOGY0MWI5NTdhYjM2NmMx
OTE1MDMuLjc2MzQ1YzA2OTMxNjRmNjhjYTRiMWM2NjQ0ODRhMjczY2M2ZThiZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtR
dWV1ZS5oCkBAIC0xMDMsNyArMTAzLDcgQEAgY2xhc3MgV29ya1F1ZXVlIGZpbmFsIDogcHVibGlj
IEZ1bmN0aW9uRGlzcGF0Y2hlciB7CiAKICAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwogI2VsaWYg
VVNFKEdMSUJfRVZFTlRfTE9PUCkgfHwgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29y
a1F1ZXVlVGhyZWFkOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4
OwogICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgIFJ1bkxv
b3AqIG1fcnVuTG9vcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1
ZUNvY29hLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRl
eCAxYTcyMTlhZDI1OWVkNzU5NzJhNWE0NThjNWM0ODQ5N2EzODhlNGQzLi41OWVlMWY4NWI0MzVj
ZTFhNzJmNTA1MGY0ZGY2MmVmY2ZiYmM4MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1
ZXVlQ29jb2EuY3BwCkBAIC00OSwxNSArNDksMTUgQEAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFz
c190IGRpc3BhdGNoUU9TQ2xhc3MoV29ya1F1ZXVlOjpRT1MgcW9zKQogewogICAgIHN3aXRjaCAo
cW9zKSB7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlOgotICAgICAg
ICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7Cisg
ICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5U
RVJBQ1RJVkUpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQ6Ci0gICAg
ICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7Cisg
ICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5J
VElBVEVEKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpEZWZhdWx0OgotICAgICAgICByZXR1
cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfREVGQVVMVCk7CisgICAgICAgIHJldHVybiBU
aHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOwogICAgIGNhc2UgV29y
a1F1ZXVlOjpRT1M6OlV0aWxpdHk6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFP
U19DTEFTU19VVElMSVRZKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFz
cyhRT1NfQ0xBU1NfVVRJTElUWSk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3Vu
ZDoKLSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQp
OworICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNL
R1JPVU5EKTsKICAgICB9CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2Vu
ZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1
ZXVlR2VuZXJpYy5jcHAKaW5kZXggOTM0YTM4Y2JiZTY0YmJmZmFlYjRkMzdkZjFiOGQ5OTUyYjg4
NTM0NC4uZGE4NzVkMWZhMDRjZWY1MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0NDYzMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zNSw3ICszNSw3IEBA
CiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5
cGUsIFFPUykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29u
ZGl0aW9uTXV0ZXgpOwotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKG5hbWUs
IFt0aGlzXSB7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBb
dGhpc10gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRp
YWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1
bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRm
b3JtSW52YWxpZGF0ZSgpCiAgICAgaWYgKG1fcnVuTG9vcCkKICAgICAgICAgbV9ydW5Mb29wLT5z
dG9wKCk7CiAgICAgaWYgKG1fd29ya1F1ZXVlVGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVh
ZChtX3dvcmtRdWV1ZVRocmVhZCk7Ci0gICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAg
ICAgICAgbV93b3JrUXVldWVUaHJlYWQtPmRldGFjaCgpOworICAgICAgICBtX3dvcmtRdWV1ZVRo
cmVhZCA9IG51bGxwdHI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9s
aW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9saW51
eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKaW5kZXggYjI5NDE5NDQ0ZTc0MjczNmE2
N2RjMGMxYWE4NTFkZWMzYWU1ODdlNC4uZmZkNDAwODU1YjgyOTNhOGI1YTNjM2FlYjIzYWI3N2Fh
ZjVhN2VlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVI
YW5kbGVyTGludXguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJl
SGFuZGxlckxpbnV4LmNwcApAQCAtMTE5LDcgKzExOSwxMCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIoaW50IGZkLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKAogICAgIH0sIHRoaXMsIG51bGxwdHIpOwogICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJj
ZS5nZXQoKSwgbnVsbHB0cik7CiAjZWxzZQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQo
IldURjogTWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwgW3RoaXNdIHsgcmVhZEFuZE5vdGlmeSgpOyB9
CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXIiLAorICAgICAgICBbdGhpc10geworICAgICAgICAgICAgcmVhZEFuZE5vdGlmeSgpOworICAg
ICAgICB9KTsKICNlbmRpZgogfQogCkBAIC0xMjksNyArMTMyLDcgQEAgTWVtb3J5UHJlc3N1cmVI
YW5kbGVyOjpFdmVudEZEUG9sbGVyOjp+RXZlbnRGRFBvbGxlcigpCiAjaWYgVVNFKEdMSUIpCiAg
ICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CiAjZWxzZQotICAgIGRldGFjaFRo
cmVhZChtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAjZW5kaWYKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0gYi9Tb3VyY2Uv
V1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQppbmRleCAyNzJlM2Y1Zjk3NzQwYzlhMTFmNzQ4
YThiNWFlNjAwNjI2NmU5MmQ2Li5mYjI1YWZhZmQ4NDQ3ZmYyYzJlYjI1MDI3MmY0ZjJhYjFlMzI1
OTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQpAQCAtNjQsOCArNjQsOCBAQCBz
dGF0aWMgcHRocmVhZF90IG1haW5UaHJlYWRQdGhyZWFkOwogc3RhdGljIE5TVGhyZWFkKiBtYWlu
VGhyZWFkTlNUaHJlYWQ7CiAKICNpZiBVU0UoV0VCX1RIUkVBRCkKLXN0YXRpYyBUaHJlYWRJZGVu
dGlmaWVyIHNBcHBsaWNhdGlvblVJVGhyZWFkSWRlbnRpZmllcjsKLXN0YXRpYyBUaHJlYWRJZGVu
dGlmaWVyIHNXZWJUaHJlYWRJZGVudGlmaWVyOworc3RhdGljIFJlZlB0cjxUaHJlYWQ+IHNBcHBs
aWNhdGlvblVJVGhyZWFkOworc3RhdGljIFJlZlB0cjxUaHJlYWQ+IHNXZWJUaHJlYWQ7CiAjZW5k
aWYKIAogdm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkKQEAgLTE3NCwxMyArMTc0
LDEzIEBAIGJvb2wgaXNXZWJUaHJlYWQoKQogdm9pZCBpbml0aWFsaXplQXBwbGljYXRpb25VSVRo
cmVhZElkZW50aWZpZXIoKQogewogICAgIEFTU0VSVChwdGhyZWFkX21haW5fbnAoKSk7Ci0gICAg
c0FwcGxpY2F0aW9uVUlUaHJlYWRJZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOworICAgIHNB
cHBsaWNhdGlvblVJVGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CiB9CiAKIHZvaWQgaW5pdGlh
bGl6ZVdlYlRocmVhZElkZW50aWZpZXIoKQogewogICAgIEFTU0VSVCghcHRocmVhZF9tYWluX25w
KCkpOwotICAgIHNXZWJUaHJlYWRJZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOworICAgIHNX
ZWJUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKIH0KIAogdm9pZCBpbml0aWFsaXplV2ViVGhy
ZWFkUGxhdGZvcm0oKQpAQCAtMTkyLDE0ICsxOTIsMTQgQEAgdm9pZCBpbml0aWFsaXplV2ViVGhy
ZWFkUGxhdGZvcm0oKQogICAgIG1haW5UaHJlYWROU1RocmVhZCA9IFtbTlNUaHJlYWQgY3VycmVu
dFRocmVhZF0gcmV0YWluXTsKIH0KIAotYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9j
YWxEYXRhRm9yVGhyZWFkKFRocmVhZCYgdGhyZWFkKQogewotICAgIFRocmVhZElkZW50aWZpZXIg
Y3VycmVudFRocmVhZElkID0gY3VycmVudFRocmVhZCgpOwotICAgIGlmICh0aHJlYWRJZCA9PSBj
dXJyZW50VGhyZWFkSWQpCisgICAgVGhyZWFkJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJy
ZW50KCk7CisgICAgaWYgKHRocmVhZCA9PSBjdXJyZW50VGhyZWFkKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGlmICh0aHJlYWRJZCA9PSBzV2ViVGhyZWFkSWRlbnRpZmllciB8fCB0aHJl
YWRJZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiAo
Y3VycmVudFRocmVhZElkID09IHNXZWJUaHJlYWRJZGVudGlmaWVyIHx8IGN1cnJlbnRUaHJlYWRJ
ZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIpICYmIHdlYlRocmVhZElzVW5pbml0
aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpOworICAgIGlmICh0aHJlYWQgPT0gc1dlYlRocmVh
ZCB8fCB0aHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWQpCisgICAgICAgIHJldHVybiAoY3Vy
cmVudFRocmVhZCA9PSBzV2ViVGhyZWFkIHx8IGN1cnJlbnRUaHJlYWQgPT0gc0FwcGxpY2F0aW9u
VUlUaHJlYWQpICYmIHdlYlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgp
OwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA4NzQ3NjQzOGNhZTY1YTYz
ODdkOTAxYTc1Mjg4MTVlYzk1NDdmMjMyLi45Y2QzZGI0ZDFiYzE0YTM2MTczMjFhYjAwNWEwMTk2
MjA1Mjc4Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBJREJTZXJ2ZXI6OklEQlNl
cnZlcihJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAg
ICAgOiBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyKGZpbGVIYW5kbGVyKQogewog
ICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jayk7Ci0g
ICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50
cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CisgICAgbV90aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVk
RGF0YWJhc2UgU2VydmVyIik7CiB9CiAKIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFu
ZGxlciYgZmlsZUhhbmRsZXIpCkBAIC02Niw3ICs2Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVy
KGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1w
b3JhCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBk
YXRhYmFzZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7CiAKICAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBj
cmVhdGVUaHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhl
ZERhdGFiYXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2Vy
dmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIp
OwogfQogCiB2b2lkIElEQlNlcnZlcjo6cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25U
b0NsaWVudCYgY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAyNTZjZDUwN2U2ZTZkN2Y2NTZlZWNlMGMx
MTk4OTQ4ZmQ5MjNkYTFkLi45MzRhMWQxNzQ1MjkwODQyOGEzYWU2ZTBlZDdlNTEwYTlhOWNhNmU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgY2xhc3MgSURCU2VydmVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8SURCU2VydmVyPiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPElEQkNv
bm5lY3Rpb25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFi
YXNlSWRlbnRpZmllciwgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJEYXRh
YmFzZU1hcDsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBS
ZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fZGF0YWJhc2VU
aHJlYWRDcmVhdGlvbkxvY2s7CiAgICAgTG9jayBtX21haW5UaHJlYWRSZXBseUxvY2s7CiAgICAg
Ym9vbCBtX21haW5UaHJlYWRSZXBseVNjaGVkdWxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCmluZGV4
IDI5MmYwNWI4Y2Q1MDZlMjI5YWU2YjhiZDg2MjljMDk1NGQxODQ1OWIuLmM4MTYxNzE2OWEzMTQy
YjE4ZTlkN2U3NTNiZmQ5YjgwY2EzMTkwNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBA
IEFzeW5jQXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2RlcigpCiB7CiAgICAgLy8gU3RhcnQg
d29ya2VyIHRocmVhZC4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4
KTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJl
YWRFbnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKKyAgICBtX3RocmVhZElEID0gVGhyZWFk
OjpjcmVhdGUoQXN5bmNBdWRpb0RlY29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVj
b2RlciIpOwogfQogCiBBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKQEAg
LTQ3LDggKzQ3LDggQEAgQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCiAg
ICAgbV9xdWV1ZS5raWxsKCk7CiAgICAgCiAgICAgLy8gU3RvcCB0aHJlYWQuCi0gICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAg
bV90aHJlYWRJRC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX3RocmVhZElEID0gbnVsbHB0
cjsKIH0KIAogdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoUmVmPEFycmF5QnVm
ZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2Fs
bGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBl
cnJvckNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9Bc3luY0F1ZGlvRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
c3luY0F1ZGlvRGVjb2Rlci5oCmluZGV4IGJiNWM1ZTMzN2I1ZWNmMWY4ZTYxNzUzYTI5ZjhkMGY5
NzE0MTU1M2QuLmUxYjNhM2VhZWU2YmQ1NTRmZDdjY2FkM2NkY2FlYmYzNWJhODQ1MTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmgKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgQXN5bmNBdWRpb0RlY29kZXIgewogICAgIHN0YXRp
YyB2b2lkIHRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZvaWQgcnVuTG9vcCgp
OwogCi0gICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV90aHJlYWRJRDsKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKICAgICBN
ZXNzYWdlUXVldWU8RGVjb2RpbmdUYXNrPiBtX3F1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcAppbmRleCA1MDUyMzA0MTk3Y2RlZGRlNDdmZGNiYjkxMmVjNDc0MDU1Nzk3NDI4
Li5lN2Q1NjdkZmVhZDQ0MmMzOTZhZjBmNzA1MTA5NzNmZmUxNDhhYjBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC00MSw3ICs0MSw3IEBAIGNvbnN0IHNpemVfdCByZW5kZXJR
dWFudHVtU2l6ZSA9IDEyODsKIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgQXVkaW9CdWZmZXIqIHJl
bmRlclRhcmdldCkKICAgICA6IEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRh
cmdldC0+c2FtcGxlUmF0ZSgpKQogICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQot
ICAgICwgbV9yZW5kZXJUaHJlYWQoMCkKKyAgICAsIG1fcmVuZGVyVGhyZWFkKG51bGxwdHIpCiAg
ICAgLCBtX3N0YXJ0ZWRSZW5kZXJpbmcoZmFsc2UpCiB7CiAgICAgbV9yZW5kZXJCdXMgPSBBdWRp
b0J1czo6Y3JlYXRlKHJlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFu
dHVtU2l6ZSk7CkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlOjp1bmluaXRpYWxpemUoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9yZW5kZXJU
aHJlYWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQp
OwotICAgICAgICBtX3JlbmRlclRocmVhZCA9IDA7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkLT53
YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IG51bGxwdHI7CiAg
ICAgfQogCiAgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKQEAgLTgzLDcgKzgzLDcgQEAg
dm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKICAgICBp
ZiAoIW1fc3RhcnRlZFJlbmRlcmluZykgewogICAgICAgICBtX3N0YXJ0ZWRSZW5kZXJpbmcgPSB0
cnVlOwogICAgICAgICByZWYoKTsgLy8gU2VlIGNvcnJlc3BvbmRpbmcgZGVyZWYoKSBjYWxsIGlu
IG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2goKS4KLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBjcmVh
dGVUaHJlYWQoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnks
IHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50
cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUuaAppbmRleCA3NTU2MDQ2NDcyMzJjNGJjNTEzY2M5ZTM5ZGQ0NDVmMzhiNjJjZWY0
Li41NjkwMTM4YjE2NTcwYjNmOWQyMzdmOWRkNGE4ZWEyM2Q3M2ZmYWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmgKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Ob2RlIHsKICAgICBSZWZQdHI8QXVk
aW9CdXM+IG1fcmVuZGVyQnVzOwogICAgIAogICAgIC8vIFJlbmRlcmluZyB0aHJlYWQuCi0gICAg
dm9sYXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX3JlbmRlclRocmVhZDsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3JlbmRlclRocmVhZDsKICAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsKICAgICBz
dGF0aWMgdm9pZCBvZmZsaW5lUmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9p
ZCBvZmZsaW5lUmVuZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCmluZGV4IDg4NjlmNmJmMjIzMjMyZTYzY2MzZmI1MmUxNmFlMWRiM2Vi
NDFiZTYuLjhjOTJkNmU1Mzk2YWRmMTJmYmRkNjhkN2FjOTdmOWVkMTlhZGMwMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC03NzAs
OCArNzcwLDcgQEAgU2VjdXJpdHlPcmlnaW5EYXRhIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigp
CiB7CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkp
CiAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbiht
X2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0gICAgYXV0byYgdGhyZWFkID0g
ZGF0YWJhc2VUaHJlYWQoKTsKLSAgICBpZiAoY3VycmVudFRocmVhZCgpID09IHRocmVhZC5nZXRU
aHJlYWRJRCgpKQorICAgIGlmIChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VUaHJlYWQoKS5n
ZXRUaHJlYWRJRCgpKQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2Vj
dXJpdHlPcmlnaW4obV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAwZGRlNWY3MjY4
ZWU2NDJjMDA0MzA1Y2VmZTM2YjFjOWU0NGI4N2QzLi5iMzUzYmI4ZmE1NzViYWY4NTU4MTEyYWI1
M2VhODNhMWM5MDg5OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wgRGF0
YWJhc2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVh
dGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFi
YXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2Ui
KTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFz
ZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKIAotICAgIHJldHVybiBt
X3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBEYXRhYmFzZVRocmVh
ZDo6cmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5
bmMpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJl
YWQoKQogICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9u
cyBvbiB0aGlzIGRhdGFiYXNlIHRocmVhZAogICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+
c2h1dGRvd24oKTsKIAotICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVh
ZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVu
dGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKKyAgICBM
T0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSBy
ZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwg
bV90aHJlYWQtPmlkKCksIHRoaXMsIHJlZkNvdW50KCkpOwogCiAgICAgLy8gQ2xvc2UgdGhlIGRh
dGFiYXNlcyB0aGF0IHdlIHJhbiB0cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0aGF0IGlm
IGFueSB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFu
ZCB3ZSBkb24ndCBsZWF2ZSB0aGUgZGF0YWJhc2UgaW4gYW4KICAgICAvLyBpbmNvbnNpc3RlbnQg
b3IgbG9ja2VkIHN0YXRlLgpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6
OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgb3BlbkRhdGFiYXNlLT5wZXJmb3JtQ2xvc2UoKTsK
IAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdl
ciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVh
ZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXIqIGNsZWFudXBTeW5jID0gbV9jbGVhbnVwU3luYzsKIApAQCAtMTQyLDcgKzE0Miw3IEBA
IHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSYgZGF0YWJh
c2UpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0g
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoJlRo
cmVhZDo6Y3VycmVudCgpID09IG1fdGhyZWFkKTsKICAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNl
U2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZCgmZGF0
YWJhc2UpOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29y
ZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9vcGVuRGF0YWJhc2VTZXRNdXRleCk7CiAKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgp
ID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCgmVGhyZWFkOjpjdXJyZW50KCkgPT0gbV90aHJl
YWQpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0LmNv
bnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJlbW92ZSgmZGF0YWJh
c2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRocmVhZC5oCmluZGV4IGVjMDQxZTMxODE3MjQ5MmVjYTZiY2VmZThmMWRhMjVlYzkyZWQy
NmMuLmE1MjEyZGZiOGIxNzJjZTJmZjZhOTg4OGRlMGE5ZGI5NzdhZTJkMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKQEAg
LTU4LDcgKzU4LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIAogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVu
KERhdGFiYXNlJik7CiAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYpOwot
ICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9
CisgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkID8g
bV90aHJlYWQtPmlkKCkgOiAwOyB9CiAKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmdldCgpOyB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKICAgICB2b2lkIGRhdGFi
YXNlVGhyZWFkKCk7CiAKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJl
YWQgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX3NlbGZSZWY7CiAK
ICAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNrPiBtX3F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNmY5ZmNhNjdmM2M0N2FkZGM4M2Rl
YzhjYjBkNWViOGNjYjQwZDc0My4uMTM5YWE5OTFhMTZlYWQyMmY2OGY1MDFiZTdiOTQ1OTYzMjIx
MzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCkBA
IC0xMDEsMTQgKzEwMSwxNCBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3dJ
Zk5vdERvbmVSZWNlbnRseSgpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9u
QWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKIHsKLSAgICBU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKGNvbGxlY3QsIDAsICJXZWJD
b3JlOiBHQ0NvbnRyb2xsZXIiKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZShjb2xsZWN0LCAwLCAiV2ViQ29yZTogR0NDb250cm9sbGVyIik7CiAKICAgICBpZiAo
d2FpdFVudGlsRG9uZSkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJ
RCk7CisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJRCk7CisgICAgdGhyZWFkLT5kZXRh
Y2goKTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVj
dG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3lu
Y0ZpbGVTdHJlYW0uY3BwCmluZGV4IDE2OGU0ZTI3Nzk1ZDQyNWY0MDRmMTc1YzliY2JhOTNmNzM2
ODA3NGMuLjU1YzdjYjAyMzk4NTk5Yzk3MWU2YTM3YTBmOWE3MjQ4NDg0MmU2YmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAg
c3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9u
KQogCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwogICAg
IHN0ZDo6Y2FsbF9vbmNlKGNyZWF0ZUZpbGVUaHJlYWRPbmNlLCBbXSB7Ci0gICAgICAgIGNyZWF0
ZVRocmVhZCgiV2ViQ29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10geworICAgICAgICBUaHJlYWQ6
OmNyZWF0ZSgiV2ViQ29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10gewogICAgICAgICAgICAgZm9y
ICg7OykgewogICAgICAgICAgICAgICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCA0Y2RjZmFhZDZlODMy
YTM5YTVjMzUyNjU4MDU4NTA4NmIzZDlmNzJmLi5hODIzMzMxNmVmMTcyNGZmNzUzYzkzOTJlOWJk
NGI3MTllYWFkZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNkZWZpbmUgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgp
IEFTU0VSVCghbV9zeW5jVGhyZWFkUnVubmluZyB8fCAhSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQog
CiAvLyBGb3IgbWV0aG9kcyB0aGF0IGFyZSBtZWFudCB0byBzdXBwb3J0IHRoZSBzeW5jIHRocmVh
ZCBPTkxZCi0jZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhyZWFkID09IGN1
cnJlbnRUaHJlYWQoKSkKKyNkZWZpbmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5bmNUaHJl
YWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKQogI2RlZmluZSBBU1NFUlRfSUNPTl9TWU5DX1RIUkVB
RCgpIEFTU0VSVChJU19JQ09OX1NZTkNfVEhSRUFEKCkpCiAKICNpZiBQTEFURk9STShHVEspCkBA
IC0xNDEsNyArMTQxLDcgQEAgYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiAgICAgLy8gTG9jayBoZXJlIGFzIHdl
bGwgYXMgZmlyc3QgdGhpbmcgaW4gdGhlIHRocmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNuJ3QgYWN0
dWFsbHkgY29tbWVuY2UgdW50aWwgdGhlIGNyZWF0ZVRocmVhZCgpIGNhbGwgCiAgICAgLy8gY29t
cGxldGVzIGFuZCBtX3N5bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3lu
Y0xvY2subG9jaygpOwotICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJh
c2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRh
YmFzZSIpOworICAgIG1fc3luY1RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKEljb25EYXRhYmFzZTo6
aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogSWNvbkRhdGFiYXNl
Iik7CiAgICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IG1fc3luY1RocmVhZDsKICAgICBtX3N5bmNM
b2NrLnVubG9jaygpOwogICAgIGlmICghbV9zeW5jVGhyZWFkKQpAQCAtMTYxLDcgKzE2MSw3IEBA
IHZvaWQgSWNvbkRhdGFiYXNlOjpjbG9zZSgpCiAgICAgICAgIHdha2VTeW5jVGhyZWFkKCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBXYWl0IGZvciB0aGUgc3luYyB0aHJlYWQgdG8gdGVybWluYXRl
Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fc3luY1RocmVhZCk7CisgICAgICAg
IG1fc3luY1RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICBtX3N5bmNU
aHJlYWRSdW5uaW5nID0gZmFsc2U7ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuaAppbmRleCAwNjFhZjRhMTI1NTc3MWRlMTFhMzJmNTY4M2MwZWZkYTU5MjkzYjlk
Li44NjQwOTU1NDc1MzNmZDg5MGYwM2FmZTkyYmIwNmY2MDg3ZWU3MzYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNz
IEljb25EYXRhYmFzZSBmaW5hbCA6IHB1YmxpYyBJY29uRGF0YWJhc2VCYXNlIHsKICAgICB2b2lk
IHN5bmNUaW1lckZpcmVkKCk7CiAgICAgCiAgICAgVGltZXIgbV9zeW5jVGltZXI7Ci0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3N5bmNUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9zeW5jVGhy
ZWFkOwogICAgIGJvb2wgbV9zeW5jVGhyZWFkUnVubmluZzsKICAgICAKICAgICBIYXNoU2V0PFJl
ZlB0cjxEb2N1bWVudExvYWRlcj4+IG1fbG9hZGVyc1BlbmRpbmdEZWNpc2lvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCmluZGV4IDkxMjAwYzM0NWY0NTVm
OTZkNDk0YmZkMmFkNzAzZjI4YzVjNjI5ZDEuLmQ5YjZmNzJmYTM2ZmE3MDBjODI2ZjNjOTdkNmJh
YTAyZDQyZThiNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2Fn
ZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFk
LmNwcApAQCAtOTYsMTEgKzk2LDExIEBAIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6bm90aWZ5
T2JzZXJ2ZXJzKFJlc291cmNlVXNhZ2VEYXRhJiYgZGF0YSkKIAogdm9pZCBSZXNvdXJjZVVzYWdl
VGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFkSWRlbnRp
ZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdm0gPSAm
Y29tbW9uVk0oKTsKLSAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFk
Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNvdXJjZVVzYWdlIik7CisgICAgbV90aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNl
VXNhZ2UiKTsKIH0KIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2
b2lkKiByZXNvdXJjZVVzYWdlVGhyZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VUaHJlYWQuaAppbmRleCAxOGExZTY3NTQzZDIyMDljMTc5NTc0NzM2NjIyYTc4YjM4NGJiOGZj
Li5lZmRlMjdlZmU2YjBhYzQ1NDY0ZGU4OTFjNjdjZTc5ZjljZjJlMTlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBS
ZXNvdXJjZVVzYWdlVGhyZWFkIHsKICAgICB2b2lkIHRocmVhZEJvZHkoKTsKICAgICB2b2lkIHBs
YXRmb3JtVGhyZWFkQm9keShKU0M6OlZNKiwgUmVzb3VyY2VVc2FnZURhdGEmKTsKIAotICAgIFRo
cmVhZElkZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyIHsgMCB9OworICAgIFJlZlB0cjxUaHJl
YWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlv
biBtX2NvbmRpdGlvbjsKICAgICBIYXNoTWFwPHZvaWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNv
bnN0IFJlc291cmNlVXNhZ2VEYXRhJik+PiBtX29ic2VydmVyczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IDczMGMwYTZiZDkz
ZjQ1NzhkMWVkYmY5YWNlMWNkODY1NjZlNmM5ODguLmQ4ODA4ZGI2MzYzOWM5ZmNlODNmODVmNzJm
MDYyMGI2NGE3YjJhNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtMzUsMTQgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNjcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFk
SWRlbnRpZmllcigwKQorICAgIDogbV90aHJlYWQobnVsbHB0cikKIHsKIH0KIAogYm9vbCBTY3Jv
bGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgYXV0byB0aHJlYWRJZGVudGlm
aWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZpZXI7Ci0g
ICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRocmVhZCgpID09IHRocmVhZElk
ZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gU2Nyb2xsaW5nVGhyZWFkOjpz
aW5nbGV0b24oKS5tX3RocmVhZDsKKyAgICByZXR1cm4gdGhyZWFkICYmICZUaHJlYWQ6OmN1cnJl
bnQoKSA9PSB0aHJlYWQ7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChGdW5j
dGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQpAQCAtNzQsMTQgKzc0LDE0IEBAIFNjcm9sbGluZ1Ro
cmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKQogCiB2b2lkIFNjcm9sbGluZ1RocmVh
ZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIp
CisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXYWl0IGZvciB0
aGUgdGhyZWFkIHRvIGluaXRpYWxpemUgdGhlIHJ1biBsb29wLgogICAgIHsKICAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKLSAg
ICAgICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0
aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5nIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKICAgICAg
ICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25k
aXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFkUnVuTG9vcDsg
fSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5o
CmluZGV4IGRlMDYyZDc3YWMwMWRmOWQyYTA5ODYwZWJlNmI4ZTlmZDNjZmY1YzAuLmQ4ODkyZjA1
YmU2NDM3ZDRhYWNjMGE3NTFhN2NhN2U5M2JlZTBkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNz
IFNjcm9sbGluZ1RocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2so
KTsKICNlbmRpZgogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7Cisg
ICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXpl
UnVuTG9vcENvbmRpdGlvblZhcmlhYmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11
dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFi
YXNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFz
ZUxvYWRlci5jcHAKaW5kZXggZjcxMzMzYzVhMzdhOTk4OTY0ZjNhNzQxYzczMTUyZTk1MTQ2NmNm
Ni4uZGRiZTNiYTk4MGU0NTBhNDk0Y2QwNjQ4ZjQxYjVlMzZhZmVlYjVmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCkBA
IC02NCw3ICs2NCw3IEBAIFBhc3NSZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVyPiBIUlRGRGF0YWJh
c2VMb2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hyb25vdXNseUlmCiB9CiAKIEhSVEZEYXRhYmFz
ZUxvYWRlcjo6SFJURkRhdGFiYXNlTG9hZGVyKGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2Rh
dGFiYXNlTG9hZGVyVGhyZWFkKDApCisgICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKG51bGxw
dHIpCiAgICAgLCBtX2RhdGFiYXNlU2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBIUlRGRGF0YWJhc2VM
b2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSgpCiAgICAgCiAgICAgaWYgKCFtX2hydGZEYXRhYmFz
ZS5nZXQoKSAmJiAhbV9kYXRhYmFzZUxvYWRlclRocmVhZCkgewogICAgICAgICAvLyBTdGFydCB0
aGUgYXN5bmNocm9ub3VzIGRhdGFiYXNlIGxvYWRpbmcgcHJvY2Vzcy4KLSAgICAgICAgbV9kYXRh
YmFzZUxvYWRlclRocmVhZCA9IGNyZWF0ZVRocmVhZChkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlz
LCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFi
YXNlIGxvYWRlciIpOwogICAgIH0KIH0KIApAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgSFJURkRh
dGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbigpCiAgICAgCiAgICAg
Ly8gd2FpdEZvclRocmVhZENvbXBsZXRpb24oKSBzaG91bGQgbm90IGJlIGNhbGxlZCB0d2ljZSBm
b3IgdGhlIHNhbWUgdGhyZWFkLgogICAgIGlmIChtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKQotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKLSAg
ICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0g
bnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAppbmRleCBjODY5ZDEzN2Ex
ZGIyZjUyNDk4ZDBlMWI2NWQ1ODdlNmM4MTliMzgxLi4zYWQyNTFmMjE5OTA5ZjRiYzY0NTRkMDEz
MjAxYjZhN2NhNzAyNjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9IUlRGRGF0YWJhc2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9IUlRGRGF0YWJhc2VMb2FkZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBIUlRGRGF0YWJh
c2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxIUlRGRGF0YWJhc2VMb2FkZXI+IHsKIAogICAg
IC8vIEhvbGRpbmcgYSBtX3RocmVhZExvY2sgaXMgcmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgbV9k
YXRhYmFzZUxvYWRlclRocmVhZC4KICAgICBMb2NrIG1fdGhyZWFkTG9jazsKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9k
YXRhYmFzZUxvYWRlclRocmVhZDsKIAogICAgIGZsb2F0IG1fZGF0YWJhc2VTYW1wbGVSYXRlOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
Y3BwCmluZGV4IDk2ZjMzMDgyODA3OWE3OWFkNjQ4MjBkMDcyMWM1OWM1ZWExNmZkYjEuLjIxYmU5
OTZlZjM3ZTUzZGI3MDMxMDAxOTYyN2MwYzQwZDJiMjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3
IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxz
ZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgLy8gU3RhcnQgdXAgYmFja2dyb3VuZCB0
aHJlYWQKICAgICAvLyBGSVhNRTogd291bGQgYmUgYmV0dGVyIHRvIHVwIHRoZSB0aHJlYWQgcHJp
b3JpdHkgaGVyZS4gIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZWFsLXRpbWUsIGJ1dCBoaWdoZXIg
dGhhbiB0aGUgZGVmYXVsdC4uLgogICAgIGlmICh0aGlzLT51c2VCYWNrZ3JvdW5kVGhyZWFkcygp
ICYmIG1fYmFja2dyb3VuZFN0YWdlcy5zaXplKCkgPiAwKQotICAgICAgICBtX2JhY2tncm91bmRU
aHJlYWQgPSBjcmVhdGVUaHJlYWQoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlz
LCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5k
VGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0
aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKIH0KIAogUmV2ZXJiQ29udm9s
dmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKQEAgLTE0Niw3ICsxNDYsNyBAQCBSZXZlcmJDb252b2x2
ZXI6On5SZXZlcmJDb252b2x2ZXIoKQogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgICAgIH0KIAotICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbihtX2JhY2tncm91bmRUaHJlYWQpOworICAgICAgICBtX2JhY2tncm91
bmRUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4IDZiYWViN2NjZTI5
ODk2Yzk4OTYzNTEyZjQxYjQzYTJmMTI4ODU0MWMuLjA1OTYzMzY3YWUyODM0OTQ4NzkwYmE3Y2Ni
NzIwNjBlYzU5ODEwNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Jl
dmVyYkNvbnZvbHZlci5oCkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlciB7
CiAKICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBhbmQgc3luY2hyb25pemF0aW9uCiAgICAgYm9v
bCBtX3VzZUJhY2tncm91bmRUaHJlYWRzOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9iYWNrZ3Jv
dW5kVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBi
b29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBtX21vcmVJbnB1dEJ1ZmZlcmVkOwogICAgIG11
dGFibGUgTG9jayBtX2JhY2tncm91bmRUaHJlYWRNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJl
YWRlckdTdHJlYW1lci5jcHAKaW5kZXggNmNkOGJkN2Y4MWJmZjIyMjdmZTE0ZmJjYTBmYmZkMDU1
ZDA5YzU3MS4uMWYyNWU4ZTU0ZTllZTg1ZmEwY2NhNmEzMWI5MmUxMTFlNmRmMGNhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJl
YWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKQEAgLTM3MCwyMCArMzcwLDIwIEBA
IFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNh
bXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNG
cm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQg
c2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1
dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFs
dWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0
aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9G
aWxlUmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAg
ICB9KTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFk
LT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGFz
c1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJh
dGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVh
ZElEID0gY3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRh
LCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBU
aHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0
YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1
ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOwor
ICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXgg
MWM1YzMwZjM3N2E0MmJlMDAxNzcxNjUxZTg3ZjcwNDNhNWQ2NWM5MC4uMjY0NjZmNTNiNDgyMThk
MzM3YTVhODk0ZjFkYjcyOGRmNGM0N2M4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIFN0
cmVhbQogICAgICAgICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsK
ICAgICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAK
LSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZCB7IDAgfTsKKyAgICAgICAgUmVmUHRy
PFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgICAgIExvY2sgbV9pbml0aWFsaXpl
UnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVu
TG9vcENvbmRpdGlvbjsKICAgICAgICAgUnVuTG9vcCogbV9ydW5Mb29wIHsgbnVsbHB0ciB9OwpA
QCAtMTA3Nyw3ICsxMDc3LDcgQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogICAgIDogU3RyZWFt
aW5nQ2xpZW50KHNyYykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5M
b29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKCJSZXNvdXJj
ZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0
KV0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIlJlc291cmNlSGFuZGxlU3RyZWFt
aW5nQ2xpZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25k
aXRpb25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgp
OwpAQCAtMTExMyw4ICsxMTEzLDggQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCgpCiB7
CiAgICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3RocmVhZCk7Ci0g
ICAgICAgIG1fdGhyZWFkID0gMDsKKyAgICAgICAgbV90aHJlYWQtPmRldGFjaCgpOworICAgICAg
ICBtX3RocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKG1fcnVuTG9vcCA9PSAmUnVu
TG9vcDo6Y3VycmVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCmluZGV4IDQ2Yjg5OTRhODQxZWY3MWVhMjc5Y2U3
N2NiYzhmYjQzYzI5ZjBhNjIuLmZmYmZkYTliODkzNDgzNTQ5MGM5YTQwYmExZjQ4MzM2ZTQ3NjBj
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVy
UnVuTG9vcENGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xv
YWRlclJ1bkxvb3BDRi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1
bkxvb3AoKQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5M
b29wTXV0ZXgpOwogCiAgICAgaWYgKCFsb2FkZXJSdW5Mb29wT2JqZWN0KSB7Ci0gICAgICAgIGNy
ZWF0ZVRocmVhZChydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVy
Iik7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKHJ1bkxvYWRlclRocmVhZCwgMCwgIldlYkNvcmU6
IENGTmV0d29yayBMb2FkZXIiKTsKIAogICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFy
aWFibGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuY3BwCmluZGV4IDQ0MDhjZDE5ODcwNWJhODZjYzhjMTk4NmZiM2UyY2FkZTc5NmRj
YzYuLmYxMDU3MTVlZDhkODc5MzczYjYzMzFjYjI2ZTA4MmMzZTFhYjhiMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3Bw
CkBAIC05NCwxMCArOTQsMTAgQEAgaW50IEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdE
b3dubG9hZENvdW50KCkgY29uc3QKIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJl
YWRJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFydW5UaHJlYWQoKSkgewotICAgICAgICBpZiAobV90
aHJlYWRJZCkKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQp
OworICAgICAgICBpZiAobV90aHJlYWQpCisgICAgICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICAgICAgc2V0UnVuVGhyZWFkKHRydWUpOwotICAgICAgICBtX3RocmVh
ZElkID0gY3JlYXRlVGhyZWFkKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQi
KTsKKyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3dubG9hZFRocmVhZCwgdGhp
cywgImRvd25sb2FkVGhyZWFkIik7CiAgICAgfQogfQogCkBAIC0xMDUsOSArMTA1LDkgQEAgdm9p
ZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKIHsKICAgICBzZXRSdW5UaHJlYWQo
ZmFsc2UpOwogCi0gICAgaWYgKG1fdGhyZWFkSWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24obV90aHJlYWRJZCk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSAwOworICAgIGlmICht
X3RocmVhZCkgeworICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAg
ICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCmluZGV4IDAyY2U3MzFiZDEw
YTgwMTliN2ViZTFmYWM1MmI0NWU0MDkyNTYyMzEuLmY2YmJjNzdmNGQzY2UwYjk2ODdkMWQ4ZmNh
NjA5MTU4N2M5YWU0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgQ3VybERvd25s
b2FkTWFuYWdlciB7CiAKICAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVhZCh2b2lkKiBkYXRh
KTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAgICBSZWZQdHI8VGhyZWFk
PiBtX3RocmVhZDsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7CiAgICAgVmVjdG9yPENV
UkwqPiBtX3BlbmRpbmdIYW5kbGVMaXN0OwogICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5k
bGVMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKaW5kZXggNWY5ZTA5NTQwNDcxN2QzMGJk
ODk5NDFlNWYyNTJmMTdiMGE4NjdiOS4uNjhlMjFmNDc0NDUxYWMzODc1MmI5YmM4OTQzYzM1ZDIz
YjY5NjliYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCkBAIC05Miw3ICs5Miw3IEBAIGNs
YXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsK
ICAgICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgfTsKIAotICAgIFRocmVhZElkZW50aWZp
ZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrZXJUaHJl
YWQgeyBudWxscHRyIH07CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFs
c2UgfTsKICAgICBMb2NrIG1fbXV0ZXhTZW5kOwogICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbEN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAppbmRleCAxZTM3OWQxYjAwZDA5NTVm
YzJkYTAwYmUzZjk2Zjk5MmE5MWI5NDNmLi5lY2I5ZjU0YjY1YTMzNTI0ZTNhMzU2YTNiYzEzZDBl
MmY2ZjZhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKQEAgLTE5
OSw3ICsxOTksNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkK
IAogICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVmKCkuCiAKLSAgICBt
X3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7
CisgICAgbV93b3JrZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV2ViU29ja2V0IHRocmVhZCIs
IFt0aGlzXSB7CiAKICAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTI0OSw4
ICsyNDksOCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQoKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOwotICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKLSAgICBtX3dvcmtlclRocmVhZCA9IDA7Cisg
ICAgbV93b3JrZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV93b3JrZXJUaHJl
YWQgPSBudWxscHRyOwogICAgIGRlcmVmKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyVGhyZWFkLmNwcAppbmRleCA3YWQ1YjU3OTEzYTE2NzJkZjkxOTZlOWViMDEzM2UyM2UyMzI5
ODVkLi4zNTBmNGRjZDAyMDg1ZGUyMDJlMDA2Y2Q3NThlYzFmOGRiZGFjMDU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFdvcmtlclRo
cmVhZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBVUkwmIHNjcmlw
dFVSTCwgY29uc3QgU3RyCiB9CiAKIFdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVS
TCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3Jr
ZXJMb2FkZXJQcm94eSwgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5
LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
cywgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0
IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwgSURC
Q2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGNvbm5lY3Rpb25Qcm94eSwgU29ja2V0UHJvdmlk
ZXIqIHNvY2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRpbWVGbGFncyBydW50aW1lRmxhZ3MpCi0gICAg
OiBtX3RocmVhZElEKDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICwgbV93b3JrZXJM
b2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAsIG1fd29ya2VyUmVwb3J0aW5nUHJv
eHkod29ya2VyUmVwb3J0aW5nUHJveHkpCiAgICAgLCBtX3J1bnRpbWVGbGFncyhydW50aW1lRmxh
Z3MpCkBAIC0xMzMsMTUgKzEzMywxNSBAQCBXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQog
CiBib29sIFdvcmtlclRocmVhZDo6c3RhcnQoKQogewotICAgIC8vIE11dGV4IHByb3RlY3Rpb24g
aXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hl
biB0aGUgdGhyZWFkIHN0YXJ0cy4KKyAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2Fy
eSB0byBlbnN1cmUgdGhhdCBtX3RocmVhZCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQg
c3RhcnRzLgogICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0g
ICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJU
aHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOworICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNv
cmU6IFdvcmtlciIpOwogCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhy
ZWFkOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhy
ZWFkKQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQo
KQogICAgIGdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQo
KSk7CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBtX3RocmVhZElE
OworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IG1fdGhyZWFkOwogCiAgICAgQVNTRVJUKG1f
d29ya2VyR2xvYmFsU2NvcGUtPmhhc09uZVJlZigpKTsKIApAQCAtMjA1LDcgKzIwNSw3IEBAIHZv
aWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIHRocmVhZEdsb2JhbERhdGEoKS5k
ZXN0cm95KCk7CiAKICAgICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBkZXN0
cm95ZWQgZnJvbSBub3RpZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlzIi4K
LSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAK
IHZvaWQgV29ya2VyVGhyZWFkOjpzdGFydFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCmluZGV4IDA3YWQzY2U3ODRmOTE5ZjcwYzQ1NjgxYjk1
NGMwMDk5OTZmNTU3ZjIuLmY4MDllZTY2NzI3ZWUxMzlkYzRmMTlkMmNiNjFiMjI2NWU0ZWE0YmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApAQCAtNjAsNyArNjAsNyBAQCBj
bGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAg
ICBib29sIHN0YXJ0KCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJRDsgfQorICAgIFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZCA/IG1fdGhyZWFkLT5pZCgp
IDogMDsgfQogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AoKSB7IHJldHVybiBtX3J1bkxvb3A7
IH0KICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHkoKSBjb25zdCB7IHJl
dHVybiBtX3dvcmtlckxvYWRlclByb3h5OyB9CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdv
cmtlclJlcG9ydGluZ1Byb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRpbmdQcm94
eTsgfQpAQCAtOTgsNyArOTgsNyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291
bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRTdGFydCh2
b2lkKik7CiAgICAgdm9pZCB3b3JrZXJUaHJlYWQoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBXb3JrZXJSdW5M
b29wIG1fcnVuTG9vcDsKICAgICBXb3JrZXJMb2FkZXJQcm94eSYgbV93b3JrZXJMb2FkZXJQcm94
eTsKICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgbV93b3JrZXJSZXBvcnRpbmdQcm94eTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAppbmRleCBiYjY2ZmNlYTdlNTI4YmMy
N2Y2MzNhM2U1Mjg3OGI1MDFlZjBlMTg3Li4zNTc2Nzk0NmFkZTM3MmE0Nzk0NWY4NWQzZjg5NThi
NTI1NGFiZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCkBAIC00
MCw3ICs0MCw3IEBAIHN0YXRpYyBIYXNoU2V0PFN0b3JhZ2VUaHJlYWQqPiYgYWN0aXZlU3RvcmFn
ZVRocmVhZHMoKQogfQogCiBTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKLSAgICA6IG1f
dGhyZWFkSUQoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIH0KQEAgLTQ4LDE2ICs0OCwxNiBAQCBTdG9yYWdlVGhyZWFkOjpTdG9yYWdl
VGhyZWFkKCkKIFN0b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFt
X3RocmVhZCk7CiB9CiAKIGJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVh
ZElEID0gY3JlYXRlVGhyZWFkKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFj
aywgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOworICAgIGlmICghbV90aHJlYWQpCisg
ICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50
cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CiAgICAgYWN0
aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cisg
ICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5
UG9pbnRDYWxsYmFjayh2b2lkKiB0aHJlYWQpCkBAIC03OCwyNSArNzgsMjUgQEAgdm9pZCBTdG9y
YWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKIHZvaWQgU3RvcmFnZVRocmVhZDo6ZGlzcGF0
Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAg
ICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIG1fcXVldWUuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFdURk1vdmUoZnVuY3Rpb24p
KSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVh
ZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIGFj
dGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwogICAgIC8vIEV2ZW4gaW4gd2VpcmQs
IGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhyZWFkIHRv
IHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgaWYgKCFtX3RocmVhZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxGdW5j
dGlvbjx2b2lkICgpPj4oW3RoaXNdIHsKICAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwogICAg
IH0pKTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKKyAgICBtX3Ro
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSk7
Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2b2lk
IFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9y
YWdlVGhyZWFkLmgKaW5kZXggOTU2NGI4YWEwNmU1MjQzZTMwZTQ2N2M1ZmJmZTJjZGFkYjI0MGM1
Ni4uMzdkYzM4MTBjMWMwOTcxNDE3MmE4YzBlNTIyZDMwMzUxODMxNDczYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFN0b3JhZ2VU
aHJlYWQgewogICAgIC8vIEJhY2tncm91bmQgdGhyZWFkIHBhcnQgb2YgdGhlIHRlcm1pbmF0ZSBw
cm9jZWR1cmUuCiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWRJRDsKICAgICBN
ZXNzYWdlUXVldWU8RnVuY3Rpb248dm9pZCAoKT4+IG1fcXVldWU7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggM2I4NWYy
MmZmYWUwMWUyOGFhYjk5ODE2Njk4YWRhZDdhMzg0M2M1Zi4uYjA0YWNjOGMzMWM1ZWNhODJhNTE3
NDE2NjdkYjcwZTA1M2YxZDJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYmCiB7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1l
dGVycyk7CiAKLSAgICBXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKKyAg
ICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCgpOwogCiAgICAg
bV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJl
c3NNZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgbV9sb2FkVGhyb3R0bGVMYXRlbmN5ID0gcGFy
YW1ldGVycy5sb2FkVGhyb3R0bGVMYXRlbmN5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcAppbmRleCBlZjdiYTg5OTgyMDIzMjU4OWU3MzkxZjI3ZmNkM2Q2ZTE2OWY2ODk0Li5mYTAz
MGZiM2EyYTBmODJkNmEyNDViZjg1NmIzNmFhMjczMjAwNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWxTb3VwLmNwcApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFk
U3luY0luVGhyZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVl
LCBzCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKICAgICBSZWZQdHI8SU9DaGFubmVs
PiBjaGFubmVsKHRoaXMpOwotICAgIGRldGFjaFRocmVhZChjcmVhdGVUaHJlYWQoIklPQ2hhbm5l
bDo6cmVhZFN5bmMiLCBbY2hhbm5lbCwgc2l6ZSwgcXVldWUsIGNvbXBsZXRpb25IYW5kbGVyXSB7
CisgICAgVGhyZWFkOjpjcmVhdGUoIklPQ2hhbm5lbDo6cmVhZFN5bmMiLCBbY2hhbm5lbCwgc2l6
ZSwgcXVldWUsIGNvbXBsZXRpb25IYW5kbGVyXSB7CiAgICAgICAgIHNpemVfdCBidWZmZXJTaXpl
ID0gc3RkOjptaW4oc2l6ZSwgZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CiAgICAgICAgIHVpbnQ4
X3QqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhidWZmZXJT
aXplKSk7CiAgICAgICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IGFkb3B0R1Jl
Zihzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihidWZmZXJEYXRhLCBidWZmZXJTaXplLCBidWZm
ZXJEYXRhLCBmYXN0RnJlZSkpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSU9DaGFubmVsOjpy
ZWFkU3luY0luVGhyZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1
ZXVlLCBzCiAgICAgICAgICAgICBEYXRhIGRhdGEgPSB7IFdURk1vdmUoYnVmZmVyKSB9OwogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgMCk7CiAgICAgICAgIH0sIHF1ZXVlKTsK
LSAgICB9KSk7CisgICAgfSktPmRldGFjaCgpOwogfQogCiBzdHJ1Y3QgV3JpdGVBc3luY0RhdGEg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNz
dXJlTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJl
c3N1cmVNb25pdG9yLmNwcAppbmRleCAwNjA4YWI3MmY5OTI0OGVmMjRjZDJkNTI0NWVlNTMzM2Ew
MGQ5ZDBkLi40OGQxMDY5Nzc2NWE5NWE4YjM1ODcyMzBlMTAyZDgwM2FkNThjMGFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVN
b25pdG9yLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVt
b3J5UHJlc3N1cmVNb25pdG9yKCkKICAgICBpZiAobV9ldmVudEZEID09IC0xKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVU
aHJlYWQoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7CisgICAgUmVmUHRyPFRocmVh
ZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlz
XSB7CiAgICAgICAgIGRvdWJsZSBwb2xsSW50ZXJ2YWwgPSBzX21heFBvbGxpbmdJbnRlcnZhbElu
U2Vjb25kczsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIHNsZWVwKHBvbGxJ
bnRlcnZhbCk7CkBAIC0yNzEsNyArMjcxLDcgQEAgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1v
cnlQcmVzc3VyZU1vbml0b3IoKQogICAgICAgICB9CiAgICAgICAgIGNsb3NlKG1fZXZlbnRGRCk7
CiAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElkZW50aWZpZXIpOworICAgIHRocmVh
ZC0+ZGV0YWNoKCk7CiB9CiAKIElQQzo6QXR0YWNobWVudCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6
OmNyZWF0ZUhhbmRsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAppbmRleCAxZDUwMjE1YTIwMzExNGI0ZjIzZDVkNThmMmQyNTNmZjc5MDU2ZDVlLi40Zjk2
YWJiZjBkYzk3MmY4YjljMmM2Y2Y2ZTgyNjQ2OWUyNWZiZjViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFdlYlByb2Nl
c3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBw
YXJhbWV0ZXJzKQogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV1RGTW92ZShwYXJh
bWV0ZXJzKSk7CiAKICAgICAvLyBNYXRjaCB0aGUgUW9TIG9mIHRoZSBVSVByb2Nlc3MgYW5kIHRo
ZSBzY3JvbGxpbmcgdGhyZWFkIGJ1dCB1c2UgYSBzbGlnaHRseSBsb3dlciBwcmlvcml0eS4KLSAg
ICBXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CisgICAgV1RGOjpU
aHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CiAKICAgICBtX3N1
cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01l
bW9yeVByZXNzdXJlSGFuZGxlcjsKICAgICBpZiAoIW1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhh
bmRsZXIpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBkMzVhZWQ4NzE1MGRlZTQxMTk3MTQ2ZmVlZjBiMDlmZjQ2ZTg0MDYwLi5mMjdhOWJjZWI3
MjhmOTVjNTRlYzc3ZTMwNDViOTRlMDc2MmE3NGY3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDQtMDcgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5k
b3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAgICAgIChydW5KYXZhU2NyaXB0VGhy
ZWFkKToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAgICAoc3RvcEph
dmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW06CisgICAgICAgIChydW5UaHJlYWQpOgorICAgICAgICAodGVzdFRocmVhZElkZW50
aWZpZXJNYXApOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5j
cHA6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpydW5Mb2NrVGVzdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvUGFya2luZ0xvdC5jcHA6CisKIDIwMTctMDQtMDYgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEZvbnRXaXRoRmVhdHVyZXMg
dGVzdCBmb250IHBhc3MgT1RTCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZh
U2NyaXB0VGhyZWFkaW5nLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJl
YWRpbmcuY3BwCmluZGV4IGUyZjliYWRlNmNhN2MyNjk0ODVhNGNkY2JlNjA5OWMzNmJhMDIxOTgu
LmRjMjNhZTIyYTg1ZTBjOTk1MzE2N2Y5OTg1OWVjOWRlZTQzZjE3ZmIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0
YXRpYyBMb2NrJiBqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0
ZXg7CiB9CiAKLXR5cGVkZWYgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBUaHJlYWRTZXQ7Cit0
eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFRocmVhZD4+IFRocmVhZFNldDsKIHN0YXRpYyBUaHJlYWRT
ZXQmIGphdmFTY3JpcHRUaHJlYWRzKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoVGhyZWFkU2V0LCBzdGF0aWNKYXZhU2NyaXB0VGhyZWFkcywgKCkpOwpAQCAtMTA4LDEw
ICsxMDgsOSBAQCB2b2lkIHJ1bkphdmFTY3JpcHRUaHJlYWQodm9pZCopCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011
dGV4KCkpOwotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGN1cnJlbnRUaHJlYWQo
KTsKLSAgICAgICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgICAgIFRocmVhZDo6Y3VycmVu
dCgpLmRldGFjaCgpOwogICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLnJlbW92ZSh0aHJlYWQp
OwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFT
Y3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhy
ZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xMjgsNyArMTI3LDcgQEAgdm9pZCBzdGFydEphdmFTY3JpcHRUaHJlYWRz
KCkKICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50OyArK2kpCi0g
ICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgmcnVuSmF2YVNjcmlw
dFRocmVhZCwgMCwgMCkpOworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChUaHJlYWQ6
OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogfQogCiB2b2lkIHN0b3BKYXZh
U2NyaXB0VGhyZWFkcygpCkBAIC0xMzgsNyArMTM3LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlwdFRo
cmVhZHMoKQogICAgICAgICBqYXZhU2NyaXB0VGhyZWFkc1Nob3VsZFRlcm1pbmF0ZSA9IHRydWU7
CiAgICAgfQogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIGphdmFTY3JpcHRUaHJlYWRz
Q291bnQ+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCBqYXZhU2NyaXB0VGhy
ZWFkc0NvdW50PiB0aHJlYWRzOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2
YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKICAgICAgICAgY29weVRvVmVjdG9yKGphdmFTY3JpcHRU
aHJlYWRzKCksIHRocmVhZHMpOwpAQCAtMTQ2LDcgKzE0NSw3IEBAIHZvaWQgc3RvcEphdmFTY3Jp
cHRUaHJlYWRzKCkKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGphdmFTY3Jp
cHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhy
ZWFkc1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAg
ICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0g
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggZmI0ZDI2
ZmNjZWI3MGM0YjUzMjAxMGRhODVmYjljZTc4NTVjMTM4NC4uMWI5N2ExOTk3Y2VmM2RjNDNiNWRl
ODE0MzM3OGQzMDY3MmVjZjFmZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdHNU
b0NvbnNpc3RlbnRWYWx1ZXNGb3JUZXN0aW5nKCkKIHN0YXRpYyB2b2lkIHJ1blRocmVhZCh2b2lk
KiBhcmcpCiB7CiAgICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgcHJldmlvdXNJZCA9IDA7Ci0g
ICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50SWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgY3Vy
cmVudElkID0gVGhyZWFkOjpjdXJyZW50KCkuaWQoKTsKICAgICAvLyBWZXJpZnkgMiBzdWNjZXNz
aXZlIHRocmVhZHMgZG8gbm90IGdldCB0aGUgc2FtZSBJZC4KICAgICBBU1NFUlQocHJldmlvdXNJ
ZCAhPSBjdXJyZW50SWQpOwogICAgIHByZXZpb3VzSWQgPSBjdXJyZW50SWQ7CkBAIC0xMDcyLDgg
KzEwNzIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCgpCiAgICAgcHRo
cmVhZF9qb2luKHB0aHJlYWQsIDApOwogCiAgICAgLy8gTm93IGNyZWF0ZSBhbm90aGVyIHRocmVh
ZCB1c2luZyBXVEYuIE9uIE9TWCwgaXQgd2lsbCBoYXZlIHRoZSBzYW1lIHB0aHJlYWQgaGFuZGxl
Ci0gICAgLy8gYnV0IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQgVGhyZWFkSWRlbnRpZmllci4KLSAg
ICBjcmVhdGVUaHJlYWQocnVuVGhyZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsKKyAg
ICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBSZWZQdHI8VGhyZWFkPi4KKyAgICBUaHJl
YWQ6OmNyZWF0ZShydW5UaHJlYWQsIDAsICJEdW1wUmVuZGVyVHJlZTogdGVzdCIpOwogfQogCiBz
dGF0aWMgdm9pZCBhbGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJzKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCmluZGV4IDg0ODUyNzM1MWY2MDYzZmMyNjM2ODc4
MDU2ZDljMjRkYmFiZTgzZGMuLjc3MjE2MzZiNzc4MDdmMTM5NTFlYTExMmZiZDQxM2U4ZmFjNDYw
YmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcApAQCAt
ODksMTQgKzg5LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAgICBDb25kaXRpb24gZW1wdHlDb25kaXRp
b247CiAgICAgQ29uZGl0aW9uIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRl
bnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBw
cm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1lclRocmVh
ZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAKICAgICBW
ZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2sgcmVjZWl2ZWRMb2NrOwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJl
ZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAg
ICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrZXIsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHBy
ZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVl
LnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENo
ZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRDb250aW51ZSB8
fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9p
ZCBydW5UZXN0KAogICAgIHNsZWVwKGRlbGF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51
bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50
aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50
aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAog
ICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xNDIsNyArMTQyLDcgQEAg
dm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24s
IGxvY2tlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVj
a2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxk
Q29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFk
OjpjdXJyZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxk
Q29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVl
LnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xNTUsOCArMTU1
LDggQEAgdm9pZCBydW5UZXN0KAogICAgICAgICBwcm9kdWNlclRocmVhZHMuYXBwZW5kKHRocmVh
ZElkZW50aWZpZXIpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
ZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElk
ZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCisgICAgICAgIHRocmVhZElkZW50aWZpZXItPndh
aXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrZXIobG9jayk7CkBAIC0xNjQsOCArMTY0LDggQEAgdm9pZCBydW5UZXN0KAogICAgIH0K
ICAgICBlbXB0eUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKIAotICAgIGZvciAoVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJZGVudGlmaWVyIDogY29uc3VtZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJl
YWQ+IHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCisgICAgICAgIHRocmVhZElk
ZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBFWFBFQ1RfRVEobnVtUHJvZHVj
ZXJzICogbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwgcmVjZWl2ZWQuc2l6ZSgpKTsKICAgICBzdGQ6
OnNvcnQocmVjZWl2ZWQuYmVnaW4oKSwgcmVjZWl2ZWQuZW5kKCkpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9Mb2NrLmNwcAppbmRleCA1NTc2MzAyZDY5MGRmY2EzNTk5MjkyOGIxYzg1M2M3
NjIyZTQ1ZmI5Li42YTRlNTM4ZjU2ZjQ2ZDE3N2EzZjYyZjFkZGViM2E0ZDBhZjJhZjA4IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZv
aWQgcnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1UaHJl
YWRzUGVyR3JvdXAsIHVuc2lnbmVkCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExvY2tUeXBlW10+
IGxvY2tzID0gc3RkOjptYWtlX3VuaXF1ZTxMb2NrVHlwZVtdPihudW1UaHJlYWRHcm91cHMpOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gd29yZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRv
dWJsZVtdPihudW1UaHJlYWRHcm91cHMpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVu
dGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4o
bnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRyPFRo
cmVhZD5bXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKIAogICAgIGZv
ciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFkR3Jv
dXBJbmRleC0tOykgewogICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhy
ZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51
bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAg
ICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVh
ZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJMb2NrIHRlc3QgdGhy
ZWFkIiwKICAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMs
IG51bUl0ZXJhdGlvbnMsIHdvcmtQZXJDcml0aWNhbFNlY3Rpb25dICgpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSXRlcmF0aW9uczsgaS0tOykgewpAQCAtNjYs
NyArNjYsNyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5z
aWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAogICAgIH0KIAogICAgIGZvciAodW5z
aWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7
IHRocmVhZEluZGV4LS07KQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRz
W3RocmVhZEluZGV4XSk7CisgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0Rm9yQ29t
cGxldGlvbigpOwogCiAgICAgZG91YmxlIGV4cGVjdGVkID0gMDsKICAgICBmb3IgKHVpbnQ2NF90
IGkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obnVtSXRlcmF0aW9ucykgKiB3b3JrUGVyQ3JpdGlj
YWxTZWN0aW9uICogbnVtVGhyZWFkc1Blckdyb3VwOyBpLS07KQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAppbmRleCBjNjdlMWUwODE1YTgzYWZhOTMzM2Uy
YWM5YTJiZDc4YjY3YjE2NDViLi41YWY5YzdjODI3YjIxZTIxZDhkZjkzMDUyNjBkNmZmZWU2OGZi
ZDFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcApA
QCAtNDgsMTYgKzQ4LDE0IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtVGhyZWFkczsgaS0tOykgewogICAgICAgICAgICAg
dGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAg
ICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAiUGFya2luZyBUZXN0
IFRocmVhZCIsCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBFWFBFQ1RfTkUoMHUsIGN1cnJlbnRUaHJlYWQoKSk7Ci0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvd24oKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF3
YWtlLmFkZChjdXJyZW50VGhyZWFkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3
b2tlbiA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3YWtlLmFk
ZChUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdva2Vu
ID0gJlRocmVhZDo6Y3VycmVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
Lm5vdGlmeV9vbmUoKTsKICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICB9CkBAIC02
NSwxNiArNjMsMTYgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICB2b2lkIHVucGFy
a09uZSh1bnNpZ25lZCBzaW5nbGVVbnBhcmtJbmRleCkKICAgICB7Ci0gICAgICAgIEVYUEVDVF9F
USgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgPT0gbGFzdEF3
b2tlbik7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0g
MDsKLSAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIDg+IHF1ZXVlOworICAgICAgICBW
ZWN0b3I8UmVmUHRyPFRocmVhZD4sIDg+IHF1ZXVlOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JF
YWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIs
IGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiB0aHJlYWRJ
ZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFk
ZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgICAgICAgICAgcXVldWUuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOworICAgICAgICAgICAg
ICAgIHF1ZXVlLmFwcGVuZCgmdGhyZWFkSWRlbnRpZmllcik7CiAKICAgICAgICAgICAgICAgICBu
dW1XYWl0aW5nT25BZGRyZXNzKys7CiAgICAgICAgICAgICB9KTsKQEAgLTg3LDEyICs4NSwxMiBA
QCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8
c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwogICAgICAgICAgICAgd2hpbGUgKGF3YWtlLnNpemUo
KSA8IHNpbmdsZVVucGFya0luZGV4ICsgMSkKICAgICAgICAgICAgICAgICBjb25kaXRpb24ud2Fp
dChsb2NrZXIpOwotICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBsYXN0QXdva2VuKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgIT0gbGFzdEF3b2tlbik7CiAgICAgICAgICAgICBp
ZiAoIXF1ZXVlLmlzRW1wdHkoKSAmJiBxdWV1ZVswXSAhPSBsYXN0QXdva2VuKSB7CiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiV29rZSB1cCB3cm9uZyB0aHJlYWQ6IHF1ZXVlID0gIiwgbGlzdER1
bXAocXVldWUpLCAiLCBsYXN0IGF3b2tlbiA9ICIsIGxhc3RBd29rZW4sICJcbiIpOwogICAgICAg
ICAgICAgICAgIEVYUEVDVF9FUShxdWV1ZVswXSwgbGFzdEF3b2tlbik7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsYXN0QXdva2VuID0gMDsKKyAgICAgICAgICAgIGxhc3RBd29rZW4gPSBu
dWxscHRyOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDAsNyArOTgsNyBAQCBzdHJ1Y3QgU2lu
Z2xlTGF0Y2hUZXN0IHsKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdPbkFkZHJl
c3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChU
aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBbJl0g
KFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRk
cmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAgICAgCkBAIC0xMTQsNyArMTEyLDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAK
ICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZv
ckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFk
ZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVzcykg
ewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIApAQCAtMTI5LDggKzEyNyw4IEBAIHN0cnVj
dCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tl
cik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRl
bnRpZmllciA6IHRocmVhZHMpCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0
aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVu
dGlmaWVyIDogdGhyZWFkcykKKyAgICAgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JD
b21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgLy8gU2VtYXBob3JlIG9wZXJhdGlvbnMuCkBAIC0x
NzksOSArMTc3LDkgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgQXRvbWljPGludD4g
c2VtYXBob3JlOwogICAgIHN0ZDo6bXV0ZXggbG9jazsKICAgICBzdGQ6OmNvbmRpdGlvbl92YXJp
YWJsZSBjb25kaXRpb247Ci0gICAgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBhd2FrZTsKLSAg
ICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IGxhc3RBd29rZW4geyAwIH07CisgICAgSGFzaFNldDxSZWY8VGhyZWFkPj4gYXdha2U7CisgICAg
VmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOworICAgIFJlZlB0cjxUaHJlYWQ+IGxhc3RB
d29rZW4geyBudWxscHRyIH07CiB9OwogCiB2b2lkIHJ1blBhcmtpbmdUZXN0KHVuc2lnbmVkIG51
bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBudW1UaHJlYWRzLCB1bnNpZ25lZCBu
dW1TaW5nbGVVbnBhcmtzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306490</attachid>
            <date>2017-04-07 06:11:14 -0700</date>
            <delta_ts>2017-04-07 06:15:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407221113.patch</filename>
            <type>text/plain</type>
            <size>227644</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5kYWRjMzZjMGJmMTQ1NjQ5
ZTY5YjkwMjdkOWFjNTAyMWU1MjdkMGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6b3duZXJUaHJl
YWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAgIChKU0M6OmZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2Vu
ZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6ZmlyZVRyYXApOgorICAgICAgICAq
IHRvb2xzL0hlYXBWZXJpZmllci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cHJp
bnRWZXJpZmljYXRpb25IZWFkZXIpOgorCiAyMDE3LTA0LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVcGRhdGUgdGhlIHByaW9y
aXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVjMGJiNTBkODUwY2Nk
NWZkNGVjNTBkYzk0NDg4MzRjZmM2Y2NjM2QuLjM2ODVlNWE3MDE4MTBjYjBjMWQyMGRkNzhiY2Jm
YjY5MDQzZmZkMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYxIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6
dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBU
aHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJl
YWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNw
cDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwOgorICAgICAgICAq
IGJlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHA6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHA6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6Cisg
ICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCk6CisgICAgICAg
ICogd3RmL01haW5UaHJlYWQuaDoKKyAgICAgICAgKiB3dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Lmg6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwOgorICAgICAgICAoV1RG
OjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKToKKyAgICAg
ICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVu
dmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjpUaHJlYWRQcml2YXRlKToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OmZvckVhY2hJbXBs
KToKKyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5oOgorICAgICAgICAoV1RGOjpQYXJraW5nTG90
Ojpmb3JFYWNoKToKKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0
cjo6UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6Cisg
ICAgICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFkR3JvdXAuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmguCisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAuCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRl
cjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZU9uY2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAo
V1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xk
ZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaDogQ29w
aWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuY3BwLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAg
ICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6
VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAg
ICogd3RmL1RocmVhZEhvbGRlcldpbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6
OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAg
ICAgICAgKiB3dGYvVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpub3JtYWxp
emVUaHJlYWROYW1lKToKKyAgICAgICAgKFdURjo6dGhyZWFkRW50cnlQb2ludCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50
VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJl
bnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEdsb2Jh
bE1heFFPU0NsYXNzKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkdW1wKToKKyAgICAgICAgKFdURjo6bm9ybWFsaXplVGhy
ZWFkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmFkanVzdGVkUU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJl
YWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjppZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6YWRkT25FeGl0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmpvaW5hYmxlU3RhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRpZEJlY29tZURldGFj
aGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRKb2luKToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpoYXNFeGl0ZWQpOgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25h
bEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGlu
Zyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6ZGlkRXhpdCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0YWJs
aXNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRl
dGFjaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRJRCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpy
ZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChX
VEY6OlB0aHJlYWRTdGF0ZTo6UHRocmVhZFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
UHRocmVhZFN0YXRlOjpqb2luYWJsZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRo
cmVhZFN0YXRlOjpwdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRocmVh
ZFN0YXRlOjpkaWRCZWNvbWVEZXRhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJl
YWRTdGF0ZTo6ZGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6
ZGlkSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6aGFzRXhpdGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppZGVudGlmaWVy
QnlQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZXN0YWJsaXNoSWRlbnRp
ZmllckZvclB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpwdGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFu
Z2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6dGhyZWFkRGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OmN1cnJlbnRUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzaWduYWxUaHJlYWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRJRCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6VGhyZWFkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp+VGhyZWFk
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFk
Ojplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6c3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjp0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFuZ2VUaHJl
YWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1dvcmtR
dWV1ZS5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KToKKyAg
ICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2NvY29hL1dvcmtRdWV1ZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hRT1NDbGFzcyk6CisgICAgICAgICogd3Rm
L2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRm
b3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgICogd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcDoKKyAg
ICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9sbGVyOjpFdmVudEZE
UG9sbGVyKToKKyAgICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9s
bGVyOjp+RXZlbnRGRFBvbGxlcik6CisgICAgICAgICogd3RmL21hYy9NYWluVGhyZWFkTWFjLm1t
OgorICAgICAgICAoV1RGOjppbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIp
OgorICAgICAgICAoV1RGOjppbml0aWFsaXplV2ViVGhyZWFkSWRlbnRpZmllcik6CisgICAgICAg
IChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCk6CisKIDIwMTctMDQtMDcg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIFVwZGF0ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NzNkMzc5MzQ4NGRkZDYwOGJjYzU5YTAwYTViZWY1OTJjYWMwYjZkLi5h
NWNkNjEwNDgyZTk0NTY3ZDEzOWY4NTdjNGEyMjNjNDUwOGYzYTg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsODAgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJl
ZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBz
ZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6SURCU2VydmVyKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0F1ZGlvRGVjb2Rlcjo6QXN5bmNBdWRpb0RlY29kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2Rlcik6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6dW5pbml0
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
c3RhcnRSZW5kZXJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4pOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRo
cmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhy
ZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6Omdl
dFRocmVhZElEKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhy
ZWFkRm9yRGVidWdnaW5nKToKKyAgICAgICAgKiBmaWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYWxsT25GaWxlVGhyZWFkKToKKyAgICAgICAgKiBsb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpv
cGVuKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6Y2xvc2UpOgorICAgICAgICAq
IGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2Fn
ZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVh
dGVUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmg6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayk6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJU
RkRhdGFiYXNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFzZUxvYWRl
cjo6SFJURkRhdGFiYXNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFzZUxv
YWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFz
ZUxvYWRlcjo6d2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6
OlJldmVyYkNvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6On5S
ZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJH
U3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50Ojp+UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxv
YWRlclJ1bkxvb3ApOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJl
YWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9w
VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1w
bEN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3Rh
cnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3Rv
cFRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6Ondv
cmtlclRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclRocmVhZDo6dGhyZWFkSUQpOgorCiAyMDE3LTA0LTA3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVcGRh
dGUgdGhlIHByaW9yaXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3VyY2VzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDJiMzliOThjNzQ5Njk2NjRkMjcwZGFjNTgwOTc3ZjEyOTVkMWZiZmUuLjc4NTM4MTQ4NjQz
YjU2ODYyMzZiMTBhZWQyNzg2NjlhZmVhZWFkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAg
ICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+
IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8g
UHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVh
ZDo6flN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiBTdG9yYWdl
L1N0b3JhZ2VUaHJlYWQuaDoKKwogMjAxNy0wNC0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVyZSBFeHRy
YSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVuIHRoZXJlIGlzIGEgV2ViIEluc3BlY3RvciBGcm9u
dGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGE1MmNkN2FjZGQxMjI2M2U2NWFmMTk2YmEwMDMzMDIxMzhiOTFl
NjYuLjUxNDQ1ZTdiYzUzNjlkYjEzN2IzMDkyZDg4OWI5MGYxYTJiOWM0YjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1
c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0
aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6cmVh
ZFN5bmNJblRocmVhZCk6CisgICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJl
TW9uaXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVt
b3J5UHJlc3N1cmVNb25pdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisK
IDIwMTctMDQtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBs
b29wIHNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
Q29tcGFyZUFuZFN3YXBUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
Q29tcGFyZUFuZFN3YXBUZXN0LmNwcAppbmRleCBlNzgwODZjM2E5NjEyYTJmMGI0ZDdhYWYxYWRj
N2JhMWExMDFjNTQ3Li40M2FlZjA3Nzk3MGNmZWRiMmNhYzA0NjNmY2Q5ZWNjYTI5ZDE1MjU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2Fw
VGVzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5k
U3dhcFRlc3QuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkK
IHsKICAgICBCaXRtYXAgYml0bWFwOwogICAgIGNvbnN0IGludCBudW1UaHJlYWRzID0gNTsKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEc1tudW1UaHJlYWRzXTsKKyAgICBSZWZQdHI8VGhy
ZWFkPiB0aHJlYWRzW251bVRocmVhZHNdOwogICAgIERhdGEgZGF0YVtudW1UaHJlYWRzXTsKIAog
ICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwpAQCAtMTA3LDEyICsxMDcsMTIgQEAgdm9p
ZCB0ZXN0Q29tcGFyZUFuZFN3YXAoKQogICAgICAgICBkYXRhW2ldLmlkID0gaTsKICAgICAgICAg
ZGF0YVtpXS5udW1UaHJlYWRzID0gbnVtVGhyZWFkczsKICAgICAgICAgc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHRocmVhZEZ1bmMgPSBzdGQ6OmJpbmQoc2V0Qml0VGhyZWFkRnVuYywgJmRhdGFbaV0p
OwotICAgICAgICB0aHJlYWRJRHNbaV0gPSBjcmVhdGVUaHJlYWQoInNldEJpdFRocmVhZEZ1bmMi
LCB0aHJlYWRGdW5jKTsKKyAgICAgICAgdGhyZWFkc1tpXSA9IFRocmVhZDo6Y3JlYXRlKCJzZXRC
aXRUaHJlYWRGdW5jIiwgdGhyZWFkRnVuYyk7CiAgICAgfQogCiAgICAgcHJpbnRmKCJXYWl0aW5n
IGZvciAlZCB0aHJlYWRzIHRvIGpvaW5cbiIsIG51bVRocmVhZHMpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtVGhyZWFkczsgaSsrKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bih0aHJlYWRJRHNbaV0pOworICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogCiAgICAgcHJpbnRmKCJQQVNTOiBDb21wYXJlQW5kU3dhcCB0ZXN0IGNvbXBsZXRlZCB3aXRo
b3V0IGEgaGFuZ1xuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyMTdi
NWM4NTUxYTU4ZTZjZmQwMGM1YmQxZjJkYWExMDI1ZjQwOGUuLjdkMjAzNmJlODYxNmZmNTM4Njdl
NWUwNzk1NjVmZGE1YTc4ODUxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
NDY3LDcgKzI0NjcsNiBAQAogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNv
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4
N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovOyB9OwogCQlG
RUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBX
YXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUZFRTQzRkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFNDNGQ0QxRTY2NDE0MDAw
NzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVB
bmRTd2FwVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAq
LzsgfTsKIAkJRkVGRDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVF
Nzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
QEAgLTUwOTMsNyArNTA5Miw2IEBACiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRj
aGRvZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGlu
Z1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Q
aW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVEQTUwRDUxQjk3RjREOTAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93
VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBs
YXRmb3JtVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQw
MEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9D
b21wYXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYw
NDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjg1NCw3ICs2ODUyLDYgQEAKIAkJCQlGNjkyQTg3ODAyNTU1OTdEMDFG
RjYwRjcgLyogT3BlcmF0aW9ucy5oICovLAogCQkJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAv
KiBPcHRpb25zLmNwcCAqLywKIAkJCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9u
cy5oICovLAotCQkJCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5o
ICovLAogCQkJCTg2ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oICovLAog
CQkJCTE0NzM0MURGMURDMkNFOTYwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5jcHAgKi8s
CiAJCQkJMTQ3MzQxRDMxREMwMkU2RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmggKi8s
CkBAIC05MzM0LDcgKzkzMzEsNiBAQAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBT
dXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1
NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFFMUE2RTUwMUUwMDcxNjc1
NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVFNDNGQ0UxRTY2
NDE3MTAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZC
NzMyNzFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvdGVzdGFpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIu
Y3BwCmluZGV4IDg3YjM1M2FhMzc5MjVjYTFlMmZhODQxMTk5NzZhZGYwYjFlMDdiYWEuLmM5MTc3
MDc5NTg4Zjg2ZDQzMWEyOGJjMDc0ZDRmZTJlM2YxM2RjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci90ZXN0YWlyLmNwcApAQCAtMTkxMywxMCArMTkxMywxMCBAQCB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFk
SWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNz
b3JDb3JlcygpOyBpLS07KSB7CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAg
Y3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAg
ICAgInRlc3RiMyB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAoOzspIHsKQEAgLTE5MzMsOCArMTkzMyw4IEBAIHZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgfQogCi0gICAgZm9yIChU
aHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZCk7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWQgOiB0aHJl
YWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgY3Jhc2hMb2Nr
LmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAwMTk5NmFm
NzFhYjRmMDllYjQ5YjcwMTFjMTdkYmM5M2M0MGNlODdhLi45MDQ2NTY0ODg3YjZiM2E0YWZhYzM1
OWRjMTBjNTAzODRkNzRkZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAt
MTY4NTAsMTAgKzE2ODUwLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAg
IExvY2sgbG9jazsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOworICAg
IFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAgICAg
ICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAg
ICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAgICAg
ICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAt
MTY4NzAsOCArMTY4NzAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAg
ICAgICAgICAgfSkpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQg
OiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAg
IGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53
YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKaW5kZXggYTRlMjFm
OWZhM2NkNDcyMWVhMjY3NWUwNmU0ZDUzMGM1YmE5NWIzNS4uZTliMWY1YzJmMGJjMjdiMDI5MzEw
YzU1ODE1MjBiMWI1NTIyNTk3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N1cGVyU2FtcGxlci5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbml0aWFsaXplU3Vw
ZXJTYW1wbGVyKCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVN1cGVyU2FtcGxlcigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjcmVhdGVUaHJlYWQoCisgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAg
ICAgICJKU0MgU3VwZXIgU2FtcGxlciIsCiAgICAgICAgIFtdICgpIHsKICAgICAgICAgICAgIGNv
bnN0IGludCBzbGVlcFF1YW50dW0gPSAxMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAKaW5kZXggY2VmOTkwY2I0ODMzYTZiYjk0NzFiZDA4YTUwNGU1NWZiNDdkZjQ1
OC4uYWQwZWNjNjlhNzdkMTcyY2Y0YmMxZWZhYzkzZGY5MzAyN2MwMDllNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBjbGFz
cyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogICAgICAg
ICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBUaHJlYWQgc3RhcnRlZFxuIik7CiAgICAgICAg
IAogICAgICAgICBpZiAobV9yZWxhdGl2ZVByaW9yaXR5KQotICAgICAgICAgICAgY2hhbmdlVGhy
ZWFkUHJpb3JpdHkoY3VycmVudFRocmVhZCgpLCBtX3JlbGF0aXZlUHJpb3JpdHkpOworICAgICAg
ICAgICAgVGhyZWFkOjpjdXJyZW50KCkuY2hhbmdlUHJpb3JpdHkobV9yZWxhdGl2ZVByaW9yaXR5
KTsKICAgICAgICAgCiAgICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IHN0ZDo6bWFrZV91bmlx
dWU8Q29tcGlsYXRpb25TY29wZT4oKTsKICAgICAgICAgbV9sb25nTGl2ZWRTdGF0ZSA9IHN0ZDo6
bWFrZV91bmlxdWU8TG9uZ0xpdmVkU3RhdGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKaW5kZXggNzg4YTZjMzYyMzY5YzU4
ZGFkMjlhNjBhMzg3MTA0NGU0NjRlZDMwNS4uMmI4MjRlY2ZkZTU4OTNiMmM2YjcwNmY0NzAyZWNk
MjI5NWQyMzU1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvRGlzYXNzZW1ibGVyLmNwcApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBBc3luY2hyb25vdXNE
aXNhc3NlbWJsZXIgewogcHVibGljOgogICAgIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpCiAg
ICAgewotICAgICAgICBjcmVhdGVUaHJlYWQoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBb
Jl0gKCkgeyBydW4oKTsgfSk7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJBc3luY2hyb25vdXMg
RGlzYXNzZW1ibGVyIiwgWyZdICgpIHsgcnVuKCk7IH0pOwogICAgIH0KICAgICAKICAgICB2b2lk
IGVucXVldWUoc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzaykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggM2FlZTMwMTA0ZjUyOTFhMjg3NjRhNWNkZWU1YWE4
ZjBjYTcyYWQzMS4uNzIyM2IyMGM5ZGZiYTEwNDMwOThhNzg1NzRiYTI4YTY5NGMwNDViZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIEhl
YXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKICAgICAgICAgICAgIG1fc2hvdWxkU3RvcENvbGxl
Y3RpbmdDb250aW51b3VzbHkgPSB0cnVlOwogICAgICAgICAgICAgbV9jb2xsZWN0Q29udGludW91
c2x5Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICB9Ci0gICAgICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCk7CisgICAgICAgIG1fY29s
bGVjdENvbnRpbnVvdXNseVRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQCB2b2lkIEhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVl
OwogICAgIAogICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKLSAgICAg
ICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBt
X2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgPSBXVEY6OlRocmVhZDo6Y3JlYXRlKAogICAgICAg
ICAgICAgIkpTQyBERUJVRyBDb250aW51b3VzIEdDIiwKICAgICAgICAgICAgIFt0aGlzXSAoKSB7
CiAgICAgICAgICAgICAgICAgTW9ub3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDE2YmVlZjlh
ODlkMDZkZjI3OTcxN2U3NzBiMTY0YTQ3MTQuLmQ2NzgzN2FmZWYxMzAxZjk2NzJmNjBlYTI5YzQz
ZmM4NTk3ZGViOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTQ5LDYgKzQ5LDcg
QEAKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC02NjYsNyArNjY3LDcgQEAgY2xh
c3MgSGVhcCB7CiAgICAgTG9jayBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrOwogICAgIENvbmRp
dGlvbiBtX2NvbGxlY3RDb250aW51b3VzbHlDb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0
b3BDb2xsZWN0aW5nQ29udGludW91c2x5IHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCB7IDAgfTsKKyAgICBSZWZQdHI8V1RGOjpUaHJl
YWQ+IG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCB7IG51bGxwdHIgfTsKICAgICAKICAgICBN
b25vdG9uaWNUaW1lIG1fbGFzdEdDU3RhcnRUaW1lOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0
R0NFbmRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAKaW5kZXggYjg1Yjc2NDhlMmY1ZDE5ZmEyMmQ3NjNmN2JjZGVmOGY0NGM0MmM4
OC4uNGZmZGY5Y2M0ZTNjMzYwNmIxZGE5YTk0MDc3ZmM3NGM4ODZlYzE4OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBAIC02NCw2
MyArNjQsMTMgQEAKICNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CiAjZW5kaWYKIAotI2lmIFVTRShQ
VEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFs
Lmg+Ci0KLS8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRo
cmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVhZFN1c3Bl
bmRSZXN1bWUgPSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFsTG9jazsK
LXRocmVhZF9sb2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YSo+IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQotc3RhdGlj
IHZvaWQgcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwg
dm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0
eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQu
bG9hZCgpOwotCi0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52
b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQu
Ci0gICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90
IHByb2Nlc3MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJz
dCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5k
IHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2Vk
ZXMuCi0gICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVu
ZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIg
aXMgY2FsbGVkLgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1
YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRl
eHRfdCo+KHVjb250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1c3BlbmRl
ZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOwotI2Vs
c2UKLSAgICB0aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0
LT51Y19tY29udGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8g
c2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0IGlzIGFz
eW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMg
ZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcv
b25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJf
MDRfMDMKLSAgICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0
aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2
ZWQuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3
OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3QoJnRocmVh
ZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hpbmcgaGVy
ZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhp
cyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNvIGJlZm9y
ZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJl
YWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVj
dXRlZCByZWN1cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OwotICAgIHNp
Z2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25h
bFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNp
Z25hbFNldCk7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMg
dGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRP
V1MpICYmICFPUyhEQVJXSU4pCi0KICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBu
YW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRocmVhZDsK
K3VzaW5nIEpTVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFzcyBBY3Rp
dmVNYWNoaW5lVGhyZWFkc01hbmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVhZHNNYW5h
Z2VyJiBhY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTQ0LDEzIEBA
IE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNpZmljS2V5
RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBMb2NrSG9s
ZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAg
IGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAgICAgVGhy
ZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsgdDspIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0OwogICAgICAg
ICBkZWxldGUgdDsKICAgICAgICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMgTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxUaHJlYWRTcGVjaWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwgQ2FuQmVH
Q1RocmVhZDo6VHJ1ZT4+IHRocmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEuZ2V0KCk7
Ci19Ci0KLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0aHJlYWRE
YXRhKQotICAgIDogZGF0YSh0aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWREYXRhKTsK
LX0KLQotVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhy
ZWFkKCkKLXsKLSAgICByZXR1cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQotCi1ib29s
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQm
IG90aGVyKSBjb25zdAotewotI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAgICByZXR1
cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0g
ICAgcmV0dXJuICEhcHRocmVhZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3RoZXIpOwot
I2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlzIHBsYXRm
b3JtCi0jZW5kaWYKLX0KLQogdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgp
CiB7CiAgICAgaWYgKHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5l
VGhyZWFkcykpIHsKQEAgLTIzOSw3ICsxNjEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRD
dXJyZW50VGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVhZCogdGhy
ZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJlYWQqIHRo
cmVhZCA9IG5ldyBKU1RocmVhZCh0aGlzKTsKICAgICB0aHJlYWRTcGVjaWZpY1NldChtX3RocmVh
ZFNwZWNpZmljRm9yTWFjaGluZVRocmVhZHMsIHRoaXMpOwogCiAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7CkBAIC0yNDgsMTIgKzE3MCwxMiBAQCB2b2lkIE1h
Y2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRz
ID0gdGhyZWFkOwogfQogCi1UaHJlYWQqIE1hY2hpbmVUaHJlYWRzOjptYWNoaW5lVGhyZWFkRm9y
Q3VycmVudFRocmVhZCgpCitKU1RocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRG
b3JDdXJyZW50VGhyZWFkKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhy
ZWFkc011dGV4KTsKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQ
bGF0Zm9ybVRocmVhZCgpOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRU
aHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRo
cmVhZCA9PSBwbGF0Zm9ybVRocmVhZCkKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gY3VycmVu
dFRocmVhZCgpOworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQt
PnRocmVhZElEKCkgPT0gaWQpCiAgICAgICAgICAgICByZXR1cm4gdGhyZWFkOwogICAgIH0KIApA
QCAtMjgzLDIyICsyMDUsMjEgQEAgdm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBNYWNoaW5lVGhy
ZWFkczo6cmVtb3ZlVGhyZWFkKHZvaWQqIHApCiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYK
IAotICAgICAgICBtYWNoaW5lVGhyZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJyZW50UGxh
dGZvcm1UaHJlYWQoKSk7CisgICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZv
dW5kKGN1cnJlbnRUaHJlYWQoKSk7CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0
Zm9ybVRocmVhZD4KLXZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoUGxh
dGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVU
aHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIgaWQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsKLSAgICBpZiAoKnQgPT0gcGxhdGZvcm1UaHJlYWQpIHsKKyAgICBKU1RocmVhZCog
dCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsK
ICAgICAgICAgbV9yZWdpc3RlcmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7
CiAgICAgICAgIGRlbGV0ZSB0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCogbGFzdCA9
IG1fcmVnaXN0ZXJlZFRocmVhZHM7CisgICAgICAgIEpTVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3Rl
cmVkVGhyZWFkczsKICAgICAgICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsg
dDsgdCA9IHQtPm5leHQpIHsKLSAgICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkg
eworICAgICAgICAgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgICAgICAg
ICBsYXN0LT5uZXh0ID0gdC0+bmV4dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTMyMCwxODIgKzI0MSwyMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJG
cm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdAogICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tUb3AsIGN1cnJl
bnRUaHJlYWRTdGF0ZS5zdGFja09yaWdpbiwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsK
IH0KIAotTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEoKQorTWFjaGluZVRo
cmVhZHM6OkpTVGhyZWFkOjpKU1RocmVhZChNYWNoaW5lVGhyZWFkcyopCisgICAgOiBuZXh0KG51
bGxwdHIpCisgICAgLCBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIGF1
dG8gc3RhY2tCb3VuZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0Zm9ybVRo
cmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0YWNrQm91
bmRzLm9yaWdpbigpOwotICAgIHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0KLSNpZiBP
UyhXSU5ET1dTKQotICAgIEFTU0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFk
SWQoKSk7Ci0gICAgYm9vbCBpc1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVIYW5kbGUo
R2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2Vz
cygpLAotICAgICAgICAgICAgJnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwgRFVQTElD
QVRFX1NBTUVfQUNDRVNTKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwotI2Vs
aWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3VycmVudFRo
cmVhZC5zdG9yZSh0aGlzKTsKLQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBn
bG9iYWwgY29uZmlndXJhdGlvbi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6
ZVNpZ25hbEhhbmRsZXI7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25hbEhhbmRs
ZXIsIFtdIHsKLSAgICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lIGluIHRoZSBoYW5kbGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
IHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAgICAgICBz
dHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9t
YXNrKTsKLSAgICAgICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7Ci0KLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRTaWduYWxI
YW5kbGVyU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFS
VCB8IFNBX1NJR0lORk87Ci0gICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
LCAmYWN0aW9uLCAwKTsKLSAgICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAgc2lnZW1w
dHlzZXQoJm1hc2spOwotICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSk7Ci0gICAgcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0KLSAgICBz
ZW1faW5pdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4g
dGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAq
LyAwKTsKLSNlbmRpZgorICAgIG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7Cisg
ICAgbV9zdGFja0VuZCA9IHN0YWNrQm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YTo6flRocmVhZERhdGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZDo6Z2V0UmVnaXN0ZXJzKEpTVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsKLSNpZiBP
UyhXSU5ET1dTKQotICAgIENsb3NlSGFuZGxlKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKLSNlbGlm
IFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICBzZW1fZGVzdHJveSgmc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZSk7Ci0jZW5kaWYKKyAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzJiBy
ZWdzID0gcmVnaXN0ZXJzLnJlZ3M7CisgICAgcmV0dXJuIG1fdGhyZWFkLT5nZXRSZWdpc3RlcnMo
cmVncyk7CiB9CiAKLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnN1c3BlbmQoKQot
ewotI2lmIE9TKERBUldJTikKLSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNw
ZW5kKHBsYXRmb3JtVGhyZWFkKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IEtFUk5fU1VDQ0VTUzsK
LSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgYm9vbCB0aHJlYWRJc1N1c3BlbmRlZCA9IChTdXNwZW5k
VGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKSAhPSAoRFdPUkQpLTEpOwotICAgIEFTU0VSVCh0
aHJlYWRJc1N1c3BlbmRlZCk7Ci0gICAgcmV0dXJuIHRocmVhZElzU3VzcGVuZGVkOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY3VycmVudFBsYXRmb3JtVGhy
ZWFkKCkgIT0gcGxhdGZvcm1UaHJlYWQsICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNw
ZW5kIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7Ci0gICAgewotICAgICAgICAvLyBEdXJp
bmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9t
IHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVh
ZCBvZiBwZXIgdGhyZWFkIGxvY2suCi0gICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcg
Y2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KLSAgICAgICAgLy8gQW5kIEEgYXR0ZW1w
dCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCi0gICAgICAgIC8vIEEg
YW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBB
IGFuZCBCLgotICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQu
Ci0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYg
KCFzdXNwZW5kQ291bnQpIHsKLSAgICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2Ug
dG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVu
dCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVz
ZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgotICAgICAgICAgICAgLy8gSW5zdGVh
ZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBw
YXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tp
bGwocGxhdGZvcm1UaHJlYWQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHNlbV93YWl0KCZzZW1hcGhv
cmVGb3JTdXNwZW5kUmVzdW1lKTsKLSAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1
cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUg
YWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgotICAgICAgICAgICAgc3VzcGVuZGVkLnN0b3JlKHRy
dWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgICsrc3Vz
cGVuZENvdW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBh
IHdheSB0byBzdXNwZW5kIHRocmVhZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KLXZv
aWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3VtZSgpCi17Ci0jaWYgT1MoREFSV0lO
KQotICAgIHRocmVhZF9yZXN1bWUocGxhdGZvcm1UaHJlYWQpOwotI2VsaWYgT1MoV0lORE9XUykK
LSAgICBSZXN1bWVUaHJlYWQocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJF
QURTKQotICAgIHsKLSAgICAgICAgLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUg
c2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICBM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsU2lnbmFsTG9jayk7Ci0gICAgICAgIGlmIChzdXNwZW5kQ291
bnQgPT0gMSkgewotICAgICAgICAgICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lIGludGVycnVwdCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBhY3R1YWxseSBpc3N1ZWQsCi0gICAgICAgICAgICAv
LyB0aGUgc2lnbmFsIGhhbmRsZXIgaXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCi0g
ICAgICAgICAgICAvLyBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBo
YW5kbGVyIGludm9jYXRpb24gZm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAgICAgICAgICAgIC8v
IDEuIFVzZSBkaWZmZXJlbnQgc2lnbmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51
bWJlciBpbiB0aGUgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50
cyB0byBkaXN0aW5ndWlzaCBzdXNwZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0
aHJlYWRfc2lncXVldWUgY2FuIGJlIHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCi0gICAgICAgICAg
ICAvLyAzLiBVc2UgdGhyZWFkIGxvY2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGlu
IHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0
b24sIHdlIHRha2UgKDMpLiBzdXNwZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0
LgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2lnVGhyZWFk
U3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotICAgICAgICAgICAg
Ly8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMg
ZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCi0gICAgICAg
ICAgICBzdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwot
ICAgICAgICB9Ci0gICAgICAgIC0tc3VzcGVuZENvdW50OwotICAgIH0KLSNlbHNlCi0jZXJyb3Ig
TmVlZCBhIHdheSB0byByZXN1bWUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0K
LQotc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpnZXRSZWdpc3RlcnMoVGhyZWFk
RGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJz
OjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIE9TKERBUldJ
TikKLSNpZiBDUFUoWDg2KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBzaXplb2YocmVncykv
c2l6ZW9mKGludCk7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhS
RUFEX1NUQVRFOwotI2VsaWYgQ1BVKFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0g
eDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2
b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUoUFBDKSAKLSAgICB1bnNpZ25lZCB1
c2VyX2NvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxh
dm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShQUEM2NCkKLSAgICB1
bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUo
QVJNKQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOwot
ICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOwotI2Vs
aWYgQ1BVKEFSTTY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRF
NjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURf
U1RBVEU2NDsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgotCi0g
ICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKHBsYXRmb3JtVGhyZWFk
LCBmbGF2b3IsICh0aHJlYWRfc3RhdGVfdCkmcmVncywgJnVzZXJfY291bnQpOwotICAgIGlmIChy
ZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2Ug
dGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5
IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBv
cnRlZC4iLCByZXN1bHQpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICByZXR1cm4gdXNl
cl9jb3VudCAqIHNpemVvZih1aW50cHRyX3QpOwotLy8gZW5kIE9TKERBUldJTikKLQotI2VsaWYg
T1MoV0lORE9XUykKLSAgICByZWdzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENP
TlRFWFRfQ09OVFJPTDsKLSAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxl
LCAmcmVncyk7Ci0gICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKLSNlbGlmICgoT1MoRlJFRUJT
RCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICByZWdzID0gc3Vz
cGVuZGVkTWFjaGluZUNvbnRleHQ7Ci0gICAgcmV0dXJuIHNpemVvZihSZWdpc3RlcnM6OlBsYXRm
b3JtUmVnaXN0ZXJzKTsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX2F0dHJfaW5p
dCgmcmVncy5hdHRyaWJ1dGUpOwotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhORVRCU0Qp
Ci0jaWYgIU9TKE9QRU5CU0QpCi0gICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZA
a2RlLm9yZwotICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0
dHJpYnV0ZSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMg
bm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBh
bHRlcm5hdGl2ZXMKLSAgICBwdGhyZWFkX2dldGF0dHJfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdz
LmF0dHJpYnV0ZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0jZXJyb3IgTmVlZCBh
IHdheSB0byBnZXQgdGhyZWFkIHJlZ2lzdGVycyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0K
LQotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2lu
dGVyKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjpz
dGFja1BvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwg
KChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQogICAg
IHJldHVybiBNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwpAQCAtNTE5LDcgKzI4
MCw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OnN0YWNr
UG9pbnRlcigpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi12b2lk
KiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIoKSBj
b25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmZyYW1lUG9p
bnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJF
RUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6
ZnJhbWVQb2ludGVyKHJlZ3MpOwpAQCAtNTI4LDcgKzI4OSw3IEBAIHZvaWQqIE1hY2hpbmVUaHJl
YWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYK
IH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1
Y3Rpb25Qb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVn
aXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwg
T1MoV0lORE9XUykgfHwgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkKICAgICBy
ZXR1cm4gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdzKTsKQEAgLTUzNyw3
ICsyOTgsNyBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpp
bnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAogI2VuZGlmCiB9CiAKLXZvaWQqIE1hY2hpbmVUaHJl
YWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAordm9pZCogTWFjaGlu
ZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewogICAgIC8v
IExMSW50IHVzZXMgcmVnVDQgYXMgUEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8
fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICszMDksNiBA
QCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKCkg
Y29uc3QKIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZvaWQgTWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0
ZXJzJiByZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJl
Z2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9T
KFdJTkRPV1MpICYmICFPUyhEQVJXSU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19H
TElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnJlZ3Mu
YXR0cmlidXRlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlmCi19Ci0K
IHN0YXRpYyBpbmxpbmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGludCByZWRa
b25lQWRqdXN0bWVudCA9IDA7CkBAIC01NzMsMTcgKzMyNCwxNyBAQCBzdGF0aWMgaW5saW5lIGlu
dCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1lbnQ7CiB9
CiAKLXN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6
Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQogewot
ICAgIGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSk7
CisgICAgY2hhciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jh
c2UpOwogICAgIGNoYXIqIGVuZCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mPHNpemVvZih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFj
a1RvcCkpKTsKICAgICBBU1NFUlQoYmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVuZFdpdGhS
ZWRab25lID0gZW5kICsgb3NSZWRab25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGVuZFdpdGhSZWRab25lKSkgPT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdp
dGhSZWRab25lKSk7CiAKLSAgICBpZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFja0VuZCkKLSAgICAg
ICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQp
OworICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IG1fc3RhY2tFbmQpCisgICAgICAgIGVuZFdpdGhS
ZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tFbmQpOwogCiAgICAg
c3RkOjpzd2FwKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5ICszNjcsOSBAQCBz
dGF0aWMgdm9pZCBjb3B5TWVtb3J5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qg
c2l6ZSkKIC8vIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5Q29weU90aGVyVGhy
ZWFkU3RhY2sgaXMgb25seSBjYWxsZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBzaXplKQogLy8gb3Bl
cmF0aW9uLiBBcyB0aGUgaGVhcCBpcyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIgdGhhbiB0aGUgc3Rh
Y2sgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBtaW5pbWFsLgogLy8gU2VlOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hpbmVUaHJlYWRzOjp0
cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlP
dGhlclRocmVhZFN0YWNrKEpTVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNh
cGFjaXR5LCBzaXplX3QqIHNpemUpCiB7Ci0gICAgVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJz
OworICAgIEpTVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCByZWdpc3Rl
cnNTaXplID0gdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6OnBhaXI8
dm9pZCosIHNpemVfdD4gc3RhY2sgPSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3RlcnMuc3Rh
Y2tQb2ludGVyKCkpOwogCkBAIC02MzEsOCArMzgyLDYgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6
dHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6
ZV8KICAgICBpZiAoY2FuQ29weSkKICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2FzdDxjaGFy
Kj4oYnVmZmVyKSArICpzaXplLCBzdGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAgICAqc2l6
ZSArPSBzdGFjay5zZWNvbmQ7Ci0KLSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJz
KTsKIH0KIAogYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVf
dCogc2l6ZSkKQEAgLTY0NCwzNiArMzkzLDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNv
cHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAK
ICAgICAqc2l6ZSA9IDA7CiAKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1
cnJlbnRQbGF0Zm9ybVRocmVhZCgpOworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50
VGhyZWFkKCk7CiAgICAgaW50IG51bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAgdG8gZGVu
b3RlIHRoYXQgd2UgaGF2ZW4ndCBjb3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5ZXQuCiAg
ICAgaW50IGluZGV4ID0gMTsKLSAgICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxw
dHI7CisgICAgSlNUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CiAKLSAgICBU
aHJlYWQqIHByZXZpb3VzVGhyZWFkID0gbnVsbHB0cjsKLSAgICBmb3IgKFRocmVhZCogdGhyZWFk
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7Ci0gICAgICAgIGlmICgq
dGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0
aHJlYWQtPnN1c3BlbmQoKTsKKyAgICBKU1RocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRy
OworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVh
ZDsgaW5kZXgrKykgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKSB7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lmIE9TKERBUldJ
TikKLSAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQp
IHsKICAgICAgICAgICAgICAgICBpZiAoIW51bWJlck9mVGhyZWFkcykgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKFRocmVhZCogY291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7
IGNvdW50ZWRUaHJlYWQ7IGNvdW50ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5uZXh0KQorICAg
ICAgICAgICAgICAgICAgICBmb3IgKEpTVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3Rl
cmVkVGhyZWFkczsgY291bnRlZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQt
Pm5leHQpCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlRocmVhZHMrKzsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gUmUtZG8g
dGhlIHN1c3BlbnNpb24gdG8gZ2V0IHRoZSBhY3R1YWwgZmFpbHVyZSByZXN1bHQgZm9yIGxvZ2dp
bmcuCi0gICAgICAgICAgICAgICAga2Vybl9yZXR1cm5fdCBlcnJvciA9IHRocmVhZF9zdXNwZW5k
KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVycm9y
ICE9IEtFUk5fU1VDQ0VTUyk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmVycm9y
KCkgIT0gS0VSTl9TVUNDRVNTKTsKIAogICAgICAgICAgICAgICAgIFdURlJlcG9ydEVycm9yKF9f
RklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwKLSAgICAgICAgICAgICAgICAg
ICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQg
dGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVhZCAlcC4i
LAotICAgICAgICAgICAgICAgICAgICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhy
ZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291
bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBp
ZCAlcC4iLAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3IoKSwgaW5kZXgsIG51bWJl
ck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnRocmVh
ZElEKCkpKTsKIAogICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgaW52YWxpZCB0aHJlYWQgb24g
dGhlIHRocmVhZHNUb0JlRGVsZXRlZCBsaXN0LgogICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0
IGp1c3QgZGVsZXRlIGl0IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRlZCBvdGhlcgogICAg
ICAgICAgICAgICAgIC8vIHRocmVhZHMsIGFuZCB0aGV5IG1heSBzdGlsbCBiZSBob2xkaW5nIHRo
ZSBDIGhlYXAgbG9jayB3aGljaAogICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgZm9yIGRlbGV0
aW5nIHRoZSBpbnZhbGlkIHRocmVhZC4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAgICAgICAgICAg
ICAvLyBkZWZlciB0aGUgZGVsZXRpb24gdGlsbCBhZnRlciB3ZSBoYXZlIHJlc3VtZWQgYWxsIHRo
cmVhZHMuCi0gICAgICAgICAgICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0
OworICAgICAgICAgICAgICAgIEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0Owog
ICAgICAgICAgICAgICAgIHRocmVhZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsKICAgICAg
ICAgICAgICAgICB0aHJlYWRzVG9CZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4NywyNSArNDM0
LDI1IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25z
dCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKG51bWJlck9mVGhyZWFkcyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJldmlv
dXNUaHJlYWQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsK
KyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlmCiAgICAg
ICAgIH0KICAgICAgICAgcHJldmlvdXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9
IHRocmVhZC0+bmV4dDsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdp
c3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAg
aWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFk
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsK
KyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRyeUNv
cHlPdGhlclRocmVhZFN0YWNrKHRocmVhZCwgYnVmZmVyLCBjYXBhY2l0eSwgc2l6ZSk7CiAgICAg
fQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVh
ZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRm
b3JtVGhyZWFkKQorICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQt
PnRocmVhZElEKCkgIT0gaWQpCiAgICAgICAgICAgICB0aHJlYWQtPnJlc3VtZSgpOwogICAgIH0K
IAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsg
KSB7Ci0gICAgICAgIFRocmVhZCogbmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAgICBmb3Ig
KEpTVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7CisgICAg
ICAgIEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICBkZWxldGUg
dGhyZWFkOwogICAgICAgICB0aHJlYWQgPSBuZXh0VGhyZWFkOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggZDE5NmZjOWU1
ZjRkNzkwNzViZDYxODI0MmNkODdmNzk5NDQ4N2YyMi4uOTE5N2M0NDA4Y2UyZmQ0ZWU2YWEzZDE0
YTdjNjllNmY4Y2ExMDk0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmgKQEAgLTIyLDI1ICsyMiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVGhyZWFkLmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1Mo
V0lORE9XUykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRl
IDxzaWduYWwuaD4KLS8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5k
IHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCi0vLyBUaGlzIGJ1ZyBoYXMgYmVlbiBm
aXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQot
Ly8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wuCi0vLyBodHRwczovL2J1Z3Mu
ZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQotI2lmIE9TKEZSRUVC
U0QpCi0jaW5jbHVkZSA8dWNvbnRleHQuaD4KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBDb2RlQmxvY2tTZXQ7CkBAIC02NCwxMyArNTEsMTAgQEAgY2xhc3MgTWFj
aGluZVRocmVhZHMgewogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJyZW50VGhy
ZWFkKCk7IC8vIE9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNl
IHRoZSBzYW1lIGhlYXAgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogCi0gICAgY2xhc3MgVGhyZWFk
RGF0YSB7CisgICAgY2xhc3MgSlNUaHJlYWQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRocmVhZERhdGEoKTsKLSAgICAgICAgflRocmVh
ZERhdGEoKTsKLQotICAgICAgICBzdGF0aWMgVGhyZWFkRGF0YSogY3JlYXRlRm9yQ3VycmVudFRo
cmVhZCgpOworICAgICAgICBKU1RocmVhZChNYWNoaW5lVGhyZWFkcyopOwogCiAgICAgICAgIHN0
cnVjdCBSZWdpc3RlcnMgewogICAgICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVyKCkgY29uc3Q7
CkBAIC03OSw4NCArNjMsNDAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAgICAgICAgICAg
dm9pZCogaW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBsbGlu
dFBDKCkgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAg
ICAgICAgCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAgICAgdXNpbmcg
UGxhdGZvcm1SZWdpc3RlcnMgPSBNYWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdpc3RlcnM7Ci0j
ZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKQot
ICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90OwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgICAgICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKLSAg
ICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAgICAgICB9Owot
I2Vsc2UKLSNlcnJvciBOZWVkIGEgdGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3IgdGhpcyBwbGF0
Zm9ybQotI2VuZGlmCi0KLSAgICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CisgICAg
ICAgICAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07CiAKLSAgICAg
ICAgYm9vbCBzdXNwZW5kKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgICAgIHNpemVf
dCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJlZ2lzdGVycyhS
ZWdpc3RlcnMmKTsKKyAgICAgICAgRXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0Zm9ybVN1c3Bl
bmRFcnJvcj4gc3VzcGVuZCgpIHsgcmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7IH0KKyAgICAg
ICAgdm9pZCByZXN1bWUoKSB7IG1fdGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAgICBzaXplX3Qg
Z2V0UmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAgIFBsYXRmb3Jt
VGhyZWFkIHBsYXRmb3JtVGhyZWFkOwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7Ci0gICAgICAg
IHZvaWQqIHN0YWNrRW5kOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRMRSBwbGF0Zm9y
bVRocmVhZEhhbmRsZTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICAg
ICAgc2VtX3Qgc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNvbnRleHRfdCBz
dXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3VudCB7IDAgfTsK
LSAgICAgICAgc3RkOjphdG9taWM8Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSNlbmRpZgot
ICAgIH07Ci0KLSAgICBjbGFzcyBUaHJlYWQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICAgICAgVGhyZWFkKFRocmVhZERhdGEqKTsKLQotICAgIHB1YmxpYzoKLSAgICAg
ICAgdXNpbmcgUmVnaXN0ZXJzID0gVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0gICAgICAgIHN0
YXRpYyBUaHJlYWQqIGNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgICAgICBib29sIHN1c3BlbmQoKSB7IHJldHVybiBk
YXRhLT5zdXNwZW5kKCk7IH0KLSAgICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEtPnJlc3VtZSgp
OyB9Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IHJldHVy
biBkYXRhLT5nZXRSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJz
KFJlZ2lzdGVycyYgcmVncykgeyBkYXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9Ci0gICAgICAg
IHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApIHsg
cmV0dXJuIGRhdGEtPmNhcHR1cmVTdGFjayhzdGFja1RvcCk7IH0KLQotICAgICAgICBjb25zdCBQ
bGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5wbGF0Zm9ybVRo
cmVhZDsgfQotICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBkYXRhLT5z
dGFja0Jhc2U7IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBkYXRh
LT5zdGFja0VuZDsgfQorICAgICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBj
b25zdCB7IHJldHVybiBtX3RocmVhZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBzdGFja0Jhc2Uo
KSBjb25zdCB7IHJldHVybiBtX3N0YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBzdGFja0VuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQqIG5leHQ7Ci0g
ICAgICAgIFRocmVhZERhdGEqIGRhdGE7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0OworICAgICAg
ICBSZWY8V1RGOjpUaHJlYWQ+IG1fdGhyZWFkOworICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsK
KyAgICAgICAgdm9pZCogbV9zdGFja0VuZDsKICAgICB9OwogCiAgICAgTG9jayYgZ2V0TG9jaygp
IHsgcmV0dXJuIG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleDsgfQotICAgIFRocmVhZCogdGhyZWFk
c0xpc3RIZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3Rl
cmVkVGhyZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsg
fQotICAgIFRocmVhZCogbWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1Ro
cmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NF
UlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3Rl
cmVkVGhyZWFkczsgfQorICAgIEpTVGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVh
ZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2Vy
dmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1cnJlbnRU
aHJlYWRTdGF0ZSYpOwogCi0gICAgdm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQq
LCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKKyAgICB2b2lkIHRyeUNvcHlPdGhl
clRocmVhZFN0YWNrKEpTVGhyZWFkKiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7
CiAgICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIFRI
UkVBRF9TUEVDSUZJQ19DQUxMIHJlbW92ZVRocmVhZCh2b2lkKik7CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLSAgICB2b2lkIHJlbW92ZVRocmVhZElmRm91bmQoUGxh
dGZvcm1UaHJlYWQpOworICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJlYWRJZGVudGlm
aWVyKTsKIAogICAgIExvY2sgbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwotICAgIFRocmVhZCog
bV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICBKU1RocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsK
ICAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhy
ZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCmluZGV4IDIwODBj
ZDkzNDU4MzNkMmQyMzJiOGE5Y2Q2ZjNkYmZlYmUwNWNiMjMuLmUwYWJmMjk4YmZiZTJlZWVjMzQy
NWI2NjA5Y2U3MjEzM2M0MWNkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNw
cApAQCAtNTgsNyArNTgsNyBAQCBBdG9taWM8SUNTdGF0cyo+IElDU3RhdHM6OnNfaW5zdGFuY2U7
CiAKIElDU3RhdHM6OklDU3RhdHMoKQogewotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKAor
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgSUNTdGF0cyIsCiAg
ICAgICAgIFt0aGlzXSAoKSB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OwpAQCAtODQsNyArODQsNyBAQCBJQ1N0YXRzOjp+SUNTdGF0cygpCiAgICAgICAgIG1fY29uZGl0
aW9uLm5vdGlmeUFsbCgpOwogICAgIH0KICAgICAKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bihtX3RocmVhZCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiB9CiAKIHZv
aWQgSUNTdGF0czo6YWRkKGNvbnN0IElDRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuaAppbmRleCBlNzVjZmRmNGQ0ZDlkN2RjYmYxYTMxYTk4Mjk0MTkyZTU1YjljZmIw
Li5lYjdlMWU5MmNlOTdkZDFkOTUwODk3MjdjODRhOWM1ZWM3ZjU3YzdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0lDU3RhdHMuaApAQCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIElDU3RhdHMgewog
cHJpdmF0ZToKIAogICAgIFNwZWN0cnVtPElDRXZlbnQsIHVpbnQ2NF90PiBtX3NwZWN0cnVtOwot
ICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJl
YWQ7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIGJv
b2wgbV9zaG91bGRTdG9wIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTliNjI3
M2RlYWIxZGQ1OWZkNzU5NDFjZDZlNjExNDkyODc5MjQ3MC4uNzVhYzYwZDliMzQ2MDgxY2I2NzA2
OWVkZWQzNTI4NTQzZmJkM2Q4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI1NDQsNyArMjU0
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0
YXJ0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBDb25kaXRpb24gZGlkU3RhcnRDb25kaXRpb247CiAg
ICAgYm9vbCBkaWRTdGFydCA9IGZhbHNlOwogICAgIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkID0gY3JlYXRlVGhyZWFkKAorICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6
Y3JlYXRlKAogICAgICAgICAiSlNDIEFnZW50IiwKICAgICAgICAgW3NvdXJjZUNvZGUsICZkaWRT
dGFydExvY2ssICZkaWRTdGFydENvbmRpdGlvbiwgJmRpZFN0YXJ0XSAoKSB7CiAgICAgICAgICAg
ICBDb21tYW5kTGluZSBjb21tYW5kTGluZSgwLCBudWxscHRyKTsKQEAgLTI1NzEsNyArMjU3MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0
KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQp
OworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiAgICAgCiAgICAgewogICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGRpZFN0YXJ0TG9jayk7CkBAIC0zMzExLDcgKzMzMTEsNyBAQCBzdGF0aWMg
dm9pZCBzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCgpCiAgICAgICAgICAgICBkYXRhTG9nKCJX
QVJOSU5HOiB0aW1lb3V0IHN0cmluZyBpcyBtYWxmb3JtZWQsIGdvdCAiLCB0aW1lb3V0U3RyaW5n
LAogICAgICAgICAgICAgICAgICIgYnV0IGV4cGVjdGVkIGEgbnVtYmVyLiBOb3QgdXNpbmcgYSB0
aW1lb3V0LlxuIik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKHRp
bWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CisgICAgICAgICAgICBU
aHJlYWQ6OmNyZWF0ZSh0aW1lb3V0VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5k
ZXggMDFiMWZlMTI3ZThiNzMxZmI1M2I3YzJjZGI5OWVlMTlkZDVhZGE2OC4uNjMyMmU3MzMyMjky
MTE0ZjBlMjU0YThlMWVmMTNkYTVjNDE5NTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBKU0xvY2s6OmxvY2soaW50
cHRyX3QgbG9ja0NvdW50KQogICAgICAgICBtX2xvY2subG9jaygpOwogICAgIH0KIAotICAgIG1f
b3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgbV9vd25lclRocmVhZCA9ICZUaHJl
YWQ6OmN1cnJlbnQoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1faGFzT3du
ZXJUaHJlYWQgPSB0cnVlOwogICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suaAppbmRleCAwYzM1ODQ3ZTQyM2U2NGJjNzA1MDNkNWUxZDg1
ZDQ4MDUwOWRiZTc0Li5hYTdkZDhkNWZmNjkwOTI4NDA4MDEzZDljNDkyNDBhYWY4NDEzNDc5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaApAQCAtOTIsMTMgKzkyLDEzIEBA
IGNsYXNzIEpTTG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKIAog
ICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8VGhyZWFk
SWRlbnRpZmllcj4gb3duZXJUaHJlYWQoKSBjb25zdAorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRy
PFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2hhc093
bmVyVGhyZWFkKQogICAgICAgICAgICAgcmV0dXJuIG1fb3duZXJUaHJlYWQ7CiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSB7IHJldHVybiBtX2hhc093bmVyVGhyZWFkICYmIG1fb3duZXJUaHJlYWQgPT0gY3Vy
cmVudFRocmVhZCgpOyB9CisgICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsg
cmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSAmVGhyZWFkOjpjdXJy
ZW50KCk7IH0KIAogICAgIHZvaWQgd2lsbERlc3Ryb3lWTShWTSopOwogCkBAIC0xMzUsNyArMTM1
LDcgQEAgY2xhc3MgSlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4g
ewogICAgIC8vIGRpZmZlcmVudCB0aHJlYWQsIGFuZCBhbiBvcHRpb25hbCBpcyB2dWxuZXJhYmxl
IHRvIHJhY2VzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY5MDQyI2M2CiAgICAgYm9vbCBtX2hhc093bmVyVGhyZWFkIHsgZmFsc2UgfTsKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fb3duZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9v
d25lclRocmVhZDsKICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX2xv
Y2tEcm9wRGVwdGg7CiAgICAgYm9vbCBtX3Nob3VsZFJlbGVhc2VIZWFwQWNjZXNzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDU0MTk3ZTczYzg0MTJhODBmMzYxNDBjN2FkODZlYzc2NGZhYzI5
MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIE9TKERBUldJTikgfHwgT1MoVU5JWCkKLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1Mp
ICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lmIE9TKERB
UldJTikKLSNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0j
aW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgT1Mo
REFSV0lOKQotdHlwZWRlZiBtYWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIE9TKFdJ
TkRPV1MpCi10eXBlZGVmIERXT1JEIFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgVVNFKFBUSFJFQURT
KQotdHlwZWRlZiBwdGhyZWFkX3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZW5kaWYgLy8gT1MoREFSV0lO
KQotICAgIAotaW5saW5lIFBsYXRmb3JtVGhyZWFkIGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpCi17
Ci0jaWYgT1MoREFSV0lOKQotICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhyZWFkX25wKHB0aHJl
YWRfc2VsZigpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIEdldEN1cnJlbnRUaHJl
YWRJZCgpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHJldHVybiBwdGhyZWFkX3NlbGYoKTsK
LSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXggN2QzN2E2NzRhYmEwOTQ3
MjMxODQ5M2IzM2JjODlmZTNmYWQ5OGE5ZC4uYjFlMDE1NDM4MzdhOGY4M2E5ODRiMzIzY2Y4ZmU5
ZmQ5Y2QzOTE4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBGcmFtZVdhbGtlciB7
CiAgICAgYm9vbCBpc1ZhbGlkRnJhbWVQb2ludGVyKHZvaWQqIGV4ZWMpCiAgICAgewogICAgICAg
ICB1aW50OF90KiBmcENhc3QgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGV4ZWMpOwotICAgICAg
ICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5l
VGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6
SlNUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0
SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5l
eHQpIHsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPih0aHJlYWQtPnN0YWNrQmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrTGlt
aXQgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrQmFzZSk7CkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShjb25zdCBBYnN0cmFjdExv
Y2tlciYpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBw
cm9maWxlciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJq
c2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90aHJlYWRJ
ZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci50aHJlYWQi
LCBbcHJvZmlsZXJdIHsKICAgICAgICAgcHJvZmlsZXItPnRpbWVyTG9vcCgpOwogICAgIH0pOwog
fQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShj
b25zdCBBYnN0cmFjdExvY2tlciYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAgICAgIExv
Y2tIb2xkZXIgY29kZUJsb2NrU2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRM
b2NrKCkpOwogICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIoRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0TG9jaygpKTsKIAotICAgICAgICBib29s
IGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOworICAgICAgICBh
dXRvIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOwogICAgICAg
ICBpZiAoZGlkU3VzcGVuZCkgewogICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0aHJlYWQg
aXMgc3VzcGVuZGVkLCB3ZSBjYW4ndCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVzZSB0aGUg
SlNDIHRocmVhZAogICAgICAgICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2Nr
LgpAQCAtMzU0LDEzICszNTQsMTIgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAg
ICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CiAgICAgICAgICAgICB2b2lkKiBsbGlu
dFBDOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6
OkpTVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgIG1fanNjRXhl
Y3V0aW9uVGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICBt
YWNoaW5lRnJhbWUgPSByZWdpc3RlcnMuZnJhbWVQb2ludGVyKCk7CiAgICAgICAgICAgICAgICAg
Y2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAgICAg
ICAgICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CiAg
ICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAgICAg
ICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0
ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0N2Y5ZTY3
NjhhZDQzN2JiMThlMGE4YWJjNzk1YmQ2Y2YuLmRkNDIwMGNmMTVkYzA4NTUwYWYzYzI5NWFmNzc2
OTg0ZGE2MDdkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nUHJvZmlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgKQEAgLTE5NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVy
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1f
bGFzdFRpbWU7CiAgICAgTG9jayBtX2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVh
ZElkZW50aWZpZXI7Ci0gICAgTWFjaGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVjdXRpb25U
aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWRJZGVudGlmaWVyOworICAgIE1hY2hp
bmVUaHJlYWRzOjpKU1RocmVhZCogbV9qc2NFeGVjdXRpb25UaHJlYWQ7CiAgICAgYm9vbCBtX2lz
UGF1c2VkOwogICAgIGJvb2wgbV9pc1NodXREb3duOwogICAgIGJvb2wgbV9uZWVkc1JlcG9ydEF0
RXhpdCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5OWEyNmZj
YTFjMjFmM2QwNDQwNDczYjQ0MmU4OWRjOWE0OTVmNDZlLi5lOTdjMzE4NWZjNmYyYzYyODRhZTcx
YmViOTA1YzAyZTM0OWE3NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTY1
OSw3ICs2NTksNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4s
IHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CiAgICAgdm9pZCBsb2dFdmVudChDb2RlQmxvY2sqLCBjb25zdCBjaGFyKiBzdW1tYXJ5
LCBjb25zdCBGdW5jJiBmdW5jKTsKIAotICAgIHN0ZDo6b3B0aW9uYWw8VGhyZWFkSWRlbnRpZmll
cj4gb3duZXJUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2stPm93bmVyVGhyZWFkKCk7
IH0KKyAgICBzdGQ6Om9wdGlvbmFsPFJlZlB0cjxUaHJlYWQ+PiBvd25lclRocmVhZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQogCiAgICAgVk1UcmFwcyYgdHJh
cHMoKSB7IHJldHVybiBtX3RyYXBzOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk1UcmFwcy5jcHAKaW5kZXggNTI3NjNmODUzZDQ2M2I3MmYzM2U0NjRiN2I1YTU5ZDAxMTkzOGY2
OS4uMjcyYzRkZWZhODU1ZmMzOWIwY2Q0MTAxZTVlN2U0YjJiZGMwZGJkNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0
aWMgRXhwZWN0ZWQ8c3RkOjpwYWlyPFZNKiwgU3RhY2tCb3VuZHM+LCBWTVRyYXBzOjpFcnJvcj4g
ZmluZEFjdGl2ZVZNQW5kU3RhYwogICAgICAgICAgICAgcmV0dXJuIFZNSW5zcGVjdG9yOjpGdW5j
dG9yU3RhdHVzOjpDb250aW51ZTsgLy8gVHJ5IG5leHQgVk0uCiAgICAgICAgIH0KIAotICAgICAg
ICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQqIHRocmVhZCA9IG1hY2hpbmVUaHJlYWRzLnRo
cmVhZHNMaXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhy
ZWFkLT5uZXh0KSB7CisgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkKiB0aHJl
YWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNMb2NrZXIp
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQodGhyZWFkLT5zdGFja0Jhc2UoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0
aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgaWYgKHN0YWNrUG9pbnRlciA8PSB0aHJl
YWQtPnN0YWNrQmFzZSgpICYmIHN0YWNrUG9pbnRlciA+PSB0aHJlYWQtPnN0YWNrRW5kKCkpIHsK
QEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAg
ICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25l
clRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25l
clRocmVhZCkgewotICAgICAgICAgICAgICAgIHNpZ25hbFRocmVhZChvcHRpb25hbE93bmVyVGhy
ZWFkLnZhbHVlKCksIFNJR1VTUjEpOworICAgICAgICAgICAgICAgIG9wdGlvbmFsT3duZXJUaHJl
YWQudmFsdWUoKS0+c2lnbmFsKFNJR1VTUjEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogCkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBWTVRyYXBzOjpmaXJlVHJhcChW
TVRyYXBzOjpFdmVudFR5cGUgZXZlbnRUeXBlKQogICAgICAgICAvLyBmaXJlVHJhcCgpIGRvZXMg
bm90IGJsb2NrLgogICAgICAgICBSZWZQdHI8U2lnbmFsU2VuZGVyPiBzZW5kZXIgPSBhZG9wdFJl
ZihuZXcgU2lnbmFsU2VuZGVyKHZtKCksIGV2ZW50VHlwZSkpOwogICAgICAgICBhZGRTaWduYWxT
ZW5kZXIoc2VuZGVyLmdldCgpKTsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJqc2Mudm10cmFwcy5z
aWduYWxsaW5nLnRocmVhZCIsIFtzZW5kZXJdIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoImpz
Yy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0gewogICAgICAgICAgICAgc2Vu
ZGVyLT5zZW5kKCk7CiAgICAgICAgIH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZpZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0hlYXBWZXJpZmllci5jcHAKaW5kZXggNTQyNmQ5OGRlNjYyYzlhNDNhZmNjYmExYmI2
MDU0YjlmOTg4MGQ4YS4uNDI4NmIyM2UwMjUwOWFhZDQ3ZDBiOWQ0ZmJmY2Y0OWZlYjg5MWJiMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAKQEAgLTE0
Myw3ICsxNDMsNyBAQCB2b2lkIEhlYXBWZXJpZmllcjo6cHJpbnRWZXJpZmljYXRpb25IZWFkZXIo
KQogICAgIFJFTEVBU0VfQVNTRVJUKG1faGVhcC0+Y29sbGVjdGlvblNjb3BlKCkpOwogICAgIENv
bGxlY3Rpb25TY29wZSBzY29wZSA9IGN1cnJlbnRDeWNsZSgpLnNjb3BlOwogICAgIE1vbm90b25p
Y1RpbWUgZ2NDeWNsZVRpbWVzdGFtcCA9IGN1cnJlbnRDeWNsZSgpLnRpbWVzdGFtcDsKLSAgICBk
YXRhTG9nKCJWZXJpZnlpbmcgaGVhcCBpbiBbcCIsIGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIiwg
dCIsIGN1cnJlbnRUaHJlYWQoKSwgIl0gdm0gIiwKKyAgICBkYXRhTG9nKCJWZXJpZnlpbmcgaGVh
cCBpbiBbcCIsIGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIiwgdCIsIFRocmVhZDo6Y3VycmVudCgp
LCAiXSB2bSAiLAogICAgICAgICBSYXdQb2ludGVyKG1faGVhcC0+dm0oKSksICIgb24gIiwgc2Nv
cGUsICIgR0MgQCAiLCBnY0N5Y2xlVGltZXN0YW1wLCAiXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU4ZjE5YjU2ZDMzY2I4OGE2ZmI0OWQ2
ZTVmM2I2MDk3ODZiYzBjYy4uNzQxNDhhODAxNGIyZWUwY2U1MTEyNjZjYmE0YThhNzRlZWQyNjg3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjUsOCAr
MzI1LDggQEAKIAkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRDE1MUE4
MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJQThBNDc0NDYxNTFBODI1QjAw
NDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oICovOyB9
OwogCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMy
RjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi87IH07Ci0J
CUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3
MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAq
LzsgfTsKLQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmggKi87IH07CisJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhy
ZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovOyB9
OworCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMxMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oICovOyB9OwogCQlBOEE0NzQ0
QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMz
MzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi87IH07CiAJCUE4QTQ3NDREMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oICovOyB9OwpAQCAtNzI4LDggKzcyOCw4IEBACiAJCUE4QTQ3MzJE
MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRGdW5jdGlvbkludm9j
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzAxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0
aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZEhv
bGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE2
NCw4ICsxMTY0LDggQEAKIAkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25p
emVkRml4ZWRRdWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0
ZW1UcmFjaW5nLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbi5oICovLAotCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywKLQkJCQlBOEE0NzMzMTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oICovLAorCQkJCUE4QTQ3
MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCisJCQkJ
QThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi8sCiAJ
CQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThB
NDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCkBAIC0xNjE4LDcgKzE2
MTgsNyBAQAogCQkJCTFDQ0RCMTRGMUU1NjY4OTgwMDZDNzNDMCAvKiBUZXh0QnJlYWtJdGVyYXRv
cklDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8qIFRl
eHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThBNDc0
NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQ
dGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xODQzLDcgKzE4NDMsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1i
b2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERBMDBGNUZB
MTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOTYx
RDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0gaW4g
U291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRp
ZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
YmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtz
L0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2YWJmNjBl
YzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJjM2I3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAK
KysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKQEAgLTc5
LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0eUNvbmRp
dGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhy
ZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlm
aWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1l
clRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAK
ICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2VpdmVkTG9j
azsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAor
ICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAg
ICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNh
dGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXpl
KCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2lu
ZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENv
bnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1
ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgpKQpA
QCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1bWVyVGhy
ZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhyZWFkcy5h
cHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNl
cnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZdICgp
IHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXNQ
ZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0KAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVk
aWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5z
aXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVj
a2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxk
Q29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1
ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEgKzEzOCwx
MSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0eUNvbmRp
dGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAg
IHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQ
dHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWQtPndh
aXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
VHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xv
Y2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rl
c3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5NGYuLjY4
Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2Jl
bmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IEJl
bmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZFtd
PihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJb
XT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJl
YWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwogICAgIAog
ICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03MCw3ICs3
MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHRo
cmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAgIGNv
dW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0g
PSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRocmVh
ZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAgICAgICAg
ICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
aWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0cnVj
dCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0gICAg
ICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7Cisg
ICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAg
ICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVz
dC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5kZXggNTQ1
ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3MDZjMTlj
ZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtz
L0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRU
ZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMpOwog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3JkcyA9IHN0
ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91cHMpOwot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3Rk
OjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRo
cmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFkPltd
PiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1UaHJlYWRH
cm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJvb2wga2Vl
cEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAg
ICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFk
SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBu
dW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAg
ICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsg
dGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJCZW5j
aG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZs
b2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1JdGVyYXRp
b25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3JkID0gMDsK
QEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2VlcEdvaW5n
ID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1U
aHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAgICAg
ICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAg
ICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAg
ICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291cmNl
L1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2FhNjFj
ZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3ZGFk
Mjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2
b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIAog
ICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0g
VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAgICAg
IFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBAQCB2
b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOwor
ICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJlYWRE
aWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUzY2Iz
MGE3NmEyYTg1NWZlYmEyYzcuLmI1MGJiYmMzYmYzYWQyYjFmZGQxMzQ1MzQ4NjU0YWIxZDQxOGNi
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xMjgsNyArMTI4LDYgQEAgc2V0KFdURl9IRUFE
RVJTCiAgICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lz
dGVtVHJhY2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCiAgICAgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJlYWRpbmcu
aApAQCAtMzI5LDE2ICszMjgsMTQgQEAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwogaWYgKFdJ
TjMyKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAgIE9TQWxsb2NhdG9yV2lu
LmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAgICAgIFRocmVhZFNwZWNpZmlj
V2luLmNwcAogICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAgKQogZWxzZSAoKQotICAgIGxp
c3QoQVBQRU5EIFdURl9IRUFERVJTCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuaAotICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAgICBPU0FsbG9j
YXRvclBvc2l4LmNwcAotICAgICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcAor
ICAgICAgICBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAgICAgVGhyZWFkaW5nUHRocmVh
ZHMuY3BwCiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5U
aHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKaW5kZXggMDI0OTU0NGM1
MThlODJhZmYxNzA1ZGUxOWVjOTY1YWI5OGIxZDEwNi4uMzRiOTQyNTU1YWI1NjE4MzIxMDE4YjRm
MDc5MGYyODI1MGE3ZGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKQEAgLTE4Niw5ICsxODYsOSBA
QCBib29sIGlzTWFpblRocmVhZCgpCiAjZW5kaWYKIAogI2lmICFVU0UoV0VCX1RIUkVBRCkKLWJv
b2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWQpCitib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZCkKIHsKLSAgICByZXR1cm4gdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgp
OworICAgIHJldHVybiB0aHJlYWQgPT0gY3VycmVudFRocmVhZCgpOwogfQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBiL1NvdXJjZS9XVEYvd3RmL01h
aW5UaHJlYWQuaAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3NjgzY2U1NTA4ZGQ4ZDdmMWQ3N2Fm
Li4wZTc4ZThlNTFhYmU4ZDk1NTQ3MmM3OWRkMzQ2OTJmMTU0NmRiMWE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVh
ZC5oCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQcmludFN0cmVhbTsKIAot
dHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotCiAvLyBNdXN0IGJlIGNhbGxlZCBm
cm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVN
YWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJl
SGFuZGxlci5oIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKaW5kZXgg
ZGZkZGYwYTk1NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2YzdiZC4uNDEyOGY1Y2Q3MWE3ZGIy
ZjRmZDcwMzI5NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1vcnlQcmVzc3VyZUhhbmRsZXIg
ewogI2lmIFVTRShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwogI2Vs
c2UKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBSZWZQdHI8
VGhyZWFkPiBtX3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvUGFy
YWxsZWxKb2JzR2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIwYTM4ZTEwM2U3YzlhMmU0ZjBm
N2UwNjEwNTcxNC4uOTA4OTJhYTQ5NzE0OGJmZDdhMmUyMTkwNzA2MWMxMWYxYzJjODUyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgYm9v
bCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKFBhcmFsbGVs
RW52aXJvbm1lbnQqIHBhcmVudCkKICAgICB9CiAKICAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAg
ICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVh
ZFByaXZhdGU6OndvcmtlclRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOworICAgICAg
ICBtX3RocmVhZElEID0gVGhyZWFkOjpjcmVhdGUoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVh
ZFByaXZhdGU6OndvcmtlclRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOwogCiAgICAg
aWYgKG1fdGhyZWFkSUQpCiAgICAgICAgIG1fcGFyZW50ID0gcGFyZW50OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oIGIvU291cmNlL1dURi93dGYvUGFy
YWxsZWxKb2JzR2VuZXJpYy5oCmluZGV4IDQ1ODQwN2M0Y2I0YTNmOTk1YzkwYzU1NTYyN2MxY2Jk
MjJiNDFiNWMuLjcxYjc2NDQzOGU2YmY5M2ZmZTIyOTFiNWFlNzMyNTJkMDgxNWYxNTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKQEAgLTU0LDcgKzU0LDcgQEAgY2xhc3MgUGFy
YWxsZWxFbnZpcm9ubWVudCB7CiAgICAgY2xhc3MgVGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBSZWZD
b3VudGVkPFRocmVhZFByaXZhdGU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFRocmVhZFByaXZh
dGUoKQotICAgICAgICAgICAgOiBtX3RocmVhZElEKDApCisgICAgICAgICAgICA6IG1fdGhyZWFk
SUQobnVsbHB0cikKICAgICAgICAgICAgICwgbV9ydW5uaW5nKGZhbHNlKQogICAgICAgICAgICAg
LCBtX3BhcmVudCgwKQogICAgICAgICB7CkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIFBhcmFsbGVs
RW52aXJvbm1lbnQgewogICAgICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWQodm9pZCopOwog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAg
ICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZElEOwogICAgICAgICBib29sIG1fcnVubmluZzsK
ICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCogbV9wYXJlbnQ7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5j
cHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5YWRkYjJjYzU4MTBiNTZlMWMxNC4uNjIyZWY3
MTVjZjVkZTMzMmNmYzNhYTgxNDI3ZmNmMTE2OTEyMTU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAK
QEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVhZERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRocmVhZERhdGEoKTsKICAgICB+VGhyZWFkRGF0
YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOworICAgIFJlZjxU
aHJlYWQ+IHRocmVhZElkZW50aWZpZXI7CiAgICAgCiAgICAgTXV0ZXggcGFya2luZ0xvY2s7CiAg
ICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25kaXRpb247CkBAIC04MSw3ICs4MSw3IEBAIHN0
cnVjdCBCdWNrZXQgewogICAgIHZvaWQgZW5xdWV1ZShUaHJlYWREYXRhKiBkYXRhKQogICAgIHsK
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyAiLCBSYXdQb2ludGVyKGRhdGEpLCAiIHdpdGggYWRk
cmVzcyA9ICIsIFJhd1BvaW50ZXIoZGF0YS0+YWRkcmVzcyksICIgb250byAiLCBSYXdQb2ludGVy
KHRoaXMpLCAiXG4iKSk7CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBlbnF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIgd2l0aCBhZGRyZXNz
ID0gIiwgUmF3UG9pbnRlcihkYXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJhd1BvaW50ZXIodGhp
cyksICJcbiIpKTsKICAgICAgICAgQVNTRVJUKGRhdGEtPmFkZHJlc3MpOwogICAgICAgICBBU1NF
UlQoIWRhdGEtPm5leHRJblF1ZXVlKTsKICAgICAgICAgCkBAIC05OSwxMSArOTksMTEgQEAgc3Ry
dWN0IEJ1Y2tldCB7CiAgICAgdm9pZCBnZW5lcmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZGVxdWV1ZWluZyBmcm9tIGJ1Y2tldCBhdCAiLCBS
YXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRo
cmVhZDo6Y3VycmVudCgpLCAiOiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJhd1BvaW50
ZXIodGhpcyksICJcbiIpKTsKICAgICAgICAgCiAgICAgICAgIGlmICghcXVldWVIZWFkKSB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KGN1cnJlbnRUaHJlYWQoKSwgIjogZW1wdHkuXG4iKSk7CisgICAgICAgICAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZW1wdHkuXG4iKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTQzLDE0ICsxNDMsMTQgQEAgc3RydWN0IEJ1Y2tl
dCB7CiAgICAgICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgewogICAgICAgICAgICAgVGhyZWFk
RGF0YSogY3VycmVudCA9ICpjdXJyZW50UHRyOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGdvdCB0
aHJlYWQgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIlxuIikpOworICAgICAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGdvdCB0aHJlYWQgIiwgUmF3UG9p
bnRlcihjdXJyZW50KSwgIlxuIikpOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50KQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgRGVxdWV1ZVJlc3VsdCByZXN1bHQgPSBmdW5j
dG9yKGN1cnJlbnQsIHRpbWVUb0JlRmFpcik7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkg
ewogICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU6CiAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBjdXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcihjdXJyZW50UHRyKSwg
IiwgKmN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKCpjdXJyZW50UHRyKSwgIlxuIikpOworICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBj
dXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcihjdXJyZW50UHRyKSwgIiwgKmN1cnJlbnRQdHIgPSAi
LCBSYXdQb2ludGVyKCpjdXJyZW50UHRyKSwgIlxuIikpOwogICAgICAgICAgICAgICAgIHByZXZp
b3VzID0gY3VycmVudDsKICAgICAgICAgICAgICAgICBjdXJyZW50UHRyID0gJigqY3VycmVudFB0
ciktPm5leHRJblF1ZXVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTU5LDcgKzE1OSw3
IEBAIHN0cnVjdCBCdWNrZXQgewogICAgICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAg
ICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IGRlcXVldWVpbmcgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIiBm
cm9tICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZGVxdWV1ZWluZyAiLCBSYXdQb2lu
dGVyKGN1cnJlbnQpLCAiIGZyb20gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOwogICAgICAg
ICAgICAgICAgIGlmIChjdXJyZW50ID09IHF1ZXVlVGFpbCkKICAgICAgICAgICAgICAgICAgICAg
cXVldWVUYWlsID0gcHJldmlvdXM7CiAgICAgICAgICAgICAgICAgZGlkRGVxdWV1ZSA9IHRydWU7
CkBAIC0yNzEsNyArMjcxLDcgQEAgSGFzaHRhYmxlKiBlbnN1cmVIYXNodGFibGUoKQogICAgICAg
ICAgICAgY3VycmVudEhhc2h0YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG1heExvYWRGYWN0b3Ip
OwogICAgICAgICAgICAgaWYgKGhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIs
IGN1cnJlbnRIYXNodGFibGUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjcmVh
dGVkIGluaXRpYWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIoY3VycmVudEhhc2h0YWJsZSksICJc
biIpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJl
bnQoKSwgIjogY3JlYXRlZCBpbml0aWFsIGhhc2h0YWJsZSAiLCBSYXdQb2ludGVyKGN1cnJlbnRI
YXNodGFibGUpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIYXNodGFi
bGU7CiAgICAgICAgICAgICB9CiAKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIGVuc3VyZUhhc2h0
YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFkcykKICAgICBIYXNodGFibGUqIG9sZEhhc2h0YWJs
ZSA9IGhhc2h0YWJsZS5sb2FkKCk7CiAgICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bVRo
cmVhZHMpID49IG1heExvYWRGYWN0b3IpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8gbmVlZCB0byByZWhh
c2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49
ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
VGhyZWFkOjpjdXJyZW50KCksICI6IG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFz
aHRhYmxlLT5zaXplLCAiIC8gIiwgbnVtVGhyZWFkcywgIiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAi
XG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1OCw3ICszNTgsNyBAQCB2b2lk
IGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFkcykKICAgICBvbGRIYXNodGFi
bGUgPSBoYXNodGFibGUubG9hZCgpOwogICAgIGlmIChvbGRIYXNodGFibGUgJiYgc3RhdGljX2Nh
c3Q8ZG91YmxlPihvbGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1U
aHJlYWRzKSA+PSBtYXhMb2FkRmFjdG9yKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGFmdGVyIGxvY2tpbmcs
IG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwg
bnVtVGhyZWFkcywgIiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CisgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBhZnRlciBsb2NraW5nLCBubyBu
ZWVkIHRvIHJlaGFzaCBiZWNhdXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRo
cmVhZHMsICIgPj0gIiwgbWF4TG9hZEZhY3RvciwgIlxuIikpOwogICAgICAgICB1bmxvY2tIYXNo
dGFibGUoYnVja2V0c1RvVW5sb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3OCwx
NCArMzc4LDE0IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRz
KQogICAgIAogICAgIEhhc2h0YWJsZSogbmV3SGFzaHRhYmxlID0gSGFzaHRhYmxlOjpjcmVhdGUo
bmV3U2l6ZSk7CiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIG5ldyBoYXNodGFibGU6ICIsIFJhd1BvaW50ZXIobmV3
SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBjcmVhdGVkIG5ldyBoYXNodGFibGU6ICIsIFJhd1BvaW50ZXIobmV3SGFzaHRh
YmxlKSwgIlxuIikpOwogICAgIGZvciAoVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA6IHRocmVhZERh
dGFzKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IHJlaGFzaGluZyB0aHJlYWQgZGF0YSAiLCBSYXdQb2ludGVy
KHRocmVhZERhdGEpLCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+
YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpj
dXJyZW50KCksICI6IHJlaGFzaGluZyB0aHJlYWQgZGF0YSAiLCBSYXdQb2ludGVyKHRocmVhZERh
dGEpLCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyks
ICJcbiIpKTsKICAgICAgICAgdW5zaWduZWQgaGFzaCA9IGhhc2hBZGRyZXNzKHRocmVhZERhdGEt
PmFkZHJlc3MpOwogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBuZXdIYXNodGFibGUt
PnNpemU7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsKKyAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGluZGV4ID0gIiwgaW5k
ZXgsICJcbiIpKTsKICAgICAgICAgQnVja2V0KiBidWNrZXQgPSBuZXdIYXNodGFibGUtPmRhdGFb
aW5kZXhdLmxvYWQoKTsKICAgICAgICAgaWYgKCFidWNrZXQpIHsKICAgICAgICAgICAgIGlmIChy
ZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpKQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgZW5zdXJl
SGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQogfQogCiBUaHJlYWREYXRhOjpUaHJl
YWREYXRhKCkKLSAgICA6IHRocmVhZElkZW50aWZpZXIoY3VycmVudFRocmVhZCgpKQorICAgIDog
dGhyZWFkSWRlbnRpZmllcihUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAgICB1bnNpZ25lZCBjdXJy
ZW50TnVtVGhyZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBl
bnF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nIG9udG8g
YnVja2V0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIiB3aXRoIGluZGV4ICIsIGluZGV4LCAiIGZv
ciBhZGRyZXNzICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIgd2l0aCBoYXNoICIsIGhhc2gsICJc
biIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6
IGVucXVldWVpbmcgb250byBidWNrZXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiIHdpdGggaW5k
ZXggIiwgaW5kZXgsICIgZm9yIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIiB3aXRo
IGhhc2ggIiwgaGFzaCwgIlxuIikpOwogICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOwogCiAg
ICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGhhc2h0YWJsZSBjb3VsZCBoYXZlIHJlaGFzaGVk
IHVuZGVyIHVzLgpAQCAtNDk4LDcgKzQ5OCw3IEBAIGJvb2wgZW5xdWV1ZShjb25zdCB2b2lkKiBh
ZGRyZXNzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgICAgICBib29sIHJlc3VsdDsKICAg
ICAgICAgaWYgKHRocmVhZERhdGEpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwcm9jZWVkaW5n
IHRvIGVucXVldWUgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIlxuIikpOworICAgICAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHByb2NlZWRpbmcg
dG8gZW5xdWV1ZSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiXG4iKSk7CiAgICAgICAgICAg
ICBidWNrZXQtPmVucXVldWUodGhyZWFkRGF0YSk7CiAgICAgICAgICAgICByZXN1bHQgPSB0cnVl
OwogICAgICAgICB9IGVsc2UKQEAgLTU2Nyw3ICs1NjcsNyBAQCBORVZFUl9JTkxJTkUgUGFya2lu
Z0xvdDo6UGFya1Jlc3VsdCBQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAg
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2lu
Zy5cbiIpKTsKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjog
cGFya2luZy5cbiIpKTsKICAgICAKICAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgp
OwogICAgIG1lLT50b2tlbiA9IDA7CkBAIC02NjEsNyArNjYxLDcgQEAgTkVWRVJfSU5MSU5FIFBh
cmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHlJbXBsKAog
TkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCBQYXJraW5nTG90Ojp1bnBhcmtP
bmUoY29uc3Qgdm9pZCogYWRkcmVzcykKIHsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBvbmUuXG4iKSk7Cisg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHVucGFya2luZyBv
bmUuXG4iKSk7CiAgICAgCiAgICAgVW5wYXJrUmVzdWx0IHJlc3VsdDsKIApAQCAtNzA2LDcgKzcw
Niw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwoCiAgICAg
Y29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCk+JiBj
YWxsYmFjaykKIHsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBvbmUgdGhlIGhhcmQgd2F5LlxuIikpOworICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiB1bnBhcmtpbmcgb25l
IHRoZSBoYXJkIHdheS5cbiIpKTsKICAgICAKICAgICBSZWZQdHI8VGhyZWFkRGF0YT4gdGhyZWFk
RGF0YTsKICAgICBib29sIHRpbWVUb0JlRmFpciA9IGZhbHNlOwpAQCAtNzUxLDcgKzc1MSw3IEBA
IE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lk
KiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VuCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
dW5wYXJraW5nIGNvdW50ID0gIiwgY291bnQsICIgZnJvbSAiLCBSYXdQb2ludGVyKGFkZHJlc3Mp
LCAiLlxuIikpOworICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAi
OiB1bnBhcmtpbmcgY291bnQgPSAiLCBjb3VudCwgIiBmcm9tICIsIFJhd1BvaW50ZXIoYWRkcmVz
cyksICIuXG4iKSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWREYXRhPiwgOD4gdGhy
ZWFkRGF0YXM7CiAgICAgZGVxdWV1ZSgKQEAgLTc2MSw3ICs3NjEsNyBAQCBORVZFUl9JTkxJTkUg
dW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrQ291bnQoY29uc3Qgdm9pZCogYWRkcmVzcywgdW5z
aWduZWQgY291bgogICAgICAgICBCdWNrZXRNb2RlOjpJZ25vcmVFbXB0eSwKICAgICAgICAgWyZd
IChUaHJlYWREYXRhKiBlbGVtZW50LCBib29sKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogT2Jz
ZXJ2aW5nIGVsZW1lbnQgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihlbGVtZW50LT5hZGRy
ZXNzKSwgIlxuIikpOworICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpj
dXJyZW50KCksICI6IE9ic2VydmluZyBlbGVtZW50IHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50
ZXIoZWxlbWVudC0+YWRkcmVzcyksICJcbiIpKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5h
ZGRyZXNzICE9IGFkZHJlc3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6
Oklnbm9yZTsKICAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZChlbGVtZW50KTsKQEAgLTc3
Myw3ICs3NzMsNyBAQCBORVZFUl9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrQ291
bnQoY29uc3Qgdm9pZCogYWRkcmVzcywgdW5zaWduZWQgY291bgogCiAgICAgZm9yIChSZWZQdHI8
VGhyZWFkRGF0YT4mIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgewogICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1
bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3Mg
IiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICAgICAg
ZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogdW5wYXJraW5nICIsIFJhd1Bv
aW50ZXIodGhyZWFkRGF0YS5nZXQoKSksICIgd2l0aCBhZGRyZXNzICIsIFJhd1BvaW50ZXIodGhy
ZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKICAgICAgICAgQVNTRVJUKHRocmVhZERhdGEtPmFk
ZHJlc3MpOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
RGF0YS0+cGFya2luZ0xvY2spOwpAQCAtNzgzLDcgKzc4Myw3IEBAIE5FVkVSX0lOTElORSB1bnNp
Z25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25l
ZCBjb3VuCiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsKKyAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZG9uZSB1bnBhcmtpbmcuXG4iKSk7
CiAgICAgCiAgICAgcmV0dXJuIHRocmVhZERhdGFzLnNpemUoKTsKIH0KQEAgLTc5Myw3ICs3OTMs
NyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwoY29uc3Qgdm9pZCog
YWRkcmVzcykKICAgICB1bnBhcmtDb3VudChhZGRyZXNzLCBVSU5UX01BWCk7CiB9CiAKLU5FVkVS
X0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2
b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQorTkVWRVJfSU5M
SU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQo
VGhyZWFkJiwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCiB7CiAgICAgVmVjdG9yPEJ1Y2tldCo+
IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKIApAQCAtODAzLDcgKzgwMyw3IEBA
IE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExh
bWJkYTx2b2lkKFRocmVhZElkZW50aWZpCiAgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGZvciAoVGhyZWFkRGF0YSogY3VycmVudFRocmVhZERhdGEg
PSBidWNrZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERhdGE7IGN1cnJlbnRUaHJlYWREYXRh
ID0gY3VycmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQotICAgICAgICAgICAgY2FsbGJhY2so
Y3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIsIGN1cnJlbnRUaHJlYWREYXRhLT5h
ZGRyZXNzKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJ
ZGVudGlmaWVyLmdldCgpLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAg
IAogICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmlu
ZGV4IDdkNWZiMTdlZmEwMmFiNzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTlj
N2I3ZmQ0Y2M2YWNhZTM2MmFlYTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BhcmtpbmdMb3QuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3
ICsxNTgsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAg
ICAgIGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNv
bnN0IHZvaWQqKT4oZnVuYykpOworICAgICAgICBmb3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8
dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBA
IC0xNzEsNyArMTcxLDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJl
c3MsIGNvbnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2sp
OwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0
IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVk
TGFtYmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYv
d3RmL1JlZlB0ci5oCmluZGV4IGZlMTYzMGM5NzM1YjVmZjUzNTNjYjJjNTU4ZTMxMDU4MTI0Nzg3
ZDguLjI3N2U2NzVkYjNjNTU1ZDVlNGM2Y2UwNDk0Njg4NzRkMzY3Njk1OWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBA
IC00Miw3ICs0Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0ciB7CiAKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNSZWZQdHIgPSB0cnVlOwogCi0gICAgQUxXQVlTX0lO
TElORSBSZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgY29u
c3RleHByIFJlZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CiAgICAgQUxXQVlTX0lOTElORSBS
ZWZQdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyByZWZJZk5vdE51bGwocHRyKTsgfQogICAgIEFM
V0FZU19JTkxJTkUgUmVmUHRyKGNvbnN0IFJlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IHJl
ZklmTm90TnVsbChtX3B0cik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29u
c3QgUmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0KCkpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAppbmRleCA5NDNmZDZk
NzlkMDk0NDI1NTAzYWM4OTczMWIwYTA2YTZhYzQwZmZkLi5jYjI3NWY3MDEyY2ZlNTY2MWU0OWUw
YjRmZjBkOWM2MjFiMGU0OTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5j
dGlvbkludm9jYXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9j
YXRpb24uaApAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b25faAogI2RlZmluZSBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAogCisjaW5jbHVkZSAiVGhy
ZWFkaW5nLmgiCisKIG5hbWVzcGFjZSBXVEYgewogCiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5j
dGlvbikodm9pZCogYXJndW1lbnQpOwpAQCAtMzYsMTMgKzM4LDE1IEBAIHR5cGVkZWYgdm9pZCAo
KlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBU
aHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRh
dGEpCisgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9u
LCBSZWZQdHI8VGhyZWFkPiYmIHRocmVhZCwgdm9pZCogZGF0YSkKICAgICAgICAgOiBmdW5jdGlv
bihmdW5jdGlvbikKKyAgICAgICAgLCB0aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQogICAgICAgICAs
IGRhdGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb247
CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkOwogICAgIHZvaWQqIGRhdGE7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkR3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDc1MDdjZTQ3NzFkZGMyYzkxZTIzMGM0OGEzZjhmOWYz
YTY1YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkR3JvdXAuaApA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgVGhy
ZWFkR3JvdXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEdyb3VwKTsKK3B1Ymxp
YzoKK3ByaXZhdGU6Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRI
b2xkZXJQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2FjMjNiMGFmZTk2MTI0ZDJmZDBjNTYxMTdmMDBmMzA5NGIwZWI1ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNw
cApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRo
cmVhZEhvbGRlclB0aHJlYWRzLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworI2lmIFVT
RShQVEhSRUFEUykKKworI2lmIE9TKEhVUkQpCisvLyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBk
ZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwgc28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVy
ZS4KKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAxMDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0
cy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitwdGhyZWFkX2tleV90IFRocmVhZEhv
bGRlcjo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhy
ZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+
ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQorewor
ICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKKyAg
ICBpZiAoZXJyb3IpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFk
SG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01B
WCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHB0aHJlYWRfZ2V0c3Bl
Y2lmaWMobV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFk
JiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3
ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdv
dWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3Nl
cnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8v
IFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2Ug
bW9kZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7
CisgICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhy
ZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0
YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nh
c3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRh
KTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsK
KyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1
ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRl
c3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3Jz
IHdlcmUgY2FsbGVkLgorICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50
aWZpZXJEYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRI
UkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5o
IGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTNj
ZWRmMTU4MDM1ZmNjNjQzZDMyZjVlMmVkMjI1NjdlNzBlYzNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRocmVhZEhvbGRlclB0aHJlYWRzX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyUHRo
cmVhZHNfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsK
KworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1w
bG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVt
b3ZlCisvLyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRT
cGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KK2NsYXNz
IFRocmVhZEhvbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkSG9sZGVyKTsK
K3B1YmxpYzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7CisKKyAgICAvLyBPbmUgdGltZSBpbml0aWFs
aXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgorICAgIC8vIFRoaXMgbWV0aG9kIG11
c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2Fm
ZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOworCisgICAgLy8gQ3JlYXRlcyBh
bmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRIb2xkZXIgaW50byB0aHJlYWQtc3BlY2lmaWMg
c3RvcmFnZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFRocmVhZCYpOworCisgICAgLy8g
UmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQu
CisgICAgc3RhdGljIFRocmVhZEhvbGRlciogY3VycmVudCgpOworCisgICAgVGhyZWFkJiB0aHJl
YWQoKSB7IHJldHVybiBtX3RocmVhZC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFRocmVhZEhv
bGRlcihUaHJlYWQmIHRocmVhZCkKKyAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAg
ICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIC8vIFRoaXMg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQg
dGVybWluYXRlczoKKyAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNw
ZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2Fz
ICdkZXN0cm95ZWQgb25jZScKKyAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhy
ZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVy
LgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3Jz
IHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92
ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBj
bGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVm
PFRocmVhZD4gbV90aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0
aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU3YzVmMWU0YThkNmEzZTgwNGRlNDQ1YTFmNTIwYTk4OTA3NGM0ZmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFk
SG9sZGVyV2luLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworbmFtZXNwYWNlIFdURiB7
CisKK0RXT1JEIFRocmVhZEhvbGRlcjo6bV9rZXkgPSAwOworCit2b2lkIHRocmVhZERpZEV4aXQo
VGhyZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVh
ZC0+ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQor
eworICAgIERXT1JEIG1fa2V5ID0gRmxzQWxsb2MoZGVzdHJ1Y3Rvcik7CisgICAgaWYgKG1fa2V5
ID09IEZMU19PVVRfT0ZfSU5ERVhFUykKKyAgICAgICAgQ1JBU0goKTsKK30KKworVGhyZWFkSG9s
ZGVyKiBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
aHJlYWRIb2xkZXIqPihGbHNHZXRWYWx1ZShtX2tleSkpOworfQorCit2b2lkIFRocmVhZEhvbGRl
cjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRocmVhZCkKK3sKKyAgICBpZiAoIWN1cnJlbnQoKSkgewor
ICAgICAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZl
cnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVydCBwZXJmb3JtYW5lLgorICAgICAgICAvLyBIYXZp
bmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJlIG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlk
bid0IGNhbGwKKyAgICAgICAgLy8gV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91
Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgorICAgICAgICBGbHNTZXRWYWx1ZShtX2tleSwgbmV3
IFRocmVhZEhvbGRlcih0aHJlYWQpKTsKKyAgICB9Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjpk
ZXN0cnVjdCh2b2lkKiBkYXRhKQoreworICAgIFRocmVhZEhvbGRlciogdGhyZWFkSWRlbnRpZmll
ckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQodGhy
ZWFkSWRlbnRpZmllckRhdGEpOworCisgICAgaWYgKHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lz
RGVzdHJveWVkT25jZSkgeworICAgICAgICBkZWxldGUgdGhyZWFkSWRlbnRpZmllckRhdGE7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rl
c3Ryb3llZE9uY2UgPSB0cnVlOworICAgIC8vIFJlLXNldHRpbmcgdGhlIHZhbHVlIGZvciBrZXkg
Y2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3QoKSBjYWxsIGFmdGVyIGFsbCBvdGhlciB0aHJlYWQtc3Bl
Y2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQuCisgICAgRmxzU2V0VmFsdWUobV9rZXksIHRo
cmVhZElkZW50aWZpZXJEYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlcldpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5Y2JiYTk5NzliNmVmOTc4YjgxMDdjMTcyYjMxZjQ4
MDViZjM1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJX
aW4uaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRocmVhZEhvbGRlcldpbl9oCisjZGVm
aW5lIFRocmVhZEhvbGRlcldpbl9oCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCisvLyBIb2xkcyBUaHJlYWQgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBz
dG9yYWdlIGFuZCBlbXBsb3lzIEZMUyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVt
b3ZlCisvLyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRT
cGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KK2NsYXNz
IFRocmVhZEhvbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkSG9sZGVyKTsK
K3B1YmxpYzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7CisKKyAgICAvLyBPbmUgdGltZSBpbml0aWFs
aXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgorICAgIC8vIFRoaXMgbWV0aG9kIG11
c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2Fm
ZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOworCisgICAgLy8gQ3JlYXRlcyBh
bmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRIb2xkZXIgaW50byB0aHJlYWQtc3BlY2lmaWMg
c3RvcmFnZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFRocmVhZCYpOworCisgICAgLy8g
UmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQu
CisgICAgc3RhdGljIFRocmVhZEhvbGRlciogY3VycmVudCgpOworCisgICAgVGhyZWFkJiB0aHJl
YWQoKSB7IHJldHVybiBtX3RocmVhZC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFRocmVhZEhv
bGRlcihUaHJlYWQmIHRocmVhZCkKKyAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAg
ICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIC8vIFRoaXMg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQg
dGVybWluYXRlczoKKyAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNw
ZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2Fz
ICdkZXN0cm95ZWQgb25jZScKKyAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhy
ZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBXaW4gdG8gY2FsbCBpdCBhZ2FpbiBsYXRlci4KKyAg
ICAvLyAtIHNlY29uZCwgYWZ0ZXIgYWxsIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJl
IGludm9rZWQsIGl0IGdldHMgY2FsbGVkIGFnYWluIC0gdGhpcyB0aW1lLCB3ZSByZW1vdmUgdGhl
CisgICAgLy8gVGhyZWFkIGZyb20gdGhlIHRocmVhZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51
cC4KKyAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lkKiBkYXRhKTsKKworICAgIFJlZjxUaHJl
YWQ+IG1fdGhyZWFkOworICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7CisgICAgc3RhdGljIERX
T1JEIG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUaHJlYWRI
b2xkZXJXaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJlYmZlOTNiYTVjNzBhOWI0
ZjRiNWYyNjU3MjFkZDE2OWJmZjE0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBVU0UoUFRIUkVBRFMpCi0KLSNpbmNsdWRlICJUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmgiCi0KLSNpbmNsdWRlICJUaHJlYWRpbmcuaCIKLQotI2lmIE9TKEhVUkQpCi0v
LyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwg
c28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVyZS4KLSNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAx
MDI0Ci0jZWxzZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYg
ewotCi1wdGhyZWFkX2tleV90IFRocmVhZElkZW50aWZpZXJEYXRhOjptX2tleSA9IFBUSFJFQURf
S0VZU19NQVg7Ci0KLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyKTsKLQotVGhy
ZWFkSWRlbnRpZmllckRhdGE6On5UaHJlYWRJZGVudGlmaWVyRGF0YSgpCi17Ci0gICAgdGhyZWFk
RGlkRXhpdChtX2lkZW50aWZpZXIpOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpp
bml0aWFsaXplT25jZSgpCi17Ci0gICAgaW50IGVycm9yID0gcHRocmVhZF9rZXlfY3JlYXRlKCZt
X2tleSwgZGVzdHJ1Y3QpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgQ1JBU0goKTsKLX0KLQot
VGhyZWFkSWRlbnRpZmllciBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aWRlbnRpZmllcigpCi17Ci0g
ICAgQVNTRVJUKG1fa2V5ICE9IFBUSFJFQURfS0VZU19NQVgpOwotICAgIFRocmVhZElkZW50aWZp
ZXJEYXRhKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZp
ZXJEYXRhKj4ocHRocmVhZF9nZXRzcGVjaWZpYyhtX2tleSkpOwotCi0gICAgcmV0dXJuIHRocmVh
ZElkZW50aWZpZXJEYXRhID8gdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faWRlbnRpZmllciA6IDA7
Ci19Ci0KLXZvaWQgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemUoVGhyZWFkSWRlbnRp
ZmllciBpZCkKLXsKLSAgICBBU1NFUlQoIWlkZW50aWZpZXIoKSk7Ci0gICAgLy8gSWRlYWxseSB3
ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdv
dWxkIGh1cnQgcGVyZm9ybWFuZS4KLSAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBo
ZXJlIG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKLSAgICAvLyBXVEY6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKSBzb29uIGVub3VnaCIgYnVncyBpbiByZWxlYXNlIG1vZGUuCi0g
ICAgUkVMRUFTRV9BU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7Ci0gICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhtX2tleSwgbmV3IFRocmVhZElkZW50aWZpZXJEYXRhKGlkKSk7Ci19Ci0K
LXZvaWQgVGhyZWFkSWRlbnRpZmllckRhdGE6OmRlc3RydWN0KHZvaWQqIGRhdGEpCi17Ci0gICAg
VGhyZWFkSWRlbnRpZmllckRhdGEqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8
VGhyZWFkSWRlbnRpZmllckRhdGEqPihkYXRhKTsKLSAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmll
ckRhdGEpOwotCi0gICAgaWYgKHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25j
ZSkgewotICAgICAgICBkZWxldGUgdGhyZWFkSWRlbnRpZmllckRhdGE7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2Ug
PSB0cnVlOwotICAgIC8vIFJlLXNldHRpbmcgdGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3Ro
ZXIgZGVzdHJ1Y3QoKSBjYWxsIGFmdGVyIGFsbCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1
Y3RvcnMgd2VyZSBjYWxsZWQuCi0gICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgdGhyZWFk
SWRlbnRpZmllckRhdGEpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVT
RShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJE
YXRhUHRocmVhZHMuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQzNDlhMGNkZGFhZWM4NjBiY2Jl
NGJjMGE3MjViZDI3NWU3MmViZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzX2gKLSNkZWZpbmUgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBIb2xkcyBU
aHJlYWRJZGVudGlmaWVyIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95
cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3Zl
Ci0vLyBUaHJlYWRJZGVudGlmaWVyIGZyb20gdGhyZWFkTWFwLiBJdCBhc3N1bWVzIHJlZ3VsYXIg
VGhyZWFkU3BlY2lmaWMgdHlwZXMgZG9uJ3QgdXNlIG11bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24u
Ci1jbGFzcyBUaHJlYWRJZGVudGlmaWVyRGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VGhyZWFkSWRlbnRpZmllckRhdGEpOwotcHVibGljOgotICAgIH5UaHJlYWRJZGVudGlmaWVyRGF0
YSgpOwotCi0gICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMg
YSB3aG9sZS4KLSAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlh
bGl6ZSgpIGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUuCi0gICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZU9uY2UoKTsKLQotICAgIC8vIENyZWF0ZXMgYW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhy
ZWFkSWRlbnRpZmllckRhdGEgaW50byB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4KLSAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplKFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllcik7Ci0KLSAgICAv
LyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXpl
ZC4KLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyKCk7Ci0KLXByaXZhdGU6
Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEoVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyKQot
ICAgICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAsIG1faXNEZXN0cm95
ZWRPbmNlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIHRocmVhZC1zcGVjaWZp
YyBkZXN0cnVjdG9yIGlzIGNhbGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFkIHRlcm1pbmF0ZXM6Ci0g
ICAgLy8gLSBmaXJzdCwgd2hlbiBhbGwgdGhlIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVj
dG9ycyBhcmUgY2FsbGVkLCBpdCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdhcyAnZGVzdHJveWVkIG9u
Y2UnCi0gICAgLy8gYW5kIHJlLXNldHMgaXRzZWxmIGludG8gdGhlIHRocmVhZC1zcGVjaWZpYyBz
bG90IHRvIG1ha2UgUHRocmVhZHMgdG8gY2FsbCBpdCBhZ2FpbiBsYXRlci4KLSAgICAvLyAtIHNl
Y29uZCwgYWZ0ZXIgYWxsIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGludm9rZWQs
IGl0IGdldHMgY2FsbGVkIGFnYWluIC0gdGhpcyB0aW1lLCB3ZSByZW1vdmUgdGhlCi0gICAgLy8g
VGhyZWFkSWRlbnRpZmllciBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFu
dXAuCi0gICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7Ci0KLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLSAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOwotICAg
IHN0YXRpYyBwdGhyZWFkX2tleV90IG1fa2V5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZiAvLyBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzX2gKLQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
LmNwcAppbmRleCBjMWRjMzUwMTkwM2FiNzZiMzcwNDZkOTMzM2Y5MzJhM2VmMGM2YzZlLi5mMTA0
NTk0OGQyNWU0NGZkODg1NzdhOTkyMjM5MDllNmY1NjI5YTkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAK
QEAgLTQ1LDcgKzQ1LDcgQEAgc3RydWN0IE5ld1RocmVhZENvbnRleHQgewogICAgIE11dGV4IGNy
ZWF0aW9uTXV0ZXg7CiB9OwogCi1jb25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0
IGNoYXIqIHRocmVhZE5hbWUpCitjb25zdCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5h
bWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9O
UCkKICAgICByZXR1cm4gdGhyZWFkTmFtZTsKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIHZvaWQg
dGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOwogICAgIH0KIAotICAgIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CisgICAgVGhyZWFkOjppbml0aWFs
aXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUpOwogCiAgICAgYXV0byBlbnRy
eVBvaW50ID0gV1RGTW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKIApAQCAtOTIsMjQgKzkyLDI0
IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAg
ZW50cnlQb2ludCgpOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludCkKK1JlZlB0cjxUaHJl
YWQ+IFRocmVhZDo6Y3JlYXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEs
IGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlKG5hbWUsIFtl
bnRyeVBvaW50LCBkYXRhXSB7CisgICAgICAgIGVudHJ5UG9pbnQoZGF0YSk7CisgICAgfSk7Cit9
CisKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQogewogICAgIE5ld1RocmVhZENvbnRleHQqIGNv
bnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCks
IHsgfSB9OwogCiAgICAgLy8gUHJldmVudCB0aGUgdGhyZWFkIGJvZHkgZnJvbSBleGVjdXRpbmcg
dW50aWwgd2UndmUgZXN0YWJsaXNoZWQgdGhlIHRocmVhZCBpZGVudGlmaWVyLgogICAgIE11dGV4
TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsKIAotICAgIHJldHVybiBjcmVh
dGVUaHJlYWRJbnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBuYW1lKTsKKyAgICBy
ZXR1cm4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBu
YW1lKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24g
ZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlVGhyZWFkKG5hbWUsIFtlbnRyeVBvaW50LCBkYXRhXSB7Ci0gICAgICAgIGVudHJ5UG9p
bnQoZGF0YSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVy
YWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFP
U19DTEFTU0VTKQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTIwLDcg
KzEyMCw3IEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGludCByZWxh
dGl2ZVByaW9yaXR5KQogI2VuZGlmCiB9CiAKLXZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlcklu
aXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9T
X0NMQVNTRVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMzQsMTMg
KzEzNCwxMyBAQCB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0
aXZlUHJpb3JpdHkpCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKIHN0YXRpYyBxb3NfY2xhc3NfdCBn
bG9iYWxNYXhRT1NjbGFzcyB7IFFPU19DTEFTU19VTlNQRUNJRklFRCB9OwogCi12b2lkIHNldEds
b2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190IG1heENsYXNzKQordm9pZCBUaHJlYWQ6OnNldEds
b2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190IG1heENsYXNzKQogewogICAgIGJtYWxsb2M6OmFw
aTo6c2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MobWF4Q2xhc3MpOwogICAgIGdsb2JhbE1heFFP
U2NsYXNzID0gbWF4Q2xhc3M7CiB9CiAKLXFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3MocW9z
X2NsYXNzX3Qgb3JpZ2luYWxDbGFzcykKK3Fvc19jbGFzc190IFRocmVhZDo6YWRqdXN0ZWRRT1ND
bGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNzKQogewogICAgIGlmIChnbG9iYWxNYXhRT1Nj
bGFzcyAhPSBRT1NfQ0xBU1NfVU5TUEVDSUZJRUQpCiAgICAgICAgIHJldHVybiBzdGQ6Om1pbihv
cmlnaW5hbENsYXNzLCBnbG9iYWxNYXhRT1NjbGFzcyk7CkBAIC0xNDgsNCArMTQ4LDkgQEAgcW9z
X2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNzKQogfQog
I2VuZGlmCiAKK3ZvaWQgVGhyZWFkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1faWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgK
aW5kZXggNmI1NThiM2UxZDUxN2U4MTBjNWVhOGY2YjJjYTQ0MDVhY2YwMTJkMi4uNDMzM2I2Mjhl
ZjZjMTg3MGUwNjgyYzFlNmIxOGI5YmNkM2E0ZThjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTEsNiAr
MSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4g
SGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVz
dGluIEhheWdvb2QgPGpoYXlnb29kQHJlYWt0aXguY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE3
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsNzIgKzM5LDIyNiBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgorCisjaWYgVVNFKFBUSFJFQURTKQor
I2lmIE9TKERBUldJTikKKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbHNlCisjaW5j
bHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisvLyBVc2luZyBzaWduYWwu
aCBkaWRuJ3QgbWFrZSBtY29udGV4dF90IGFuZCB1Y29udGV4dF90IGF2YWlsYWJsZSBvbiBGcmVl
QlNELgorLy8gVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQgaW4gRnJlZUJTRCAxMS4wLUNVUlJFTlQs
IHNvIHRoaXMgd29ya2Fyb3VuZCBjYW4gYmUKKy8vIHJlbW92ZWQgYWZ0ZXIgRnJlZUJTRCAxMC54
IGdvZXMgRU9MLgorLy8gaHR0cHM6Ly9idWdzLmZyZWVic2Qub3JnL2J1Z3ppbGxhL3Nob3dfYnVn
LmNnaT9pZD0yMDcwNzkKKyNpZiBPUyhGUkVFQlNEKQorI2luY2x1ZGUgPHVjb250ZXh0Lmg+Cisj
ZW5kaWYKKworI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2VuZGlmCisj
ZW5kaWYKKworI2lmICFDT01QSUxFUihNU1ZDKQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1
ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2VuZGlmCiAKIG5h
bWVzcGFjZSBXVEYgewogCi10eXBlZGVmIHVpbnQzMl90IFRocmVhZElkZW50aWZpZXI7CisjaWYg
T1MoREFSV0lOKQorCisjaWYgQ1BVKFg4NikKK3R5cGVkZWYgaTM4Nl90aHJlYWRfc3RhdGVfdCBQ
bGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShYODZfNjQpCit0eXBlZGVmIHg4Nl90aHJlYWRf
c3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKFBQQykKK3R5cGVkZWYgcHBj
X3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKFBQQzY0KQordHlw
ZWRlZiBwcGNfdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShB
Uk0pCit0eXBlZGVmIGFybV90aHJlYWRfc3RhdGVfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlm
IENQVShBUk02NCkKK3R5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3Rl
cnM7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworI2VsaWYg
T1MoV0lORE9XUykKKwordXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOworCisjZWxp
ZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiAoQ1BVKFg4NikgfHwgQ1BV
KFg4Nl82NCkgfHwgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykpCisKK3VzaW5n
IFBsYXRmb3JtUmVnaXN0ZXJzID0gbWNvbnRleHRfdDsKKworI2Vsc2UKKworc3RydWN0IFBsYXRm
b3JtUmVnaXN0ZXJzIHsKKyAgICB2b2lkKiBzdGFja1BvaW50ZXI7Cit9OworCisjZW5kaWYKKwor
dXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQzMl90OwogdHlwZWRlZiB2b2lkICgqVGhyZWFk
RnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIAotLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNh
bGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVk
bHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8g
Y2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5IAotLy8gcmVxdWlyZW1lbnQgaXMgdGhh
dCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBp
bml0aWFsaXplVGhyZWFkaW5nKCk7CitjbGFzcyBUaHJlYWRIb2xkZXI7CitjbGFzcyBQcmludFN0
cmVhbTsKKworY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVh
ZD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRIb2xkZXI7CiAKLS8vIFJldHVy
bnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgotLy8gVGhlIHRocmVhZCBuYW1lIG11c3Qg
YmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRo
ZSB0aHJlYWQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWQoY29uc3QgY2hhciogdGhyZWFkTmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgflRocmVhZCgpOwogCi0vLyBNYXJrIHRoZSBjdXJyZW50IHRocmVh
ZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9uc2l2ZW5lc3MuCi0vLyByZWxhdGl2ZVByaW9yaXR5IGlz
IGEgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTUsIDBdIHdoZXJlIGEgbG93ZXIgdmFsdWUgaW5kaWNh
dGVzIGEgbG93ZXIgcHJpb3JpdHkuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50
VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKLVdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJl
bGF0aXZlUHJpb3JpdHkgPSAwKTsKKyAgICAvLyBSZXR1cm5zIG51bGxwdHIgaWYgdGhyZWFkIGNy
ZWF0aW9uIGZhaWxlZC4KKyAgICAvLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwg
c2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBj
aGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5
UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpOwogCi1XVEZfRVhQT1JUX1BSSVZB
VEUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyLCBpbnQpOwotV1RGX0VY
UE9SVF9QUklWQVRFIGludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVy
KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVy
KTsKKyAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3QuIE5vdGUgdGhhdCBpdCBjYW4gYmUgKGEg
Yml0KSBjb3N0bHkgaW4gV2luZG93cy4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRo
cmVhZCYgY3VycmVudCgpOwogCi0vLyBEZXByZWNhdGVkIGZ1bmN0aW9uLXBvaW50ZXItYmFzZWQg
dGhyZWFkIGNyZWF0aW9uLgotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3Jl
YXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7
CisgICAgLy8gUmV0dXJucyBUaHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwg
aWYgdGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCBpZGVudGl0eQorICAgIC8vIG9mIHRocmVhZHMg
YW5kIGVuc3VyZSB0aGUgdGhyZWFkIGxpZmV0aW1lLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50SUQoKTsKIAotLy8gSW50ZXJuYWwgcGxhdGZv
cm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGltcGxlbWVudGF0aW9uLgotVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIq
IHRocmVhZE5hbWUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVByaW9yaXR5
KGludCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGludCB3YWl0Rm9yQ29tcGxldGlvbigpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRldGFjaCgpOwogCi0vLyBDYWxsZWQgaW4gdGhl
IHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0vLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMg
d2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQu
Ci12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFk
TmFtZSk7CisjaWYgT1MoREFSV0lOKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9yID0g
a2Vybl9yZXR1cm5fdDsKKyNlbGlmIFVTRShQVEhSRUFEUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1
c3BlbmRFcnJvciA9IGludDsKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAgdXNpbmcgUGxhdGZvcm1T
dXNwZW5kRXJyb3IgPSBEV09SRDsKKyNlbmRpZgogCi1jb25zdCBjaGFyKiBub3JtYWxpemVUaHJl
YWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBF
eHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHJlc3VtZSgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXpl
X3QgZ2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJik7CiAKICNpZiBVU0UoUFRIUkVBRFMp
Ci1ib29sIHNpZ25hbFRocmVhZChUaHJlYWRJZGVudGlmaWVyLCBpbnQgc2lnbmFsTnVtYmVyKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBzaWduYWwoaW50IHNpZ25hbE51bWJlcik7CiAj
ZW5kaWYKIAorICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSBy
ZXNwb25zaXZlbmVzcy4KKyAgICAvLyByZWxhdGl2ZVByaW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhl
IHJhbmdlIFstMTUsIDBdIHdoZXJlIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJp
b3JpdHkuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVk
KGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisKICNpZiBIQVZFKFFPU19DTEFTU0VTKQotV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QpOwot
V1RGX0VYUE9SVF9QUklWQVRFIHFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNz
X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRHbG9iYWxNYXhRT1ND
bGFzcyhxb3NfY2xhc3NfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBxb3NfY2xh
c3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190KTsKICNlbmRpZgogCi19IC8vIG5hbWVz
cGFjZSBXVEYKKyAgICAvLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0
ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlSW50ZXJu
YWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAotdXNp
bmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwotdXNpbmcgV1RGOjpjcmVhdGVUaHJlYWQ7Ci11c2lu
ZyBXVEY6OmN1cnJlbnRUaHJlYWQ7Ci11c2luZyBXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5Owot
dXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2luZyBXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0
aW9uOworICAgIC8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4K
KyAgICAvLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3Qg
YmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWROYW1l
KTsKIAogI2lmIFVTRShQVEhSRUFEUykKLXVzaW5nIFdURjo6c2lnbmFsVGhyZWFkOworICAgIHZv
aWQgZXN0YWJsaXNoKHB0aHJlYWRfdCk7CisjZWxzZQorICAgIHZvaWQgZXN0YWJsaXNoKEhBTkRM
RSwgVGhyZWFkSWRlbnRpZmllcik7CiAjZW5kaWYKIAotI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi11
c2luZyBXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzOwotdXNpbmcgV1RGOjphZGp1c3RlZFFPU0Ns
YXNzOworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIHN0YXRp
YyB2b2lkIHNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCog
dWNvbnRleHQpOworCisgICAgVGhyZWFkSWRlbnRpZmllciBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWQ7IH0KKworICAgIHZvaWQgYWRkT25FeGl0Q2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKFRo
cmVhZCYpPiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1fb25FeGl0Q2FsbGJhY2suYXBwZW5k
KGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGhyZWFkJiB0
aHJlYWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQoKSA9PSB0aHJlYWQuaWQoKTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGhyZWFkJiB0aHJlYWQpCisgICAgeworICAg
ICAgICByZXR1cm4gaWQoKSAhPSB0aHJlYWQuaWQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VGhyZWFkKCk7CisKKyAgICBlbnVtIEpvaW5hYmxlU3RhdGUgeworICAgICAgICAvLyBUaGUgZGVm
YXVsdCB0aHJlYWQgc3RhdGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KKyAgICAgICAg
Sm9pbmFibGUsCisKKyAgICAgICAgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRv
IGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUg
YmVjYXVzZSB0aGVyZSBjYW4gYmUgYQorICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVu
IHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1
cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pCisg
ICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVh
ZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2Ug
dGhlcmUncworICAgICAgICAvLyBub2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0
aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJu
ZWQpLgorICAgICAgICBKb2luZWQsCisKKyAgICAgICAgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBk
ZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRo
ZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgorICAg
ICAgICBEZXRhY2hlZCwKKyAgICB9OworCisgICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRl
KCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRlOyB9CisgICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hl
ZCgpIHsgbV9qb2luYWJsZVN0YXRlID0gRGV0YWNoZWQ7IH0KKyAgICB2b2lkIGRpZEV4aXQoKTsK
KyAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQorICAgIGJv
b2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9CisKKyAgICBXb3JkTG9jayBtX211
dGV4OworICAgIFRocmVhZElkZW50aWZpZXIgbV9pZCB7IDAgfTsKKyAgICBKb2luYWJsZVN0YXRl
IG1fam9pbmFibGVTdGF0ZSB7IEpvaW5hYmxlIH07CisgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxz
ZSB9OworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+PiBtX29uRXhpdENh
bGxiYWNrOworI2lmIFVTRShQVEhSRUFEUykKKyAgICBwdGhyZWFkX3QgbV9oYW5kbGU7CisjaWYg
T1MoREFSV0lOKQorICAgIG1hY2hfcG9ydF90IG1fcGxhdGZvcm1UaHJlYWQ7CisjZWxzZQorICAg
IHNlbV90IG1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZTsKKyAgICBtY29udGV4dF90IG1fc3Vz
cGVuZGVkTWFjaGluZUNvbnRleHQ7CisgICAgdW5zaWduZWQgbV9zdXNwZW5kQ291bnQgeyAwIH07
CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdXNwZW5kZWQgeyBmYWxzZSB9OwogI2VuZGlmCisj
ZWxpZiBPUyhXSU5ET1dTKQorICAgIEhBTkRMRSBtX2hhbmRsZTsKKyNlbHNlCisjZXJyb3IgVW5r
bm93biBTeXN0ZW0KKyNlbmRpZgorfTsKKworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxl
ZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHku
CisvLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2Fs
bCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5CisvLyByZXF1aXJlbWVudCBpcyB0aGF0IHRo
ZSBjYWxscyBhcmUgbm90IHJlZW50cmFudC4KK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRp
YWxpemVUaHJlYWRpbmcoKTsKKworaW5saW5lIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVh
ZCgpCit7CisgICAgcmV0dXJuIFRocmVhZDo6Y3VycmVudElEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7Cit1c2luZyBXVEY6OlRocmVh
ZDsKK3VzaW5nIFdURjo6Y3VycmVudFRocmVhZDsKIAogI2VuZGlmIC8vIFRocmVhZGluZ19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggZjVjZWUzYzE3NzgyZjY2YWY5YjA0
Y2M3ZDU2Y2ExZGE1YTY5MmQwZi4uMmZiYjg4YWNiZGMzMWRmNzJiMGY5MTM3NmQyMGNkMTIyNWMz
Mzg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMSw3ICsxLDggQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5
Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8
amhheWdvb2RAcmVha3RpeC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00MSwxNjIgKzQyLDExNyBAQAogI2luY2x1ZGUgIlJhbmRvbU51
bWJlclNlZWQuaCIKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24uaCIKLSNpbmNsdWRlICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmgiCi0jaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmF3UG9p
bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+Ci0jaW5jbHVkZSA8ZXJybm8u
aD4KLQotI2lmICFDT01QSUxFUihNU1ZDKQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUg
PHNjaGVkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWYgT1MoTElOVVgp
Ci0jaW5jbHVkZSA8c3lzL3ByY3RsLmg+Ci0jZW5kaWYKLQotI2lmICFPUyhEQVJXSU4pCi0jaW5j
bHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KIAogbmFt
ZXNwYWNlIFdURiB7CiAKLWNsYXNzIFB0aHJlYWRTdGF0ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBKb2luYWJsZVN0YXRlIHsKLSAgICAgICAgSm9p
bmFibGUsIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9p
bmVkIG9uLgotCi0gICAgICAgIEpvaW5lZCwgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhy
ZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlz
IGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYSAKLSAgICAgICAgICAgICAgICAvLyBwZXJpb2Qg
b2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJl
YWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxl
dGlvbiB0byBydW4pIAotICAgICAgICAgICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERpZEV4aXQg
aXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5kIGRlbGV0
ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncyAKLSAgICAgICAgICAgICAgICAvLyBub2Jv
ZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRo
cmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgotCi0gICAgICAgIERldGFjaGVk
IC8vIFRoZSB0aHJlYWQgaGFzIGJlZW4gZGV0YWNoZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgam9p
bmVkIG9uLiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkIG11c3QgdGFrZSBjYXJlIG9mIGNsZWFu
aW5nIHVwIGFmdGVyIGl0c2VsZi4KLSAgICB9OwotCi0gICAgLy8gQ3VycmVudGx5IGFsbCB0aHJl
YWRzIGNyZWF0ZWQgYnkgV1RGIHN0YXJ0IG91dCBhcyBqb2luYWJsZS4gCi0gICAgUHRocmVhZFN0
YXRlKHB0aHJlYWRfdCBoYW5kbGUpCi0gICAgICAgIDogbV9qb2luYWJsZVN0YXRlKEpvaW5hYmxl
KQotICAgICAgICAsIG1fZGlkRXhpdChmYWxzZSkKLSAgICAgICAgLCBtX3B0aHJlYWRIYW5kbGUo
aGFuZGxlKQotICAgIHsKLSAgICB9Ci0KLSAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUo
KSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRs
ZSgpIHsgcmV0dXJuIG1fcHRocmVhZEhhbmRsZTsgfQotICAgIHZvaWQgZGlkQmVjb21lRGV0YWNo
ZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVkOyB9Ci0gICAgdm9pZCBkaWRFeGl0KCkg
eyBtX2RpZEV4aXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBkaWRKb2luKCkgeyBtX2pvaW5hYmxlU3Rh
dGUgPSBKb2luZWQ7IH0KLSAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1fZGlkRXhpdDsg
fQotCi1wcml2YXRlOgotICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlOwotICAgIGJv
b2wgbV9kaWRFeGl0OwotICAgIHB0aHJlYWRfdCBtX3B0aHJlYWRIYW5kbGU7Ci19OwotCi10eXBl
ZGVmIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFB0aHJlYWRTdGF0
ZT4+IFRocmVhZE1hcDsKKyNpZiAhT1MoREFSV0lOKQogCi12b2lkIHVuc2FmZVRocmVhZFdhc0Rl
dGFjaGVkKFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50
aWZpZXIpOwotdm9pZCB0aHJlYWRXYXNKb2luZWQoVGhyZWFkSWRlbnRpZmllcik7CisvLyBXZSB1
c2UgU0lHVVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUgbWFjaGluZSB0aHJlYWRzIGluIEphdmFT
Y3JpcHRDb3JlLgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSA9IFNJR1VTUjI7CitzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkKj4gdGFyZ2V0VGhyZWFk
IHsgbnVsbHB0ciB9Oworc3RhdGljIFN0YXRpY1dvcmRMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOwog
Ci1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKK3ZvaWQgVGhyZWFkOjpzaWduYWxIYW5k
bGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVjb250ZXh0KQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4Owot
fQotCi12b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQotewotICAgIHN0YXRpYyBib29sIGlzSW5p
dGlhbGl6ZWQ7Ci0KLSAgICBpZiAoaXNJbml0aWFsaXplZCkKKyAgICAvLyBUb3VjaGluZyB0aHJl
YWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRsZXJzIGlzIGFsbG93ZWQuCisg
ICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQubG9hZCgpOworCisgICAgaWYgKHRocmVh
ZC0+bV9zdXNwZW5kZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkgeworICAgICAg
ICAvLyBUaGlzIGlzIHNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gdGhhdCBpcyBpbnRlbmRlZCB0
byBiZSB1c2VkIHRvIHJlc3VtZSBzaWdzdXNwZW5kLgorICAgICAgICAvLyBTbyB0aGlzIGhhbmRs
ZXIgaW52b2NhdGlvbiBpdHNlbGYgc2hvdWxkIG5vdCBwcm9jZXNzLgorICAgICAgICAvLworICAg
ICAgICAvLyBXaGVuIHNpZ25hbCBjb21lcywgZmlyc3QsIHRoZSBzeXN0ZW0gY2FsbHMgc2lnbmFs
IGhhbmRsZXIuIEFuZCBsYXRlciwgc2lnc3VzcGVuZCB3aWxsIGJlIHJlc3VtZWQuIFNpZ25hbCBo
YW5kbGVyIGludm9jYXRpb24gYWx3YXlzIHByZWNlZGVzLgorICAgICAgICAvLyBTbywgdGhlIHBy
b2JsZW0gbmV2ZXIgaGFwcGVucyB0aGF0IHN1c3BlbmRlZC5zdG9yZSh0cnVlLCAuLi4pIHdpbGwg
YmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBoYW5kbGVyIGlzIGNhbGxlZC4KKyAgICAgICAgLy8gaHR0
cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvc2ln
c3VzcGVuZC5odG1sCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpc0luaXRpYWxpemVk
ID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKLSAg
ICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0
cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJl
ZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAg
dGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7
Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCk7Ci0gICAgd3RmVGhy
ZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQorICAgIHVjb250ZXh0X3QqIHVz
ZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKKyNpZiBDUFUo
UFBDKQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9ICp1c2VyQ29udGV4
dC0+dWNfbWNvbnRleHQudWNfcmVnczsKKyNlbHNlCisgICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1h
Y2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OworI2VuZGlmCiAKLXN0YXRp
YyBUaHJlYWRNYXAmIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRo
cmVhZE1hcD4gbWFwOwotICAgIHJldHVybiBtYXA7CisgICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxs
ZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgorICAgIC8vIHNlbV9wb3N0
IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxs
IHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgorICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91
cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0
YWdfMDJfMDRfMDMKKyAgICAvLworICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFy
cmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0
bHkgc2F2ZWQuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2
OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCisgICAgc2VtX3Bvc3Qo
JnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKworICAgIC8vIFJlYWNoaW5n
IGhlcmUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYmxvY2tlZCBpbiB0aGlzIGhhbmRsZXIg
KHRoaXMgaXMgY29uZmlndXJlZCBieSBzaWdhY3Rpb24ncyBzYV9tYXNrKS4KKyAgICAvLyBTbyBi
ZWZvcmUgY2FsbGluZyBzaWdzdXNwZW5kLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHRvIHRoaXMg
dGhyZWFkIGlzIGRlZmVycmVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaGFuZGxlciBpcyBub3Qg
ZXhlY3V0ZWQgcmVjdXJzaXZlbHkuCisgICAgc2lnc2V0X3QgYmxvY2tlZFNpZ25hbFNldDsKKyAg
ICBzaWdmaWxsc2V0KCZibG9ja2VkU2lnbmFsU2V0KTsKKyAgICBzaWdkZWxzZXQoJmJsb2NrZWRT
aWduYWxTZXQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHNpZ3N1c3BlbmQoJmJsb2Nr
ZWRTaWduYWxTZXQpOworCisgICAgLy8gQWxsb3cgcmVzdW1lIGNhbGxlciB0byBzZWUgdGhhdCB0
aGlzIHRocmVhZCBpcyByZXN1bWVkLgorICAgIHNlbV9wb3N0KCZ0aHJlYWQtPm1fc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZSk7CiB9CiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZp
ZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIFRocmVhZE1hcDo6
aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFk
TWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT52YWx1ZS0+
cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+dmFsdWUtPmhhc0V4aXRlZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
KyNlbmRpZiAvLyAhT1MoREFSV0lOKQogCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBlc3RhYmxp
c2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5k
bGUpCit2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogewotICAgIEFTU0VSVCghaWRlbnRpZmll
ckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZp
ZXJDb3VudCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgc3RkOjpt
YWtlX3VuaXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRIYW5kbGUpKTsKLSAgICByZXR1cm4gaWRl
bnRpZmllckNvdW50Kys7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7
CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5p
dGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBj
b25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAg
ICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAg
ICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJH
ZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXpl
RGF0ZXMoKTsKKworI2lmICFPUyhEQVJXSU4pCisgICAgICAgIC8vIFNpZ25hbCBoYW5kbGVycyBh
cmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KKyAgICAgICAgLy8gSW50ZW50aW9uYWxs
eSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVyLgorICAgICAgICAv
LyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUgaGFuZGxlciBi
eSBzaWdzdXNwZW5kLgorICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICAgICAg
c2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgc2lnYWRkc2V0KCZhY3Rpb24u
c2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisKKyAgICAgICAgYWN0aW9uLnNhX3Np
Z2FjdGlvbiA9IFRocmVhZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWU7CisgICAgICAgIGFj
dGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOworICAgICAgICBzaWdhY3Rp
b24oU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlvbiwgMCk7CisjZW5kaWYKKyAgICB9KTsK
IH0KIAotc3RhdGljIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2Nr
QWxyZWFkeUhlbGQoVGhyZWFkSWRlbnRpZmllciBpZCkKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCiB7Ci0gICAgcmV0dXJuIHRocmVhZE1h
cCgpLmdldChpZCktPnB0aHJlYWRIYW5kbGUoKTsKKyNpZiAhT1MoREFSV0lOKQorICAgIHNpZ3Nl
dF90IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2FkZHNldCgmbWFzaywg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NL
LCAmbWFzaywgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQqIHd0ZlRocmVhZEVudHJ5UG9p
bnQodm9pZCogcGFyYW0pCiB7Ci0gICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBjcmVh
dGVUaHJlYWRJbnRlcm5hbC4KKyAgICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIFRocmVh
ZDo6Y3JlYXRlSW50ZXJuYWwuCiAgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjp1bmlxdWVfcHRy
PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uKj4ocGFyYW0pKTsKLSAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5k
YXRhKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVU
aHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25z
dCBjaGFyKikKLXsKLSAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgcHRocmVhZF90IHRo
cmVhZEhhbmRsZTsKLSAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOwotICAgIHB0aHJlYWRfYXR0cl9p
bml0KCZhdHRyKTsKLSNpZiBIQVZFKFFPU19DTEFTU0VTKQotICAgIHB0aHJlYWRfYXR0cl9zZXRf
cW9zX2NsYXNzX25wKCZhdHRyLCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJ
QVRFRCksIDApOwotI2VuZGlmCi0gICAgaW50IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVh
ZEhhbmRsZSwgJmF0dHIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOwot
ICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAg
d2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KIAotICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVl
X3B0ciBjb25zdHJ1Y3RvciBpbiB3dGZUaHJlYWRFbnRyeVBvaW50LgotICAgIFRocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbiogbGVha2VkSW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOwot
ICAgIFVOVVNFRF9QQVJBTShsZWFrZWRJbnZvY2F0aW9uKTsKKyAgICBUaHJlYWRIb2xkZXI6Omlu
aXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0g
bnVsbHB0cjsKIAotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRs
ZSh0aHJlYWRIYW5kbGUpOworICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRh
dGEpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhy
ZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK3ZvaWQgVGhyZWFkOjppbml0aWFs
aXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYg
SEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcHRocmVhZF9zZXRuYW1lX25wKG5vcm1hbGl6
ZVRocmVhZE5hbWUodGhyZWFkTmFtZSkpOwpAQCAtMjA1LDEyMyArMTYxLDcgQEAgdm9pZCBpbml0
aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTSh0aHJlYWROYW1lKTsKICNlbmRpZgotCi0gICAgVGhyZWFkSWRl
bnRpZmllciBpZCA9IGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUocHRocmVhZF9zZWxmKCkpOwot
ICAgIEFTU0VSVChpZCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemUoaWQp
OwotfQotICAgIAotdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElELCBpbnQgZGVsdGEpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAg
QVNTRVJUKHRocmVhZElEKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRo
cmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJU
KHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLQotICAgIGludCBwb2xpY3k7Ci0gICAgc3RydWN0IHNj
aGVkX3BhcmFtIHBhcmFtOwotCi0gICAgaWYgKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFk
SGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwYXJhbS5z
Y2hlZF9wcmlvcml0eSArPSBkZWx0YTsKLQotICAgIHB0aHJlYWRfc2V0c2NoZWRwYXJhbShwdGhy
ZWFkSGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7Ci19Ci0KLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIHB0aHJlYWRfdCBwdGhyZWFk
SGFuZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICB7Ci0gICAgICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gbG9jayBhY3Jvc3MgdGhlIGNhbGwgdG8gam9pbiwgc2luY2UgdGhhdCBjYW4g
YmxvY2sgb3VyIHRocmVhZCBhbmQgY2F1c2UgZGVhZGxvY2suCi0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJl
YWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAg
ICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpbnQgam9pblJlc3VsdCA9
IHB0aHJlYWRfam9pbihwdGhyZWFkSGFuZGxlLCAwKTsKLQotICAgIGlmIChqb2luUmVzdWx0ID09
IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91
bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAgICBlbHNl
IGlmIChqb2luUmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUg
d2FzIHVuYWJsZSB0byBiZSBqb2luZWQuXG4iLCB0aHJlYWRJRCk7Ci0KLSAgICBNdXRleExvY2tl
ciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgUHRocmVhZFN0YXRlKiBzdGF0ZSA9IHRo
cmVhZE1hcCgpLmdldCh0aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICBBU1NFUlQo
c3RhdGUtPmpvaW5hYmxlU3RhdGUoKSA9PSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKTsKLQotICAg
IC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBzbyBjbGVhbiB1cCBhZnRlciBpdC4K
LSAgICBpZiAoc3RhdGUtPmhhc0V4aXRlZCgpKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUo
dGhyZWFkSUQpOwotICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQsIHNvIGRvbid0
IGNsZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVk
IG9uIGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBhZnRlciBpdHNlbGYuCi0gICAgZWxzZQot
ICAgICAgICBzdGF0ZS0+ZGlkSm9pbigpOwotCi0gICAgcmV0dXJuIGpvaW5SZXN1bHQ7Ci19Ci0K
LXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCi17Ci0gICAgQVNT
RVJUKHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgp
KTsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlm
aWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHB0aHJlYWRIYW5k
bGUpOwotCi0gICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRIYW5k
bGUpOwotICAgIGlmIChkZXRhY2hSZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRl
bnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4iLCB0aHJlYWRJRCk7Ci0KLSAg
ICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBB
U1NFUlQoc3RhdGUpOwotICAgIGlmIChzdGF0ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgIHRocmVh
ZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgZWxzZQotICAgICAgICB0aHJlYWRNYXAoKS5n
ZXQodGhyZWFkSUQpLT5kaWRCZWNvbWVEZXRhY2hlZCgpOwotfQotCi12b2lkIHRocmVhZERpZEV4
aXQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgUHRocmVhZFN0YXRlKiBzdGF0ZSA9IHRocmVhZE1hcCgp
LmdldCh0aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICAKLSAgICBzdGF0ZS0+ZGlk
RXhpdCgpOwotCi0gICAgaWYgKHN0YXRlLT5qb2luYWJsZVN0YXRlKCkgIT0gUHRocmVhZFN0YXRl
OjpKb2luYWJsZSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLX0KLQot
VGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKLXsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IGlkID0gVGhyZWFkSWRlbnRpZmllckRhdGE6OmlkZW50aWZpZXIoKTsKLSAgICBpZiAoaWQpCi0g
ICAgICAgIHJldHVybiBpZDsKLQotICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhy
ZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgotICAgIGlkID0gZXN0YWJsaXNo
SWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUocHRocmVhZF9zZWxmKCkpOwotICAgIFRocmVhZElk
ZW50aWZpZXJEYXRhOjppbml0aWFsaXplKGlkKTsKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLWJvb2wg
c2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBzaWduYWxOdW1iZXIp
Ci17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsK
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAg
ICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tB
bHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKLSAg
ICB9Ci0gICAgaW50IGVyck5vID0gcHRocmVhZF9raWxsKHB0aHJlYWRIYW5kbGUsIHNpZ25hbE51
bWJlcik7Ci0gICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCisg
ICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9CiAKIE11
dGV4OjpNdXRleCgpCkBAIC00MTUsNiArMjU1LDI3MiBAQCB2b2lkIFRocmVhZENvbmRpdGlvbjo6
YnJvYWRjYXN0KCkKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7CiB9CiAKK1Ro
cmVhZDo6VGhyZWFkKCkKK3sKKyNpZiAhT1MoREFSV0lOKQorICAgIHNlbV9pbml0KCZtX3NlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUsIC8qIE9ubHkgYXZhaWxhYmxlIGluIHRoaXMgcHJvY2Vzcy4g
Ki8gMCwgLyogSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbWFwaG9yZS4gKi8gMCk7CisjZW5kaWYK
K30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKKyNpZiAhT1MoREFSV0lOKQorICAgIHNlbV9kZXN0
cm95KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworI2VuZGlmCit9CisKK3ZvaWQgVGhy
ZWFkOjpkaWRFeGl0KCkKK3sKKyAgICB7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlciht
X211dGV4KTsKKyAgICAgICAgbV9kaWRFeGl0ID0gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChhdXRv
JiBjYWxsYmFjayA6IG1fb25FeGl0Q2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrKCp0aGlzKTsK
K30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChwdGhyZWFkX3QgaGFuZGxlKQoreworICAgIFdv
cmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAg
ICBpZiAoIW1faWQpIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZElkZW50aWZp
ZXI+IHByb3ZpZGVyIHsgMCB9OworICAgICAgICBtX2lkID0gKytwcm92aWRlcjsKKyNpZiBPUyhE
QVJXSU4pCisgICAgICAgIG1fcGxhdGZvcm1UaHJlYWQgPSBwdGhyZWFkX21hY2hfdGhyZWFkX25w
KGhhbmRsZSk7CisjZW5kaWYKKyAgICB9Cit9CisKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0
eShpbnQgZGVsdGEpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworCisg
ICAgaW50IHBvbGljeTsKKyAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisKKyAgICBpZiAo
cHRocmVhZF9nZXRzY2hlZHBhcmFtKG1faGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQorICAgICAg
ICByZXR1cm47CisKKyAgICBwYXJhbS5zY2hlZF9wcmlvcml0eSArPSBkZWx0YTsKKworICAgIHB0
aHJlYWRfc2V0c2NoZWRwYXJhbShtX2hhbmRsZSwgcG9saWN5LCAmcGFyYW0pOworfQorCitpbnQg
VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCit7CisgICAgcHRocmVhZF90IGhhbmRsZTsKKyAg
ICB7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFu
ZGxlID0gbV9oYW5kbGU7CisgICAgfQorCisgICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pv
aW4oaGFuZGxlLCAwKTsKKworICAgIGlmIChqb2luUmVzdWx0ID09IEVERUFETEspCisgICAgICAg
IExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tl
ZCB0cnlpbmcgdG8gcXVpdCIsIG1faWQpOworICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCisgICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5l
ZC5cbiIsIG1faWQpOworCisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAg
IEFTU0VSVChqb2luYWJsZVN0YXRlKCkgPT0gSm9pbmFibGUpOworCisgICAgLy8gVGhlIHRocmVh
ZCBoYXMgYWxyZWFkeSBleGl0ZWQsIGRvIG5vdGhpbmcuCisgICAgLy8gVGhlIHRocmVhZCBoYXNu
J3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRo
YXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFm
dGVyIGl0c2VsZi4KKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRKb2luKCk7CisK
KyAgICByZXR1cm4gam9pblJlc3VsdDsKK30KKwordm9pZCBUaHJlYWQ6OmRldGFjaCgpCit7Cisg
ICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBkZXRhY2hSZXN1bHQg
PSBwdGhyZWFkX2RldGFjaChtX2hhbmRsZSk7CisgICAgaWYgKGRldGFjaFJlc3VsdCkKKyAgICAg
ICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNo
ZWRcbiIsIG1faWQpOworCisgICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21l
RGV0YWNoZWQoKTsKK30KKworUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChU
aHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKK3sKKyAg
ICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOworICAgIGF1
dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
PihlbnRyeVBvaW50LCB0aHJlYWQuZ2V0KCksIGRhdGEpOworICAgIHB0aHJlYWRfdCB0aHJlYWRI
YW5kbGU7CisgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKKyAgICBwdGhyZWFkX2F0dHJfaW5pdCgm
YXR0cik7CisjaWYgSEFWRShRT1NfQ0xBU1NFUykKKyAgICBwdGhyZWFkX2F0dHJfc2V0X3Fvc19j
bGFzc19ucCgmYXR0ciwgYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQp
LCAwKTsKKyNlbmRpZgorICAgIGludCBlcnJvciA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRIYW5k
bGUsICZhdHRyLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKKyAgICBw
dGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGgg
ZGF0YSAlcCIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBCYWxhbmNlZCBieSBzdGQ6OnVuaXF1
ZV9wdHIgY29uc3RydWN0b3IgaW4gd3RmVGhyZWFkRW50cnlQb2ludC4KKyAgICBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24qIGxlYWtlZEludm9jYXRpb24gPSBpbnZvY2F0aW9uLnJlbGVhc2UoKTsK
KyAgICBVTlVTRURfUEFSQU0obGVha2VkSW52b2NhdGlvbik7CisKKyAgICB0aHJlYWQtPmVzdGFi
bGlzaCh0aHJlYWRIYW5kbGUpOworICAgIHJldHVybiB0aHJlYWQ7Cit9CisKK1RocmVhZCYgVGhy
ZWFkOjpjdXJyZW50KCkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6
OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgp
OworCisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlz
IG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRS
ZWYobmV3IFRocmVhZCgpKTsKKyAgICB0aHJlYWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYoKSk7
CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCp0aHJlYWQpOworICAgIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOworICAgIHJldHVybiAqdGhyZWFkOwor
fQorCitUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKK3sKKyAgICByZXR1cm4g
Y3VycmVudCgpLmlkKCk7Cit9CisKK2Jvb2wgVGhyZWFkOjpzaWduYWwoaW50IHNpZ25hbE51bWJl
cikKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaW50IGVyck5v
ID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBzaWduYWxOdW1iZXIpOworICAgIHJldHVybiAhZXJy
Tm87IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNzLgorfQorCithdXRvIFRocmVhZDo6c3VzcGVu
ZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPgoreworICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UodGhpcyAhPSAmY3VycmVudCgpLCAiQ3VycmVudGx5IHdlIGRvbid0IHN1
cHBvcnQgc3VzcGVuZCB0aGUgY3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOworICAgIFdvcmRMb2Nr
SG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAga2Vybl9yZXR1cm5f
dCByZXN1bHQgPSB0aHJlYWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFkKTsKKyAgICBpZiAocmVz
dWx0ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHsgfTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgc3Vz
cGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBv
dGhlciB0aHJlYWRzLgorICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBw
ZXIgdGhyZWFkIGxvY2suCisgICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwg
dGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KKyAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBz
dXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCisgICAgICAgIC8vIEEgYW5kIEIg
c2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBC
LgorICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCisgICAg
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlm
ICghbV9zdXNwZW5kQ291bnQpIHsKKyAgICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxp
a2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1
bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJl
IHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgorICAgICAgICAgICAgLy8gSW5z
dGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0
byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgICAgIHRhcmdldFRocmVh
ZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBwdGhyZWFkX2tpbGwobV9o
YW5kbGUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAgICAgICAg
ICAgIHNlbV93YWl0KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAg
Ly8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMg
ZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCisgICAgICAg
ICAgICBtX3N1c3BlbmRlZC5zdG9yZSh0cnVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsK
KyAgICAgICAgfQorICAgICAgICArK21fc3VzcGVuZENvdW50OworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorICAgIHRocmVhZF9y
ZXN1bWUobV9wbGF0Zm9ybVRocmVhZCk7CisjZWxzZQorICAgIHsKKyAgICAgICAgLy8gRHVyaW5n
IHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRo
ZSBvdGhlciB0aHJlYWRzLgorICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU3Vz
cGVuZExvY2spOworICAgICAgICBpZiAobV9zdXNwZW5kQ291bnQgPT0gMSkgeworICAgICAgICAg
ICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSBpcyBhY3R1YWxseSBpc3N1ZWQsCisgICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIg
aXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCisgICAgICAgICAgICAvLyBUaGVyZSBh
cmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9y
IHN1c3BlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2ln
bmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4K
KyAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNw
ZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJl
IHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCisgICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxv
Y2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4K
KyAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNw
ZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgorICAgICAgICAgICAgdGFyZ2V0
VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChtX2hhbmRs
ZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgc2VtX3dhaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0
aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMg
ZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQorICAgICAgICAtLW1fc3VzcGVuZENvdW50OworICAg
IH0KKyNlbmRpZgorfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7
CisjaWYgT1MoREFSV0lOKQorI2lmIENQVShYODYpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0g
c2l6ZW9mKHJlZ2lzdGVycykgLyBzaXplb2YoaW50KTsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9y
X3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHVu
c2lnbmVkIHVzZXJDb3VudCA9IHg4Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0geDg2X1RIUkVBRF9TVEFURTY0OworI2VsaWYgQ1BVKFBQ
QykKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFX0NPVU5UOworICAg
IHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFOworI2VsaWYg
Q1BVKFBQQzY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURfU1RBVEU2NF9D
T1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFU
RTY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFE
X1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhS
RUFEX1NUQVRFOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFS
TV9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9y
ID0gQVJNX1RIUkVBRF9TVEFURTY0OworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVy
ZQorI2VuZGlmCisKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUo
bV9wbGF0Zm9ybVRocmVhZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgJnVz
ZXJDb3VudCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgV1RG
UmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0
X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3Vs
dCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJl
c3VsdCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiB1c2VyQ291bnQgKiBz
aXplb2YodWludHB0cl90KTsKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNf
XykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQp
IHx8IENQVShNSVBTKSkKKyAgICByZWdpc3RlcnMgPSBtX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0
OworICAgIHJldHVybiBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpOworI2Vsc2UKKyAgICBwdGhy
ZWFkX2F0dHJfdCBhdHRyaWJ1dGU7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHJpYnV0ZSk7
CisjaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKKyNpZiAhT1MoT1BFTkJTRCkK
KyAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCisgICAgcHRocmVh
ZF9hdHRyX2dldF9ucChtX2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZW5kaWYKKyNlbHNlCisgICAg
Ly8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBzeXN0
ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKKyAgICBwdGhyZWFkX2dldGF0
dHJfbnAobV9oYW5kbGUsICZhdHRyaWJ1dGUpOworI2VuZGlmCisKKyAgICB2b2lkKiBzdGFja0Jh
c2UgPSAwOworICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAgIGludCByYyA9IHB0aHJlYWRf
YXR0cl9nZXRzdGFjaygmYXR0cmlidXRlLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJjLCAhcmMpOworICAgIEFTU0VSVChzdGFja0Jhc2UpOworICAgIHJlZ2lz
dGVycy5zdGFja1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0YWNr
U2l6ZTsKKworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyaWJ1dGUpOworCisgICAgcmV0
dXJuIDA7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0Uo
UFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwIGIv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAppbmRleCA1NGI0M2VmZWYzNWNkNjYzMmE3
MDA4MTUwN2E1YjM3OTlkZWZiNmZiLi4wMTg3ZTdkMDM4MDY1ZThlNjUwN2M1NmQ4ODE4MWMxYzRh
YWU1NWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKQEAgLTE0MCw3MCArMTQwLDM5IEBAIHZv
aWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5h
bWUpCiAjZW5kaWYKIH0KIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19
Ci0KIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0
aWFsaXplZDsKLSAgICAKLSAgICBpZiAoaXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9u
Ojppbml0aWFsaXplKCk7Ci0gICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25z
dHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCi0gICAgLy8g
c28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KLSAgICBTdHJpbmdJ
bXBsOjplbXB0eSgpOwotICAgIHRocmVhZE1hcE11dGV4KCk7Ci0gICAgaW5pdGlhbGl6ZVJhbmRv
bU51bWJlckdlbmVyYXRvcigpOwotICAgIHd0ZlRocmVhZERhdGEoKTsKLSAgICBpbml0aWFsaXpl
RGF0ZXMoKTsKLX0KLQotc3RhdGljIEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4mIHRocmVhZE1hcCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4+IG1h
cDsKLSAgICByZXR1cm4gbWFwOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXpl
S2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsKKyAgICAgICAgV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOworICAgICAgICBUaHJlYWRIb2xkZXI6
OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBu
b3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAor
ICAgICAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgor
ICAgICAgICBTdHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVt
YmVyR2VuZXJhdG9yKCk7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKKyAgICAgICAgaW5pdGlh
bGl6ZURhdGVzKCk7CisgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JlVGhyZWFkSGFuZGxl
QnlJZGVudGlmaWVyKERXT1JEIHRocmVhZElELCBIQU5ETEUgdGhyZWFkSGFuZGxlKQorc3RhdGlj
IHVuc2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQoIXRo
cmVhZE1hcCgpLmNvbnRhaW5zKHRocmVhZElEKSk7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKHRocmVh
ZElELCB0aHJlYWRIYW5kbGUpOwotfQorICAgIC8vIEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4g
VGhyZWFkOjpjcmVhdGVJbnRlcm5hbC4KKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6OnVuaXF1
ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlv
bkludm9jYXRpb24qPihwYXJhbSkpOwogCi1zdGF0aWMgSEFORExFIHRocmVhZEhhbmRsZUZvcklk
ZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19Cisg
ICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCppbnZvY2F0aW9uLT50aHJlYWQpOworICAgIGlu
dm9jYXRpb24tPnRocmVhZCA9IG51bGxwdHI7CiAKLXN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFp
bnMoaWQpKTsKLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCi1zdGF0aWMgdW5zaWdu
ZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCi17Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2NhdGlvbihzdGF0aWNf
Y2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwogICAgIGludm9jYXRpb24t
PmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKLVRocmVh
ZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2lu
dCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK1JlZlB0cjxUaHJlYWQ+IFRo
cmVhZDo6Y3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0
YSwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBh
ZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKICAgICB1bnNpZ25lZCB0aHJlYWRJZGVudGlmaWVyID0g
MDsKICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gMDsKLSAgICBhdXRvIGludm9jYXRp
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2lu
dCwgZGF0YSk7CisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIHRocmVhZC5wdHIoKSwgZGF0YSk7CiAgICAg
SEFORExFIHRocmVhZEhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihfYmVnaW50aHJl
YWRleCgwLCAwLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpLCAwLCAmdGhy
ZWFkSWRlbnRpZmllcikpOwogICAgIGlmICghdGhyZWFkSGFuZGxlKSB7CiAjaWYgIUhBVkUoRVJS
Tk9fSCkKQEAgLTIxOSw1MSArMTg4LDMwIEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
SW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAg
VU5VU0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24pOwogCiAgICAgdGhyZWFkSUQgPSBzdGF0aWNf
Y2FzdDxUaHJlYWRJZGVudGlmaWVyPih0aHJlYWRJZGVudGlmaWVyKTsKLSAgICBzdG9yZVRocmVh
ZEhhbmRsZUJ5SWRlbnRpZmllcih0aHJlYWRJZGVudGlmaWVyLCB0aHJlYWRIYW5kbGUpOwogCi0g
ICAgcmV0dXJuIHRocmVhZElEOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSwg
dGhyZWFkSWRlbnRpZmllcik7CisgICAgcmV0dXJuIHRocmVhZDsKIH0KIAotdm9pZCBjaGFuZ2VU
aHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCBpbnQgZGVsdGEpCitUaHJl
YWQmIFRocmVhZDo6Y3VycmVudCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBUaHJl
YWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkK
KyAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgpOwogCi0gICAgSEFORExFIHRocmVhZEhhbmRs
ZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFk
SGFuZGxlKQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZG9lcyBub3Qg
Y29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFkIiwgdGhyZWFkSUQpOworICAgIC8vIE5vdCBh
IFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQg
eWV0LgorICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwog
Ci0gICAgU2V0VGhyZWFkUHJpb3JpdHkodGhyZWFkSGFuZGxlLCBUSFJFQURfUFJJT1JJVFlfTk9S
TUFMICsgZGVsdGEpOwotfQorICAgIEhBTkRMRSBoYW5kbGU7CisgICAgYm9vbCBpc1N1Y2Nlc3Nm
dWwgPSBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVh
ZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLCAmaGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NB
TUVfQUNDRVNTKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwogCi1pbnQgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBB
U1NFUlQodGhyZWFkSUQpOwotICAgIAotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRI
YW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXRocmVhZEhhbmRsZSkKLSAg
ICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRpZCBub3QgY29ycmVzcG9uZCB0
byBhbiBhY3RpdmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7Ci0gCi0g
ICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkSGFuZGxlLCBJ
TkZJTklURSk7Ci0gICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAgICAgIExP
R19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0
cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLQotICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRs
ZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLQotICAg
IHJldHVybiBqb2luUmVzdWx0OworICAgIHRocmVhZC0+ZXN0YWJsaXNoKGhhbmRsZSwgY3VycmVu
dElEKCkpOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOworICAg
IHJldHVybiB0aHJlYWQuZ2V0KCk7CiB9CiAKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQpCi17Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIEhBTkRMRSB0
aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBp
ZiAodGhyZWFkSGFuZGxlKQotICAgICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAg
IGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci19Ci0KLVRocmVhZElk
ZW50aWZpZXIgY3VycmVudFRocmVhZCgpCitUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVu
dElEKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4oR2V0Q3Vy
cmVudFRocmVhZElkKCkpOwogfQpAQCAtNDkyLDYgKzQ0MCw5OSBAQCBEV09SRCBhYnNvbHV0ZVRp
bWVUb1dhaXRUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIGFic29sdXRlVGltZSkKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RFdPUkQ+KChhYnNvbHV0ZVRpbWUgLSBjdXJyZW50VGltZSkgKiAxMDAwLjAp
OwogfQogCitUaHJlYWQ6OlRocmVhZCgpCit7Cit9CisKK1RocmVhZDo6flRocmVhZCgpCit7Cit9
CisKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAgICB7CisgICAgICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9kaWRFeGl0ID0gdHJ1ZTsKKyAgICAgICAg
Ly8gSXQgaXMgT0sgYmVjYXVzZSBGTFNBbGxvYydzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV2
ZW4gYmVmb3JlIHRoZXJlIGFyZSBzb21lIG9wZW4gaGFuZGxlcy4KKyAgICAgICAgLy8gVGhpcyBl
YXNpbHkgZW5zdXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291cmNlcyBhcmUgYXV0b21hdGlj
YWxseSBjbG9zZWQuCisgICAgICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgICAgIENsb3NlSGFu
ZGxlKG1faGFuZGxlKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fb25FeGl0
Q2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrKCp0aGlzKTsKK30KKwordm9pZCBUaHJlYWQ6OmVz
dGFibGlzaChIQU5ETEUgaGFuZGxlLCBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoreworICAg
IFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsK
KyAgICBtX2lkID0gdGhyZWFkSUQ7Cit9CisKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0eShp
bnQgZGVsdGEpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIFNl
dFRocmVhZFByaW9yaXR5KG1faGFuZGxlLCBUSFJFQURfUFJJT1JJVFlfTk9STUFMICsgZGVsdGEp
OworfQorCitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCit7CisgICAgSEFORExFIGhh
bmRsZTsKKyAgICB7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAg
ICAgICAgaGFuZGxlID0gbV9oYW5kbGU7CisgICAgfQorCisgICAgRFdPUkQgam9pblJlc3VsdCA9
IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCBJTkZJTklURSk7CisgICAgaWYgKGpvaW5SZXN1
bHQgPT0gV0FJVF9GQUlMRUQpCisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAl
dSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIG1faWQpOworCisg
ICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIEFTU0VSVChqb2luYWJsZVN0
YXRlKCkgPT0gSm9pbmFibGUpOworCisgICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0
ZWQsIGRvIG5vdGhpbmcuCisgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28g
ZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBq
b2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KKyAgICBp
ZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRKb2luKCk7CisKKyAgICByZXR1cm4gam9pblJl
c3VsdDsKK30KKwordm9pZCBUaHJlYWQ6OmRldGFjaCgpCit7CisgICAgLy8gV2UgZm9sbG93IHRo
ZSBwdGhyZWFkIHNlbWFudGljczogZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNhbGxlZCwKKyAg
ICAvLyB3ZSBzdGlsbCBjYW4gcGVyZm9ybSBvcGVyYXRpb24gb250byB0aGUgdGhyZWFkLiBUbyBk
byBzbywgd2UgZG8KKyAgICAvLyBub3RoaW5nIGhlcmUgaW4gV2luZG93cy4gQ2xvc2VIYW5kbGUg
d2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseQorICAgIC8vIGJ5IHRoZSBGTFMgZGVzdHJ1Y3Rv
ciBvbiB0aHJlYWQgdGVybWluYXRpb24uCisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFjaGVkKCk7
Cit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1T
dXNwZW5kRXJyb3I+Cit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAg
IERXT1JEIHJlc3VsdCA9IFN1c3BlbmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlmIChyZXN1bHQg
IT0gKERXT1JEKS0xKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChyZXN1bHQpOworfQorCisvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBz
aG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2b2lkIFRocmVh
ZDo6cmVzdW1lKCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAg
UmVzdW1lVGhyZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90IFRocmVhZDo6Z2V0UmVnaXN0ZXJz
KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgIHJlZ2lzdGVycy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lOVEVH
RVIgfCBDT05URVhUX0NPTlRST0w7CisgICAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9ybVRocmVh
ZEhhbmRsZSwgJnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5j
cHAKaW5kZXggYjJhMGE3OWY0YWI1YWFjMjg5YjE2OWY5MmJiYzFhODA1ODUyY2EzMi4uOTczMGZj
ZjBmMDkyMWZkZWQ5MGY4OWYxMjkwZTc3NDkwYjUzOTcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvV29ya1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCkBA
IC03NCw3ICs3NCw3IEBAIHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0
ZXJhdGlvbnMsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAKICAgICAgICAgICAgIG1f
d29ya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgbV93b3JrZXJzLmFwcGVuZChjcmVhdGVUaHJlYWQoU3RyaW5nOjpmb3JtYXQoIlRocmVh
ZFBvb2wgV29ya2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKKyAgICAgICAgICAg
ICAgICBtX3dvcmtlcnMuYXBwZW5kKFRocmVhZDo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJUaHJl
YWRQb29sIFdvcmtlciAldSIsIGkpLnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CiAgICAgICAgICAg
ICAgICAgICAgIHRocmVhZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAg
ICB9CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShz
aXplX3QgaXRlcmF0aW9ucywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKICAgICAgICAg
Q29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgICAgICBEZXF1ZTxjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+Kj4gbV9xdWV1ZTsKIAotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4g
bV93b3JrZXJzOworICAgICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IG1fd29ya2VyczsKICAg
ICB9OwogCiAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxUaHJlYWRQb29sPiB0aHJlYWRQ
b29sOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuaAppbmRleCBhNDdmMjFlMjBkMzFiYzhiZjczMThmNDFiOTU3YWIzNjZj
MTkxNTAzLi43NjM0NWMwNjkzMTY0ZjY4Y2E0YjFjNjY0NDg0YTI3M2NjNmU4YmUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3Jr
UXVldWUuaApAQCAtMTAzLDcgKzEwMyw3IEBAIGNsYXNzIFdvcmtRdWV1ZSBmaW5hbCA6IHB1Ymxp
YyBGdW5jdGlvbkRpc3BhdGNoZXIgewogCiAgICAgSEFORExFIG1fdGltZXJRdWV1ZTsKICNlbGlm
IFVTRShHTElCX0VWRU5UX0xPT1ApIHx8IFVTRShHRU5FUklDX0VWRU5UX0xPT1ApCi0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3dv
cmtRdWV1ZVRocmVhZDsKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRl
eDsKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICBSdW5M
b29wKiBtX3J1bkxvb3A7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVl
dWVDb2NvYS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5k
ZXggMWE3MjE5YWQyNTllZDc1OTcyYTVhNDU4YzVjNDg0OTdhMzg4ZTRkMy4uNTllZTFmODViNDM1
Y2UxYTcyZjUwNTBmNGRmNjJlZmNmYmJjODJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Y29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtR
dWV1ZUNvY29hLmNwcApAQCAtNDksMTUgKzQ5LDE1IEBAIHN0YXRpYyBkaXNwYXRjaF9xb3NfY2xh
c3NfdCBkaXNwYXRjaFFPU0NsYXNzKFdvcmtRdWV1ZTo6UU9TIHFvcykKIHsKICAgICBzd2l0Y2gg
KHFvcykgewogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZToKLSAgICAg
ICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOwor
ICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lO
VEVSQUNUSVZFKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW5pdGlhdGVkOgotICAg
ICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOwor
ICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lO
SVRJQVRFRCk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6RGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOworICAgICAgICByZXR1cm4g
VGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19ERUZBVUxUKTsKICAgICBjYXNlIFdv
cmtRdWV1ZTo6UU9TOjpVdGlsaXR5OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhR
T1NfQ0xBU1NfVVRJTElUWSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX1VUSUxJVFkpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OkJhY2tncm91
bmQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5E
KTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFD
S0dST1VORCk7CiAgICAgfQogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dl
bmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtR
dWV1ZUdlbmVyaWMuY3BwCmluZGV4IDkzNGEzOGNiYmU2NGJiZmZhZWI0ZDM3ZGYxYjhkOTk1MmI4
ODUzNDQuLmRhODc1ZDFmYTA0Y2VmNTI0YjBkYzE4NmIzOWE0NjJkNjgwNDQ2MzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtMzUsNyArMzUsNyBA
QAogdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBU
eXBlLCBRT1MpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENv
bmRpdGlvbk11dGV4KTsKLSAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZChuYW1l
LCBbdGhpc10geworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUobmFtZSwg
W3RoaXNdIHsKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0
aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKICAgICAgICAgICAgIG1fcnVuTG9vcCA9ICZS
dW5Mb29wOjpjdXJyZW50KCk7CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0
Zm9ybUludmFsaWRhdGUoKQogICAgIGlmIChtX3J1bkxvb3ApCiAgICAgICAgIG1fcnVuTG9vcC0+
c3RvcCgpOwogICAgIGlmIChtX3dvcmtRdWV1ZVRocmVhZCkgewotICAgICAgICBkZXRhY2hUaHJl
YWQobV93b3JrUXVldWVUaHJlYWQpOwotICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IDA7Cisg
ICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV93b3JrUXVldWVU
aHJlYWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
bGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwIGIvU291cmNlL1dURi93dGYvbGlu
dXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCmluZGV4IGIyOTQxOTQ0NGU3NDI3MzZh
NjdkYzBjMWFhODUxZGVjM2FlNTg3ZTQuLmZmZDQwMDg1NWI4MjkzYThiNWEzYzNhZWIyM2FiNzdh
YWY1YTdlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJl
SGFuZGxlckxpbnV4LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJMaW51eC5jcHAKQEAgLTExOSw3ICsxMTksMTAgQEAgTWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjpFdmVudEZEUG9sbGVyOjpFdmVudEZEUG9sbGVyKGludCBmZCwgc3RkOjpmdW5jdGlvbjx2
b2lkICgKICAgICB9LCB0aGlzLCBudWxscHRyKTsKICAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3Vy
Y2UuZ2V0KCksIG51bGxwdHIpOwogI2Vsc2UKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KCJXVEY6IE1lbW9yeVByZXNzdXJlSGFuZGxlciIsIFt0aGlzXSB7IHJlYWRBbmROb3RpZnkoKTsg
fQorICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIldURjogTWVtb3J5UHJlc3N1cmVIYW5k
bGVyIiwKKyAgICAgICAgW3RoaXNdIHsKKyAgICAgICAgICAgIHJlYWRBbmROb3RpZnkoKTsKKyAg
ICAgICAgfSk7CiAjZW5kaWYKIH0KIApAQCAtMTI5LDcgKzEzMiw3IEBAIE1lbW9yeVByZXNzdXJl
SGFuZGxlcjo6RXZlbnRGRFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIoKQogI2lmIFVTRShHTElCKQog
ICAgIGdfc291cmNlX2Rlc3Ryb3kobV9zb3VyY2UuZ2V0KCkpOwogI2Vsc2UKLSAgICBkZXRhY2hU
aHJlYWQobV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogI2VuZGlmCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tIGIvU291cmNl
L1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KaW5kZXggMjcyZTNmNWY5Nzc0MGM5YTExZjc0
OGE4YjVhZTYwMDYyNjZlOTJkNi4uZmIyNWFmYWZkODQ0N2ZmMmMyZWIyNTAyNzJmNGYyYWIxZTMy
NTk5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KKysr
IGIvU291cmNlL1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KQEAgLTY0LDggKzY0LDggQEAg
c3RhdGljIHB0aHJlYWRfdCBtYWluVGhyZWFkUHRocmVhZDsKIHN0YXRpYyBOU1RocmVhZCogbWFp
blRocmVhZE5TVGhyZWFkOwogCiAjaWYgVVNFKFdFQl9USFJFQUQpCi1zdGF0aWMgVGhyZWFkSWRl
bnRpZmllciBzQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXI7Ci1zdGF0aWMgVGhyZWFkSWRl
bnRpZmllciBzV2ViVGhyZWFkSWRlbnRpZmllcjsKK3N0YXRpYyBSZWZQdHI8VGhyZWFkPiBzQXBw
bGljYXRpb25VSVRocmVhZDsKK3N0YXRpYyBSZWZQdHI8VGhyZWFkPiBzV2ViVGhyZWFkOwogI2Vu
ZGlmCiAKIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCkBAIC0xNzQsMTMgKzE3
NCwxMyBAQCBib29sIGlzV2ViVGhyZWFkKCkKIHZvaWQgaW5pdGlhbGl6ZUFwcGxpY2F0aW9uVUlU
aHJlYWRJZGVudGlmaWVyKCkKIHsKICAgICBBU1NFUlQocHRocmVhZF9tYWluX25wKCkpOwotICAg
IHNBcHBsaWNhdGlvblVJVGhyZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICBz
QXBwbGljYXRpb25VSVRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwogfQogCiB2b2lkIGluaXRp
YWxpemVXZWJUaHJlYWRJZGVudGlmaWVyKCkKIHsKICAgICBBU1NFUlQoIXB0aHJlYWRfbWFpbl9u
cCgpKTsKLSAgICBzV2ViVGhyZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICBz
V2ViVGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CiB9CiAKIHZvaWQgaW5pdGlhbGl6ZVdlYlRo
cmVhZFBsYXRmb3JtKCkKQEAgLTE5MiwxNCArMTkyLDE0IEBAIHZvaWQgaW5pdGlhbGl6ZVdlYlRo
cmVhZFBsYXRmb3JtKCkKICAgICBtYWluVGhyZWFkTlNUaHJlYWQgPSBbW05TVGhyZWFkIGN1cnJl
bnRUaHJlYWRdIHJldGFpbl07CiB9CiAKLWJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9y
VGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCitib29sIGNhbkFjY2Vzc1RocmVhZExv
Y2FsRGF0YUZvclRocmVhZChUaHJlYWQmIHRocmVhZCkKIHsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IGN1cnJlbnRUaHJlYWRJZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSAgICBpZiAodGhyZWFkSWQgPT0g
Y3VycmVudFRocmVhZElkKQorICAgIFRocmVhZCYgY3VycmVudFRocmVhZCA9IFRocmVhZDo6Y3Vy
cmVudCgpOworICAgIGlmICh0aHJlYWQgPT0gY3VycmVudFRocmVhZCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBpZiAodGhyZWFkSWQgPT0gc1dlYlRocmVhZElkZW50aWZpZXIgfHwgdGhy
ZWFkSWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWRJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4g
KGN1cnJlbnRUaHJlYWRJZCA9PSBzV2ViVGhyZWFkSWRlbnRpZmllciB8fCBjdXJyZW50VGhyZWFk
SWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWRJZGVudGlmaWVyKSAmJiB3ZWJUaHJlYWRJc1VuaW5p
dGlhbGl6ZWRPckxvY2tlZE9yRGlzYWJsZWQoKTsKKyAgICBpZiAodGhyZWFkID09IHNXZWJUaHJl
YWQgfHwgdGhyZWFkID09IHNBcHBsaWNhdGlvblVJVGhyZWFkKQorICAgICAgICByZXR1cm4gKGN1
cnJlbnRUaHJlYWQgPT0gc1dlYlRocmVhZCB8fCBjdXJyZW50VGhyZWFkID09IHNBcHBsaWNhdGlv
blVJVGhyZWFkKSAmJiB3ZWJUaHJlYWRJc1VuaW5pdGlhbGl6ZWRPckxvY2tlZE9yRGlzYWJsZWQo
KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggODc0NzY0MzhjYWU2NWE2
Mzg3ZDkwMWE3NTI4ODE1ZWM5NTQ3ZjIzMi4uOWNkM2RiNGQxYmMxNGEzNjE3MzIxYWIwMDVhMDE5
NjIwNTI3ODI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSURCU2VydmVyOjpJREJT
ZXJ2ZXIoSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQog
ICAgIDogbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsK
ICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwot
ICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVu
dHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhl
ZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhh
bmRsZXImIGZpbGVIYW5kbGVyKQpAQCAtNjYsNyArNjYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZl
cihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVt
cG9yYQogICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgTG9ja2VyPExvY2s+
IGxvY2tlcihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0g
Y3JlYXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4
ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNl
cnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIi
KTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9u
VG9DbGllbnQmIGNvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggMjU2Y2Q1MDdlNmU2ZDdmNjU2ZWVjZTBj
MTE5ODk0OGZkOTIzZGExZC4uOTM0YTFkMTc0NTI5MDg0MjhhM2FlNmUwZWQ3ZTUxMGE5YTljYTZl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaApAQCAtMTI1LDcgKzEyNSw3IEBAIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQlNlcnZlcj4gewogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJREJD
b25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRh
YmFzZUlkZW50aWZpZXIsIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0
YWJhc2VNYXA7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAg
UmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgTG9jayBtX2RhdGFiYXNl
VGhyZWFkQ3JlYXRpb25Mb2NrOwogICAgIExvY2sgbV9tYWluVGhyZWFkUmVwbHlMb2NrOwogICAg
IGJvb2wgbV9tYWluVGhyZWFkUmVwbHlTY2hlZHVsZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAppbmRl
eCAyOTJmMDViOGNkNTA2ZTIyOWFlNmI4YmQ4NjI5YzA5NTRkMTg0NTliLi5jODE2MTcxNjlhMzE0
MmIxOGU5ZDdlNzUzYmZkOWI4MGNhMzE5MDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcApAQCAtMzksNyArMzksNyBA
QCBBc3luY0F1ZGlvRGVjb2Rlcjo6QXN5bmNBdWRpb0RlY29kZXIoKQogewogICAgIC8vIFN0YXJ0
IHdvcmtlciB0aHJlYWQuCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRl
eCk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChBc3luY0F1ZGlvRGVjb2Rlcjo6dGhy
ZWFkRW50cnksIHRoaXMsICJBdWRpbyBEZWNvZGVyIik7CisgICAgbV90aHJlYWRJRCA9IFRocmVh
ZDo6Y3JlYXRlKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERl
Y29kZXIiKTsKIH0KIAogQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCkBA
IC00Nyw4ICs0Nyw4IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQog
ICAgIG1fcXVldWUua2lsbCgpOwogICAgIAogICAgIC8vIFN0b3AgdGhyZWFkLgotICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAg
IG1fdGhyZWFkSUQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV90aHJlYWRJRCA9IG51bGxw
dHI7CiB9CiAKIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKFJlZjxBcnJheUJ1
ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNh
bGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYg
ZXJyb3JDYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXN5bmNBdWRpb0RlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuaAppbmRleCBiYjVjNWUzMzdiNWVjZjFmOGU2MTc1M2EyOWY4ZDBm
OTcxNDE1NTNkLi5lMWIzYTNlYWVlNmJkNTU0ZmQ3Y2NhZDNjZGNhZWJmMzViYTg0NTE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rl
ci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEFzeW5jQXVkaW9EZWNvZGVyIHsKICAgICBzdGF0
aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKICAgICB2b2lkIHJ1bkxvb3Ao
KTsKIAotICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0cjxU
aHJlYWQ+IG1fdGhyZWFkSUQ7CiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7CiAgICAg
TWVzc2FnZVF1ZXVlPERlY29kaW5nVGFzaz4gbV9xdWV1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHAKaW5kZXggNTA1MjMwNDE5N2NkZWRkZTQ3ZmRjYmI5MTJlYzQ3NDA1NTc5NzQy
OC4uZTdkNTY3ZGZlYWQ0NDJjMzk2YWYwZjcwNTEwOTczZmZlMTQ4YWIwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBjb25zdCBzaXplX3QgcmVuZGVy
UXVhbnR1bVNpemUgPSAxMjg7CiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiBy
ZW5kZXJUYXJnZXQpCiAgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCByZW5kZXJU
YXJnZXQtPnNhbXBsZVJhdGUoKSkKICAgICAsIG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkK
LSAgICAsIG1fcmVuZGVyVGhyZWFkKDApCisgICAgLCBtX3JlbmRlclRocmVhZChudWxscHRyKQog
ICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQogewogICAgIG1fcmVuZGVyQnVzID0gQXVk
aW9CdXM6OmNyZWF0ZShyZW5kZXJUYXJnZXQtPm51bWJlck9mQ2hhbm5lbHMoKSwgcmVuZGVyUXVh
bnR1bVNpemUpOwpAQCAtNjYsOCArNjYsOCBAQCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6dW5pbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcmVuZGVy
VGhyZWFkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fcmVuZGVyVGhyZWFk
KTsKLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSAwOworICAgICAgICBtX3JlbmRlclRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBudWxscHRyOwog
ICAgIH0KIAogICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7CkBAIC04Myw3ICs4Myw3IEBA
IHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZygpCiAgICAg
aWYgKCFtX3N0YXJ0ZWRSZW5kZXJpbmcpIHsKICAgICAgICAgbV9zdGFydGVkUmVuZGVyaW5nID0g
dHJ1ZTsKICAgICAgICAgcmVmKCk7IC8vIFNlZSBjb3JyZXNwb25kaW5nIGRlcmVmKCkgY2FsbCBp
biBub3RpZnlDb21wbGV0ZURpc3BhdGNoKCkuCi0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVudHJ5
LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVu
dHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgKaW5kZXggNzU1NjA0NjQ3MjMyYzRiYzUxM2NjOWUzOWRkNDQ1ZjM4YjYyY2Vm
NC4uNTY5MDEzOGIxNjU3MGIzZjlkMjM3ZjlkZDRhOGVhMjNkNzNmZmFhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAgICAgUmVmUHRyPEF1
ZGlvQnVzPiBtX3JlbmRlckJ1czsKICAgICAKICAgICAvLyBSZW5kZXJpbmcgdGhyZWFkLgotICAg
IHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV9yZW5kZXJUaHJlYWQ7CiAgICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CiAgICAg
c3RhdGljIHZvaWQgb2ZmbGluZVJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZv
aWQgb2ZmbGluZVJlbmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmNwcAppbmRleCA4ODY5ZjZiZjIyMzIzMmU2M2NjM2ZiNTJlMTZhZTFkYjNl
YjQxYmU2Li44YzkyZDZlNTM5NmFkZjEyZmJkZDY4ZDdhYzk3ZjllZDE5YWRjMDE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtNzcw
LDggKzc3MCw3IEBAIFNlY3VyaXR5T3JpZ2luRGF0YSBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4o
KQogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4o
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotICAgIGF1dG8mIHRocmVhZCA9
IGRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWQuZ2V0
VGhyZWFkSUQoKSkKKyAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlVGhyZWFkKCku
Z2V0VGhyZWFkSUQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNl
Y3VyaXR5T3JpZ2luKG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggMGRkZTVmNzI2
OGVlNjQyYzAwNDMwNWNlZmUzNmIxYzllNDRiODdkMy4uYjM1M2JiOGZhNTc1YmFmODU1ODExMmFi
NTNlYTgzYTFjOTA4OThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKQEAgLTYwLDEyICs2MCwxMiBAQCBib29sIERh
dGFiYXNlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3Jl
YXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNl
Iik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShEYXRhYmFzZVRocmVhZDo6ZGF0YWJh
c2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7CiAKLSAgICByZXR1cm4g
bV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnJlcXVlc3RUZXJtaW5hdGlvbihEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBT
eW5jKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkKCkKICAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdCBvZiBhbGwgcGVuZGluZyB0cmFuc2FjdGlv
bnMgb24gdGhpcyBkYXRhYmFzZSB0aHJlYWQKICAgICBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3It
PnNodXRkb3duKCk7CiAKLSAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJl
YWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJl
bnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUg
cmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIs
IG1fdGhyZWFkLT5pZCgpLCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8vIENsb3NlIHRoZSBk
YXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhhdCBp
ZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFjayBh
bmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCiAgICAgLy8gaW5jb25zaXN0ZW50
IG9yIGxvY2tlZCBzdGF0ZS4KQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFk
OjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5EYXRhYmFzZS0+cGVyZm9ybUNsb3NlKCk7
CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25n
ZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90aHJl
YWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogCiAgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiBjbGVhbnVwU3luYyA9IG1fY2xlYW51cFN5bmM7CiAKQEAgLTE0Miw3ICsxNDIsNyBA
QCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UmIGRhdGFi
YXNlKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAot
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCZU
aHJlYWQ6OmN1cnJlbnQoKSA9PSBtX3RocmVhZCk7CiAgICAgQVNTRVJUKCFtX29wZW5EYXRhYmFz
ZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5hZGQoJmRh
dGFiYXNlKTsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNv
cmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRlciBs
b2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoJlRocmVhZDo6Y3VycmVudCgpID09IG1fdGhy
ZWFkKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBtX29wZW5EYXRhYmFzZVNldC5j
b250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5yZW1vdmUoJmRhdGFi
YXNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUaHJlYWQuaAppbmRleCBlYzA0MWUzMTgxNzI0OTJlY2E2YmNlZmU4ZjFkYTI1ZWM5MmVk
MjZjLi5hNTIxMmRmYjhiMTcyY2UyZmY2YTk4ODhkZTBhOWRiOTc3YWUyZDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCkBA
IC01OCw3ICs1OCw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAKICAgICB2b2lkIHJlY29yZERhdGFiYXNlT3Bl
bihEYXRhYmFzZSYpOwogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UmKTsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsg
fQorICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZCA/
IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogCiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciog
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
ci5nZXQoKTsgfQogCkBAIC02OSw3ICs2OSw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAgICAgdm9pZCBkYXRh
YmFzZVRocmVhZCgpOwogCiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhy
ZWFkIHsgbnVsbHB0ciB9OwogICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9zZWxmUmVmOwog
CiAgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZmOWZjYTY3ZjNjNDdhZGRjODNk
ZWM4Y2IwZDVlYjhjY2I0MGQ3NDMuLjEzOWFhOTkxYTE2ZWFkMjJmNjhmNTAxYmU3Yjk0NTk2MzIy
MTM1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcApA
QCAtMTAxLDE0ICsxMDEsMTQgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93
SWZOb3REb25lUmVjZW50bHkoKQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RP
bkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhib29sIHdhaXRVbnRpbERvbmUpCiB7Ci0gICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChjb2xsZWN0LCAwLCAiV2Vi
Q29yZTogR0NDb250cm9sbGVyIik7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoY29sbGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOwogCiAgICAgaWYg
KHdhaXRVbnRpbERvbmUpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
SUQpOworICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHRocmVhZC0+ZGV0
YWNoKCk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxl
Y3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmNwcAppbmRleCAxNjhlNGUyNzc5NWQ0MjVmNDA0ZjE3NWM5YmNiYTkzZjcz
NjgwNzRjLi41NWM3Y2IwMjM5ODU5OWM5NzFlNmEzN2EwZjlhNzI0ODQ4NDJlNmJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCkBAIC03NCw3ICs3NCw3IEBA
IHN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlv
bikKIAogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVhdGVGaWxlVGhyZWFkT25jZTsKICAg
ICBzdGQ6OmNhbGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25jZSwgW10gewotICAgICAgICBjcmVh
dGVUaHJlYWQoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKKyAgICAgICAgVGhyZWFk
OjpjcmVhdGUoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKICAgICAgICAgICAgIGZv
ciAoOzspIHsKICAgICAgICAgICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggNGNkY2ZhYWQ2ZTgz
MmEzOWE1YzM1MjY1ODA1ODUwODZiM2Q5ZjcyZi4uYTgyMzMzMTZlZjE3MjRmZjc1M2M5MzkyZTli
ZDRiNzE5ZWFhZGRlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2UuY3BwCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQo
KSBBU1NFUlQoIW1fc3luY1RocmVhZFJ1bm5pbmcgfHwgIUlTX0lDT05fU1lOQ19USFJFQUQoKSkK
IAogLy8gRm9yIG1ldGhvZHMgdGhhdCBhcmUgbWVhbnQgdG8gc3VwcG9ydCB0aGUgc3luYyB0aHJl
YWQgT05MWQotI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkgKG1fc3luY1RocmVhZCA9PSBj
dXJyZW50VGhyZWFkKCkpCisjZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhy
ZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSkKICNkZWZpbmUgQVNTRVJUX0lDT05fU1lOQ19USFJF
QUQoKSBBU1NFUlQoSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAjaWYgUExBVEZPUk0oR1RLKQpA
QCAtMTQxLDcgKzE0MSw3IEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIC8vIExvY2sgaGVyZSBhcyB3
ZWxsIGFzIGZpcnN0IHRoaW5nIGluIHRoZSB0aHJlYWQgc28gdGhlIHRocmVhZCBkb2Vzbid0IGFj
dHVhbGx5IGNvbW1lbmNlIHVudGlsIHRoZSBjcmVhdGVUaHJlYWQoKSBjYWxsIAogICAgIC8vIGNv
bXBsZXRlcyBhbmQgbV9zeW5jVGhyZWFkUnVubmluZyBpcyBwcm9wZXJseSBzZXQKICAgICBtX3N5
bmNMb2NrLmxvY2soKTsKLSAgICBtX3N5bmNUaHJlYWQgPSBjcmVhdGVUaHJlYWQoSWNvbkRhdGFi
YXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBJY29uRGF0
YWJhc2UiKTsKKyAgICBtX3N5bmNUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJY29uRGF0YWJhc2U6
Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFz
ZSIpOwogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQ7CiAgICAgbV9zeW5j
TG9jay51bmxvY2soKTsKICAgICBpZiAoIW1fc3luY1RocmVhZCkKQEAgLTE2MSw3ICsxNjEsNyBA
QCB2b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQogICAgICAgICB3YWtlU3luY1RocmVhZCgpOwog
ICAgICAgICAKICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHN5bmMgdGhyZWFkIHRvIHRlcm1pbmF0
ZQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3N5bmNUaHJlYWQpOworICAgICAg
ICBtX3N5bmNUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgbV9zeW5j
VGhyZWFkUnVubmluZyA9IGZhbHNlOyAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkRhdGFiYXNlLmgKaW5kZXggMDYxYWY0YTEyNTU3NzFkZTExYTMyZjU2ODNjMGVmZGE1OTI5M2I5
ZC4uODY0MDk1NTQ3NTMzZmQ4OTBmMDNhZmU5MmJiMDZmNjA4N2VlNzM2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKQEAgLTExOSw3ICsxMTksNyBAQCBjbGFz
cyBJY29uRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgSWNvbkRhdGFiYXNlQmFzZSB7CiAgICAgdm9p
ZCBzeW5jVGltZXJGaXJlZCgpOwogICAgIAogICAgIFRpbWVyIG1fc3luY1RpbWVyOwotICAgIFRo
cmVhZElkZW50aWZpZXIgbV9zeW5jVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fc3luY1Ro
cmVhZDsKICAgICBib29sIG1fc3luY1RocmVhZFJ1bm5pbmc7CiAgICAgCiAgICAgSGFzaFNldDxS
ZWZQdHI8RG9jdW1lbnRMb2FkZXI+PiBtX2xvYWRlcnNQZW5kaW5nRGVjaXNpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAppbmRleCA5MTIwMGMzNDVmNDU1
Zjk2ZDQ5NGJmZDJhZDcwM2YyOGM1YzYyOWQxLi5kOWI2ZjcyZmEzNmZhNzAwYzgyNmYzYzk3ZDZi
YWEwMmQ0MmU4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5jcHAKQEAgLTk2LDExICs5NiwxMSBAQCB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6Om5vdGlm
eU9ic2VydmVycyhSZXNvdXJjZVVzYWdlRGF0YSYmIGRhdGEpCiAKIHZvaWQgUmVzb3VyY2VVc2Fn
ZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElkZW50
aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ZtID0g
JmNvbW1vblZNKCk7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVh
ZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogUmVzb3VyY2VVc2FnZSIpOworICAgIG1fdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNvdXJj
ZVVzYWdlIik7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6dGhyZWFkQ2FsbGJhY2so
dm9pZCogcmVzb3VyY2VVc2FnZVRocmVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVz
YWdlVGhyZWFkLmgKaW5kZXggMThhMWU2NzU0M2QyMjA5YzE3OTU3NDczNjYyMmE3OGIzODRiYjhm
Yy4uZWZkZTI3ZWZlNmIwYWM0NTQ2NGRlODkxYzY3Y2U3OWY5Y2YyZTE5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKQEAgLTYyLDcgKzYyLDcgQEAgY2xhc3Mg
UmVzb3VyY2VVc2FnZVRocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRCb2R5KCk7CiAgICAgdm9pZCBw
bGF0Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSosIFJlc291cmNlVXNhZ2VEYXRhJik7CiAKLSAgICBU
aHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllciB7IDAgfTsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fbG9jazsKICAgICBDb25kaXRp
b24gbV9jb25kaXRpb247CiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpmdW5jdGlvbjx2b2lkIChj
b25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpPj4gbV9vYnNlcnZlcnM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAppbmRleCA3MzBjMGE2YmQ5
M2Y0NTc4ZDFlZGJmOWFjZTFjZDg2NTY2ZTZjOTg4Li5kMjA3ODQwNTYwZGRmOTA1OTBhMGRhZGQy
NzMwODRjOTFjOWZiMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTM1LDE0ICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCgpCi0gICAgOiBtX3RocmVh
ZElkZW50aWZpZXIoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiB9CiAKIGJvb2wgU2Ny
b2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQogewotICAgIGF1dG8gdGhyZWFkSWRlbnRp
ZmllciA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlmaWVyOwot
ICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWRJ
ZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFNjcm9sbGluZ1RocmVhZDo6
c2luZ2xldG9uKCkubV90aHJlYWQ7CisgICAgcmV0dXJuIHRocmVhZCAmJiB0aHJlYWQtPmlkKCkg
PT0gY3VycmVudFRocmVhZCgpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2go
RnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKQEAgLTc0LDE0ICs3NCwxNCBAQCBTY3JvbGxp
bmdUaHJlYWQmIFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkKIAogdm9pZCBTY3JvbGxpbmdU
aHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV90aHJlYWRJZGVudGlm
aWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2FpdCBm
b3IgdGhlIHRocmVhZCB0byBpbml0aWFsaXplIHRoZSBydW4gbG9vcC4KICAgICB7CiAgICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXgpOwog
Ci0gICAgICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxsYmFj
aywgdGhpcywgIldlYkNvcmU6IFNjcm9sbGluZyIpOworICAgICAgICBtX3RocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5nIik7CiAg
ICAgICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBtX2luaXRpYWxpemVSdW5Mb29w
Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc117IHJldHVybiBtX3RocmVhZFJ1bkxv
b3A7IH0pOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhy
ZWFkSWZOZWVkZWQoKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2sodm9p
ZCogc2Nyb2xsaW5nVGhyZWFkKQogewotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRl
cmFjdGl2ZSgpOwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGluZ1RocmVhZCo+KHNjcm9sbGluZ1Ro
cmVhZCktPnRocmVhZEJvZHkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuaAppbmRleCBkZTA2MmQ3N2FjMDFkZjlkMmEwOTg2MGViZTZi
OGU5ZmQzY2ZmNWMwLi5kODg5MmYwNWJlNjQzN2Q0YWFjYzBhNzUxYTdjYTdlOTNiZWUwZGZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaApA
QCAtNzMsNyArNzMsNyBAQCBjbGFzcyBTY3JvbGxpbmdUaHJlYWQgewogICAgIHZvaWQgdGhyZWFk
UnVuTG9vcFNvdXJjZUNhbGxiYWNrKCk7CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogCiAgICAg
Q29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKICAgICBMb2Nr
IG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCmluZGV4IGY3MTMzM2M1YTM3YTk5ODk2
NGYzYTc0MWM3MzE1MmU5NTE0NjZjZjYuLmRkYmUzYmE5ODBlNDUwYTQ5NGNkMDY0OGY0MWI1ZTM2
YWZlZWI1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZE
YXRhYmFzZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJU
RkRhdGFiYXNlTG9hZGVyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBQYXNzUmVmUHRyPEhSVEZEYXRh
YmFzZUxvYWRlcj4gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3Vz
bHlJZgogfQogCiBIUlRGRGF0YWJhc2VMb2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcihmbG9hdCBz
YW1wbGVSYXRlKQotICAgIDogbV9kYXRhYmFzZUxvYWRlclRocmVhZCgwKQorICAgIDogbV9kYXRh
YmFzZUxvYWRlclRocmVhZChudWxscHRyKQogICAgICwgbV9kYXRhYmFzZVNhbXBsZVJhdGUoc2Ft
cGxlUmF0ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTA2LDcgKzEwNiw3
IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoKQogICAgIAog
ICAgIGlmICghbV9ocnRmRGF0YWJhc2UuZ2V0KCkgJiYgIW1fZGF0YWJhc2VMb2FkZXJUaHJlYWQp
IHsKICAgICAgICAgLy8gU3RhcnQgdGhlIGFzeW5jaHJvbm91cyBkYXRhYmFzZSBsb2FkaW5nIHBy
b2Nlc3MuCi0gICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoZGF0
YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJhc2UgbG9hZGVyIik7CisgICAgICAg
IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkYXRhYmFzZUxvYWRlckVu
dHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKICAgICB9CiB9CiAKQEAgLTEyMSw4
ICsxMjEsOCBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6d2FpdEZvckxvYWRlclRocmVhZENv
bXBsZXRpb24oKQogICAgIAogICAgIC8vIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKCkgc2hvdWxk
IG5vdCBiZSBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIHRocmVhZC4KICAgICBpZiAobV9kYXRh
YmFzZUxvYWRlclRocmVhZCkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9kYXRh
YmFzZUxvYWRlclRocmVhZCk7Ci0gICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IDA7CisgICAg
ICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV9k
YXRhYmFzZUxvYWRlclRocmVhZCA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFz
ZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9h
ZGVyLmgKaW5kZXggYzg2OWQxMzdhMWRiMmY1MjQ5OGQwZTFiNjVkNTg3ZTZjODE5YjM4MS4uM2Fk
MjUxZjIxOTkwOWY0YmM2NDU0ZDAxMzIwMWI2YTdjYTcwMjY4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKQEAgLTc3LDcgKzc3
LDcgQEAgY2xhc3MgSFJURkRhdGFiYXNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8SFJURkRh
dGFiYXNlTG9hZGVyPiB7CiAKICAgICAvLyBIb2xkaW5nIGEgbV90aHJlYWRMb2NrIGlzIHJlcXVp
cmVkIHdoZW4gYWNjZXNzaW5nIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQuCiAgICAgTG9jayBtX3Ro
cmVhZExvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CiAKICAgICBmbG9hdCBt
X2RhdGFiYXNlU2FtcGxlUmF0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA5NmYzMzA4MjgwNzlhNzlhZDY0ODIwZDA3
MjFjNTljNWVhMTZmZGIxLi4yMWJlOTk2ZWYzN2U1M2RiNzAzMTAwMTk2MjdjMGM0MGQyYjIxMGRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
ci5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZvbHZl
cihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAgIC8v
IFN0YXJ0IHVwIGJhY2tncm91bmQgdGhyZWFkCiAgICAgLy8gRklYTUU6IHdvdWxkIGJlIGJldHRl
ciB0byB1cCB0aGUgdGhyZWFkIHByaW9yaXR5IGhlcmUuICBJdCBkb2Vzbid0IG5lZWQgdG8gYmUg
cmVhbC10aW1lLCBidXQgaGlnaGVyIHRoYW4gdGhlIGRlZmF1bHQuLi4KICAgICBpZiAodGhpcy0+
dXNlQmFja2dyb3VuZFRocmVhZHMoKSAmJiBtX2JhY2tncm91bmRTdGFnZXMuc2l6ZSgpID4gMCkK
LSAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gY3JlYXRlVGhyZWFkKFdlYkNvcmU6OmJhY2tn
cm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91bmQgdGhyZWFkIik7
CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdlYkNvcmU6OmJh
Y2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91bmQgdGhyZWFk
Iik7CiB9CiAKIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZlcigpCkBAIC0xNDYsNyAr
MTQ2LDcgQEAgUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKICAgICAgICAgICAg
IG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9iYWNrZ3JvdW5kVGhyZWFk
KTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJi
Q29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuaAppbmRleCA2YmFlYjdjY2UyOTg5NmM5ODk2MzUxMmY0MWI0M2EyZjEyODg1NDFjLi4wNTk2
MzM2N2FlMjgzNDk0ODc5MGJhN2NjYjcyMDYwZWM1OTgxMDcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaApAQCAtODYsNyArODYsNyBAQCBj
bGFzcyBSZXZlcmJDb252b2x2ZXIgewogCiAgICAgLy8gQmFja2dyb3VuZCB0aHJlYWQgYW5kIHN5
bmNocm9uaXphdGlvbgogICAgIGJvb2wgbV91c2VCYWNrZ3JvdW5kVGhyZWFkczsKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fYmFja2dyb3VuZFRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2Jh
Y2tncm91bmRUaHJlYWQ7CiAgICAgYm9vbCBtX3dhbnRzVG9FeGl0OwogICAgIGJvb2wgbV9tb3Jl
SW5wdXRCdWZmZXJlZDsKICAgICBtdXRhYmxlIExvY2sgbV9iYWNrZ3JvdW5kVGhyZWFkTXV0ZXg7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVk
aW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCmluZGV4IDZjZDhiZDdmODFi
ZmYyMjI3ZmUxNGZiY2EwZmJmZDA1NWQwOWM1NzEuLjFmMjVlOGU1NGU5ZWU4NWZhMGNjYTZhMzFi
OTJlMTExZTZkZjBjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3Bw
CkBAIC0zNzAsMjAgKzM3MCwyMCBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBBdWRpb0ZpbGVSZWFk
ZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubwogUGFzc1JlZlB0
cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCwg
Ym9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVz
PiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJBdWRpb0Zp
bGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRl
XSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVyIiwg
WyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAgICAg
ICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBs
ZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1l
bW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4
VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIFJlZlB0cjxBdWRpb0J1cz4gcmV0dXJu
VmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgiQXVkaW9GaWxlUmVhZGVy
IiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0g
eworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIkF1ZGlvRmlsZVJlYWRlciIsIFsm
cmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsKICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIoZGF0YSwgZGF0YVNpemUpLmNyZWF0
ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0pOwotICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwCmluZGV4IDFjNWMzMGYzNzdhNDJiZTAwMTc3MTY1MWU4N2Y3MDQzYTVk
NjVjOTAuLjI2NDY2ZjUzYjQ4MjE4ZDMzN2E1YTg5NGYxZGI3MjhkZjRjNDdjODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJT
b3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0xMDgsNyArMTA4LDcg
QEAgY2xhc3MgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgUmVzb3VyY2VI
YW5kbGVDbGllbnQsIHB1YmxpYyBTdHJlYW0KICAgICAgICAgdm9pZCB3YXNCbG9ja2VkKFJlc291
cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJj
ZUhhbmRsZSopIG92ZXJyaWRlOwogCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQg
eyAwIH07CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAg
ICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAgICAgICAgQ29u
ZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgICAgIFJ1bkxvb3AqIG1f
cnVuTG9vcCB7IG51bGxwdHIgfTsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIFJlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJT
cmMqIHNyYywKICAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCiB7CiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKLSAgICBtX3RocmVhZCA9
IGNyZWF0ZVRocmVhZCgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBbdGhpcywgcmVx
dWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRl
KCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RGTW92
ZShyZXF1ZXN0KV0gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29w
ID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTExMTMsOCArMTExMyw4IEBAIFJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRX
ZWJTcmMqIHNyYywKIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp+UmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQoKQogewogICAgIGlmIChtX3RocmVhZCkgewotICAgICAgICBkZXRh
Y2hUaHJlYWQobV90aHJlYWQpOwotICAgICAgICBtX3RocmVhZCA9IDA7CisgICAgICAgIG1fdGhy
ZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIAogICAg
IGlmIChtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAppbmRleCA0
NmI4OTk0YTg0MWVmNzFlYTI3OWNlNzdjYmM4ZmI0M2MyOWYwYTYyLi5mZmJmZGE5Yjg5MzQ4MzU0
OTBjOWE0MGJhMWY0ODMzNmU0NzYwYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCkBAIC03Nyw3ICs3Nyw3IEBA
IENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRp
Y0xvY2s+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KTsKIAogICAgIGlmICghbG9hZGVyUnVuTG9v
cE9iamVjdCkgewotICAgICAgICBjcmVhdGVUaHJlYWQocnVuTG9hZGVyVGhyZWFkLCAwLCAiV2Vi
Q29yZTogQ0ZOZXR3b3JrIExvYWRlciIpOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZShydW5Mb2Fk
ZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CiAKICAgICAgICAgbG9h
ZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW10geyByZXR1cm4gbG9hZGVy
UnVuTG9vcE9iamVjdDsgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA0NDA4Y2QxOTg3MDViYTg2
Y2M4YzE5ODZmYjNlMmNhZGU3OTZkY2M2Li5mMTA1NzE1ZWQ4ZDg3OTM3M2I2MzMxY2IyNmUwODJj
M2UxYWI4YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtOTQsMTAgKzk0LDEwIEBAIGludCBDdXJsRG93bmxv
YWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpIGNvbnN0CiB2b2lkIEN1cmxEb3du
bG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogewogICAgIGlmICghcnVuVGhyZWFk
KCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkSWQpCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX3RocmVhZElkKTsKKyAgICAgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICAg
ICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHNldFJ1blRocmVhZCh0
cnVlKTsKLSAgICAgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZChkb3dubG9hZFRocmVhZCwg
dGhpcywgImRvd25sb2FkVGhyZWFkIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOwogICAgIH0KIH0KIApA
QCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVhZCgp
CiB7CiAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIAotICAgIGlmIChtX3RocmVhZElkKSB7Ci0g
ICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOwotICAgICAgICBtX3Ro
cmVhZElkID0gMDsKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPndhaXRG
b3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuaAppbmRleCAwMmNlNzMxYmQxMGE4MDE5YjdlYmUxZmFjNTJiNDVlNDA5MjU2MjMxLi5mNmJi
Yzc3ZjRkM2NlMGI5Njg3ZDFkOGZjYTYwOTE1ODdjOWFlNDljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC02OSw3ICs2
OSw3IEBAIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewogCiAgICAgc3RhdGljIHZvaWQgZG93
bmxvYWRUaHJlYWQodm9pZCogZGF0YSk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgQ1VSTE0qIG1fY3VybE11bHRp
SGFuZGxlOwogICAgIFZlY3RvcjxDVVJMKj4gbV9wZW5kaW5nSGFuZGxlTGlzdDsKICAgICBWZWN0
b3I8Q1VSTCo+IG1fYWN0aXZlSGFuZGxlTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCmlu
ZGV4IDVmOWUwOTU0MDQ3MTdkMzBiZDg5OTQxZTVmMjUyZjE3YjBhODY3YjkuLjY4ZTIxZjQ3NDQ1
MWFjMzg3NTJiOWJjODk0M2MzNWQyM2I2OTY5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsIDogcHVibGlj
IFNvY2tldFN0cmVhbUhhbmRsZSB7CiAgICAgICAgIHNpemVfdCBzaXplIHsgMCB9OwogICAgIH07
CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkIHsgMCB9OworICAgIFJlZlB0
cjxUaHJlYWQ+IG1fd29ya2VyVGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIHN0ZDo6YXRvbWljPGJv
b2w+IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07CiAgICAgTG9jayBtX211dGV4U2VuZDsKICAgICBM
b2NrIG1fbXV0ZXhSZWNlaXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAK
aW5kZXggMWUzNzlkMWIwMGQwOTU1ZmMyZGEwMGJlM2Y5NmY5OTJhOTFiOTQzZi4uZWNiOWY1NGI2
NWEzMzUyNGUzYTM1NmEzYmMxM2QwZTJmNmY2YWNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsOjpzdGFydFRocmVhZCgpCiAKICAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgpIHdpbGwg
Y2FsbCBkZXJlZigpLgogCi0gICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoIldlYlNv
Y2tldCB0aHJlYWQiLCBbdGhpc10geworICAgIG1fd29ya2VyVGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10gewogCiAgICAgICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpzdG9wVGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdG9wVGhyZWFkID0g
dHJ1ZTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3dvcmtlclRocmVhZCk7Ci0gICAg
bV93b3JrZXJUaHJlYWQgPSAwOworICAgIG1fd29ya2VyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlv
bigpOworICAgIG1fd29ya2VyVGhyZWFkID0gbnVsbHB0cjsKICAgICBkZXJlZigpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggN2FkNWI1NzkxM2ExNjcy
ZGY5MTk2ZTllYjAxMzNlMjNlMjMyOTg1ZC4uZGVlNmNlNmQ2NzNkNzZiNDFmMjc0NTQwNGZiMDc5
ZjIxOTY1M2I2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAt
OTksNyArOTksNyBAQCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1
cERhdGEoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cgogfQogCiBXb3JrZXJUaHJlYWQ6
OldvcmtlclRocmVhZChjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBX
b3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHksIFdvcmtlclJlcG9ydGluZ1Byb3h5
JiB3b3JrZXJSZXBvcnRpbmdQcm94eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSwg
Y29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiBjb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVu
dFNlY3VyaXR5UG9saWN5LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luLCBNb25vdG9u
aWNUaW1lIHRpbWVPcmlnaW4sIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5KiBjb25uZWN0
aW9uUHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92aWRlciwgSlNDOjpSdW50aW1lRmxh
Z3MgcnVudGltZUZsYWdzKQotICAgIDogbV90aHJlYWRJRCgwKQorICAgIDogbV90aHJlYWQobnVs
bHB0cikKICAgICAsIG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCiAgICAg
LCBtX3dvcmtlclJlcG9ydGluZ1Byb3h5KHdvcmtlclJlcG9ydGluZ1Byb3h5KQogICAgICwgbV9y
dW50aW1lRmxhZ3MocnVudGltZUZsYWdzKQpAQCAtMTMzLDE1ICsxMzMsMTUgQEAgV29ya2VyVGhy
ZWFkOjp+V29ya2VyVGhyZWFkKCkKIAogYm9vbCBXb3JrZXJUaHJlYWQ6OnN0YXJ0KCkKIHsKLSAg
ICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVh
ZElEIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCisgICAgLy8gTXV0ZXgg
cHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWQgaXMgaW5pdGlh
bGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVh
ZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIi
KTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdvcmtlclRocmVhZDo6d29ya2VyVGhy
ZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKIAotICAgIHJldHVybiBtX3RocmVh
ZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWQ6Ondvcmtl
clRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIFdvcmtl
clRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2Rl
ZmF1bHQobWFpbkNvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEID0gbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBwcm90ZWN0b3IgPSBt
X3RocmVhZDsKIAogICAgIEFTU0VSVChtX3dvcmtlckdsb2JhbFNjb3BlLT5oYXNPbmVSZWYoKSk7
CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkK
ICAgICB0aHJlYWRHbG9iYWxEYXRhKCkuZGVzdHJveSgpOwogCiAgICAgLy8gVGhlIHRocmVhZCBv
YmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIGZyb20gbm90aWZpY2F0aW9uIG5vdywgZG9u
J3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCi0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsKKyAg
ICBwcm90ZWN0b3ItPmRldGFjaCgpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6c3RhcnRSdW5u
aW5nRGVidWdnZXJUYXNrcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAppbmRl
eCAwN2FkM2NlNzg0ZjkxOWY3MGM0NTY4MWI5NTRjMDA5OTk2ZjU1N2YyLi5mODA5ZWU2NjcyN2Vl
MTM5ZGM0ZjE5ZDJjYjYxYjIyNjVlNGVhNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgV29ya2VyVGhyZWFkIDogcHVibGljIFJl
ZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgYm9vbCBzdGFydCgpOwogICAgIHZvaWQgc3Rv
cCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KICAgICBXb3JrZXJSdW5Mb29wJiBy
dW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkmIHdv
cmtlckxvYWRlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJMb2FkZXJQcm94eTsgfQog
ICAgIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgpIGNvbnN0IHsg
cmV0dXJuIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KQEAgLTk4LDcgKzk4LDcgQEAgY2xhc3Mg
V29ya2VyVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgc3Rh
dGljIHZvaWQgd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwogICAgIHZvaWQgd29ya2VyVGhyZWFk
KCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVh
ZD4gbV90aHJlYWQ7CiAgICAgV29ya2VyUnVuTG9vcCBtX3J1bkxvb3A7CiAgICAgV29ya2VyTG9h
ZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkm
IG1fd29ya2VyUmVwb3J0aW5nUHJveHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5jcHAKaW5kZXggYmI2NmZjZWE3ZTUyOGJjMjdmNjMzYTNlNTI4NzhiNTAxZWYwZTE4Ny4uMzU3
Njc5NDZhZGUzNzJhNDc5NDVmODVkM2Y4OTU4YjUyNTRhYmU0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU3Rv
cmFnZS9TdG9yYWdlVGhyZWFkLmNwcApAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgSGFzaFNldDxT
dG9yYWdlVGhyZWFkKj4mIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkKIH0KIAogU3RvcmFnZVRocmVh
ZDo6U3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCisgICAgOiBtX3RocmVhZChu
dWxscHRyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiB9CkBAIC00OCwxNiArNDgs
MTYgQEAgU3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgpCiBTdG9yYWdlVGhyZWFkOjp+U3Rv
cmFnZVRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
IW1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV90aHJlYWQpOwogfQogCiBib29sIFN0b3JhZ2VU
aHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICgh
bV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChTdG9yYWdlVGhy
ZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3Jh
Z2UiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3Jl
YXRlKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhpcywgIldlYkNv
cmU6IExvY2FsU3RvcmFnZSIpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkuYWRkKHRoaXMp
OwotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9p
ZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2sodm9pZCogdGhyZWFkKQpA
QCAtNzgsMjUgKzc4LDI1IEBAIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludCgp
CiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWUu
a2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYm
IG1fdGhyZWFkKTsKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9u
PHZvaWQgKCk+PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6
OnRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
IW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtp
bGxlZCgpICYmIG1fdGhyZWFkKTsKICAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygpLnJlbW92ZSh0
aGlzKTsKICAgICAvLyBFdmVuIGluIHdlaXJkLCBleGNlcHRpb25hbCBjYXNlcywgZG9uJ3Qgd2Fp
dCBvbiBhIG5vbmV4aXN0ZW50IHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgaWYgKCFtX3RocmVh
ZElEKQorICAgIGlmICghbV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcXVldWUu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFt0aGlzXSB7CiAgICAg
ICAgIHBlcmZvcm1UZXJtaW5hdGUoKTsKICAgICB9KSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1f
dGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjpwZXJmb3JtVGVybWlu
YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgg
Yi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCmluZGV4IDk1NjRiOGFhMDZl
NTI0M2UzMGU0NjdjNWZiZmUyY2RhZGIyNDBjNTYuLjhjZjFiM2Q0YWRjNWEzMDZhNzdlYzc3Yzlj
MzI2NjYxNjg3YmVjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaApAQCAt
NTYsNyArNTYsNyBAQCBjbGFzcyBTdG9yYWdlVGhyZWFkIHsKICAgICAvLyBCYWNrZ3JvdW5kIHRo
cmVhZCBwYXJ0IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJlLgogICAgIHZvaWQgcGVyZm9ybVRl
cm1pbmF0ZSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0
cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIE1lc3NhZ2VRdWV1ZTxGdW5jdGlvbjx2b2lkICgpPj4g
bV9xdWV1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAppbmRleCAzYjg1ZjIyZmZhZTAxZTI4YWFiOTk4MTY2OThhZGFkN2EzODQz
YzVmLi5iMDRhY2M4YzMxYzVlY2E4MmE1MTc0MTY2N2RiNzBlMDUzZjFkMmM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yMDQs
NyArMjA0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIHsKICAgICBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKIAotICAgIFdURjo6c2V0Q3VycmVudFRo
cmVhZElzVXNlckluaXRpYXRlZCgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW5pdGlhdGVkKCk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
ID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcjsKICAgICBt
X2xvYWRUaHJvdHRsZUxhdGVuY3kgPSBwYXJhbWV0ZXJzLmxvYWRUaHJvdHRsZUxhdGVuY3k7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IGVmN2JhODk5ODIwMjMyNTg5ZTcz
OTFmMjdmY2QzZDZlMTY5ZjY4OTQuLmZhMDMwZmIzYTJhMGY4MmQ2YTI0NWJmODU2YjM2YWEyNzMy
MDA3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0xODMsNyArMTgz
LDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNldCwgc2l6
ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKIAogICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7Ci0gICAgZGV0YWNoVGhy
ZWFkKGNyZWF0ZVRocmVhZCgiSU9DaGFubmVsOjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBx
dWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICBUaHJlYWQ6OmNyZWF0ZSgiSU9DaGFubmVs
OjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsK
ICAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVmYXVsdFJlYWRC
dWZmZXJTaXplKTsKICAgICAgICAgdWludDhfdCogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihmYXN0TWFsbG9jKGJ1ZmZlclNpemUpKTsKICAgICAgICAgR1JlZlB0cjxTb3VwQnVm
ZmVyPiByZWFkQnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGJ1
ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGJ1ZmZlckRhdGEsIGZhc3RGcmVlKSk7CkBAIC0yMTcsNyAr
MjE3LDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNldCwg
c2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICAgICAgICAgIERhdGEgZGF0YSA9
IHsgV1RGTW92ZShidWZmZXIpIH07CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRh
LCAwKTsKICAgICAgICAgfSwgcXVldWUpOwotICAgIH0pKTsKKyAgICB9KS0+ZGV0YWNoKCk7CiB9
CiAKIHN0cnVjdCBXcml0ZUFzeW5jRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCmluZGV4IDA2MDhhYjcy
Zjk5MjQ4ZWYyNGNkMmQ1MjQ1ZWU1MzMzYTAwZDlkMGQuLjQ4ZDEwNjk3NzY1YTk1YThiMzU4NzIz
MGUxMDJkODAzYWQ1OGMwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9s
aW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAg
TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IoKQogICAgIGlmICht
X2V2ZW50RkQgPT0gLTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgiTWVtb3J5UHJlc3N1cmVNb25pdG9yIiwg
W3RoaXNdIHsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiTWVt
b3J5UHJlc3N1cmVNb25pdG9yIiwgW3RoaXNdIHsKICAgICAgICAgZG91YmxlIHBvbGxJbnRlcnZh
bCA9IHNfbWF4UG9sbGluZ0ludGVydmFsSW5TZWNvbmRzOwogICAgICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAgICAgc2xlZXAocG9sbEludGVydmFsKTsKQEAgLTI3MSw3ICsyNzEsNyBAQCBN
ZW1vcnlQcmVzc3VyZU1vbml0b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgICAgIH0K
ICAgICAgICAgY2xvc2UobV9ldmVudEZEKTsKICAgICB9KTsKLSAgICBkZXRhY2hUaHJlYWQodGhy
ZWFkSWRlbnRpZmllcik7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogSVBDOjpBdHRhY2ht
ZW50IE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6Y3JlYXRlSGFuZGxlKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDFkNTAyMTVhMjAzMTE0YjRmMjNk
NWQ1OGYyZDI1M2ZmNzkwNTZkNWUuLjRmOTZhYmJmMGRjOTcyZjhiOWMyYzZjZjZlODI2NDY5ZTI1
ZmJmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMjU4
LDcgKzI1OCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgcGxhdGZvcm1Jbml0aWFs
aXplV2ViUHJvY2VzcyhXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIAogICAgIC8vIE1hdGNoIHRoZSBR
b1Mgb2YgdGhlIFVJUHJvY2VzcyBhbmQgdGhlIHNjcm9sbGluZyB0aHJlYWQgYnV0IHVzZSBhIHNs
aWdodGx5IGxvd2VyIHByaW9yaXR5LgotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKC0xKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKC0xKTsKIAogICAgIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBw
YXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIGlmICgh
bV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcikgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQzNWFlZDg3MTUwZGVlNDExOTcxNDZmZWVm
MGIwOWZmNDZlODQwNjAuLmVhMjcwNWNjYzRkMWVhMzc2ZTNjYjVlYjQ5ZjE0ODU1NmI0ZGJjZTUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcDoK
KyAgICAgICAgKHJ1bkphdmFTY3JpcHRUaHJlYWQpOgorICAgICAgICAoc3RhcnRKYXZhU2NyaXB0
VGhyZWFkcyk6CisgICAgICAgIChzdG9wSmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKHRlc3RUaHJlYWRJ
ZGVudGlmaWVyTWFwKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRp
b24uY3BwOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwOgorCiAyMDE3LTA0LTA2ICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBGb250V2l0aEZlYXR1
cmVzIHRlc3QgZm9udCBwYXNzIE9UUwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
SmF2YVNjcmlwdFRocmVhZGluZy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0
VGhyZWFkaW5nLmNwcAppbmRleCBlMmY5YmFkZTZjYTdjMjY5NDg1YTRjZGNiZTYwOTljMzZiYTAy
MTk4Li5kYzIzYWUyMmE4NWUwYzk5NTMxNjdmOTk4NTllYzlkZWU0M2YxN2ZiIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcApAQCAtNTEsNyArNTEsNyBA
QCBzdGF0aWMgTG9jayYgamF2YVNjcmlwdFRocmVhZHNNdXRleCgpCiAgICAgcmV0dXJuIHN0YXRp
Y011dGV4OwogfQogCi10eXBlZGVmIEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gVGhyZWFkU2V0
OwordHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxUaHJlYWQ+PiBUaHJlYWRTZXQ7CiBzdGF0aWMgVGhy
ZWFkU2V0JiBqYXZhU2NyaXB0VGhyZWFkcygpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKFRocmVhZFNldCwgc3RhdGljSmF2YVNjcmlwdFRocmVhZHMsICgpKTsKQEAgLTEw
OCwxMCArMTA4LDkgQEAgdm9pZCBydW5KYXZhU2NyaXB0VGhyZWFkKHZvaWQqKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVh
ZHNNdXRleCgpKTsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjdXJyZW50VGhy
ZWFkKCk7Ci0gICAgICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgICAgICBUaHJlYWQ6OmN1
cnJlbnQoKS5kZXRhY2goKTsKICAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5yZW1vdmUodGhy
ZWFkKTsKLSAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5K
YXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRk
KFRocmVhZDo6Y3JlYXRlKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApAQCAtMTI4LDcgKzEyNyw3IEBAIHZvaWQgc3RhcnRKYXZhU2NyaXB0VGhy
ZWFkcygpCiAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytp
KQotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFT
Y3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhy
ZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKIH0KIAogdm9pZCBzdG9w
SmF2YVNjcmlwdFRocmVhZHMoKQpAQCAtMTM4LDcgKzEzNyw3IEBAIHZvaWQgc3RvcEphdmFTY3Jp
cHRUaHJlYWRzKCkKICAgICAgICAgamF2YVNjcmlwdFRocmVhZHNTaG91bGRUZXJtaW5hdGUgPSB0
cnVlOwogICAgIH0KIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyLCBqYXZhU2NyaXB0VGhy
ZWFkc0NvdW50PiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPiwgamF2YVNjcmlw
dFRocmVhZHNDb3VudD4gdGhyZWFkczsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihqYXZhU2Ny
aXB0VGhyZWFkcygpLCB0aHJlYWRzKTsKQEAgLTE0Niw3ICsxNDUsNyBAQCB2b2lkIHN0b3BKYXZh
U2NyaXB0VGhyZWFkcygpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZh
U2NyaXB0VGhyZWFkc0NvdW50OyArK2kpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KHRocmVhZHNbaV0pOworICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4
KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGZi
NGQyNmZjY2ViNzBjNGI1MzIwMTBkYTg1ZmI5Y2U3ODU1YzEzODQuLjNjZWFhNmYzZTY1NzM1ZDMw
ZWYxYTRmODk3ZDVlNjljNGZhNWZmMDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVt
cFJlbmRlclRyZWUubW0KQEAgLTEwNzIsOCArMTA3Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RUaHJl
YWRJZGVudGlmaWVyTWFwKCkKICAgICBwdGhyZWFkX2pvaW4ocHRocmVhZCwgMCk7CiAKICAgICAv
LyBOb3cgY3JlYXRlIGFub3RoZXIgdGhyZWFkIHVzaW5nIFdURi4gT24gT1NYLCBpdCB3aWxsIGhh
dmUgdGhlIHNhbWUgcHRocmVhZCBoYW5kbGUKLSAgICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZl
cmVudCBUaHJlYWRJZGVudGlmaWVyLgotICAgIGNyZWF0ZVRocmVhZChydW5UaHJlYWQsIDAsICJE
dW1wUmVuZGVyVHJlZTogdGVzdCIpOworICAgIC8vIGJ1dCBzaG91bGQgZ2V0IGEgZGlmZmVyZW50
IFJlZlB0cjxUaHJlYWQ+LgorICAgIFRocmVhZDo6Y3JlYXRlKHJ1blRocmVhZCwgMCwgIkR1bXBS
ZW5kZXJUcmVlOiB0ZXN0Iik7CiB9CiAKIHN0YXRpYyB2b2lkIGFsbG9jYXRlR2xvYmFsQ29udHJv
bGxlcnMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0
aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKaW5k
ZXggODQ4NTI3MzUxZjYwNjNmYzI2MzY4NzgwNTZkOWMyNGRiYWJlODNkYy4uNzcyMTYzNmI3Nzgw
N2YxMzk1MWVhMTEyZmJkNDEzZThmYWM0NjBiYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Db25kaXRpb24uY3BwCkBAIC04OSwxNCArODksMTQgQEAgdm9pZCBydW5UZXN0KAog
ICAgIENvbmRpdGlvbiBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb24gZnVsbENvbmRpdGlv
bjsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1lclRocmVhZHM7Ci0gICAg
VmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVm
UHRyPFRocmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+
IHByb2R1Y2VyVGhyZWFkczsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7CiAgICAg
TG9jayByZWNlaXZlZExvY2s7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQ29uc3Vt
ZXJzOyBpLS07KSB7Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9
IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA9
IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkNvbnN1bWVyIHRocmVhZCIsCiAgICAgICAg
ICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTEwOCw3ICsxMDgs
NyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlDb25k
aXRpb24sIGxvY2tlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogQ2hlY2tpbmcgY29uc3VtcHRpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAi
LCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxu
IikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcgY29uc3VtcHRpb24gcHJlZGljYXRlIHdp
dGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09
ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIXNob3VsZENvbnRpbnVlIHx8ICFxdWV1ZS5pc0VtcHR5KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0
KTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgc2xlZXAoZGVsYXkpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUHJvZHVjZXJzOyBpLS07KSB7Ci0gICAgICAgIFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAg
UmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAg
ICAgICAgIlByb2R1Y2VyIFRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyAr
K2kpIHsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVsbENvbmRpdGlvbiwgbG9ja2VyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGgg
c2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIs
IHF1ZXVlLnNpemUoKSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcgcHJvZHVj
dGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAi
LCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZS5zaXplKCkgPCBtYXhRdWV1ZVNpemU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lb3V0KTsKQEAgLTE1NSw4ICsxNTUsOCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgIHBy
b2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CiAgICAgfQogCi0gICAgZm9y
IChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCi0g
ICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIGZv
ciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKKyAg
ICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihsb2NrKTsKQEAgLTE2NCw4ICsxNjQs
OCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgfQogICAgIGVtcHR5Q29uZGl0aW9uLm5vdGlmeUFsbCgp
OwogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1l
clRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZp
ZXIpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IGNvbnN1bWVy
VGhyZWFkcykKKyAgICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsK
IAogICAgIEVYUEVDVF9FUShudW1Qcm9kdWNlcnMgKiBudW1NZXNzYWdlc1BlclByb2R1Y2VyLCBy
ZWNlaXZlZC5zaXplKCkpOwogICAgIHN0ZDo6c29ydChyZWNlaXZlZC5iZWdpbigpLCByZWNlaXZl
ZC5lbmQoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2Nr
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCmluZGV4IDU1NzYz
MDJkNjkwZGZjYTM1OTkyOTI4YjFjODUzYzc2MjJlNDVmYjkuLjZhNGU1MzhmNTZmNDZkMTc3YTNm
NjJmMWRkZWIzYTRkMGFmMmFmMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0xvY2suY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2su
Y3BwCkBAIC00NiwxMyArNDYsMTMgQEAgdm9pZCBydW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJl
YWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cCwgdW5zaWduZWQKIHsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TG9ja1R5cGVbXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPExvY2tU
eXBlW10+KG51bVRocmVhZEdyb3Vwcyk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiB3
b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8ZG91YmxlW10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91
bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVy
R3JvdXApOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0g
c3RkOjptYWtlX3VuaXF1ZTxSZWZQdHI8VGhyZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1U
aHJlYWRzUGVyR3JvdXApOwogCiAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRHcm91cEluZGV4ID0g
bnVtVGhyZWFkR3JvdXBzOyB0aHJlYWRHcm91cEluZGV4LS07KSB7CiAgICAgICAgIHdvcmRzW3Ro
cmVhZEdyb3VwSW5kZXhdID0gMDsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4
ID0gbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgdGhy
ZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhd
ID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICog
bnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAg
ICAgICAgICAgICAgIkxvY2sgdGVzdCB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFt0aHJlYWRH
cm91cEluZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRpY2Fs
U2VjdGlvbl0gKCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1J
dGVyYXRpb25zOyBpLS07KSB7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgcnVuTG9ja1Rlc3QodW5z
aWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1UaHJlYWRzUGVyR3JvdXAsIHVuc2ln
bmVkCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdy
b3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAgdGhyZWFk
c1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBkb3VibGUgZXhwZWN0
ZWQgPSAwOwogICAgIGZvciAodWludDY0X3QgaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1J
dGVyYXRpb25zKSAqIHdvcmtQZXJDcml0aWNhbFNlY3Rpb24gKiBudW1UaHJlYWRzUGVyR3JvdXA7
IGktLTspCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5n
TG90LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCmlu
ZGV4IGM2N2UxZTA4MTVhODNhZmE5MzMzZTJhYzlhMmJkNzhiNjdiMTY0NWIuLjVhZjljN2M4Mjdi
MjFlMjFkOGRmOTMwNTI2MGQ2ZmZlZTY4ZmJkMWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCkBAIC00OCwxNiArNDgsMTQgQEAgc3RydWN0IFNpbmds
ZUxhdGNoVGVzdCB7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1UaHJl
YWRzOyBpLS07KSB7CiAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgICAg
ICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAg
ICAgICAgICAgICAgICJQYXJraW5nIFRlc3QgVGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAg
WyZdICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9ORSgwdSwgY3VycmVudFRo
cmVhZCgpKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgZG93bigpOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYXdha2UuYWRkKGN1cnJlbnRUaHJlYWQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0QXdva2VuID0gY3VycmVudFRocmVhZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYXdha2UuYWRkKFRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSAmVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5X29uZSgpOwogICAgICAgICAgICAgICAg
ICAgICB9KSk7CiAgICAgICAgIH0KQEAgLTY1LDE2ICs2MywxNiBAQCBzdHJ1Y3QgU2luZ2xlTGF0
Y2hUZXN0IHsKIAogICAgIHZvaWQgdW5wYXJrT25lKHVuc2lnbmVkIHNpbmdsZVVucGFya0luZGV4
KQogICAgIHsKLSAgICAgICAgRVhQRUNUX0VRKDB1LCBsYXN0QXdva2VuKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUobnVsbHB0ciA9PSBsYXN0QXdva2VuKTsKICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRp
ZmllciwgOD4gcXVldWU7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPiwgOD4gcXVldWU7
CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAg
ICAgICAgWyZdIChUaHJlYWQmIHRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3Mp
IHsKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQodGhyZWFk
SWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKCZ0aHJlYWRJZGVudGlm
aWVyKTsKIAogICAgICAgICAgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MrKzsKICAgICAgICAg
ICAgIH0pOwpAQCAtODcsMTIgKzg1LDEyIEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CiAgICAg
ICAgICAgICB3aGlsZSAoYXdha2Uuc2l6ZSgpIDwgc2luZ2xlVW5wYXJrSW5kZXggKyAxKQogICAg
ICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlcik7Ci0gICAgICAgICAgICBFWFBFQ1Rf
TkUoMHUsIGxhc3RBd29rZW4pOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobnVsbHB0ciAhPSBs
YXN0QXdva2VuKTsKICAgICAgICAgICAgIGlmICghcXVldWUuaXNFbXB0eSgpICYmIHF1ZXVlWzBd
ICE9IGxhc3RBd29rZW4pIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJXb2tlIHVwIHdyb25n
IHRocmVhZDogcXVldWUgPSAiLCBsaXN0RHVtcChxdWV1ZSksICIsIGxhc3QgYXdva2VuID0gIiwg
bGFzdEF3b2tlbiwgIlxuIik7CiAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKHF1ZXVlWzBdLCBs
YXN0QXdva2VuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxhc3RBd29rZW4gPSAwOwor
ICAgICAgICAgICAgbGFzdEF3b2tlbiA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTEwMCw3ICs5OCw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgIHsKICAgICAgICAg
dW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZv
ckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFk
ZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVzcykg
ewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKQEAgLTExNCw3ICsxMTIsNyBAQCBz
dHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKIAogICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzID0g
MDsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFk
SWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJl
YWQmLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3Mg
IT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
CkBAIC0xMjksOCArMTI3LDggQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAo
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogdGhyZWFkcykKLSAgICAgICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgICAgICBmb3Ig
KFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQorICAgICAgICAgICAg
dGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICAvLyBT
ZW1hcGhvcmUgb3BlcmF0aW9ucy4KQEAgLTE3OSw5ICsxNzcsOSBAQCBzdHJ1Y3QgU2luZ2xlTGF0
Y2hUZXN0IHsKICAgICBBdG9taWM8aW50PiBzZW1hcGhvcmU7CiAgICAgc3RkOjptdXRleCBsb2Nr
OwogICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIGNvbmRpdGlvbjsKLSAgICBIYXNoU2V0PFRo
cmVhZElkZW50aWZpZXI+IGF3YWtlOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJl
YWRzOwotICAgIFRocmVhZElkZW50aWZpZXIgbGFzdEF3b2tlbiB7IDAgfTsKKyAgICBIYXNoU2V0
PFJlZjxUaHJlYWQ+PiBhd2FrZTsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7
CisgICAgUmVmUHRyPFRocmVhZD4gbGFzdEF3b2tlbiB7IG51bGxwdHIgfTsKIH07CiAKIHZvaWQg
cnVuUGFya2luZ1Rlc3QodW5zaWduZWQgbnVtTGF0Y2hlcywgdW5zaWduZWQgZGVsYXksIHVuc2ln
bmVkIG51bVRocmVhZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVucGFya3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306491</attachid>
            <date>2017-04-07 06:15:35 -0700</date>
            <delta_ts>2017-04-07 06:21:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407221533.patch</filename>
            <type>text/plain</type>
            <size>228577</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5kYWRjMzZjMGJmMTQ1NjQ5
ZTY5YjkwMjdkOWFjNTAyMWU1MjdkMGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6b3duZXJUaHJl
YWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAgIChKU0M6OmZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2Vu
ZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6ZmlyZVRyYXApOgorICAgICAgICAq
IHRvb2xzL0hlYXBWZXJpZmllci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cHJp
bnRWZXJpZmljYXRpb25IZWFkZXIpOgorCiAyMDE3LTA0LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVcGRhdGUgdGhlIHByaW9y
aXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVjMGJiNTBkODUwY2Nk
NWZkNGVjNTBkYzk0NDg4MzRjZmM2Y2NjM2QuLjM2ODVlNWE3MDE4MTBjYjBjMWQyMGRkNzhiY2Jm
YjY5MDQzZmZkMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYxIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6
dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBU
aHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJl
YWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNw
cDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwOgorICAgICAgICAq
IGJlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHA6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHA6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6Cisg
ICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCk6CisgICAgICAg
ICogd3RmL01haW5UaHJlYWQuaDoKKyAgICAgICAgKiB3dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Lmg6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwOgorICAgICAgICAoV1RG
OjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKToKKyAgICAg
ICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVu
dmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjpUaHJlYWRQcml2YXRlKToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OmZvckVhY2hJbXBs
KToKKyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5oOgorICAgICAgICAoV1RGOjpQYXJraW5nTG90
Ojpmb3JFYWNoKToKKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0
cjo6UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6Cisg
ICAgICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFkR3JvdXAuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmguCisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAuCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRl
cjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZU9uY2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAo
V1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xk
ZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaDogQ29w
aWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuY3BwLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAg
ICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6
VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAg
ICogd3RmL1RocmVhZEhvbGRlcldpbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6
OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAg
ICAgICAgKiB3dGYvVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpub3JtYWxp
emVUaHJlYWROYW1lKToKKyAgICAgICAgKFdURjo6dGhyZWFkRW50cnlQb2ludCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50
VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJl
bnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEdsb2Jh
bE1heFFPU0NsYXNzKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkdW1wKToKKyAgICAgICAgKFdURjo6bm9ybWFsaXplVGhy
ZWFkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmFkanVzdGVkUU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJl
YWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjppZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6YWRkT25FeGl0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmpvaW5hYmxlU3RhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRpZEJlY29tZURldGFj
aGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRKb2luKToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpoYXNFeGl0ZWQpOgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25h
bEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGlu
Zyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6ZGlkRXhpdCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0YWJs
aXNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRl
dGFjaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRJRCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpy
ZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChX
VEY6OlB0aHJlYWRTdGF0ZTo6UHRocmVhZFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
UHRocmVhZFN0YXRlOjpqb2luYWJsZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRo
cmVhZFN0YXRlOjpwdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRocmVh
ZFN0YXRlOjpkaWRCZWNvbWVEZXRhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJl
YWRTdGF0ZTo6ZGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6
ZGlkSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6aGFzRXhpdGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppZGVudGlmaWVy
QnlQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZXN0YWJsaXNoSWRlbnRp
ZmllckZvclB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpwdGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFu
Z2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6dGhyZWFkRGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OmN1cnJlbnRUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzaWduYWxUaHJlYWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRJRCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6VGhyZWFkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp+VGhyZWFk
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFk
Ojplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6c3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjp0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFuZ2VUaHJl
YWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1dvcmtR
dWV1ZS5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KToKKyAg
ICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2NvY29hL1dvcmtRdWV1ZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hRT1NDbGFzcyk6CisgICAgICAgICogd3Rm
L2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRm
b3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgICogd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcDoKKyAg
ICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9sbGVyOjpFdmVudEZE
UG9sbGVyKToKKyAgICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9s
bGVyOjp+RXZlbnRGRFBvbGxlcik6CisgICAgICAgICogd3RmL21hYy9NYWluVGhyZWFkTWFjLm1t
OgorICAgICAgICAoV1RGOjppbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIp
OgorICAgICAgICAoV1RGOjppbml0aWFsaXplV2ViVGhyZWFkSWRlbnRpZmllcik6CisgICAgICAg
IChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCk6CisKIDIwMTctMDQtMDcg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIFVwZGF0ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NzNkMzc5MzQ4NGRkZDYwOGJjYzU5YTAwYTViZWY1OTJjYWMwYjZkLi5h
NWNkNjEwNDgyZTk0NTY3ZDEzOWY4NTdjNGEyMjNjNDUwOGYzYTg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsODAgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJl
ZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBz
ZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6SURCU2VydmVyKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0F1ZGlvRGVjb2Rlcjo6QXN5bmNBdWRpb0RlY29kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2Rlcik6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6dW5pbml0
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
c3RhcnRSZW5kZXJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4pOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRo
cmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhy
ZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6Omdl
dFRocmVhZElEKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhy
ZWFkRm9yRGVidWdnaW5nKToKKyAgICAgICAgKiBmaWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjYWxsT25GaWxlVGhyZWFkKToKKyAgICAgICAgKiBsb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpv
cGVuKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6Y2xvc2UpOgorICAgICAgICAq
IGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2Fn
ZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVh
dGVUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmg6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayk6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJU
RkRhdGFiYXNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFzZUxvYWRl
cjo6SFJURkRhdGFiYXNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFzZUxv
YWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFz
ZUxvYWRlcjo6d2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6
OlJldmVyYkNvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6On5S
ZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJH
U3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50Ojp+UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxv
YWRlclJ1bkxvb3ApOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJl
YWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9w
VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1w
bEN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3Rh
cnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3Rv
cFRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6Ondv
cmtlclRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclRocmVhZDo6dGhyZWFkSUQpOgorCiAyMDE3LTA0LTA3ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVcGRh
dGUgdGhlIHByaW9yaXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3VyY2VzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDJiMzliOThjNzQ5Njk2NjRkMjcwZGFjNTgwOTc3ZjEyOTVkMWZiZmUuLjc4NTM4MTQ4NjQz
YjU2ODYyMzZiMTBhZWQyNzg2NjlhZmVhZWFkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAg
ICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+
IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8g
UHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVh
ZDo6flN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiBTdG9yYWdl
L1N0b3JhZ2VUaHJlYWQuaDoKKwogMjAxNy0wNC0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVyZSBFeHRy
YSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVuIHRoZXJlIGlzIGEgV2ViIEluc3BlY3RvciBGcm9u
dGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGE1MmNkN2FjZGQxMjI2M2U2NWFmMTk2YmEwMDMzMDIxMzhiOTFl
NjYuLmVmODE1MjYxZjI4YmQyNjdmYmVhNGNmZDBkZTFmNjI0YTFlZDVhOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1
c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0
aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6cmVh
ZFN5bmNJblRocmVhZCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgor
ICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRl
IHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
CmluZGV4IGU3ODA4NmMzYTk2MTJhMmYwYjRkN2FhZjFhZGM3YmExYTEwMWM1NDcuLjQzYWVmMDc3
OTcwY2ZlZGIyY2FjMDQ2M2ZjZDllY2NhMjlkMTUyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKQEAgLTk2LDcg
Kzk2LDcgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAoKQogewogICAgIEJpdG1hcCBiaXRtYXA7
CiAgICAgY29uc3QgaW50IG51bVRocmVhZHMgPSA1OwotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSURzW251bVRocmVhZHNdOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZHNbbnVtVGhyZWFk
c107CiAgICAgRGF0YSBkYXRhW251bVRocmVhZHNdOwogCiAgICAgV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CkBAIC0xMDcsMTIgKzEwNywxMiBAQCB2b2lkIHRlc3RDb21wYXJlQW5kU3dhcCgp
CiAgICAgICAgIGRhdGFbaV0uaWQgPSBpOwogICAgICAgICBkYXRhW2ldLm51bVRocmVhZHMgPSBu
dW1UaHJlYWRzOwogICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gdGhyZWFkRnVuYyA9IHN0
ZDo6YmluZChzZXRCaXRUaHJlYWRGdW5jLCAmZGF0YVtpXSk7Ci0gICAgICAgIHRocmVhZElEc1tp
XSA9IGNyZWF0ZVRocmVhZCgic2V0Qml0VGhyZWFkRnVuYyIsIHRocmVhZEZ1bmMpOworICAgICAg
ICB0aHJlYWRzW2ldID0gVGhyZWFkOjpjcmVhdGUoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRG
dW5jKTsKICAgICB9CiAKICAgICBwcmludGYoIldhaXRpbmcgZm9yICVkIHRocmVhZHMgdG8gam9p
blxuIiwgbnVtVGhyZWFkcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBp
KyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEc1tpXSk7CisgICAg
ICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBwcmludGYoIlBBU1M6
IENvbXBhcmVBbmRTd2FwIHRlc3QgY29tcGxldGVkIHdpdGhvdXQgYSBoYW5nXG4iKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzIxN2I1Yzg1NTFhNThlNmNmZDAwYzViZDFm
MmRhYTEwMjVmNDA4ZS4uN2QyMDM2YmU4NjE2ZmY1Mzg2N2U1ZTA3OTU2NWZkYTVhNzg4NTFlOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0NjcsNyArMjQ2Nyw2IEBACiAJCUZF
RDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8q
IExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJCMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi87IH07CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkVFNDNGQ0UxRTY2NDE3MTAw
NzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJl
YWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjA0MDUwMUFBRTY2MkQw
MEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovOyB9OwogCQlGRUZENkZDNjFENUU3
OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJp
bmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwpAQCAtNTA5Myw3ICs1MDkyLDYgQEAK
IAkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoZG9nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBpbmdQb25nU3RhY2tP
dmVyZmxvd1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rl
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBNTBENTFCOTdGNEQ5MDA5
QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHBhdGggPSBBUEkvdGVz
dHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1UaHJlYWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRT
d2FwVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb21wYXJl
QW5kU3dhcFRlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUyMUFBRUM0RUQwMEJEMjhCMCAv
KiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q29tcGFyZUFuZFN3YXBUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYw
QiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTdHJpbmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODU0LDcg
KzY4NTIsNiBAQAogCQkJCUY2OTJBODc4MDI1NTU5N0QwMUZGNjBGNyAvKiBPcGVyYXRpb25zLmgg
Ki8sCiAJCQkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovLAogCQkJ
CTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8sCi0JCQkJRkVFNDNGQ0Qx
RTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8sCiAJCQkJODY4OTE2QTkxNTVG
Mjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggKi8sCiAJCQkJMTQ3MzQxREYxREMyQ0U5NjAw
QUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmNwcCAqLywKIAkJCQkxNDczNDFEMzFEQzAyRTZE
MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUuaCAqLywKQEAgLTkzMzQsNyArOTMzMSw2IEBA
CiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUU0M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZv
cm1UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4RUYwMDMzMUI4NCAv
KiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIwMUE2
RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0
MUIyMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKaW5kZXggODdiMzUzYWEzNzky
NWNhMWUyZmE4NDExOTk3NmFkZjBiMWUwN2JhYS4uYzkxNzcwNzk1ODhmODZkNDMxYTI4YmMwNzRk
NGZlMmUzZjEzZGM0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3Bw
CkBAIC0xOTEzLDEwICsxOTEzLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAog
ICAgIExvY2sgbG9jazsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAg
ICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAg
ICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAg
ICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpA
QCAtMTkzMyw4ICsxOTMzLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAg
ICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFk
IDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAg
ICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IDAxOTk2YWY3MWFiNGYwOWViNDliNzAxMWMxN2Ri
YzkzYzQwY2U4N2EuLjkwNDY1NjQ4ODdiNmIzYTRhZmFjMzU5ZGMxMGM1MDM4NGQ3NGRlZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0xNjg1MCwxMCArMTY4NTAsMTAgQEAg
dm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVj
dG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+
PiB0aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJl
ck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAg
ICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAg
ICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xNjg3MCw4ICsxNjg3MCw4IEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgfQog
Ci0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0
aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAppbmRleCBhNGUyMWY5ZmEzY2Q0NzIxZWEyNjc1ZTA2ZTRk
NTMwYzViYTk1YjM1Li5lOWIxZjVjMmYwYmMyN2IwMjkzMTBjNTU4MTUyMGIxYjU1MjI1OTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcApA
QCAtNDYsNyArNDYsNyBAQCB2b2lkIGluaXRpYWxpemVTdXBlclNhbXBsZXIoKQogICAgIGlmICgh
T3B0aW9uczo6dXNlU3VwZXJTYW1wbGVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNyZWF0
ZVRocmVhZCgKKyAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBTdXBlciBTYW1wbGVy
IiwKICAgICAgICAgW10gKCkgewogICAgICAgICAgICAgY29uc3QgaW50IHNsZWVwUXVhbnR1bSA9
IDEwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAppbmRleCBjZWY5
OTBjYjQ4MzNhNmJiOTQ3MWJkMDhhNTA0ZTU1ZmI0N2RmNDU4Li5hZDBlY2M2OWE3N2QxNzJjZjRi
YzFlZmFjOTNkZjkzMDI3YzAwOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xp
c3QsICI6IFRocmVhZCBzdGFydGVkXG4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3JlbGF0
aXZlUHJpb3JpdHkpCi0gICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlvcml0eShjdXJyZW50VGhy
ZWFkKCksIG1fcmVsYXRpdmVQcmlvcml0eSk7CisgICAgICAgICAgICBUaHJlYWQ6OmN1cnJlbnQo
KS5jaGFuZ2VQcmlvcml0eShtX3JlbGF0aXZlUHJpb3JpdHkpOwogICAgICAgICAKICAgICAgICAg
bV9jb21waWxhdGlvblNjb3BlID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvblNjb3BlPigp
OwogICAgICAgICBtX2xvbmdMaXZlZFN0YXRlID0gc3RkOjptYWtlX3VuaXF1ZTxMb25nTGl2ZWRT
dGF0ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlz
YXNzZW1ibGVyLmNwcAppbmRleCA3ODhhNmMzNjIzNjljNThkYWQyOWE2MGEzODcxMDQ0ZTQ2NGVk
MzA1Li4yYjgyNGVjZmRlNTg5M2IyYzZiNzA2ZjQ3MDJlY2QyMjk1ZDIzNTU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIGNsYXNzIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciB7CiBwdWJsaWM6
CiAgICAgQXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkKICAgICB7Ci0gICAgICAgIGNyZWF0ZVRo
cmVhZCgiQXN5bmNocm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKKyAg
ICAgICAgVGhyZWFkOjpjcmVhdGUoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkg
eyBydW4oKTsgfSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZW5xdWV1ZShzdGQ6OnVuaXF1ZV9w
dHI8RGlzYXNzZW1ibHlUYXNrPiB0YXNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApp
bmRleCAzYWVlMzAxMDRmNTI5MWEyODc2NGE1Y2RlZTVhYThmMGNhNzJhZDMxLi43MjIzYjIwYzlk
ZmJhMTA0MzA5OGE3ODU3NGJhMjhhNjk0YzA0NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxp
emUoKQogICAgICAgICAgICAgbV9zaG91bGRTdG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSA9IHRy
dWU7CiAgICAgICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlDb25kaXRpb24ubm90aWZ5T25l
KCk7CiAgICAgICAgIH0KLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9jb2xsZWN0
Q29udGludW91c2x5VGhyZWFkKTsKKyAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFk
LT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIHZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xs
ZWN0KCkKICAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkgewotICAgICAgICBtX2NvbGxlY3RDb250aW51b3Vz
bHlUaHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRo
cmVhZCA9IFdURjo6VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiSlNDIERFQlVHIENvbnRp
bnVvdXMgR0MiLAogICAgICAgICAgICAgW3RoaXNdICgpIHsKICAgICAgICAgICAgICAgICBNb25v
dG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggZDA2NTcwMTZiZWVmOWE4OWQwNmRmMjc5NzE3ZTc3MGIxNjRh
NDcxNC4uZDY3ODM3YWZlZjEzMDFmOTY3MmY2MGVhMjljNDNmYzg1OTdkZWI5MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bh
cmFsbGVsSGVscGVyUG9vbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTY2Niw3ICs2NjcsNyBAQCBjbGFzcyBIZWFwIHsKICAgICBMb2NrIG1f
Y29sbGVjdENvbnRpbnVvdXNseUxvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29sbGVjdENvbnRpbnVv
dXNseUNvbmRpdGlvbjsKICAgICBib29sIG1fc2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3Vz
bHkgeyBmYWxzZSB9OwotICAgIFRocmVhZElkZW50aWZpZXIgbV9jb2xsZWN0Q29udGludW91c2x5
VGhyZWFkIHsgMCB9OworICAgIFJlZlB0cjxXVEY6OlRocmVhZD4gbV9jb2xsZWN0Q29udGludW91
c2x5VGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIAogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NT
dGFydFRpbWU7CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ0VuZFRpbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAppbmRleCBiODVi
NzY0OGUyZjVkMTlmYTIyZDc2M2Y3YmNkZWY4ZjQ0YzQyYzg4Li40ZmZkZjljYzRlM2MzNjA2YjFk
YTlhOTQwNzdmYzc0Yzg4NmVjMTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKQEAgLTY0LDYzICs2NCwxMyBAQAogI2luY2x1ZGUg
PHB0aHJlYWRfbnAuaD4KICNlbmRpZgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9X
UykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotLy8gV2UgdXNlIFNJR1VT
UjIgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBpbiBKYXZhU2NyaXB0Q29y
ZS4KLXN0YXRpYyBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7Ci1z
dGF0aWMgU3RhdGljTG9jayBnbG9iYWxTaWduYWxMb2NrOwotdGhyZWFkX2xvY2FsIHN0YXRpYyBz
dGQ6OmF0b21pYzxKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhKj4gdGhyZWFkTG9jYWxD
dXJyZW50VGhyZWFkIHsgbnVsbHB0ciB9OwotCi1zdGF0aWMgdm9pZCBwdGhyZWFkU2lnbmFsSGFu
ZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKLXsKLSAg
ICAvLyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRs
ZXJzIGlzIGFsbG93ZWQuCi0gICAgSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSogdGhy
ZWFkRGF0YSA9IHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5sb2FkKCk7Ci0KLSAgICBpZiAodGhy
ZWFkRGF0YS0+c3VzcGVuZGVkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpIHsKLSAg
ICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIHRoYXQgaXMgaW50ZW5k
ZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2lnc3VzcGVuZC4KLSAgICAgICAgLy8gU28gdGhpcyBo
YW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNob3VsZCBub3QgcHJvY2Vzcy4KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gV2hlbiBzaWduYWwgY29tZXMsIGZpcnN0LCB0aGUgc3lzdGVtIGNhbGxzIHNp
Z25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNpZ3N1c3BlbmQgd2lsbCBiZSByZXN1bWVkLiBTaWdu
YWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5cyBwcmVjZWRlcy4KLSAgICAgICAgLy8gU28sIHRo
ZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhhdCBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgLi4uKSB3
aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQuCi0gICAgICAgIC8v
IGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25z
L3NpZ3N1c3BlbmQuaHRtbAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWNvbnRleHRf
dCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpOwotI2lm
IENQVShQUEMpCi0gICAgdGhyZWFkRGF0YS0+c3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSAqdXNl
ckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7Ci0jZWxzZQotICAgIHRocmVhZERhdGEtPnN1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OwotI2VuZGlm
Ci0KLSAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBp
cyBzdXNwZW5kZWQuCi0gICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rp
b24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhhbmRsZXIu
Ci0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9m
dW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMwotICAgIC8vCi0gICAgLy8g
QW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0IHN1c3Bl
bmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KLSAgICAvLyBodHRwOi8vcHVi
cy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9jaGFwMDQu
aHRtbCN0YWdfMDRfMTEKLSAgICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+c2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7Ci0KLSAgICAvLyBSZWFjaGluZyBoZXJlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlzIGNvbmZpZ3VyZWQgYnkgc2ln
YWN0aW9uJ3Mgc2FfbWFzaykuCi0gICAgLy8gU28gYmVmb3JlIGNhbGxpbmcgc2lnc3VzcGVuZCwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBpcyBkZWZlcnJlZC4gVGhpcyBl
bnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJlY3Vyc2l2ZWx5LgotICAg
IHNpZ3NldF90IGJsb2NrZWRTaWduYWxTZXQ7Ci0gICAgc2lnZmlsbHNldCgmYmxvY2tlZFNpZ25h
bFNldCk7Ci0gICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0LCBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lKTsKLSAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0KTsKLQotICAgIC8vIEFs
bG93IHJlc3VtZSBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgcmVzdW1lZC4KLSAg
ICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+c2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci19Ci0j
ZW5kaWYgLy8gVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLQog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCi11c2lu
ZyBUaHJlYWQgPSBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOwordXNpbmcgSlNUaHJlYWQgPSBNYWNo
aW5lVGhyZWFkczo6SlNUaHJlYWQ7CiAKIGNsYXNzIEFjdGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdl
cjsKIHN0YXRpYyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXImIGFjdGl2ZU1hY2hpbmVUaHJl
YWRzTWFuYWdlcigpOwpAQCAtMTk0LDQxICsxNDQsMTMgQEAgTWFjaGluZVRocmVhZHM6On5NYWNo
aW5lVGhyZWFkcygpCiAgICAgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUobV90aHJlYWRTcGVjaWZp
Y0Zvck1hY2hpbmVUaHJlYWRzKTsKIAogICAgIExvY2tIb2xkZXIgcmVnaXN0ZXJlZFRocmVhZHNM
b2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgZm9yIChUaHJlYWQqIHQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyB0OykgewotICAgICAgICBUaHJlYWQqIG5leHQgPSB0LT5uZXh0Owor
ICAgIGZvciAoSlNUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0OykgeworICAgICAg
ICBKU1RocmVhZCogbmV4dCA9IHQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0OwogICAgICAgICB0
ID0gbmV4dDsKICAgICB9CiB9CiAKLXN0YXRpYyBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSog
dGhyZWFkRGF0YSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZFNwZWNpZmlj
PE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhLCBDYW5CZUdDVGhyZWFkOjpUcnVlPj4gdGhyZWFk
RGF0YTsKLSAgICByZXR1cm4gdGhyZWFkRGF0YS5nZXQoKTsKLX0KLQotTWFjaGluZVRocmVhZHM6
OlRocmVhZDo6VGhyZWFkKFRocmVhZERhdGEqIHRocmVhZERhdGEpCi0gICAgOiBkYXRhKHRocmVh
ZERhdGEpCi17Ci0gICAgQVNTRVJUKHRocmVhZERhdGEpOwotfQotCi1UaHJlYWQqIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKQotewotICAgIHJldHVybiBu
ZXcgVGhyZWFkKHRocmVhZERhdGEoKSk7Ci19Ci0KLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVh
ZDo6b3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0Ci17Ci0jaWYg
T1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgIHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVh
ZCA9PSBvdGhlcjsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICByZXR1cm4gISFwdGhyZWFkX2Vx
dWFsKGRhdGEtPnBsYXRmb3JtVGhyZWFkLCBvdGhlcik7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3
YXkgdG8gY29tcGFyZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCiB2b2lk
IE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKIHsKICAgICBpZiAodGhyZWFkU3Bl
Y2lmaWNHZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKSkgewpAQCAtMjM5LDcg
KzE2MSw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZUZv
ckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkID0gbmV3IEpTVGhyZWFkKHRo
aXMpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhy
ZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011
dGV4KTsKQEAgLTI0OCwxMiArMTcwLDEyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJl
bnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVhZHMgPSB0aHJlYWQ7CiB9CiAKLVRocmVh
ZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKK0pTVGhy
ZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKQogewog
ICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIFBsYXRm
b3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAg
Zm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkID09IHBsYXRmb3JtVGhyZWFk
KQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgZm9yIChK
U1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSA9PSBpZCkKICAg
ICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQogCkBAIC0yODMsMjIgKzIwNSwyMSBAQCB2
b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWQodm9p
ZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgICAgIG1hY2hpbmVUaHJl
YWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpKTsKKyAgICAg
ICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElmRm91bmQoY3VycmVudFRocmVhZCgpKTsK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFkPgotdm9pZCBNYWNo
aW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRo
cmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoVGhyZWFkSWRl
bnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011
dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOwotICAgIGlmICgqdCA9
PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsKKyAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICBtX3JlZ2lzdGVyZWRU
aHJlYWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsKICAgICAgICAgZGVsZXRlIHQ7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsK
KyAgICAgICAgSlNUaHJlYWQqIGxhc3QgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgICAgICBm
b3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0OyB0OyB0ID0gdC0+bmV4dCkgewotICAg
ICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAgICAgICAgICBpZiAodC0+
dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAgICAgIGxhc3QtPm5leHQgPSB0LT5uZXh0
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzIwLDE4MiArMjQx
LDIyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRk
KGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3VycmVudFRocmVhZFN0YXRlLnN0YWNrT3Jp
Z2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKE1hY2hpbmVUaHJlYWRzKikKKyAgICA6IG5leHQobnVsbHB0cikKKyAgICAsIG1fdGhyZWFk
KFdURjo6VGhyZWFkOjpjdXJyZW50KCkpCiB7CiAgICAgYXV0byBzdGFja0JvdW5kcyA9IHd0ZlRo
cmVhZERhdGEoKS5zdGFjaygpOwotICAgIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3Jt
VGhyZWFkKCk7Ci0gICAgc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7Ci0gICAgc3Rh
Y2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgQVNTRVJU
KHBsYXRmb3JtVGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKLSAgICBib29sIGlzU3Vj
Y2Vzc2Z1bCA9Ci0gICAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBH
ZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksCi0gICAgICAgICAgICAmcGxh
dGZvcm1UaHJlYWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOwotICAg
IFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpICYmICFP
UyhEQVJXSU4pCi0gICAgdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkLnN0b3JlKHRoaXMpOwotCi0g
ICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25maWd1cmF0aW9uLgot
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplU2lnbmFsSGFuZGxlcjsKLSAgICBz
dGQ6OmNhbGxfb25jZShpbml0aWFsaXplU2lnbmFsSGFuZGxlciwgW10gewotICAgICAgICAvLyBJ
bnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIu
Ci0gICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRo
ZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9u
OwotICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBzaWdhZGRz
ZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLQotICAgICAgICBh
Y3Rpb24uc2Ffc2lnYWN0aW9uID0gcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lOwot
ICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKLSAgICAg
ICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDApOwotICAgIH0p
OwotCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgmbWFzayk7Ci0gICAgc2ln
YWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBwdGhyZWFkX3NpZ21h
c2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLQotICAgIHNlbV9pbml0KCZzZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MuICovIDAsIC8q
IEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwotI2VuZGlmCisgICAgbV9z
dGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKKyAgICBtX3N0YWNrRW5kID0gc3RhY2tC
b3VuZHMuZW5kKCk7CiB9CiAKLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0
YSgpCitzaXplX3QgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3RlcnMoSlNUaHJl
YWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0gICAgQ2xvc2VI
YW5kbGUocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1Mo
REFSV0lOKQotICAgIHNlbV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSNl
bmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsK
KyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdzKTsKIH0KIAotYm9vbCBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAg
IGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQocGxhdGZvcm1UaHJlYWQpOwot
ICAgIHJldHVybiByZXN1bHQgPT0gS0VSTl9TVUNDRVNTOwotI2VsaWYgT1MoV0lORE9XUykKLSAg
ICBib29sIHRocmVhZElzU3VzcGVuZGVkID0gKFN1c3BlbmRUaHJlYWQocGxhdGZvcm1UaHJlYWRI
YW5kbGUpICE9IChEV09SRCktMSk7Ci0gICAgQVNTRVJUKHRocmVhZElzU3VzcGVuZGVkKTsKLSAg
ICByZXR1cm4gdGhyZWFkSXNTdXNwZW5kZWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSAhPSBwbGF0Zm9ybVRocmVh
ZCwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJlbnQgdGhyZWFk
IGl0c2VsZi4iKTsKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9y
IHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0g
ICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4K
LSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFk
cyBBIGFuZCBCLgotICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBh
dHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFu
ZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCi0gICAgICAgIC8vIElu
IHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAgICAgTG9ja0hvbGRlciBs
b2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoIXN1c3BlbmRDb3VudCkgewotICAg
ICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9zaWdxdWV1
ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwgaGFuZGxl
ci4KLSAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0Zm9ybXMs
IGxpa2UgTGludXguCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBzdG9y
ZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNpZ25hbCBo
YW5kbGVyLgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwot
ICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlv
biBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRv
bmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1vcnlfb3JkZXJf
cmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytzdXNwZW5kQ291bnQ7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3BlbmQgdGhyZWFk
cyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6cmVzdW1lKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFkX3Jlc3VtZShw
bGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIFJlc3VtZVRocmVhZChwbGF0
Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgewotICAgICAgICAv
LyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVk
IGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxT
aWduYWxMb2NrKTsKLSAgICAgICAgaWYgKHN1c3BlbmRDb3VudCA9PSAxKSB7Ci0gICAgICAgICAg
ICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRo
ZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
IGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBp
dHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KLSAgICAgICAgICAgIC8vIFRoZXJlIGFy
ZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Ig
c3VzcGVuZCBhbmQgcmVzdW1lLgotICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWdu
YWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgot
ICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3Bl
bmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUg
dXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9j
YWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgot
ICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3Bl
bmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgICAgICBpZiAocHRo
cmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JD
SCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZW1fd2FpdCgmc2VtYXBo
b3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5z
dXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhl
IGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRlZC5zdG9yZShm
YWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLS1z
dXNwZW5kQ291bnQ7Ci0gICAgfQotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHJlc3VtZSB0
aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi1zaXplX3QgTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJlZ2lz
dGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzJiBy
ZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShYODYpCi0gICAg
dW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsKLSAgICB0aHJl
YWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUo
WDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09V
TlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2
NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQUENfVEhSRUFE
X1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhS
RUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQ
UENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZv
ciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5zaWduZWQgdXNl
cl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vsc2UKLSNlcnJv
ciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVybl90IHJlc3Vs
dCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVhZF9zdGF0
ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1Mp
IHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9Q
UkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYXZhU2NyaXB0
IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVy
bmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5uaW5n
IGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7Ci0gICAg
ICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6ZW9mKHVpbnRw
dHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQotICAgIHJlZ3Mu
Q29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MOwotICAgIEdl
dFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAgICByZXR1cm4g
c2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNf
XykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsK
LSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMpOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJpYnV0ZSk7Ci0j
aWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BFTkJTRCkKLSAg
ICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAgcHRocmVhZF9h
dHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgotI2Vs
c2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVyIFBP
U0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwotICAgIHB0aHJl
YWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgot
ICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aHJlYWQgcmVn
aXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi12b2lkKiBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAordm9pZCogTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB7
CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoKE9TKEZSRUVCU0QpIHx8IGRlZmlu
ZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0
OjpzdGFja1BvaW50ZXIocmVncyk7CkBAIC01MTksNyArMjgwLDcgQEAgdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKIH0KIAog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhy
ZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBP
UyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJ
QkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBA
IC01MjgsNyArMjg5LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lz
dGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAor
dm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9p
bnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJF
RUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAtNTM3LDcgKzI5OCw3IEBAIHZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNv
bnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lz
dGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJl
Z2lzdGVyczo6bGxpbnRQQygpIGNvbnN0CiB7CiAgICAgLy8gTExJbnQgdXNlcyByZWdUNCBhcyBQ
Qy4KICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpCkBAIC01NDgsMTYgKzMwOSw2IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRz
OjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogfQogI2VuZGlmIC8vIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0
YTo6ZnJlZVJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAg
ICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0
ZXJzLnJlZ3M7Ci0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJ
TikgJiYgISgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklU
KSkKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmcmVncy5hdHRyaWJ1dGUpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0ocmVncyk7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSBpbnQgb3NS
ZWRab25lQWRqdXN0bWVudCgpCiB7CiAgICAgaW50IHJlZFpvbmVBZGp1c3RtZW50ID0gMDsKQEAg
LTU3MywxNyArMzI0LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQo
KQogICAgIHJldHVybiByZWRab25lQWRqdXN0bWVudDsKIH0KIAotc3RkOjpwYWlyPHZvaWQqLCBz
aXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpjYXB0dXJlU3RhY2sodm9pZCogc3Rh
Y2tUb3ApCitzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWlu
dGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tCYXNlKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrQmFzZSk7CiAgICAgY2hhciogZW5kID0g
Yml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQq
KT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrVG9wKSkpOwogICAgIEFTU0VSVChi
ZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5kV2l0aFJlZFpvbmUgPSBlbmQgKyBvc1JlZFpv
bmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKSA9
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKTsKIAotICAgIGlm
IChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQotICAgICAgICBlbmRXaXRoUmVkWm9uZSA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0VuZCk7CisgICAgaWYgKGVuZFdpdGhSZWRa
b25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJldF9j
YXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVuZFdp
dGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhSZWRa
b25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzM2Nyw5IEBAIHN0YXRpYyB2b2lkIGNvcHlNZW1vcnko
dm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBzaXplKQogLy8gc2lnbmlmaWNhbnQg
cGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayBpcyBvbmx5IGNhbGxl
ZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAvLyBvcGVyYXRpb24uIEFzIHRoZSBoZWFwIGlz
IGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRoZSBzdGFjayB0aGUgcGVyZm9ybWFuY2UgaGl0
IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNr
KFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBz
aXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJl
YWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkK
IHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAgSlNUaHJlYWQ6OlJlZ2lz
dGVycyByZWdpc3RlcnM7CiAgICAgc2l6ZV90IHJlZ2lzdGVyc1NpemUgPSB0aHJlYWQtPmdldFJl
Z2lzdGVycyhyZWdpc3RlcnMpOwogICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBzdGFjayA9
IHRocmVhZC0+Y2FwdHVyZVN0YWNrKHJlZ2lzdGVycy5zdGFja1BvaW50ZXIoKSk7CiAKQEAgLTYz
MSw4ICszODIsNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
ayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplXwogICAgIGlmIChjYW5Db3B5KQog
ICAgICAgICBjb3B5TWVtb3J5KHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXIpICsgKnNpemUsIHN0
YWNrLmZpcnN0LCBzdGFjay5zZWNvbmQpOwogICAgICpzaXplICs9IHN0YWNrLnNlY29uZDsKLQot
ICAgIHRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogfQogCiBib29sIE1hY2hpbmVU
aHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2
b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQpAQCAtNjQ0LDM2ICsz
OTMsMzQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKIAogICAgICpzaXplID0gMDsKIAotICAg
IFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7
CisgICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IGN1cnJlbnRUaHJlYWQoKTsKICAgICBpbnQgbnVt
YmVyT2ZUaHJlYWRzID0gMDsgLy8gVXNpbmcgMCB0byBkZW5vdGUgdGhhdCB3ZSBoYXZlbid0IGNv
dW50ZWQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHlldC4KICAgICBpbnQgaW5kZXggPSAxOwotICAg
IFRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKKyAgICBKU1RocmVhZCogdGhy
ZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAotICAgIFRocmVhZCogcHJldmlvdXNUaHJlYWQg
PSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJl
YWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRocmVhZC0+c3VzcGVuZCgpOworICAg
IEpTVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51bGxwdHI7CisgICAgZm9yIChKU1RocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7CisgICAgICAg
IGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAjaWYgT1MoREFSV0lOKQotICAgICAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgIGlm
ICghbnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVGhyZWFkKiBj
b3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRocmVhZDsgY291bnRl
ZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCisgICAgICAgICAgICAgICAgICAgIGZvciAo
SlNUaHJlYWQqIGNvdW50ZWRUaHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhy
ZWFkOyBjb3VudGVkVGhyZWFkID0gY291bnRlZFRocmVhZC0+bmV4dCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mVGhyZWFkcysrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBSZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQg
dGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3IgbG9nZ2luZy4KLSAgICAgICAgICAgICAgICBr
ZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVh
ZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKwor
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwog
CiAgICAgICAgICAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLAotICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdl
IGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhy
ZWFkIFslZC8lZDogJXBdIHBsYXRmb3JtVGhyZWFkICVwLiIsCi0gICAgICAgICAgICAgICAgICAg
IGVycm9yLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSkpOworICAgICAgICAgICAgICAgICAgICAi
SmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJl
YWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIGlkICVwLiIsCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5lcnJvcigpLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+dGhyZWFkSUQoKSkpOwogCiAgICAgICAgICAg
ICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVhZCBvbiB0aGUgdGhyZWFkc1RvQmVEZWxldGVk
IGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBkZWxldGUgaXQgaGVyZSBi
ZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVyCiAgICAgICAgICAgICAgICAgLy8gdGhyZWFk
cywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRpbmcgdGhlIEMgaGVhcCBsb2NrIHdoaWNoCiAg
ICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3IgZGVsZXRpbmcgdGhlIGludmFsaWQgdGhyZWFk
LiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAgICAgICAgIC8vIGRlZmVyIHRoZSBkZWxldGlv
biB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBhbGwgdGhyZWFkcy4KLSAgICAgICAgICAgICAg
ICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CisgICAgICAgICAgICAgICAgSlNU
aHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgICAgICAgICAgdGhyZWFk
LT5uZXh0ID0gdGhyZWFkc1RvQmVEZWxldGVkOwogICAgICAgICAgICAgICAgIHRocmVhZHNUb0Jl
RGVsZXRlZCA9IHRocmVhZDsKIApAQCAtNjg3LDI1ICs0MzQsMjUgQEAgYm9vbCBNYWNoaW5lVGhy
ZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCogYnVmZmUKICNlbHNlCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZUaHJlYWRz
KTsKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShwcmV2aW91c1RocmVhZCk7Ci0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBwcmV2aW91
c1RocmVhZCA9IHRocmVhZDsKICAgICAgICAgdGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgIH0K
IAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7
IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCAhPSBwbGF0Zm9y
bVRocmVhZCkKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBpZiAodGhyZWFkLT50
aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2sodGhy
ZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5l
eHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChK
U1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAg
ICAgICAgICAgIHRocmVhZC0+cmVzdW1lKCk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRo
cmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKLSAgICAgICAgVGhyZWFkKiBu
ZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IHRo
cmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJl
YWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVh
ZCA9IG5leHRUaHJlYWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YWNoaW5lU3RhY2tNYXJrZXIuaAppbmRleCBkMTk2ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3
OTk0NDg3ZjIyLi45MTk3YzQ0MDhjZTJmZDRlZTZhYTNkMTRhN2M2OWU2ZjhjYTEwOTQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAt
MjIsMjUgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaHJlYWQuaCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNp
ZmljLmg+CiAKLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lO
KQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcg
c2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRfdCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUg
b24gRnJlZUJTRC4KLS8vIFRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1D
VVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2FuIGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVC
U0QgMTAueCBnb2VzIEVPTC4KLS8vIGh0dHBzOi8vYnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9z
aG93X2J1Zy5jZ2k/aWQ9MjA3MDc5Ci0jaWYgT1MoRlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4
dC5oPgotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9j
a1NldDsKQEAgLTY0LDEzICs1MSwxMCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEN1cnJlbnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0
byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11
bHRpcGxlIHRocmVhZHMuCiAKLSAgICBjbGFzcyBUaHJlYWREYXRhIHsKKyAgICBjbGFzcyBKU1Ro
cmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAg
ICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+VGhyZWFkRGF0YSgpOwotCi0gICAgICAgIHN0
YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIEpTVGhy
ZWFkKE1hY2hpbmVUaHJlYWRzKik7CiAKICAgICAgICAgc3RydWN0IFJlZ2lzdGVycyB7CiAgICAg
ICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXIoKSBjb25zdDsKQEAgLTc5LDg0ICs2Myw0MCBAQCBj
bGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgICAgICB2b2lkKiBpbnN0cnVjdGlvblBvaW50
ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25zdDsKICNlbmRpZiAv
LyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICAKLSNpZiBPUyhEQVJXSU4p
IHx8IE9TKFdJTkRPV1MpCi0gICAgICAgICAgICB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IE1h
Y2hpbmVDb250ZXh0OjpQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIChPUyhGUkVFQlNEKSB8fCBk
ZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICB1c2luZyBQbGF0
Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgICAg
ICAgICBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewotICAgICAgICAgICAgICAgIHB0aHJlYWRf
YXR0cl90IGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIH07Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB0
aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLQotICAgICAg
ICAgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKKyAgICAgICAgICAgIFdURjo6UGxhdGZvcm1S
ZWdpc3RlcnMgcmVnczsKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHN1c3BlbmQoKTsKLSAg
ICAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3Rl
cnMmKTsKLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYpOworICAgICAgICBF
eHBlY3RlZDx2b2lkLCBUaHJlYWQ6OlBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCkgeyBy
ZXR1cm4gbV90aHJlYWQtPnN1c3BlbmQoKTsgfQorICAgICAgICB2b2lkIHJlc3VtZSgpIHsgbV90
aHJlYWQtPnJlc3VtZSgpOyB9CisgICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJz
JiByZWdzKTsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2
b2lkKiBzdGFja1RvcCk7CiAKLSAgICAgICAgUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQ7
Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogc3RhY2tFbmQ7Ci0jaWYg
T1MoV0lORE9XUykKLSAgICAgICAgSEFORExFIHBsYXRmb3JtVGhyZWFkSGFuZGxlOwotI2VsaWYg
VVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgICAgICBzZW1fdCBzZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lOwotICAgICAgICBtY29udGV4dF90IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0
OwotICAgICAgICBpbnQgc3VzcGVuZENvdW50IHsgMCB9OwotICAgICAgICBzdGQ6OmF0b21pYzxi
b29sPiBzdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsKLQotICAgIGNsYXNzIFRo
cmVhZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBUaHJlYWQo
VGhyZWFkRGF0YSopOwotCi0gICAgcHVibGljOgotICAgICAgICB1c2luZyBSZWdpc3RlcnMgPSBU
aHJlYWREYXRhOjpSZWdpc3RlcnM7Ci0KLSAgICAgICAgc3RhdGljIFRocmVhZCogY3JlYXRlRm9y
Q3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQbGF0Zm9y
bVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUGxh
dGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQot
Ci0gICAgICAgIGJvb2wgc3VzcGVuZCgpIHsgcmV0dXJuIGRhdGEtPnN1c3BlbmQoKTsgfQotICAg
ICAgICB2b2lkIHJlc3VtZSgpIHsgZGF0YS0+cmVzdW1lKCk7IH0KLSAgICAgICAgc2l6ZV90IGdl
dFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgcmV0dXJuIGRhdGEtPmdldFJlZ2lzdGVycyhy
ZWdzKTsgfQotICAgICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IGRh
dGEtPmZyZWVSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXpl
X3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkgeyByZXR1cm4gZGF0YS0+Y2FwdHVyZVN0
YWNrKHN0YWNrVG9wKTsgfQotCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBwbGF0Zm9y
bVRocmVhZCgpIHsgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkOyB9Ci0gICAgICAgIHZvaWQq
IHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrQmFzZTsgfQotICAgICAgICB2
b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrRW5kOyB9CisgICAgICAg
IFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFk
LT5pZCgpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
Y2tCYXNlOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyByZXR1cm4gbV9zdGFj
a0VuZDsgfQogCi0gICAgICAgIFRocmVhZCogbmV4dDsKLSAgICAgICAgVGhyZWFkRGF0YSogZGF0
YTsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQ7CisgICAgICAgIFJlZjxXVEY6OlRocmVhZD4gbV90
aHJlYWQ7CisgICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOworICAgICAgICB2b2lkKiBtX3N0YWNr
RW5kOwogICAgIH07CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9yZWdpc3RlcmVk
VGhyZWFkc011dGV4OyB9Ci0gICAgVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXguaXNMb2Nr
ZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhyZWFkKiBtYWNoaW5l
VGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9CisgICAgSlNU
aHJlYWQqIG1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCk7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJS
b3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRlJik7CiAKLSAgICB2
b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCosIHZvaWQqLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCopOworICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJlYWQq
LCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29sIHRyeUNvcHlPdGhl
clRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgcmVt
b3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFk
PgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCk7CisgICAgdm9p
ZCByZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAgICAgTG9jayBtX3Jl
Z2lzdGVyZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwor
ICAgIEpTVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdURjo6VGhyZWFkU3BlY2lm
aWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgzM2QyZDIzMmI4YTljZDZm
M2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDljZTcyMTMzYzQxY2RkMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01OCw3ICs1OCw3IEBAIEF0
b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNTdGF0czo6SUNTdGF0cygp
CiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAgW3RoaXNdICgpIHsKICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04NCw3ICs4NCw3IEBAIElD
U3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CiAgICAg
fQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkKTsKKyAgICBtX3Ro
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0YXRzOjphZGQoY29uc3Qg
SUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lD
U3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGU3NWNm
ZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2UxZTkyY2U5N2RkMWQ5NTA4
OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBA
IC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRlOgogCiAgICAgU3BlY3Ry
dW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBt
X3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBMb2NrIG1fbG9jazsK
ICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0b3AgeyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA1OWI2MjczZGVhYjFkZDU5ZmQ3NTk0MWNkNmU2
MTE0OTI4NzkyNDcwLi43NWFjNjBkOWIzNDYwODFjYjY3MDY5ZWRlZDM1Mjg1NDNmYmQzZDg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRlKiBleGVjKQog
ICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29sIGRpZFN0YXJ0ID0gZmFs
c2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisg
ICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0Mg
QWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9jaywgJmRpZFN0YXJ0Q29u
ZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1hbmRMaW5lIGNvbW1hbmRM
aW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhyZWFkLT5kZXRhY2go
KTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZGlkU3RhcnRM
b2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0YXJ0VGltZW91dFRocmVh
ZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IHRpbWVvdXQgc3RyaW5n
IGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgIiBi
dXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQuXG4iKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRocmVhZE1haW4sIDAsICJq
c2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKHRpbWVvdXRU
aHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIxZmUxMjdlOGI3MzFmYjUz
YjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUyNTRhOGUxZWYxM2RhNWM0
MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTEw
OSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBsb2NrQ291bnQpCiAgICAg
ICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRocmVhZCA9IGN1cnJlbnRU
aHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpOwogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVhZCA9IHRydWU7CiAgICAg
QVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5o
CmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5ZGJlNzQuLmFhN2RkOGQ1
ZmY2OTA5Mjg0MDgwMTNkOWM0OTI0MGFhZjg0MTM0NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3MgSlNMb2NrIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0qIHZtKCkgeyByZXR1cm4g
bV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVh
ZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFkPj4gb3duZXJUaHJlYWQo
KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJlYWQpCiAgICAgICAgICAg
ICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsgcmV0dXJuIG1faGFz
T3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7IH0KKyAgICBi
b29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9oYXNPd25lclRocmVh
ZCAmJiBtX293bmVyVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKTsgfQogCiAgICAgdm9pZCB3
aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBjbGFzcyBKU0xvY2sgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAgLy8gZGlmZmVyZW50IHRo
cmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8gcmFjZXMuCiAgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkwNDIjYzYKICAgICBi
b29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRocmVhZElkZW50aWZpZXIgbV9v
d25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVyVGhyZWFkOwogICAgIGludHB0
cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKICAgICBib29s
IG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQx
OTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZgot
Ci0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNpbmNs
dWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPG1hY2gv
dGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJXSU4pCi10eXBlZGVmIG1hY2hf
cG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykKLXR5cGVkZWYgRFdPUkQg
UGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10eXBlZGVmIHB0aHJlYWRfdCBQ
bGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0gICAgCi1pbmxpbmUgUGxhdGZv
cm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAg
cmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9zZWxmKCkpOwotI2VsaWYgT1Mo
V0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7Ci0jZWxpZiBVU0UoUFRI
UkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4NDkzYjMzYmM4OWZlM2ZhZDk4
YTlkLi5iMWUwMTU0MzgzN2E4ZjgzYTk4NGIzMjNjZjhmZTlmZDljZDM5MTgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcApAQCAt
MTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAgICBib29sIGlzVmFsaWRGcmFt
ZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVpbnQ4X3QqIGZwQ2FzdCA9IGJp
dHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6
OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RI
ZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4
dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0gbV92
bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVhZHNM
b2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewogICAgICAgICAgICAgdWlu
dDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRocmVhZC0+c3RhY2tCYXNl
KCkpOwogICAgICAgICAgICAgdWludDhfdCogc3RhY2tMaW1pdCA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPih0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Rh
Y2tCYXNlKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0
ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUmVmUHRyPFNhbXBsaW5nUHJvZmlsZXI+IHByb2ZpbGVyID0gdGhpczsKLSAgICBt
X3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoImpzYy5zYW1wbGluZy1wcm9maWxlci50
aHJlYWQiLCBbcHJvZmlsZXJdIHsKKyAgICBtX3RocmVhZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNy
ZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0gewogICAgICAg
ICBwcm9maWxlci0+dGltZXJMb29wKCk7CiAgICAgfSk7CiB9CkBAIC0zNDQsNyArMzQ0LDcgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgTG9ja0hvbGRlciBjb2RlQmxvY2tTZXRM
b2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tI
b2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5n
bGV0b24oKS5nZXRMb2NrKCkpOwogCi0gICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhl
Y3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGF1dG8gZGlkU3VzcGVuZCA9IG1fanNj
RXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CiAg
ICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdlIGNhbid0
IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCiAgICAgICAgICAg
ICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQsMTMgKzM1NCwxMiBA
QCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJ
bnQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVy
czsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVycyBy
ZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdldFJlZ2lz
dGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFtZSA9IHJlZ2lzdGVy
cy5mcmFtZVBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0aWNfY2Fz
dDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9
IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBsbGludFBD
ID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRo
cmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdyZSBwYXJz
aW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgKaW5kZXggYjQ0YTNiYTQ3ZjllNjc2OGFkNDM3YmIxOGUwYThhYmM3OTVi
ZDZjZi4uZGQ0MjAwY2YxNWRjMDg1NTBhZjNjMjk1YWY3NzY5ODRkYTYwN2QxMCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaApAQCAtMTk1
LDggKzE5NSw4IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
ZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsKICAgICBMb2NrIG1f
bG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllcjsKLSAgICBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3RocmVhZElkZW50aWZpZXI7CisgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkKiBt
X2pzY0V4ZWN1dGlvblRocmVhZDsKICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lz
U2h1dERvd247CiAgICAgYm9vbCBtX25lZWRzUmVwb3J0QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5
ZGM5YTQ5NWY0NmUuLmU5N2MzMTg1ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZN
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPFZNPiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2
ZW50KENvZGVCbG9jayosIGNvbnN0IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwog
Ci0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8
UmVmUHRyPFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5v
d25lclRocmVhZCgpOyB9CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2
M2Y4NTNkNDYzYjcyZjMzZTQ2NGI3YjVhNTlkMDExOTM4ZjY5Li4yNzJjNGRlZmE4NTVmYzM5YjBj
ZDQxMDFlNWU3ZTRiMmJkYzBkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8
Vk0qLCBTdGFja0JvdW5kcz4sIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAg
ICAgICAgICAgICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAv
LyBUcnkgbmV4dCBWTS4KICAgICAgICAgfQogCi0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6
OlRocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVU
aHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAg
Zm9yIChNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1hY2hpbmVUaHJlYWRzLnRo
cmVhZHNMaXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhy
ZWFkLT5uZXh0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPnN0YWNrQmFz
ZSgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tFbmQoKSk7CiAg
ICAgICAgICAgICBpZiAoc3RhY2tQb2ludGVyIDw9IHRocmVhZC0+c3RhY2tCYXNlKCkgJiYgc3Rh
Y2tQb2ludGVyID49IHRocmVhZC0+c3RhY2tFbmQoKSkgewpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZv
aWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICpt
X3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJl
YWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAg
ICAgICAgc2lnbmFsVGhyZWFkKG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKSwgU0lHVVNSMSk7
CisgICAgICAgICAgICAgICAgb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLT5zaWduYWwoU0lH
VVNSMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQ5Myw3
ICs0OTMsNyBAQCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6OkV2ZW50VHlwZSBldmVu
dFR5cGUpCiAgICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3QgYmxvY2suCiAgICAgICAgIFJl
ZlB0cjxTaWduYWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5ldyBTaWduYWxTZW5kZXIodm0o
KSwgZXZlbnRUeXBlKSk7CiAgICAgICAgIGFkZFNpZ25hbFNlbmRlcihzZW5kZXIuZ2V0KCkpOwot
ICAgICAgICBjcmVhdGVUaHJlYWQoImpzYy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3Nl
bmRlcl0geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50
aHJlYWQiLCBbc2VuZGVyXSB7CiAgICAgICAgICAgICBzZW5kZXItPnNlbmQoKTsKICAgICAgICAg
fSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0hlYXBW
ZXJpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNw
cAppbmRleCA1NDI2ZDk4ZGU2NjJjOWE0M2FmY2NiYTFiYjYwNTRiOWY5ODgwZDhhLi40Mjg2YjIz
ZTAyNTA5YWFkNDdkMGI5ZDRmYmZjZjQ5ZmViODkxYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSGVh
cFZlcmlmaWVyOjpwcmludFZlcmlmaWNhdGlvbkhlYWRlcigpCiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9oZWFwLT5jb2xsZWN0aW9uU2NvcGUoKSk7CiAgICAgQ29sbGVjdGlvblNjb3BlIHNjb3BlID0g
Y3VycmVudEN5Y2xlKCkuc2NvcGU7CiAgICAgTW9ub3RvbmljVGltZSBnY0N5Y2xlVGltZXN0YW1w
ID0gY3VycmVudEN5Y2xlKCkudGltZXN0YW1wOwotICAgIGRhdGFMb2coIlZlcmlmeWluZyBoZWFw
IGluIFtwIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiLCB0IiwgY3VycmVudFRocmVhZCgpLCAi
XSB2bSAiLAorICAgIGRhdGFMb2coIlZlcmlmeWluZyBoZWFwIGluIFtwIiwgZ2V0Q3VycmVudFBy
b2Nlc3NJRCgpLCAiLCB0IiwgVGhyZWFkOjpjdXJyZW50KCksICJdIHZtICIsCiAgICAgICAgIFJh
d1BvaW50ZXIobV9oZWFwLT52bSgpKSwgIiBvbiAiLCBzY29wZSwgIiBHQyBAICIsIGdjQ3ljbGVU
aW1lc3RhbXAsICJcbiIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBmNThmMTliNTZkMzNjYjg4YTZmYjQ5ZDZlNWYzYjYwOTc4NmJjMGNjLi43NDE0
OGE4MDE0YjJlZTBjZTUxMTI2NmNiYTRhOGE3NGVlZDI2ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMyNSw4ICszMjUsOCBAQAogCQlBOEE0NzQ0NTE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJp
bmcuY3BwICovOyB9OwogCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCAqLzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi87IH07CisJCUE4QTQ3NDQ5MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEhvbGRlclB0aHJlYWRzLmggKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJCUE4
QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRpbmcuaCAqLzsgfTsKIAkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Z1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi87
IH07CkBAIC03MjgsOCArNzI4LDggQEAKIAkJQThBNDczMkQxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlN0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZTdHJp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdU
RlN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRjE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRp
ZmllckRhdGFQdGhyZWFkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkSWRlbnRp
ZmllckRhdGFQdGhyZWFkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzMz
MDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkSG9sZGVyUHRocmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhy
ZWFkSG9sZGVyUHRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcz
MzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQcmltaXRpdmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTY0LDggKzExNjQsOCBAQAogCQkJCTU1
OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8sCiAJ
CQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLywKIAkJCQlB
OEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8s
Ci0JCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuY3BwICovLAotCQkJCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmggKi8sCisJCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLywKKwkJCQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0
MTIzRkYgLyogVGhyZWFkaW5nLmNwcCAqLywKIAkJCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkaW5nLmggKi8sCiAJCQkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCAqLywKQEAgLTE2MTgsNyArMTYxOCw3IEBACiAJCQkJMUNDREIxNEYx
RTU2Njg5ODAwNkM3M0MwIC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThBNDc0
NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ0RDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKQEAgLTE4NDMsNyArMTg0Myw3IEBACiAJ
CQkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDMTgxQzdGMUQzMDc4REEwMEY1RkExNiAvKiBUZXh0QnJlYWtJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM5NjFEMzA4MDBBMDBGNUZBMTYgLyogVGV4
dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3
NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRFMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2
QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNw
ZWVkVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNw
cAppbmRleCBjYjFkMTAxZTg1NjUyOWU4YWFlYTZhYmY2MGVjMzhlYTBiOGRkZTcyLi40YzNiZDU0
ZTM5Mjg3NWM2NTU3NjYyNzIwZGI4YzBiOTlhYmMzYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2JlbmNo
bWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcApAQCAtNzksMTQgKzc5LDE0IEBAIHZvaWQgcnVu
VGVzdCgKICAgICBDb25kaXRpb25UeXBlIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlvblR5
cGUgZnVsbENvbmRpdGlvbjsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1l
clRocmVhZHM7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsK
KyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKKyAgICBWZWN0b3I8
UmVmUHRyPFRocmVhZD4+IHByb2R1Y2VyVGhyZWFkczsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4g
cmVjZWl2ZWQ7CiAgICAgTG9ja1R5cGUgcmVjZWl2ZWRMb2NrOwogICAgIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+
IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkNvbnN1bWVyIHRocmVhZCIs
CiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTk4
LDcgKzk4LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVt
cHR5Q29uZGl0aW9uLCBsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVl
ID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCks
ICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0
ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUo
KSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICFzaG91bGRDb250aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
aG91bGRDb250aW51ZSAmJiBxdWV1ZS5pc0VtcHR5KCkpCkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVu
dGlmaWVyKTsKKyAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQpOwogICAgIH0K
IAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAg
IFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIlBy
b2R1Y2VyIFRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKQEAg
LTEyOSw3ICsxMjksNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVsbENvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRp
bnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXpl
KCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGlj
YXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6
ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgbXVzdE5vdGlmeSA9
IHF1ZXVlLmlzRW1wdHkoKTsKQEAgLTEzOCwxMSArMTM4LDExIEBAIHZvaWQgcnVuVGVzdCgKICAg
ICAgICAgICAgICAgICAgICAgbm90aWZ5KGVtcHR5Q29uZGl0aW9uLCBtdXN0Tm90aWZ5KTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgcHJvZHVjZXJUaHJlYWRz
LmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVu
ZCh0aHJlYWQpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVu
dGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+JiB0aHJlYWQgOiBw
cm9kdWNlclRocmVhZHMpCisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAog
ICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2tUeXBlPiBsb2NrZXIobG9jayk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAgYi9T
b3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKaW5kZXggZjA4MzIxYzBm
Njg4MzY1MzVkODNjYjZiYzc1MTE4NDhiYjUyZDk0Zi4uNjhjZTg0YzQ4YTNmZDRjOGY4MzViYTA5
YWE2MWE1MDcyMzc2Nzk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tG
YWlybmVzc1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NU
ZXN0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAg
ICAgIExvY2tUeXBlIGxvY2s7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZFtdPiBj
b3VudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkW10+KG51bVRocmVhZHMpOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtl
X3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZHMpOworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVm
UHRyPFRocmVhZD5bXT4obnVtVGhyZWFkcyk7CiAgICAgCiAgICAgICAgIHZvbGF0aWxlIGJvb2wg
a2VlcEdvaW5nID0gdHJ1ZTsKICAgICAKQEAgLTcwLDcgKzcwLDcgQEAgc3RydWN0IEJlbmNobWFy
ayB7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRz
OyB0aHJlYWRJbmRleC0tOykgewogICAgICAgICAgICAgY291bnRzW3RocmVhZEluZGV4XSA9IDA7
Ci0gICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAg
ICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAg
ICAgICAgIkJlbmNobWFyayBUaHJlYWQiLAogICAgICAgICAgICAgICAgIFsmLCB0aHJlYWRJbmRl
eF0gKCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW1pY3Jvc2Vjb25kc0luQ3JpdGljYWxT
ZWN0aW9uKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgCiAg
ICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXgg
PSBudW1UaHJlYWRzOyB0aHJlYWRJbmRleC0tOykKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAgICAgIHRocmVhZHNbdGhy
ZWFkSW5kZXhdLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcCBiL1NvdXJjZS9XVEYvYmVu
Y2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAppbmRleCA1NDVkMmUwYjA0ODhmMzM4OTRhNTk2ODhm
ZDkxYjBkM2EzODdjY2EyLi44MmQzOWY4N2M2YzcwNmMxOWNlNGYyOTRjOWI2MWIyYWJiOGE1OThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKKysr
IGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCkBAIC03Nyw3ICs3Nyw3
IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdp
dGhQYWRkaW5nPExvY2tUeXBlPltdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRp
bmc8TG9ja1R5cGU+W10+KG51bVRocmVhZEdyb3Vwcyk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxXaXRoUGFkZGluZzxkb3VibGU+W10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxXaXRoUGFk
ZGluZzxkb3VibGU+W10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxUaHJlYWRJZGVudGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElk
ZW50aWZpZXJbXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJlZnB0cjxUaHJlYWQ+W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJH
cm91cCk7CiAKICAgICAgICAgdm9sYXRpbGUgYm9vbCBrZWVwR29pbmcgPSB0cnVlOwogCkBAIC05
MCw3ICs5MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgICAgICAgICAgd29yZHNbdGhyZWFk
R3JvdXBJbmRleF0udmFsdWUgPSAwOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVh
ZEluZGV4ID0gbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAg
ICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRo
cmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAogICAgICAg
ICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsICZrZWVwR29p
bmcsICZudW1JdGVyYXRpb25zTG9jaywgJm51bUl0ZXJhdGlvbnNdICgpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBsb2NhbFdvcmQgPSAwOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHN0
cnVjdCBCZW5jaG1hcmsgewogICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTsKICAgICAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVh
ZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJl
YWQuY3BwCmluZGV4IDM4N2M2ZTI1ZDcwNjI5YTgzYWE2MWNkNmE2YTg3NDllYTA3YzdmMDAuLjQx
MGJmYjU3NDQyNWE1N2M1YmRmYmQwZTc5ZmI5MTliMTdkYWQyODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQXV0b21h
dGljVGhyZWFkLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpz
dGFydChjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgCiAgICAgbV9oYXNVbmRlcmx5aW5nVGhy
ZWFkID0gdHJ1ZTsKICAgICAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGNyZWF0ZVRo
cmVhZCgKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAg
ICAgIldURjo6QXV0b21hdGljVGhyZWFkIiwKICAgICAgICAgWz1dICgpIHsKICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpz
dGFydChjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0ID09IFdvcmtSZXN1bHQ6OkNvbnRpbnVlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsK
IH0KIAogdm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnRocmVhZERpZFN0YXJ0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKaW5kZXggYTM0MTkxMTljYTcxZWRkZjk1NTNjYjMwYTc2YTJhODU1ZmViYTJjNy4uYjUw
YmJiYzNiZjNhZDJiMWZkZDEzNDUzNDg2NTRhYjFkNDE4Y2JjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQKQEAgLTEyOCw3ICsxMjgsNiBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTdHJpbmdFeHRyYXMu
aAogICAgIFN0cmluZ1ByaW50U3RyZWFtLmgKICAgICBTeXN0ZW1UcmFjaW5nLmgKLSAgICBUaHJl
YWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZC5oCiAg
ICAgVGhyZWFkU3BlY2lmaWMuaAogICAgIFRocmVhZGluZy5oCkBAIC0zMjksMTYgKzMyOCwxNCBA
QCBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCiBpZiAoV0lOMzIpCiAgICAgbGlzdChBUFBFTkQg
V1RGX1NPVVJDRVMKICAgICAgICAgT1NBbGxvY2F0b3JXaW4uY3BwCisgICAgICAgIFRocmVhZEhv
bGRlcldpbi5jcHAKICAgICAgICAgVGhyZWFkU3BlY2lmaWNXaW4uY3BwCiAgICAgICAgIFRocmVh
ZGluZ1dpbi5jcHAKICAgICApCiBlbHNlICgpCi0gICAgbGlzdChBUFBFTkQgV1RGX0hFQURFUlMK
LSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCi0gICAgKQogICAgIGxpc3Qo
QVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAgIE9TQWxsb2NhdG9yUG9zaXguY3BwCi0gICAgICAg
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisgICAgICAgIFRocmVhZEhvbGRlclB0
aHJlYWRzLmNwcAogICAgICAgICBUaHJlYWRpbmdQdGhyZWFkcy5jcHAKICAgICApCiBlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9NYWluVGhyZWFkLmNwcAppbmRleCAwMjQ5NTQ0YzUxOGU4MmFmZjE3MDVkZTE5ZWM5NjVh
Yjk4YjFkMTA2Li4zNGI5NDI1NTVhYjU2MTgzMjEwMThiNGYwNzkwZjI4MjUwYTdkY2JkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcApAQCAtMTg2LDkgKzE4Niw5IEBAIGJvb2wgaXNNYWluVGhyZWFkKCkK
ICNlbmRpZgogCiAjaWYgIVVTRShXRUJfVEhSRUFEKQotYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2Nh
bERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZCkKK2Jvb2wgY2FuQWNjZXNz
VGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkKQogewotICAg
IHJldHVybiB0aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCk7CisgICAgcmV0dXJuIHRocmVhZCA9
PSBjdXJyZW50VGhyZWFkKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5oIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCmluZGV4IDI1ZDhm
NzY2ZGNmYjg3OWExZDc2ODNjZTU1MDhkZDhkN2YxZDc3YWYuLjBlNzhlOGU1MWFiZThkOTU1NDcy
Yzc5ZGQzNDY5MmYxNTQ2ZGIxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJl
YWQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKQEAgLTM0LDEzICszNCwxMiBA
QAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNw
YWNlIFdURiB7CiAKIGNsYXNzIFByaW50U3RyZWFtOwogCi10eXBlZGVmIHVpbnQzMl90IFRocmVh
ZElkZW50aWZpZXI7Ci0KIC8vIE11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgog
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmggYi9Tb3VyY2UvV1RG
L3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAppbmRleCBkZmRkZjBhOTU1NTJkYjNlMmFlY2Zl
ZjRlYzE2ZWZiNWM2ZTZjN2JkLi40MTI4ZjVjZDcxYTdkYjJmNGZkNzAzMjk1M2YwYzNmMWY1MDBk
MTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaApAQCAtMTczLDcgKzE3
Myw3IEBAIGNsYXNzIE1lbW9yeVByZXNzdXJlSGFuZGxlciB7CiAjaWYgVVNFKEdMSUIpCiAgICAg
ICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7CiAjZWxzZQotICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogI2Vu
ZGlmCiAgICAgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxK
b2JzR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcApp
bmRleCA0MDIzZjQzZTZmMjBhMzhlMTAzZTdjOWEyZTRmMGY3ZTA2MTA1NzE0Li45MDg5MmFhNDk3
MTQ4YmZkN2EyZTIxOTA3MDYxYzExZjFjMmM4NTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpv
YnNHZW5lcmljLmNwcApAQCAtOTQsNyArOTQsNyBAQCBib29sIFBhcmFsbGVsRW52aXJvbm1lbnQ6
OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCogcGFyZW50KQog
ICAgIH0KIAogICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0
ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFk
LCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisgICAgICAgIG1fdGhyZWFkSUQgPSBUaHJlYWQ6
OmNyZWF0ZSgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFk
LCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CiAKICAgICBpZiAobV90aHJlYWRJRCkKICAgICAg
ICAgbV9wYXJlbnQgPSBwYXJlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxl
bEpvYnNHZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKaW5k
ZXggNDU4NDA3YzRjYjRhM2Y5OTVjOTBjNTU1NjI3YzFjYmQyMmI0MWI1Yy4uNzFiNzY0NDM4ZTZi
ZjkzZmZlMjI5MWI1YWU3MzI1MmQwODE1ZjE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
UGFyYWxsZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dl
bmVyaWMuaApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBQYXJhbGxlbEVudmlyb25tZW50IHsKICAg
ICBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8VGhyZWFkUHJpdmF0ZT4g
ewogICAgIHB1YmxpYzoKICAgICAgICAgVGhyZWFkUHJpdmF0ZSgpCi0gICAgICAgICAgICA6IG1f
dGhyZWFkSUQoMCkKKyAgICAgICAgICAgIDogbV90aHJlYWRJRChudWxscHRyKQogICAgICAgICAg
ICAgLCBtX3J1bm5pbmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGFyZW50KDApCiAgICAgICAg
IHsKQEAgLTc0LDcgKzc0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZCh2b2lkKik7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1f
dGhyZWFkSUQ7CiAgICAgICAgIGJvb2wgbV9ydW5uaW5nOwogICAgICAgICBQYXJhbGxlbEVudmly
b25tZW50KiBtX3BhcmVudDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFya2luZ0xv
dC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAppbmRleCBlNmM2NzhiZWZjMGYx
OTBhMjIzZTlhZGRiMmNjNTgxMGI1NmUxYzE0Li42MjJlZjcxNWNmNWRlMzMyY2ZjM2FhODE0Mjdm
Y2YxMTY5MTIxNTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdHJ1
Y3QgVGhyZWFkRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWREYXRhPiB7
CiAgICAgVGhyZWFkRGF0YSgpOwogICAgIH5UaHJlYWREYXRhKCk7CiAKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkSWRlbnRpZmll
cjsKICAgICAKICAgICBNdXRleCBwYXJraW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gcGFy
a2luZ0NvbmRpdGlvbjsKQEAgLTgxLDcgKzgxLDcgQEAgc3RydWN0IEJ1Y2tldCB7CiAgICAgdm9p
ZCBlbnF1ZXVlKFRocmVhZERhdGEqIGRhdGEpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVl
aW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihk
YXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGVucXVldWVpbmcg
IiwgUmF3UG9pbnRlcihkYXRhKSwgIiB3aXRoIGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKGRhdGEt
PmFkZHJlc3MpLCAiIG9udG8gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOwogICAgICAgICBB
U1NFUlQoZGF0YS0+YWRkcmVzcyk7CiAgICAgICAgIEFTU0VSVCghZGF0YS0+bmV4dEluUXVldWUp
OwogICAgICAgICAKQEAgLTk5LDExICs5OSwxMSBAQCBzdHJ1Y3QgQnVja2V0IHsKICAgICB2b2lk
IGdlbmVyaWNEZXF1ZXVlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgp
LCAiOiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIp
KTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGRl
cXVldWVpbmcgZnJvbSBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFxdWV1ZUhlYWQpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBl
bXB0eS5cbiIpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBlbXB0eS5cbiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0xNDMsMTQgKzE0MywxNCBAQCBzdHJ1Y3QgQnVja2V0IHsKICAgICAgICAgd2hpbGUgKHNo
b3VsZENvbnRpbnVlKSB7CiAgICAgICAgICAgICBUaHJlYWREYXRhKiBjdXJyZW50ID0gKmN1cnJl
bnRQdHI7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZ290IHRocmVhZCAiLCBSYXdQb2ludGVyKGN1
cnJlbnQpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6
OmN1cnJlbnQoKSwgIjogZ290IHRocmVhZCAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiXG4iKSk7
CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3VsdCA9IGZ1bmN0b3IoY3VycmVudCwgdGltZVRvQmVG
YWlyKTsKICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgICAgICAgICBjYXNlIERl
cXVldWVSZXN1bHQ6Oklnbm9yZToKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGN1cnJl
bnRQdHIgPSAiLCBSYXdQb2ludGVyKGN1cnJlbnRQdHIpLCAiLCAqY3VycmVudFB0ciA9ICIsIFJh
d1BvaW50ZXIoKmN1cnJlbnRQdHIpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGN1cnJlbnRQdHIgPSAiLCBSYXdQb2lu
dGVyKGN1cnJlbnRQdHIpLCAiLCAqY3VycmVudFB0ciA9ICIsIFJhd1BvaW50ZXIoKmN1cnJlbnRQ
dHIpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OwogICAgICAg
ICAgICAgICAgIGN1cnJlbnRQdHIgPSAmKCpjdXJyZW50UHRyKS0+bmV4dEluUXVldWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTksNyArMTU5LDcgQEAgc3RydWN0IEJ1Y2tldCB7CiAg
ICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1
bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZGVx
dWV1ZWluZyAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiIGZyb20gIiwgUmF3UG9pbnRlcih0aGlz
KSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6
Y3VycmVudCgpLCAiOiBkZXF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoY3VycmVudCksICIgZnJvbSAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQg
PT0gcXVldWVUYWlsKQogICAgICAgICAgICAgICAgICAgICBxdWV1ZVRhaWwgPSBwcmV2aW91czsK
ICAgICAgICAgICAgICAgICBkaWREZXF1ZXVlID0gdHJ1ZTsKQEAgLTI3MSw3ICsyNzEsNyBAQCBI
YXNodGFibGUqIGVuc3VyZUhhc2h0YWJsZSgpCiAgICAgICAgICAgICBjdXJyZW50SGFzaHRhYmxl
ID0gSGFzaHRhYmxlOjpjcmVhdGUobWF4TG9hZEZhY3Rvcik7CiAgICAgICAgICAgICBpZiAoaGFz
aHRhYmxlLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgY3VycmVudEhhc2h0YWJsZSkpIHsK
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgaW5pdGlhbCBoYXNodGFibGUg
IiwgUmF3UG9pbnRlcihjdXJyZW50SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBjcmVhdGVkIGluaXRp
YWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIoY3VycmVudEhhc2h0YWJsZSksICJcbiIpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEhhc2h0YWJsZTsKICAgICAgICAgICAgIH0KIApA
QCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1U
aHJlYWRzKQogICAgIEhhc2h0YWJsZSogb2xkSGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsK
ICAgICBpZiAob2xkSGFzaHRhYmxlICYmIHN0YXRpY19jYXN0PGRvdWJsZT4ob2xkSGFzaHRhYmxl
LT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtVGhyZWFkcykgPj0gbWF4TG9hZEZhY3Rv
cikgewogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
Y3VycmVudFRocmVhZCgpLCAiOiBubyBuZWVkIHRvIHJlaGFzaCBiZWNhdXNlICIsIG9sZEhhc2h0
YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRocmVhZHMsICIgPj0gIiwgbWF4TG9hZEZhY3RvciwgIlxu
IikpOworICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjog
bm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUsICIgLyAiLCBu
dW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1
bnNpZ25lZCBudW1UaHJlYWRzKQogICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7
CiAgICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJs
ZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0
b3IpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KGN1cnJlbnRUaHJlYWQoKSwgIjogYWZ0ZXIgbG9ja2luZywgbm8gbmVlZCB0byByZWhhc2ggYmVj
YXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1h
eExvYWRGYWN0b3IsICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFk
OjpjdXJyZW50KCksICI6IGFmdGVyIGxvY2tpbmcsIG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1c2Ug
Iiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwgbnVtVGhyZWFkcywgIiA+PSAiLCBtYXhMb2Fk
RmFjdG9yLCAiXG4iKSk7CiAgICAgICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2sp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzc4LDE0ICszNzgsMTQgQEAgdm9pZCBlbnN1
cmVIYXNodGFibGVTaXplKHVuc2lnbmVkIG51bVRocmVhZHMpCiAgICAgCiAgICAgSGFzaHRhYmxl
KiBuZXdIYXNodGFibGUgPSBIYXNodGFibGU6OmNyZWF0ZShuZXdTaXplKTsKICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0
ZWQgbmV3IGhhc2h0YWJsZTogIiwgUmF3UG9pbnRlcihuZXdIYXNodGFibGUpLCAiXG4iKSk7Cisg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGNyZWF0ZWQgbmV3
IGhhc2h0YWJsZTogIiwgUmF3UG9pbnRlcihuZXdIYXNodGFibGUpLCAiXG4iKSk7CiAgICAgZm9y
IChUaHJlYWREYXRhKiB0aHJlYWREYXRhIDogdGhyZWFkRGF0YXMpIHsKICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
cmVoYXNoaW5nIHRocmVhZCBkYXRhICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBh
ZGRyZXNzID0gIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogcmVoYXNoaW5n
IHRocmVhZCBkYXRhICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBhZGRyZXNzID0g
IiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOwogICAgICAgICB1bnNp
Z25lZCBoYXNoID0gaGFzaEFkZHJlc3ModGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gaGFzaCAlIG5ld0hhc2h0YWJsZS0+c2l6ZTsKICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
aW5kZXggPSAiLCBpbmRleCwgIlxuIikpOworICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhU
aHJlYWQ6OmN1cnJlbnQoKSwgIjogaW5kZXggPSAiLCBpbmRleCwgIlxuIikpOwogICAgICAgICBC
dWNrZXQqIGJ1Y2tldCA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpbmRleF0ubG9hZCgpOwogICAgICAg
ICBpZiAoIWJ1Y2tldCkgewogICAgICAgICAgICAgaWYgKHJldXNhYmxlQnVja2V0cy5pc0VtcHR5
KCkpCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBlbnN1cmVIYXNodGFibGVTaXplKHVuc2lnbmVk
IG51bVRocmVhZHMpCiB9CiAKIFRocmVhZERhdGE6OlRocmVhZERhdGEoKQotICAgIDogdGhyZWFk
SWRlbnRpZmllcihjdXJyZW50VGhyZWFkKCkpCisgICAgOiB0aHJlYWRJZGVudGlmaWVyKFRocmVh
ZDo6Y3VycmVudCgpKQogewogICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOwogICAgIGZv
ciAoOzspIHsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBib29sIGVucXVldWUoY29uc3Qgdm9pZCogYWRk
cmVzcywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IGVucXVldWVpbmcgb250byBidWNrZXQgIiwgUmF3UG9pbnRlcihi
dWNrZXQpLCAiIHdpdGggaW5kZXggIiwgaW5kZXgsICIgZm9yIGFkZHJlc3MgIiwgUmF3UG9pbnRl
cihhZGRyZXNzKSwgIiB3aXRoIGhhc2ggIiwgaGFzaCwgIlxuIikpOworICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZW5xdWV1ZWluZyBvbnRvIGJ1Y2tl
dCAiLCBSYXdQb2ludGVyKGJ1Y2tldCksICIgd2l0aCBpbmRleCAiLCBpbmRleCwgIiBmb3IgYWRk
cmVzcyAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiIHdpdGggaGFzaCAiLCBoYXNoLCAiXG4iKSk7
CiAgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CiAKICAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCkBAIC00OTgsNyAr
NDk4LDcgQEAgYm9vbCBlbnF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCiAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAgICBpZiAodGhyZWFkRGF0YSkg
ewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHByb2NlZWRpbmcgdG8gZW5xdWV1ZSAiLCBSYXdQb2lu
dGVyKHRocmVhZERhdGEpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogcHJvY2VlZGluZyB0byBlbnF1ZXVlICIsIFJhd1BvaW50
ZXIodGhyZWFkRGF0YSksICJcbiIpKTsKICAgICAgICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0aHJl
YWREYXRhKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQpAQCAt
NTY3LDcgKzU2Nyw3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmtp
bmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5SW1wbCgKICAgICBjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmIHRpbWVvdXQpCiB7CiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwYXJraW5nLlxuIikpOworICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBwYXJraW5nLlxuIikpOwogICAgIAog
ICAgIFRocmVhZERhdGEqIG1lID0gbXlUaHJlYWREYXRhKCk7CiAgICAgbWUtPnRva2VuID0gMDsK
QEAgLTY2MSw3ICs2NjEsNyBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQ
YXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseUltcGwoCiBORVZFUl9JTkxJTkUgUGFya2luZ0xv
dDo6VW5wYXJrUmVzdWx0IFBhcmtpbmdMb3Q6OnVucGFya09uZShjb25zdCB2b2lkKiBhZGRyZXNz
KQogewogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRU
aHJlYWQoKSwgIjogdW5wYXJraW5nIG9uZS5cbiIpKTsKKyAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogdW5wYXJraW5nIG9uZS5cbiIpKTsKICAgICAKICAgICBV
bnBhcmtSZXN1bHQgcmVzdWx0OwogCkBAIC03MDYsNyArNzA2LDcgQEAgTkVWRVJfSU5MSU5FIHZv
aWQgUGFya2luZ0xvdDo6dW5wYXJrT25lSW1wbCgKICAgICBjb25zdCBTY29wZWRMYW1iZGE8aW50
cHRyX3QoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0KT4mIGNhbGxiYWNrKQogewogICAgIGlmICh2
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5w
YXJraW5nIG9uZSB0aGUgaGFyZCB3YXkuXG4iKSk7CisgICAgICAgIGRhdGFMb2codG9TdHJpbmco
VGhyZWFkOjpjdXJyZW50KCksICI6IHVucGFya2luZyBvbmUgdGhlIGhhcmQgd2F5LlxuIikpOwog
ICAgIAogICAgIFJlZlB0cjxUaHJlYWREYXRhPiB0aHJlYWREYXRhOwogICAgIGJvb2wgdGltZVRv
QmVGYWlyID0gZmFsc2U7CkBAIC03NTEsNyArNzUxLDcgQEAgTkVWRVJfSU5MSU5FIHVuc2lnbmVk
IFBhcmtpbmdMb3Q6OnVucGFya0NvdW50KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHVuc2lnbmVkIGNv
dW4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgY291bnQgPSAiLCBj
b3VudCwgIiBmcm9tICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIuXG4iKSk7CisgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHVucGFya2luZyBjb3VudCA9ICIs
IGNvdW50LCAiIGZyb20gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIi5cbiIpKTsKICAgICAKICAg
ICBWZWN0b3I8UmVmUHRyPFRocmVhZERhdGE+LCA4PiB0aHJlYWREYXRhczsKICAgICBkZXF1ZXVl
KApAQCAtNzYxLDcgKzc2MSw3IEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1
bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VuCiAgICAgICAgIEJ1
Y2tldE1vZGU6Oklnbm9yZUVtcHR5LAogICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQs
IGJvb2wpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBPYnNlcnZpbmcgZWxlbWVudCB3aXRoIGFk
ZHJlc3MgPSAiLCBSYXdQb2ludGVyKGVsZW1lbnQtPmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogT2JzZXJ2aW5n
IGVsZW1lbnQgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihlbGVtZW50LT5hZGRyZXNzKSwg
IlxuIikpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRkcmVzcykKICAg
ICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3JlOwogICAgICAgICAgICAg
dGhyZWFkRGF0YXMuYXBwZW5kKGVsZW1lbnQpOwpAQCAtNzczLDcgKzc3Myw3IEBAIE5FVkVSX0lO
TElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNz
LCB1bnNpZ25lZCBjb3VuCiAKICAgICBmb3IgKFJlZlB0cjxUaHJlYWREYXRhPiYgdGhyZWFkRGF0
YSA6IHRocmVhZERhdGFzKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyAiLCBSYXdQb2ludGVy
KHRocmVhZERhdGEuZ2V0KCkpLCAiIHdpdGggYWRkcmVzcyAiLCBSYXdQb2ludGVyKHRocmVhZERh
dGEtPmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVh
ZDo6Y3VycmVudCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLmdldCgp
KSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxu
IikpOwogICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CkBA
IC03ODMsNyArNzgzLDcgQEAgTkVWRVJfSU5MSU5FIHVuc2lnbmVkIFBhcmtpbmdMb3Q6OnVucGFy
a0NvdW50KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHVuc2lnbmVkIGNvdW4KICAgICB9CiAKICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IGRvbmUgdW5wYXJraW5nLlxuIikpOworICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6
Y3VycmVudCgpLCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsKICAgICAKICAgICByZXR1cm4gdGhy
ZWFkRGF0YXMuc2l6ZSgpOwogfQpAQCAtNzkzLDcgKzc5Myw3IEBAIE5FVkVSX0lOTElORSB2b2lk
IFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25zdCB2b2lkKiBhZGRyZXNzKQogICAgIHVucGFya0Nv
dW50KGFkZHJlc3MsIFVJTlRfTUFYKTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwg
Y29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCitORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpm
b3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+
JiBjYWxsYmFjaykKIHsKICAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0c1RvVW5sb2NrID0gbG9j
a0hhc2h0YWJsZSgpOwogCkBAIC04MDMsNyArODAzLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFy
a2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRp
ZmkKICAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Zm9yIChUaHJlYWREYXRhKiBjdXJyZW50VGhyZWFkRGF0YSA9IGJ1Y2tldC0+cXVldWVIZWFkOyBj
dXJyZW50VGhyZWFkRGF0YTsgY3VycmVudFRocmVhZERhdGEgPSBjdXJyZW50VGhyZWFkRGF0YS0+
bmV4dEluUXVldWUpCi0gICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhy
ZWFkSWRlbnRpZmllciwgY3VycmVudFRocmVhZERhdGEtPmFkZHJlc3MpOworICAgICAgICAgICAg
Y2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIuZ2V0KCksIGN1cnJl
bnRUaHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICB9CiAgICAgCiAgICAgdW5sb2NrSGFzaHRhYmxl
KGJ1Y2tldHNUb1VubG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKaW5kZXggN2Q1ZmIxN2VmYTAyYWI3NmIx
MjhlYWY1OTk4MTM4MDEwMGJhYmQ5Ni4uYjZkODgzMGQxOWM3YjdmZDRjYzZhY2FlMzYyYWVhM2I5
NDNhOWQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaApAQCAtMTU4LDcgKzE1OCw3IEBAIGNsYXNzIFBhcmtp
bmdMb3QgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgc3RhdGljIHZvaWQgZm9y
RWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAgIHsKLSAgICAgICAgZm9yRWFjaEltcGwoc2NvcGVk
TGFtYmRhUmVmPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPihmdW5jKSk7Cisg
ICAgICAgIGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZCYsIGNvbnN0IHZv
aWQqKT4oZnVuYykpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE3MSw3ICsxNzEsNyBAQCBjbGFz
cyBQYXJraW5nTG90IHsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJr
T25lSW1wbCgKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRh
PGludHB0cl90KFVucGFya1Jlc3VsdCk+JiBjYWxsYmFjayk7CiAKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhy
ZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWQmLCBj
b25zdCB2b2lkKik+Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKaW5kZXggZmUx
NjMwYzk3MzViNWZmNTM1M2NiMmM1NThlMzEwNTgxMjQ3ODdkOC4uMjc3ZTY3NWRiM2M1NTVkNWU0
YzZjZTA0OTQ2ODg3NGQzNjc2OTU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmUHRy
LmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQyLDcgKzQyLDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc1JlZlB0ciA9IHRydWU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cigpIDogbV9wdHIo
bnVsbHB0cikgeyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgUmVmUHRyKCkgOiBtX3B0
cihudWxscHRyKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihUKiBwdHIpIDogbV9wdHIo
cHRyKSB7IHJlZklmTm90TnVsbChwdHIpOyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQdHIoY29u
c3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDogbV9w
dHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oCmluZGV4IDk0M2ZkNmQ3OWQwOTQ0MjU1MDNhYzg5NzMxYjBh
MDZhNmFjNDBmZmQuLmNiMjc1ZjcwMTJjZmU1NjYxZTQ5ZTBiNGZmMGQ5YzYyMWIwZTQ5OWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCkBAIC0yOSw2ICsyOSw4
IEBACiAjaWZuZGVmIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAjZGVmaW5lIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbl9oCiAKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKwogbmFtZXNwYWNl
IFdURiB7CiAKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7
CkBAIC0zNiwxMyArMzgsMTUgQEAgdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQq
IGFyZ3VtZW50KTsKIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlv
bihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAgICBUaHJlYWRGdW5jdGlv
bkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIFJlZlB0cjxUaHJlYWQ+JiYgdGhy
ZWFkLCB2b2lkKiBkYXRhKQogICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAs
IHRocmVhZChXVEZNb3ZlKHRocmVhZCkpCiAgICAgICAgICwgZGF0YShkYXRhKQogICAgIHsKICAg
ICB9CiAKICAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBSZWZQdHI8VGhyZWFkPiB0
aHJlYWQ7CiAgICAgdm9pZCogZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZEdyb3VwLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJkNzUwN2NlNDc3MWRkYzJjOTFlMjMwYzQ4YTNmOGY5ZjNhNjVhMDUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29t
Pi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBUaHJlYWRHcm91cCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVGhyZWFkR3JvdXApOworcHVibGljOgorcHJpdmF0ZToKK307CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWMyM2Iw
YWZlOTYxMjRkMmZkMGM1NjExN2YwMGYzMDk0YjBlYjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyUHRocmVhZHMuaCIK
KworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaWYgT1Mo
SFVSRCkKKy8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQgaW4gYmlvbmljIG5vciBp
biBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgorI2RlZmluZSBQVEhSRUFEX0tF
WVNfTUFYIDEwMjQKKyNlbHNlCisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdURiB7CisKK3B0aHJlYWRfa2V5X3QgVGhyZWFkSG9sZGVyOjptX2tleSA9IFBUSFJFQURf
S0VZU19NQVg7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQpOworCitUaHJlYWRIb2xkZXI6
On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRFeGl0KCk7Cit9CisKK3ZvaWQg
VGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAgaW50IGVycm9yID0gcHRocmVh
ZF9rZXlfY3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOworICAgIGlmIChlcnJvcikKKyAgICAgICAg
Q1JBU0goKTsKK30KKworVGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKQorewor
ICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGhyZWFkSG9sZGVyKj4ocHRocmVhZF9nZXRzcGVjaWZpYyhtX2tleSkpOworfQorCit2
b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRocmVhZCkKK3sKKyAgICBpZiAo
IWN1cnJlbnQoKSkgeworICAgICAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGlzIGFzIGEgcmVs
ZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVydCBwZXJmb3JtYW5lLgor
ICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJlIG1lYW5zIHRoYXQgd2Ug
d2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RGOjppbml0aWFsaXplVGhyZWFk
aW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgorICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAgICAgICAgcHRocmVhZF9zZXRz
cGVjaWZpYyhtX2tleSwgbmV3IFRocmVhZEhvbGRlcih0aHJlYWQpKTsKKyAgICB9Cit9CisKK3Zv
aWQgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQoreworICAgIFRocmVhZEhvbGRl
ciogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihkYXRh
KTsKKyAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmllckRhdGEpOworCisgICAgaWYgKHRocmVhZElk
ZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICBkZWxldGUgdGhyZWFk
SWRlbnRpZmllckRhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aHJlYWRJZGVu
dGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworICAgIC8vIFJlLXNldHRpbmcg
dGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3QoKSBjYWxsIGFmdGVyIGFs
bCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQuCisgICAgcHRo
cmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRIb2xkZXJQdGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhM2NlZGYxNTgwMzVmY2M2NDNkMzJmNWUy
ZWQyMjU2N2U3MGVjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRI
b2xkZXJQdGhyZWFkcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkSG9sZGVy
UHRocmVhZHNfaAorI2RlZmluZSBUaHJlYWRIb2xkZXJQdGhyZWFkc19oCisKKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBIb2xkcyBUaHJlYWQgaW4g
dGhlIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJlYWRzLXNwZWNpZmlj
IDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8vIFRocmVhZCBmcm9tIHRo
cmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmljIHR5cGVzIGRvbid0IHVz
ZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFkSG9sZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGljOgorICAgIH5UaHJlYWRI
b2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNz
IGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGlu
aXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9m
IFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgorICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNw
ZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBzdGF0aWMgVGhyZWFkSG9s
ZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFk
LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRocmVhZCYgdGhyZWFkKQor
ICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1
Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgorICAgIC8vIC0g
Zmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJl
IGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJworICAg
IC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBt
YWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFm
dGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRz
IGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQorICAgIC8vIFRocmVhZCBm
cm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAuCisgICAgc3RhdGljIHZv
aWQgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVhZDsKKyAg
ICBib29sIG1faXNEZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBwdGhyZWFkX2tleV90IG1fa2V5
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUaHJlYWRIb2xkZXJQdGhy
ZWFkc19oCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdjNWYx
ZTRhOGQ2YTNlODA0ZGU0NDVhMWY1MjBhOTg5MDc0YzRmYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJXaW4uaCIKKworI2luY2x1
ZGUgIlRocmVhZGluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworRFdPUkQgVGhyZWFkSG9sZGVy
OjptX2tleSA9IDA7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQpOworCitUaHJlYWRIb2xk
ZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRFeGl0KCk7Cit9CisKK3Zv
aWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAgRFdPUkQgbV9rZXkgPSBG
bHNBbGxvYyhkZXN0cnVjdG9yKTsKKyAgICBpZiAobV9rZXkgPT0gRkxTX09VVF9PRl9JTkRFWEVT
KQorICAgICAgICBDUkFTSCgpOworfQorCitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3Vy
cmVudCgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KEZsc0dldFZh
bHVlKG1fa2V5KSk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKFRocmVhZCYg
dGhyZWFkKQoreworICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAgIC8vIElkZWFsbHkgd2Un
ZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3Vs
ZCBodXJ0IHBlcmZvcm1hbmUuCisgICAgICAgIC8vIEhhdmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0
IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2FsbAorICAgICAgICAvLyBX
VEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKSBzb29uIGVub3VnaCIgYnVncyBpbiByZWxlYXNlIG1v
ZGUuCisgICAgICAgIEZsc1NldFZhbHVlKG1fa2V5LCBuZXcgVGhyZWFkSG9sZGVyKHRocmVhZCkp
OworICAgIH0KK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7
CisgICAgVGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRo
cmVhZEhvbGRlcio+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7CisK
KyAgICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7CisgICAg
ICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Cisg
ICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVj
dCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJl
IGNhbGxlZC4KKyAgICBGbHNTZXRWYWx1ZShtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlcldpbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjljYmJhOTk3OWI2ZWY5NzhiODEwN2MxNzJiMzFmNDgwNWJmMzU0OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oCkBAIC0wLDAgKzEsNzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgVGhyZWFkSG9sZGVyV2luX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyV2luX2gK
KworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEhv
bGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgRkxT
IDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8vIFRocmVhZCBmcm9tIHRo
cmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmljIHR5cGVzIGRvbid0IHVz
ZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFkSG9sZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGljOgorICAgIH5UaHJlYWRI
b2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNz
IGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGlu
aXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9m
IFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgorICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNw
ZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBzdGF0aWMgVGhyZWFkSG9s
ZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFk
LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRocmVhZCYgdGhyZWFkKQor
ICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1
Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgorICAgIC8vIC0g
Zmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJl
IGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJworICAg
IC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBt
YWtlIFdpbiB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBh
bGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxs
ZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0
aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIGRl
c3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90aHJlYWQ7CisgICAgYm9v
bCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgRFdPUkQgbV9rZXk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFRocmVhZEhvbGRlcldpbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2NTcyMWRkMTY5YmZmMTQz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShQVEhSRUFE
UykKLQotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLQotI2luY2x1
ZGUgIlRocmVhZGluZy5oIgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJFQURfS0VZU19NQVggaXMg
bm90IGRlZmluZWQgaW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBp
dCBoZXJlLgotI2RlZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNlbHNlCi0jaW5jbHVkZSA8
bGltaXRzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0aHJlYWRfa2V5X3QgVGhy
ZWFkSWRlbnRpZmllckRhdGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01BWDsKLQotdm9pZCB0aHJl
YWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVudGlmaWVyRGF0YTo6flRo
cmVhZElkZW50aWZpZXJEYXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0KG1faWRlbnRpZmllcik7
Ci19Ci0KLXZvaWQgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCkKLXsKLSAg
ICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBkZXN0cnVjdCk7Ci0gICAg
aWYgKGVycm9yKQotICAgICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIFRocmVh
ZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NFUlQobV9rZXkgIT0gUFRI
UkVBRF9LRVlTX01BWCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEqIHRocmVhZElkZW50aWZp
ZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEqPihwdGhyZWFkX2dldHNw
ZWNpZmljKG1fa2V5KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllckRhdGEgPyB0aHJl
YWRJZGVudGlmaWVyRGF0YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQotdm9pZCBUaHJlYWRJZGVu
dGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIEFTU0VS
VCghaWRlbnRpZmllcigpKTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGlzIGFzIGEgcmVs
ZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVydCBwZXJmb3JtYW5lLgot
ICAgIC8vIEhhdmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxs
IGNhdGNoICJkaWRuJ3QgY2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNv
b24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxFQVNFX0FTU0VSVChtX2tl
eSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCBu
ZXcgVGhyZWFkSWRlbnRpZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSog
dGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+
KGRhdGEpOwotICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci0KLSAgICBpZiAodGhy
ZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAgICAgIGRlbGV0ZSB0
aHJlYWRJZGVudGlmaWVyRGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRocmVh
ZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Ci0gICAgLy8gUmUtc2V0
dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0
ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KLSAg
ICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGIvU291cmNl
L1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcyNWJkMjc1ZTcyZWJkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotI2RlZmluZSBU
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElkZW50aWZpZXIgaW4gdGhl
IHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJlYWRzLXNwZWNpZmljIDIt
cGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKLS8vIFRocmVhZElkZW50aWZpZXIg
ZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBk
b24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNzIFRocmVhZElkZW50aWZp
ZXJEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJZGVudGlmaWVyRGF0YSk7
Ci1wdWJsaWM6Ci0gICAgflRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0KLSAgICAvLyBPbmUgdGlt
ZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgotICAgIC8vIFRoaXMg
bWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0
aHJlYWQtc2FmZS4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOwotCi0gICAgLy8g
Q3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVudGlmaWVyRGF0YSBpbnRv
IHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhy
ZWFkSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQt
c3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAgIHN0YXRpYyBUaHJlYWRJ
ZGVudGlmaWVyIGlkZW50aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBUaHJlYWRJZGVudGlmaWVy
RGF0YShUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9pZGVudGlmaWVy
KGlkZW50aWZpZXIpCi0gICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCi0gICAgewot
ICAgIH0KLQotICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVk
IDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAtIGZpcnN0LCB3aGVuIGFs
bCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNp
bXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAgICAvLyBhbmQgcmUtc2V0
cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0
byBjYWxsIGl0IGFnYWluIGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFk
LXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4g
LSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJZGVudGlmaWVyIGZyb20g
dGhlIHRocmVhZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAgICBzdGF0aWMgdm9pZCBk
ZXN0cnVjdCh2b2lkKiBkYXRhKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgbV9pZGVudGlmaWVy
OwotICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGljIHB0aHJlYWRfa2V5X3Qg
bV9rZXk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFRocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmluZGV4IGMxZGMzNTAxOTAz
YWI3NmIzNzA0NmQ5MzMzZjkzMmEzZWYwYzZjNmUuLmYxMDQ1OTQ4ZDI1ZTQ0ZmQ4ODU3N2E5OTIy
MzkwOWU2ZjU2MjlhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtNDUsNyArNDUsNyBAQCBzdHJ1
Y3QgTmV3VGhyZWFkQ29udGV4dCB7CiAgICAgTXV0ZXggY3JlYXRpb25NdXRleDsKIH07CiAKLWNv
bnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK2Nv
bnN0IGNoYXIqIFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQogICAgIHJldHVybiB0aHJlYWRO
YW1lOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQq
IGNvbnRleHREYXRhKQogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRp
b25NdXRleCk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChj
b250ZXh0LT5uYW1lKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoY29udGV4dC0+bmFtZSk7CiAKICAgICBhdXRvIGVudHJ5UG9pbnQgPSBXVEZNb3ZlKGNvbnRl
eHQtPmVudHJ5UG9pbnQpOwogCkBAIC05MiwyNCArOTIsMjQgQEAgc3RhdGljIHZvaWQgdGhyZWFk
RW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICBlbnRyeVBvaW50KCk7CiB9CiAKLVRo
cmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBlbnRyeVBvaW50KQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUoVGhy
ZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAg
ICAgICAgZW50cnlQb2ludChkYXRhKTsKKyAgICB9KTsKK30KKworUmVmUHRyPFRocmVhZD4gVGhy
ZWFkOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5
UG9pbnQpCiB7CiAgICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRD
b250ZXh0IHsgbmFtZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgeyB9IH07CiAKICAgICAvLyBQcmV2
ZW50IHRoZSB0aHJlYWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1bnRpbCB3ZSd2ZSBlc3RhYmxpc2hl
ZCB0aGUgdGhyZWFkIGlkZW50aWZpZXIuCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQt
PmNyZWF0aW9uTXV0ZXgpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZEludGVybmFsKHRocmVh
ZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZUlu
dGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOwogfQogCi1UaHJlYWRJZGVu
dGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIHJldHVybiBjcmVhdGVUaHJlYWQobmFtZSwgW2Vu
dHJ5UG9pbnQsIGRhdGFdIHsKLSAgICAgICAgZW50cnlQb2ludChkYXRhKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGlu
dCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgQVNTRVJU
KHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiAjZW5kaWYK
IH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVBy
aW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50
IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBBU1NFUlQo
cmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgc2V0Q3Vy
cmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKICNpZiBIQVZF
KFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1heFFPU2NsYXNzIHsgUU9T
X0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRR
T1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3MgPSBtYXhDbGFzczsKIH0K
IAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNz
KQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdp
bmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9IFFPU19DTEFTU19VTlNQ
RUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFsQ2xhc3MsIGdsb2JhbE1h
eFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0Ns
YXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9pZCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2YjU1OGIzZTFkNTE3ZTgx
MGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi40MzMzYjYyOGVmNmMxODcwZTA2ODJjMWU2YjE4Yjli
Y2QzYTRlOGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFr
dGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RA
cmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3
MiArMzksMjI2IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5o
PgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMpCisjaWYgT1MoREFSV0lOKQorI2luY2x1
ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNp
bmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0
X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCisvLyBUaGlzIGJ1ZyBoYXMg
YmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNh
biBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wuCisvLyBodHRwczov
L2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQorI2lmIE9T
KEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgorCisjaWYgT1MoTElOVVgp
CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIUNPTVBJTEVS
KE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRl
IDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVk
ZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBDUFUo
WDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vs
aWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdp
c3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFkX3N0YXRlX3QgUGxhdGZv
cm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBwY190aHJlYWRfc3RhdGU2
NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5cGVkZWYgYXJtX3RocmVh
ZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTTY0KQordHlwZWRlZiBh
cm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbHNlCisjZXJyb3IgVW5r
bm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5ET1dTKQorCit1c2luZyBQ
bGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8
fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBt
Y29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgeworICAgIHZv
aWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit1c2luZyBUaHJlYWRJZGVudGlmaWVy
ID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1l
bnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhy
ZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8vIERhcndpbiBpcyBhbiBl
eGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVh
ZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBjYWxscyBhcmUgbm90IHJl
ZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
K2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFzcyBUaHJlYWQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CitwdWJsaWM6CisgICAgZnJp
ZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlv
biBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24g
c29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRf
UFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiB0aHJlYWRO
YW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+VGhy
ZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNw
b25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ug
Wy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4K
LVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2
ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwor
ICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgorICAgIC8v
IFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3Jt
cyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8
VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29u
c3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGN1
cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRocmVhZFByaW9y
aXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAgIC8vIFJldHVybnMgVGhy
ZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNhbiBiZSAoYSBiaXQpIGNvc3RseSBpbiBXaW5kb3dz
LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7CiAKLS8v
IERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQgY3JlYXRpb24uCi1XVEZf
RVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rp
b24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICAvLyBSZXR1cm5zIFRocmVh
ZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVz
IGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFkcyBhbmQgZW5zdXJlIHRoZSB0aHJlYWQg
bGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJl
YWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFs
KFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHkoaW50KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFs
aXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUg
bXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6ZUN1cnJl
bnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyNpZiBPUyhEQVJXSU4p
CisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBrZXJuX3JldHVybl90OworI2VsaWYg
VVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9yID0gaW50OworI2Vs
aWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IERXT1JEOwor
I2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPHZvaWQsIFBsYXRmb3Jt
U3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVz
dW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLWJvb2wgc2lnbmFsVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNlbmRpZgogCisgICAgLy8gTWFyayB0
aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3BvbnNpdmVuZXNzLgorICAgIC8v
IHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUg
YSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGlu
dCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkg
PSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgcW9z
X2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3Mo
cW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdURgorICAgIC8vIEludGVy
bmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgorICAg
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11c2luZyBXVEY6OlRocmVhZElkZW50aWZp
ZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVzaW5nIFdURjo6Y3VycmVudFRocmVhZDsK
LXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7Ci11c2luZyBXVEY6OmRldGFjaFRocmVh
ZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247CisgICAgLy8gQ2FsbGVkIGlu
IHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgIC8vIEhlbHBmdWwgZm9yIHBs
YXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhl
IHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3JtYWxp
emVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCiAjaWYgVVNFKFBUSFJFQURT
KQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgdm9pZCBlc3RhYmxpc2gocHRocmVhZF90
KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJlYWRJZGVudGlmaWVyKTsK
ICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlclN1
c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CisKKyAgICBUaHJl
YWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgdm9pZCBhZGRP
bkV4aXRDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+IGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgbV9vbkV4aXRDYWxsYmFjay5hcHBlbmQoY2FsbGJhY2spOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBpZCgpID09IHRocmVhZC5pZCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpZCgpICE9IHRo
cmVhZC5pZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQoKTsKKworICAgIGVudW0g
Sm9pbmFibGVTdGF0ZSB7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhl
IHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgorICAgICAgICBKb2luYWJsZSwKKworICAgICAgICAv
LyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0aHJlYWQg
ZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBh
CisgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0aGUgdGhyZWFkIGV4aXRz
ICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQgdGhlIHJlbWFpbmRlciBv
ZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAgLy8gYW5kIHdoZW4gdGhy
ZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJn
ZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdzCisgICAgICAgIC8vIG5v
Ym9keSBlbHNlIHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9u
VGhyZWFkQ29tcGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisgICAgICAgIEpvaW5lZCwK
KworICAgICAgICAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBjYW4gbm8gbG9u
Z2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0IHRha2UgY2Fy
ZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERldGFjaGVkLAorICAgIH07
CisKKyAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxl
U3RhdGU7IH0KKyAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3RhdGUg
PSBEZXRhY2hlZDsgfQorICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZvaWQgZGlkSm9pbigpIHsg
bV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNFeGl0ZWQoKSB7IHJldHVy
biBtX2RpZEV4aXQ7IH0KKworICAgIFdvcmRMb2NrIG1fbXV0ZXg7CisgICAgVGhyZWFkSWRlbnRp
ZmllciBtX2lkIHsgMCB9OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlIHsgSm9p
bmFibGUgfTsKKyAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZChUaHJlYWQmKT4+IG1fb25FeGl0Q2FsbGJhY2s7CisjaWYgVVNFKFBUSFJF
QURTKQorICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9w
b3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3QgbV9zZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lOworICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsK
KyAgICB1bnNpZ25lZCBtX3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBzdGQ6OmF0b21pYzxib29s
PiBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAg
SEFORExFIG1faGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5c3RlbQorI2VuZGlmCit9
OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFk
LiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERhcndpbiBpcyBhbiBleGNl
cHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwg
dGhlIG9ubHkKKy8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRy
YW50LgorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOworCitp
bmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gVGhy
ZWFkOjpjdXJyZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
VGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNpbmcgV1RGOjpjdXJyZW50
VGhyZWFkOwogCiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcAppbmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZjYTFkYTVhNjkyZDBmLi4y
ZmJiODhhY2JkYzMxZGY3MmIwZjkxMzc2ZDIwY2QxMjI1YzMzODdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICog
Q29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFrdGl4LmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDE2MiArNDIsMTE3IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgogI2luY2x1ZGUg
IlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgot
I2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLSNpbmNsdWRlICJUaHJl
YWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJlYWRzLmgiCisjaW5jbHVk
ZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgIUNPTVBJTEVSKE1T
VkMpCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2NoZWQuaD4KLSNpbmNsdWRlIDxz
eXMvdGltZS5oPgotI2VuZGlmCi0KLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRlIDxzeXMvcHJjdGwu
aD4KLSNlbmRpZgotCi0jaWYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRp
ZgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3Mg
UHRocmVhZFN0YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBlbnVtIEpvaW5hYmxlU3RhdGUgewotICAgICAgICBKb2luYWJsZSwgLy8gVGhlIGRlZmF1bHQg
dGhyZWFkIHN0YXRlLiBUaGUgdGhyZWFkIGNhbiBiZSBqb2luZWQgb24uCi0KLSAgICAgICAgSm9p
bmVkLCAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0
aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNh
biBiZSBhIAotICAgICAgICAgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0
aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQg
dGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikgCi0gICAgICAg
ICAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhy
ZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5j
ZSB0aGVyZSdzIAotICAgICAgICAgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhl
IHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxy
ZWFkeSByZXR1cm5lZCkuCi0KLSAgICAgICAgRGV0YWNoZWQgLy8gVGhlIHRocmVhZCBoYXMgYmVl
biBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQs
IHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgot
ICAgIH07Ci0KLSAgICAvLyBDdXJyZW50bHkgYWxsIHRocmVhZHMgY3JlYXRlZCBieSBXVEYgc3Rh
cnQgb3V0IGFzIGpvaW5hYmxlLiAKLSAgICBQdGhyZWFkU3RhdGUocHRocmVhZF90IGhhbmRsZSkK
LSAgICAgICAgOiBtX2pvaW5hYmxlU3RhdGUoSm9pbmFibGUpCi0gICAgICAgICwgbV9kaWRFeGl0
KGZhbHNlKQotICAgICAgICAsIG1fcHRocmVhZEhhbmRsZShoYW5kbGUpCi0gICAgewotICAgIH0K
LQotICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0dXJuIG1fam9pbmFibGVT
dGF0ZTsgfQotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlKCkgeyByZXR1cm4gbV9wdGhyZWFk
SGFuZGxlOyB9Ci0gICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRl
ID0gRGV0YWNoZWQ7IH0KLSAgICB2b2lkIGRpZEV4aXQoKSB7IG1fZGlkRXhpdCA9IHRydWU7IH0K
LSAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQotICAgIGJv
b2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9Ci0KLXByaXZhdGU6Ci0gICAgSm9p
bmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGU7Ci0gICAgYm9vbCBtX2RpZEV4aXQ7Ci0gICAgcHRo
cmVhZF90IG1fcHRocmVhZEhhbmRsZTsKLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxUaHJlYWRJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UHRocmVhZFN0YXRlPj4gVGhyZWFkTWFwOworI2lmICFP
UyhEQVJXSU4pCiAKLXZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQoVGhyZWFkSWRlbnRpZmll
cik7Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci12b2lkIHRocmVhZFdh
c0pvaW5lZChUaHJlYWRJZGVudGlmaWVyKTsKKy8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQg
YW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCitzdGF0aWMgY29u
c3RleHByIGNvbnN0IGludCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lID0gU0lHVVNSMjsKK3N0YXRp
YyBzdGQ6OmF0b21pYzxUaHJlYWQqPiB0YXJnZXRUaHJlYWQgeyBudWxscHRyIH07CitzdGF0aWMg
U3RhdGljV29yZExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFk
TWFwTXV0ZXgoKQordm9pZCBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwg
c2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZDsKLQotICAgIGlmIChp
c0luaXRpYWxpemVkKQorICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2NhbCBhdG9taWMgdHlwZXMg
ZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJlYWQqIHRocmVhZCA9IHRh
cmdldFRocmVhZC5sb2FkKCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1c3BlbmRlZC5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhh
bmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNp
Z3N1c3BlbmQuCisgICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBz
aG91bGQgbm90IHByb2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gc2lnbmFsIGNv
bWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBz
aWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdh
eXMgcHJlY2VkZXMuCisgICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRo
YXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhl
IGhhbmRsZXIgaXMgY2FsbGVkLgorICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3Jn
L29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKICAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5
KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBm
YXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhl
cmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAg
IGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6aW5pdGlhbGl6ZU9uY2UoKTsKLSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlh
bGl6ZURhdGVzKCk7Ci19CisgICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2Fz
dDx1Y29udGV4dF90Kj4odWNvbnRleHQpOworI2lmIENQVShQUEMpCisgICAgdGhyZWFkLT5tX3N1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdz
OworI2Vsc2UKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSB1c2VyQ29u
dGV4dC0+dWNfbWNvbnRleHQ7CisjZW5kaWYKIAotc3RhdGljIFRocmVhZE1hcCYgdGhyZWFkTWFw
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTWFwPiBtYXA7Ci0gICAgcmV0
dXJuIG1hcDsKKyAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRo
cmVhZCBpcyBzdXNwZW5kZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUg
ZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhh
bmRsZXIuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5
NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMworICAgIC8vCisg
ICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0
IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KKyAgICAvLyBodHRw
Oi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9j
aGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFkLT5tX3NlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5
IHNpZ2FjdGlvbidzIHNhX21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3Bl
bmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRo
aXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4K
KyAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRT
aWduYWxTZXQpOworICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSk7CisgICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7CisKKyAgICAv
LyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQu
CisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKIH0K
IAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjb25z
dCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRo
cmVhZE1hcE11dGV4KCkpOwotCi0gICAgVGhyZWFkTWFwOjppdGVyYXRvciBpID0gdGhyZWFkTWFw
KCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJl
YWRIYW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgICAgICByZXR1cm4g
aS0+a2V5OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQorI2VuZGlmIC8vICFPUyhEQVJXSU4p
CiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFk
SGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKK3ZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCiB7Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJl
YWRIYW5kbGUpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0g
ICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckNvdW50ID0gMTsKLSAgICB0aHJl
YWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCBzdGQ6Om1ha2VfdW5pcXVlPFB0aHJlYWRTdGF0
ZT4ocHRocmVhZEhhbmRsZSkpOwotICAgIHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShp
bml0aWFsaXplS2V5LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKKyAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpOworICAgICAg
ICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0
cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8gc28gZW5zdXJlIGl0IGhh
cyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHko
KTsKKyAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOworICAgICAgICB3
dGZUaHJlYWREYXRhKCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygpOworCisjaWYgIU9TKERB
UldJTikKKyAgICAgICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25m
aWd1cmF0aW9uLgorICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3Bl
bmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCisgICAgICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNh
X21hc2spOworICAgICAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lKTsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gVGhyZWFkOjpzaWdu
YWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVT
VEFSVCB8IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lLCAmYWN0aW9uLCAwKTsKKyNlbmRpZgorICAgIH0pOwogfQogCi1zdGF0aWMgcHRocmVhZF90
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZChUaHJlYWRJZGVu
dGlmaWVyIGlkKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKCkKIHsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKS0+cHRocmVhZEhh
bmRsZSgpOworI2lmICFPUyhEQVJXSU4pCisgICAgc2lnc2V0X3QgbWFzazsKKyAgICBzaWdlbXB0
eXNldCgmbWFzayk7CisgICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKKyNlbmRpZgog
fQogCiBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAg
ICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIGNyZWF0ZVRocmVhZEludGVybmFsLgorICAg
IC8vIEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbC4KICAg
ICBhdXRvIGludm9jYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uPihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwotICAg
IGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQotewotICAgIGF1dG8g
aW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihl
bnRyeVBvaW50LCBkYXRhKTsKLSAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwotICAgIHB0aHJl
YWRfYXR0cl90IGF0dHI7Ci0gICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotI2lmIEhBVkUo
UU9TX0NMQVNTRVMpCi0gICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xhc3NfbnAoJmF0dHIsIGFk
anVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKSwgMCk7Ci0jZW5kaWYKLSAg
ICBpbnQgZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAmYXR0ciwgd3RmVGhy
ZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0gICAgcHRocmVhZF9hdHRyX2Rlc3Ry
b3koJmF0dHIpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCB3dGZUaHJl
YWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQogCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0
ZlRocmVhZEVudHJ5UG9pbnQuCi0gICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJ
bnZvY2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlYWtl
ZEludm9jYXRpb24pOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+
dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRyOwogCi0gICAgcmV0dXJu
IGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAg
aW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFy
KiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9O
UCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFkTmFtZSh0aHJlYWROYW1l
KSk7CkBAIC0yMDUsMTIzICsxNjEsNyBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRo
cmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gaWRlbnRpZmll
ckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgQVNTRVJUKGlkKTsKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Ci19Ci0gICAgCi12b2lkIGNoYW5n
ZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKLXsK
LSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
ICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxy
ZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0gICAg
fQotCi0gICAgaW50IHBvbGljeTsKLSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0KLSAg
ICBpZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsICZwb2xpY3ksICZwYXJh
bSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRh
OwotCi0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBh
cmFtKTsKLX0KLQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRo
cmVhZElEKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBsb2NrIGFjcm9z
cyB0aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBvdXIgdGhyZWFkIGFuZCBj
YXVzZSBkZWFkbG9jay4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJX
aXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5k
bGUpOwotICAgIH0KLQotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKHB0aHJlYWRI
YW5kbGUsIDApOwotCi0gICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKLSAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRy
eWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCi0gICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5l
ZC5cbiIsIHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElE
KTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+am9pbmFibGVTdGF0ZSgp
ID09IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOwotCi0gICAgLy8gVGhlIHRocmVhZCBoYXMgYWxy
ZWFkeSBleGl0ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgotICAgIGlmIChzdGF0ZS0+aGFzRXhp
dGVkKCkpCi0gICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgLy8gVGhl
IHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1
c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxs
IGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KLSAgICBlbHNlCi0gICAgICAgIHN0YXRlLT5kaWRKb2lu
KCk7Ci0KLSAgICByZXR1cm4gam9pblJlc3VsdDsKLX0KLQotdm9pZCBkZXRhY2hUaHJlYWQoVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHB0aHJlYWRfdCBwdGhy
ZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxk
KHRocmVhZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0KLSAgICBpbnQgZGV0YWNo
UmVzdWx0ID0gcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0gICAgaWYgKGRldGFjaFJl
c3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUg
dG8gYmUgZGV0YWNoZWRcbiIsIHRocmVhZElEKTsKLQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUg
PSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYg
KHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElE
KTsKLSAgICBlbHNlCi0gICAgICAgIHRocmVhZE1hcCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29t
ZURldGFjaGVkKCk7Ci19Ci0KLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAg
ICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBB
U1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7Ci0KLSAgICBpZiAoc3Rh
dGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKQotICAgICAgICB0
aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKQotewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJuIGlkOwotCi0g
ICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBl
c3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhh
bmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxp
emUoaWQpOwotICAgIHJldHVybiBpZDsKLX0KLQotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJRCwgaW50IHNpZ25hbE51bWJlcikKLXsKLSAgICBwdGhyZWFkX3QgcHRo
cmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0g
cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsK
LSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLSAgICBpbnQgZXJyTm8gPSBw
dGhyZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVyKTsKLSAgICByZXR1cm4gIWVy
ck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KKyAgICBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0KIAogTXV0ZXg6Ok11dGV4KCkKQEAgLTQxNSw2
ICsyNTUsMjcyIEBAIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQogICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKIH0KIAorVGhyZWFkOjpUaHJlYWQoKQoreworI2lm
ICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwg
LyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVl
IGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgorfQorCitUaHJlYWQ6On5UaHJlYWQo
KQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAg
IHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX2Rp
ZEV4aXQgPSB0cnVlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRD
YWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0
YWJsaXNoKHB0aHJlYWRfdCBoYW5kbGUpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIGlmICghbV9pZCkgeworICAgICAg
ICBzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkSWRlbnRpZmllcj4gcHJvdmlkZXIgeyAwIH07Cisg
ICAgICAgIG1faWQgPSArK3Byb3ZpZGVyOworI2lmIE9TKERBUldJTikKKyAgICAgICAgbV9wbGF0
Zm9ybVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxlKTsKKyNlbmRpZgorICAg
IH0KK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpbnQgcG9saWN5OworICAgIHN0
cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworICAgIGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0o
bV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCisgICAgICAgIHJldHVybjsKKworICAgIHBhcmFt
LnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOworCisgICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKG1f
aGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7Cit9CisKK2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0
aW9uKCkKK3sKKyAgICBwdGhyZWFkX3QgaGFuZGxlOworICAgIHsKKyAgICAgICAgV29yZExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9
CisKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihoYW5kbGUsIDApOworCisgICAg
aWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVu
dGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9p
ZCk7CisgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJ
ZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwgbV9pZCk7CisKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUo
KSA9PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwg
ZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24n
dCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5l
ZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICgh
aGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0
OworfQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKG1faGFu
ZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIlRocmVhZElk
ZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwgbV9pZCk7CisKKyAgICBp
ZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOworfQorCitSZWZQ
dHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQoreworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIHRocmVhZC5n
ZXQoKSwgZGF0YSk7CisgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsKKyAgICBwdGhyZWFkX2F0
dHJfdCBhdHRyOworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyNpZiBIQVZFKFFPU19D
TEFTU0VTKQorICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2NsYXNzX25wKCZhdHRyLCBhZGp1c3Rl
ZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCksIDApOworI2VuZGlmCisgICAgaW50
IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgJmF0dHIsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZh
dHRyKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50
cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVlX3B0ciBjb25zdHJ1Y3RvciBpbiB3
dGZUaHJlYWRFbnRyeVBvaW50LgorICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiogbGVha2Vk
SW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOworICAgIFVOVVNFRF9QQVJBTShsZWFr
ZWRJbnZvY2F0aW9uKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSk7Cisg
ICAgcmV0dXJuIHRocmVhZDsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQoreworICAg
IFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChk
YXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAgICAvLyBOb3QgYSBXVEYt
Y3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4K
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOworICAg
IHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBUaHJlYWRIb2xkZXI6Omlu
aXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7Cit9CisKK1RocmVhZElkZW50aWZpZXIg
VGhyZWFkOjpjdXJyZW50SUQoKQoreworICAgIHJldHVybiBjdXJyZW50KCkuaWQoKTsKK30KKwor
Ym9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQoreworICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5k
bGUsIHNpZ25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5z
IHN1Y2Nlc3MuCit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwg
UGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0aGlzICE9
ICZjdXJyZW50KCksICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJy
ZW50IHRocmVhZCBpdHNlbGYuIik7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworI2lmIE9TKERBUldJTikKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNw
ZW5kKG1fcGxhdGZvcm1UaHJlYWQpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
I2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9yIHJlc3Vt
ZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAgICAg
IC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4KKyAgICAg
ICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFkcyBBIGFu
ZCBCLgorICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBhdHRlbXB0
IHRvIHN1c3BlbmQgQS4KKyAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFuZCBsYXRl
ciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCisgICAgICAgIC8vIEluIHRoYXQg
Y2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9j
a2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRDb3VudCkgewor
ICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9zaWdx
dWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwgaGFu
ZGxlci4KKyAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0Zm9y
bXMsIGxpa2UgTGludXguCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBz
dG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNpZ25h
bCBoYW5kbGVyLgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAg
ICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgICAgICAgICAgc2VtX3dhaXQoJm1fc2VtYXBo
b3JlRm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5z
dXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhl
IGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVkLnN0b3Jl
KHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAgICAgICsr
bV9zdXNwZW5kQ291bnQ7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCit9CisK
K3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211
dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZShtX3BsYXRmb3JtVGhyZWFk
KTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJl
c3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAg
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlm
IChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBz
aWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwK
KyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQg
b25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlz
dGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgor
ICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNr
IHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAgICAgICAgLy8gMi4gVXNl
IHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUg
aGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhp
cy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21p
YyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgLy8gSW4gdGhp
cyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8g
ZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7Cisg
ICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZW1f
d2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVh
c2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVk
IGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9z
dXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAg
ICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2VuZGlmCit9CisKK3NpemVf
dCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQorewor
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisjaWYg
Q1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJzKSAvIHNp
emVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVB
RF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2
X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoUFBDKQorICAgIHVuc2lnbmVkIHVzZXJD
b3VudCA9IFBQQ19USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoUFBDNjQpCisgICAgdW5zaWdu
ZWQgdXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0
ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQor
ICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUo
QVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5U
OworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7
CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIGtlcm5f
cmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX2dldF9zdGF0ZShtX3BsYXRmb3JtVGhyZWFkLCBmbGF2
b3IsICh0aHJlYWRfc3RhdGVfdCkmcmVnaXN0ZXJzLCAmdXNlckNvdW50KTsKKyAgICBpZiAocmVz
dWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgIkphdmFTY3JpcHQgZ2FyYmFnZSBj
b2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRocmVhZF9nZXRfc3RhdGUgcmV0dXJuZWQgYW4gZXJy
b3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgaW5zaWRlIFJv
c2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgcmVzdWx0KTsKKyAgICAgICAgQ1JBU0go
KTsKKyAgICB9CisgICAgcmV0dXJuIHVzZXJDb3VudCAqIHNpemVvZih1aW50cHRyX3QpOworI2Vs
aWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShYODYpIHx8IENQ
VShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKQorICAgIHJl
Z2lzdGVycyA9IG1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7CisgICAgcmV0dXJuIHNpemVvZihQ
bGF0Zm9ybVJlZ2lzdGVycyk7CisjZWxzZQorICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsK
KyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlKTsKKyNpZiBIQVZFKFBUSFJFQURfTlBf
SCkgfHwgT1MoTkVUQlNEKQorI2lmICFPUyhPUEVOQlNEKQorICAgIC8vIGUuZy4gb24gRnJlZUJT
RCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKG1faGFuZGxl
LCAmYXR0cmlidXRlKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlv
biBpcyBub24tcG9ydGFibGU7IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50
IG5wIGFsdGVybmF0aXZlcworICAgIHB0aHJlYWRfZ2V0YXR0cl9ucChtX2hhbmRsZSwgJmF0dHJp
YnV0ZSk7CisjZW5kaWYKKworICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90IHN0
YWNrU2l6ZSA9IDA7CisgICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZhdHRyaWJ1
dGUsICZzdGFja0Jhc2UsICZzdGFja1NpemUpOworICAgIEFTU0VSVF9VTlVTRUQocmMsICFyYyk7
CisgICAgQVNTRVJUKHN0YWNrQmFzZSk7CisgICAgcmVnaXN0ZXJzLnN0YWNrUG9pbnRlciA9IHN0
YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXplOworCisgICAgcHRocmVhZF9h
dHRyX2Rlc3Ryb3koJmF0dHJpYnV0ZSk7CisKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdXaW4uY3BwCmluZGV4IDU0YjQzZWZlZjM1Y2Q2NjMyYTcwMDgxNTA3YTViMzc5OWRlZmI2ZmIu
LjAxODdlN2QwMzgwNjVlOGU2NTA3YzU2ZDg4MTgxYzFjNGFhZTU1YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nV2luLmNwcApAQCAtMTQwLDcwICsxNDAsMzkgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbmRpZgogfQogCi1zdGF0
aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhy
ZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkOwotICAgIAotICAgIGlm
IChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpc0luaXRpYWxpemVkID0g
dHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKLSAgICAv
LyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmlu
ZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4g
aW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgdGhy
ZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7Ci0g
ICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQotCi1zdGF0aWMg
SGFzaE1hcDxEV09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxEV09SRCwgSEFORExFPj4gbWFwOwotICAgIHJldHVybiBtYXA7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29u
Y2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpp
bml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAg
ICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRp
YyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBp
dCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVt
cHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAg
ICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICB9KTsK
IH0KIAotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIoRFdPUkQgdGhy
ZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0
ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFwKCkuY29udGFpbnModGhy
ZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRocmVhZEhhbmRsZSk7Ci19
CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFs
LgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7
CiAKLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlm
aWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAg
ICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0gbnVs
bHB0cjsKIAotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVh
ZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotICAgIHRocmVhZE1h
cCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFk
RW50cnlQb2ludCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+
ZGF0YSk7Ci0KICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBj
aGFyKiB0aHJlYWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChU
aHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKQogeworICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkp
OwogICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKKyAgICBhdXRvIGlu
dm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50
cnlQb2ludCwgdGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0g
cmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVyKSk7CiAgICAg
aWYgKCF0aHJlYWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpAQCAtMjE5LDUxICsxODgs
MzAgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlv
biBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURfUEFSQU0obGVha2VkSW52
b2NhdGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+
KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKHRo
cmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1cm4gdGhyZWFkSUQ7Cisg
ICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsKKyAg
ICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK1RocmVhZCYgVGhyZWFkOjpjdXJyZW50KCkK
IHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVh
ZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+
dGhyZWFkKCk7CiAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxlRm9ySWRl
bnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAgICAgIExPR19F
UlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2
ZSB0aHJlYWQiLCB0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBU
aHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmPFRocmVhZD4g
dGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAKLSAgICBTZXRUaHJlYWRQcmlvcml0
eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7Ci19CisgICAg
SEFORExFIGhhbmRsZTsKKyAgICBib29sIGlzU3VjY2Vzc2Z1bCA9IER1cGxpY2F0ZUhhbmRsZShH
ZXRDdXJyZW50UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNz
KCksICZoYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOworICAgIFJFTEVB
U0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0gICAg
Ci0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhy
ZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBMT0dfRVJST1IoIlRocmVh
ZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQgd2hl
biB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09SRCBqb2luUmVzdWx0ID0g
V2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRFKTsKLSAgICBpZiAoam9p
blJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlm
aWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFk
SUQpOwotCi0gICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAgICBjbGVhclRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotCi0gICAgcmV0dXJuIGpvaW5SZXN1bHQ7Cisg
ICAgdGhyZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7CisgICAgVGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJuIHRocmVhZC5nZXQoKTsK
IH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAg
ICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJlYWRIYW5kbGUpCi0gICAg
ICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKHRocmVhZElEKTsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFk
KCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQogewogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJyZW50VGhyZWFkSWQoKSk7CiB9CkBA
IC00OTIsNiArNDQwLDk5IEBAIERXT1JEIGFic29sdXRlVGltZVRvV2FpdFRpbWVvdXRJbnRlcnZh
bChkb3VibGUgYWJzb2x1dGVUaW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxEV09SRD4oKGFi
c29sdXRlVGltZSAtIGN1cnJlbnRUaW1lKSAqIDEwMDAuMCk7CiB9CiAKK1RocmVhZDo6VGhyZWFk
KCkKK3sKK30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4
aXQoKQoreworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgICAgICAvLyBJdCBpcyBPSyBiZWNhdXNlIEZM
U0FsbG9jJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlcmUgYXJlIHNv
bWUgb3BlbiBoYW5kbGVzLgorICAgICAgICAvLyBUaGlzIGVhc2lseSBlbnN1cmVzIHRoYXQgYWxs
IHRoZSB0aHJlYWQgcmVzb3VyY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KKyAgICAgICAg
aWYgKG1faGFuZGxlKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUobV9oYW5kbGUpOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRDYWxsYmFjaykKKyAgICAgICAgY2Fs
bGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNoKEhBTkRMRSBoYW5kbGUs
IFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1faWQgPSB0aHJlYWRJRDsK
K30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0VGhyZWFkUHJpb3JpdHkobV9oYW5k
bGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7Cit9CisKK2ludCBUaHJlYWQ6Ondh
aXRGb3JDb21wbGV0aW9uKCkKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIHsKKyAgICAgICAg
V29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRs
ZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCho
YW5kbGUsIElORklOSVRFKTsKKyAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKKyAg
ICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFk
bG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CisKKyAgICBXb3JkTG9ja0hvbGRlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CisK
KyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8gbm90aGluZy4KKyAgICAv
LyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1
cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0
IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAg
ICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0OworfQorCit2b2lkIFRocmVh
ZDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBXZSBmb2xsb3cgdGhlIHB0aHJlYWQgc2VtYW50aWNzOiBl
dmVuIGFmdGVyIHRoZSBkZXRhY2ggaXMgY2FsbGVkLAorICAgIC8vIHdlIHN0aWxsIGNhbiBwZXJm
b3JtIG9wZXJhdGlvbiBvbnRvIHRoZSB0aHJlYWQuIFRvIGRvIHNvLCB3ZSBkbworICAgIC8vIG5v
dGhpbmcgaGVyZSBpbiBXaW5kb3dzLiBDbG9zZUhhbmRsZSB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0
aWNhbGx5CisgICAgLy8gYnkgdGhlIEZMUyBkZXN0cnVjdG9yIG9uIHRocmVhZCB0ZXJtaW5hdGlv
bi4KKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaWYgKCFoYXNFeGl0
ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KKworYXV0byBUaHJlYWQ6OnN1
c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJvcj4KK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgRFdPUkQgcmVzdWx0ID0gU3VzcGVu
ZFRocmVhZChtX2hhbmRsZSk7CisgICAgaWYgKHJlc3VsdCAhPSAoRFdPUkQpLTEpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7Cit9CisKKy8v
IER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQg
ZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdv
cmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBSZXN1bWVUaHJlYWQobV9oYW5kbGUp
OworfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgcmVn
aXN0ZXJzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsK
KyAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxlLCAmcmVnaXN0ZXJzKTsK
KyAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
I2VuZGlmIC8vIE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRleCBiMmEwYTc5ZjRhYjVh
YWMyODliMTY5ZjkyYmJjMWE4MDU4NTJjYTMyLi45NzMwZmNmMGYwOTIxZmRlZDkwZjg5ZjEyOTBl
Nzc0OTBiNTM5NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBX
b3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9ucywgY29uc3Qgc3RkOjpm
dW5jdGlvbjx2b2lkIChzaXoKIAogICAgICAgICAgICAgbV93b3JrZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkodGhyZWFkQ291bnQpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmtlcnMuYXBwZW5k
KGNyZWF0ZVRocmVhZChTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBpKS51
dGY4KCkuZGF0YSgpLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQo
VGhyZWFkOjpjcmVhdGUoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wgV29ya2VyICV1IiwgaSku
dXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgp
OwogICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb247
CiAgICAgICAgIERlcXVlPGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4qPiBtX3F1ZXVlOwog
Ci0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3dvcmtlcnM7CisgICAgICAgIFZl
Y3RvcjxSZWZQdHI8VGhyZWFkPj4gbV93b3JrZXJzOwogICAgIH07CiAKICAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPFRocmVhZFBvb2w+IHRocmVhZFBvb2w7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCmluZGV4
IGE0N2YyMWUyMGQzMWJjOGJmNzMxOGY0MWI5NTdhYjM2NmMxOTE1MDMuLjc2MzQ1YzA2OTMxNjRm
NjhjYTRiMWM2NjQ0ODRhMjczY2M2ZThiZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0xMDMsNyArMTAz
LDcgQEAgY2xhc3MgV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uRGlzcGF0Y2hlciB7
CiAKICAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwogI2VsaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkg
fHwgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1
ZXVlVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya1F1ZXVlVGhyZWFkOwogICAgIExv
Y2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgIENvbmRpdGlvbiBtX2lu
aXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgIFJ1bkxvb3AqIG1fcnVuTG9vcDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCAxYTcyMTlhZDI1OWVkNzU5NzJh
NWE0NThjNWM0ODQ5N2EzODhlNGQzLi41OWVlMWY4NWI0MzVjZTFhNzJmNTA1MGY0ZGY2MmVmY2Zi
YmM4MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCkBAIC00OSwx
NSArNDksMTUgQEAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFzc190IGRpc3BhdGNoUU9TQ2xhc3Mo
V29ya1F1ZXVlOjpRT1MgcW9zKQogewogICAgIHN3aXRjaCAocW9zKSB7CiAgICAgY2FzZSBXb3Jr
UXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlOgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1ND
bGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOwogICAgIGNhc2Ug
V29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKTsKICAgICBjYXNlIFdv
cmtRdWV1ZTo6UU9TOjpEZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhR
T1NfQ0xBU1NfREVGQVVMVCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX0RFRkFVTFQpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlV0aWxpdHk6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAg
ICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7
CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3VuZDoKLSAgICAgICAgcmV0dXJuIGFk
anVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgICAgICByZXR1cm4gVGhy
ZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsKICAgICB9CiB9CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmlj
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKaW5kZXgg
OTM0YTM4Y2JiZTY0YmJmZmFlYjRkMzdkZjFiOGQ5OTUyYjg4NTM0NC4uZGE4NzVkMWZhMDRjZWY1
MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0NDYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2Vu
ZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dv
cmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zNSw3ICszNSw3IEBACiB2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1f
d29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKG5hbWUsIFt0aGlzXSB7CisgICAgbV93b3Jr
UXVldWVUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbdGhpc10gewogICAgICAgICB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAg
LTUxLDggKzUxLDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAg
aWYgKG1fcnVuTG9vcCkKICAgICAgICAgbV9ydW5Mb29wLT5zdG9wKCk7CiAgICAgaWYgKG1fd29y
a1F1ZXVlVGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVhZCk7
Ci0gICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICAgICAgbV93b3JrUXVldWVUaHJl
YWQtPmRldGFjaCgpOworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IG51bGxwdHI7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhh
bmRsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXJMaW51eC5jcHAKaW5kZXggYjI5NDE5NDQ0ZTc0MjczNmE2N2RjMGMxYWE4NTFkZWMzYWU1ODdl
NC4uZmZkNDAwODU1YjgyOTNhOGI1YTNjM2FlYjIzYWI3N2FhZjVhN2VlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcApAQCAt
MTE5LDcgKzExOSwxMCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2
ZW50RkRQb2xsZXIoaW50IGZkLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKAogICAgIH0sIHRoaXMsIG51
bGxwdHIpOwogICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgbnVsbHB0cik7CiAj
ZWxzZQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIldURjogTWVtb3J5UHJlc3N1cmVI
YW5kbGVyIiwgW3RoaXNdIHsgcmVhZEFuZE5vdGlmeSgpOyB9CisgICAgbV90aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZSgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLAorICAgICAgICBbdGhpc10g
eworICAgICAgICAgICAgcmVhZEFuZE5vdGlmeSgpOworICAgICAgICB9KTsKICNlbmRpZgogfQog
CkBAIC0xMjksNyArMTMyLDcgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9sbGVy
Ojp+RXZlbnRGRFBvbGxlcigpCiAjaWYgVVNFKEdMSUIpCiAgICAgZ19zb3VyY2VfZGVzdHJveSht
X3NvdXJjZS5nZXQoKSk7CiAjZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAg
ICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvbWFjL01haW5UaHJlYWRNYWMubW0gYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVh
ZE1hYy5tbQppbmRleCAyNzJlM2Y1Zjk3NzQwYzlhMTFmNzQ4YThiNWFlNjAwNjI2NmU5MmQ2Li5m
YjI1YWZhZmQ4NDQ3ZmYyYzJlYjI1MDI3MmY0ZjJhYjFlMzI1OTljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMv
TWFpblRocmVhZE1hYy5tbQpAQCAtNjQsOCArNjQsOCBAQCBzdGF0aWMgcHRocmVhZF90IG1haW5U
aHJlYWRQdGhyZWFkOwogc3RhdGljIE5TVGhyZWFkKiBtYWluVGhyZWFkTlNUaHJlYWQ7CiAKICNp
ZiBVU0UoV0VCX1RIUkVBRCkKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIHNBcHBsaWNhdGlvblVJ
VGhyZWFkSWRlbnRpZmllcjsKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIHNXZWJUaHJlYWRJZGVu
dGlmaWVyOworc3RhdGljIFJlZlB0cjxUaHJlYWQ+IHNBcHBsaWNhdGlvblVJVGhyZWFkOworc3Rh
dGljIFJlZlB0cjxUaHJlYWQ+IHNXZWJUaHJlYWQ7CiAjZW5kaWYKIAogdm9pZCBpbml0aWFsaXpl
TWFpblRocmVhZFBsYXRmb3JtKCkKQEAgLTE3NCwxMyArMTc0LDEzIEBAIGJvb2wgaXNXZWJUaHJl
YWQoKQogdm9pZCBpbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIoKQogewog
ICAgIEFTU0VSVChwdGhyZWFkX21haW5fbnAoKSk7Ci0gICAgc0FwcGxpY2F0aW9uVUlUaHJlYWRJ
ZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOworICAgIHNBcHBsaWNhdGlvblVJVGhyZWFkID0g
VGhyZWFkOjpjdXJyZW50KCk7CiB9CiAKIHZvaWQgaW5pdGlhbGl6ZVdlYlRocmVhZElkZW50aWZp
ZXIoKQogewogICAgIEFTU0VSVCghcHRocmVhZF9tYWluX25wKCkpOwotICAgIHNXZWJUaHJlYWRJ
ZGVudGlmaWVyID0gY3VycmVudFRocmVhZCgpOworICAgIHNXZWJUaHJlYWQgPSBUaHJlYWQ6OmN1
cnJlbnQoKTsKIH0KIAogdm9pZCBpbml0aWFsaXplV2ViVGhyZWFkUGxhdGZvcm0oKQpAQCAtMTky
LDE0ICsxOTIsMTQgQEAgdm9pZCBpbml0aWFsaXplV2ViVGhyZWFkUGxhdGZvcm0oKQogICAgIG1h
aW5UaHJlYWROU1RocmVhZCA9IFtbTlNUaHJlYWQgY3VycmVudFRocmVhZF0gcmV0YWluXTsKIH0K
IAotYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWRJZCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVh
ZCYgdGhyZWFkKQogewotICAgIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZElkID0gY3Vy
cmVudFRocmVhZCgpOwotICAgIGlmICh0aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkSWQpCisgICAg
VGhyZWFkJiBjdXJyZW50VGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CisgICAgaWYgKHRocmVh
ZCA9PSBjdXJyZW50VGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh0aHJl
YWRJZCA9PSBzV2ViVGhyZWFkSWRlbnRpZmllciB8fCB0aHJlYWRJZCA9PSBzQXBwbGljYXRpb25V
SVRocmVhZElkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiAoY3VycmVudFRocmVhZElkID09IHNX
ZWJUaHJlYWRJZGVudGlmaWVyIHx8IGN1cnJlbnRUaHJlYWRJZCA9PSBzQXBwbGljYXRpb25VSVRo
cmVhZElkZW50aWZpZXIpICYmIHdlYlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNh
YmxlZCgpOworICAgIGlmICh0aHJlYWQgPT0gc1dlYlRocmVhZCB8fCB0aHJlYWQgPT0gc0FwcGxp
Y2F0aW9uVUlUaHJlYWQpCisgICAgICAgIHJldHVybiAoY3VycmVudFRocmVhZCA9PSBzV2ViVGhy
ZWFkIHx8IGN1cnJlbnRUaHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWQpICYmIHdlYlRocmVh
ZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcAppbmRleCA4NzQ3NjQzOGNhZTY1YTYzODdkOTAxYTc1Mjg4MTVlYzk1NDdm
MjMyLi45Y2QzZGI0ZDFiYzE0YTM2MTczMjFhYjAwNWEwMTk2MjA1Mjc4Mjc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cApAQCAtNTYsNyArNTYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihJREJCYWNraW5nU3RvcmVU
ZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2JhY2tpbmdTdG9yZVRl
bXBvcmFyeUZpbGVIYW5kbGVyKGZpbGVIYW5kbGVyKQogewogICAgIExvY2tlcjxMb2NrPiBsb2Nr
ZXIobV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jayk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0
ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0
YWJhc2UgU2VydmVyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJTZXJ2ZXI6
OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9
CiAKIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCkBA
IC02Niw3ICs2Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhCiAgICAgTE9HKEluZGV4ZWRE
QiwgIklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgu
dXRmOCgpLmRhdGEoKSk7CiAKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VUaHJl
YWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2VydmVy
OjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwor
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVu
dHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiB2b2lkIElEQlNlcnZl
cjo6cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYgY29ubmVjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuaAppbmRleCAyNTZjZDUwN2U2ZTZkN2Y2NTZlZWNlMGMxMTk4OTQ4ZmQ5MjNkYTFkLi45MzRh
MWQxNzQ1MjkwODQyOGEzYWU2ZTBlZDdlNTEwYTlhOWNhNmU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMjUsNyAr
MTI1LDcgQEAgY2xhc3MgSURCU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURCU2VydmVyPiB7
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1f
Y29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRlbnRpZmllciwgUmVmUHRy
PFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsKIAotICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVh
ZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2s7CiAg
ICAgTG9jayBtX21haW5UaHJlYWRSZXBseUxvY2s7CiAgICAgYm9vbCBtX21haW5UaHJlYWRSZXBs
eVNjaGVkdWxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCmluZGV4IDI5MmYwNWI4Y2Q1MDZlMjI5YWU2
YjhiZDg2MjljMDk1NGQxODQ1OWIuLmM4MTYxNzE2OWEzMTQyYjE4ZTlkN2U3NTNiZmQ5YjgwY2Ez
MTkwNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNB
dWRpb0RlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5
bmNBdWRpb0RlY29kZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjpB
c3luY0F1ZGlvRGVjb2RlcigpCiB7CiAgICAgLy8gU3RhcnQgd29ya2VyIHRocmVhZC4KICAgICBM
b2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBtX3RocmVhZElEID0g
Y3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlv
IERlY29kZXIiKTsKKyAgICBtX3RocmVhZElEID0gVGhyZWFkOjpjcmVhdGUoQXN5bmNBdWRpb0Rl
Y29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVjb2RlciIpOwogfQogCiBBc3luY0F1
ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKQEAgLTQ3LDggKzQ3LDggQEAgQXN5bmNB
dWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCiAgICAgbV9xdWV1ZS5raWxsKCk7CiAg
ICAgCiAgICAgLy8gU3RvcCB0aHJlYWQuCi0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90
aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWRJRC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKKyAgICBtX3RocmVhZElEID0gbnVsbHB0cjsKIH0KIAogdm9pZCBBc3luY0F1
ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0YSwgZmxv
YXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxi
YWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCmlu
ZGV4IGJiNWM1ZTMzN2I1ZWNmMWY4ZTYxNzUzYTI5ZjhkMGY5NzE0MTU1M2QuLmUxYjNhM2VhZWU2
YmQ1NTRmZDdjY2FkM2NkY2FlYmYzNWJhODQ1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKQEAgLTc3LDcgKzc3LDcgQEAg
Y2xhc3MgQXN5bmNBdWRpb0RlY29kZXIgewogICAgIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5KHZv
aWQqIHRocmVhZERhdGEpOwogICAgIHZvaWQgcnVuTG9vcCgpOwogCi0gICAgV1RGOjpUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWRJRDsKICAg
ICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKICAgICBNZXNzYWdlUXVldWU8RGVjb2RpbmdU
YXNrPiBtX3F1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA1MDUy
MzA0MTk3Y2RlZGRlNDdmZGNiYjkxMmVjNDc0MDU1Nzk3NDI4Li5lN2Q1NjdkZmVhZDQ0MmMzOTZh
ZjBmNzA1MTA5NzNmZmUxNDhhYjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBA
IC00MSw3ICs0MSw3IEBAIGNvbnN0IHNpemVfdCByZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsKIE9m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1
ZGlvQ29udGV4dCYgY29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKICAgICA6IEF1
ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQog
ICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotICAgICwgbV9yZW5kZXJUaHJlYWQo
MCkKKyAgICAsIG1fcmVuZGVyVGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX3N0YXJ0ZWRSZW5kZXJp
bmcoZmFsc2UpCiB7CiAgICAgbV9yZW5kZXJCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKHJlbmRlclRh
cmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSk7CkBAIC02Niw4ICs2
Niw4IEBAIHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKLSAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAgICBtX3JlbmRlclRo
cmVhZCA9IDA7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwor
ICAgICAgICBtX3JlbmRlclRocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgQXVkaW9Ob2Rl
Ojp1bmluaXRpYWxpemUoKTsKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBPZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKICAgICBpZiAoIW1fc3RhcnRlZFJlbmRlcmlu
ZykgewogICAgICAgICBtX3N0YXJ0ZWRSZW5kZXJpbmcgPSB0cnVlOwogICAgICAgICByZWYoKTsg
Ly8gU2VlIGNvcnJlc3BvbmRpbmcgZGVyZWYoKSBjYWxsIGluIG5vdGlmeUNvbXBsZXRlRGlzcGF0
Y2goKS4KLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRl
cmVyIik7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJl
bmRlcmVyIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRleCA3NTU2
MDQ2NDcyMzJjNGJjNTEzY2M5ZTM5ZGQ0NDVmMzhiNjJjZWY0Li41NjkwMTM4YjE2NTcwYjNmOWQy
MzdmOWRkNGE4ZWEyM2Q3M2ZmYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTYz
LDcgKzYzLDcgQEAgY2xhc3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1
ZGlvRGVzdGluYXRpb25Ob2RlIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwog
ICAgIAogICAgIC8vIFJlbmRlcmluZyB0aHJlYWQuCi0gICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRp
ZmllciBtX3JlbmRlclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3JlbmRlclRocmVhZDsK
ICAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsKICAgICBzdGF0aWMgdm9pZCBvZmZsaW5lUmVu
ZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBvZmZsaW5lUmVuZGVyKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4
IDg4NjlmNmJmMjIzMjMyZTYzY2MzZmI1MmUxNmFlMWRiM2ViNDFiZTYuLjhjOTJkNmU1Mzk2YWRm
MTJmYmRkNjhkN2FjOTdmOWVkMTlhZGMwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC03NzAsOCArNzcwLDcgQEAgU2VjdXJpdHlP
cmlnaW5EYXRhIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpCiB7CiAgICAgaWYgKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBTZWN1
cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX2NvbnRleHRUaHJlYWRTZWN1cml0
eU9yaWdpbi5nZXQoKSk7Ci0gICAgYXV0byYgdGhyZWFkID0gZGF0YWJhc2VUaHJlYWQoKTsKLSAg
ICBpZiAoY3VycmVudFRocmVhZCgpID09IHRocmVhZC5nZXRUaHJlYWRJRCgpKQorICAgIGlmIChj
dXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VUaHJlYWQoKS5nZXRUaHJlYWRJRCgpKQogICAgICAg
ICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9kYXRhYmFz
ZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAwZGRlNWY3MjY4ZWU2NDJjMDA0MzA1Y2VmZTM2YjFj
OWU0NGI4N2QzLi5iMzUzYmI4ZmE1NzViYWY4NTU4MTEyYWI1M2VhODNhMWM5MDg5OGYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhy
ZWFkLmNwcApAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wgRGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KCkK
IHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlm
IChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRo
cmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKKyAgICBtX3RocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAi
V2ViQ29yZTogRGF0YWJhc2UiKTsKIAotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVy
biBtX3RocmVhZDsKIH0KIAogdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9u
KERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMpCkBAIC0xMTAsNyArMTEwLDcg
QEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgIC8vIENsZWFuIHVw
IHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGRhdGFiYXNlIHRo
cmVhZAogICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+c2h1dGRvd24oKTsKIAotICAgIExP
RyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhlIHJl
ZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocykiLCBt
X3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0
IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQg
JXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWQtPmlkKCksIHRoaXMs
IHJlZkNvdW50KCkpOwogCiAgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlcyB0aGF0IHdlIHJhbiB0
cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFueSB0cmFuc2FjdGlvbnMgYXJl
IHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3ZSBkb24ndCBsZWF2ZSB0aGUg
ZGF0YWJhc2UgaW4gYW4KICAgICAvLyBpbmNvbnNpc3RlbnQgb3IgbG9ja2VkIHN0YXRlLgpAQCAt
MTI3LDcgKzEyNyw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAg
ICAgICAgb3BlbkRhdGFiYXNlLT5wZXJmb3JtQ2xvc2UoKTsKIAogICAgIC8vIERldGFjaCB0aGUg
dGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBh
bnlvbmUgZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+
ZGV0YWNoKCk7CiAKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jID0g
bV9jbGVhbnVwU3luYzsKIApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoJlRocmVhZDo6Y3VycmVudCgpID09IG1f
dGhyZWFkKTsKICAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFz
ZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZCgmZGF0YWJhc2UpOwogfQpAQCAtMTUxLDcg
KzE1MSw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFi
YXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0YWJhc2VTZXRN
dXRleCk7CiAKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAg
IEFTU0VSVCgmVGhyZWFkOjpjdXJyZW50KCkgPT0gbV90aHJlYWQpOwogICAgIEFTU0VSVChtX3F1
ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwog
ICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJlbW92ZSgmZGF0YWJhc2UpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCmluZGV4IGVj
MDQxZTMxODE3MjQ5MmVjYTZiY2VmZThmMWRhMjVlYzkyZWQyNmMuLmE1MjEyZGZiOGIxNzJjZTJm
ZjZhOTg4OGRlMGE5ZGI5NzdhZTJkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3Mg
RGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJl
YWQ+IHsKIAogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlJik7CiAgICAgdm9p
ZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYpOwotICAgIFRocmVhZElkZW50aWZpZXIg
Z2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmll
ciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9
CiAKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAKQEAgLTY5LDcg
KzY5LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKICAgICB2b2lkIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICBM
b2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAg
UmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX3NlbGZSZWY7CiAKICAgICBNZXNzYWdlUXVldWU8RGF0
YWJhc2VUYXNrPiBtX3F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvR0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJv
bGxlci5jcHAKaW5kZXggNmY5ZmNhNjdmM2M0N2FkZGM4M2RlYzhjYjBkNWViOGNjYjQwZDc0My4u
MTM5YWE5OTFhMTZlYWQyMmY2OGY1MDFiZTdiOTQ1OTYzMjIxMzVkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCB2
b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiAK
IHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVi
dWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKIHsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEID0gY3JlYXRlVGhyZWFkKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xsZXIiKTsK
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShjb2xsZWN0LCAwLCAi
V2ViQ29yZTogR0NDb250cm9sbGVyIik7CiAKICAgICBpZiAod2FpdFVudGlsRG9uZSkgewotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgICAgIHRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRldGFj
aFRocmVhZCh0aHJlYWRJRCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBHQ0Nv
bnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wg
ZW5hYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJl
YW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCmluZGV4
IDE2OGU0ZTI3Nzk1ZDQyNWY0MDRmMTc1YzliY2JhOTNmNzM2ODA3NGMuLjU1YzdjYjAyMzk4NTk5
Yzk3MWU2YTM3YTBmOWE3MjQ4NDg0MmU2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgY2FsbE9uRmls
ZVRocmVhZChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogCiAgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0
ZUZpbGVUaHJlYWRPbmNlLCBbXSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5
bmNGaWxlU3RyZWFtIiwgW10geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiV2ViQ29yZTogQXN5
bmNGaWxlU3RyZWFtIiwgW10gewogICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAg
ICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcAppbmRleCA0Y2RjZmFhZDZlODMyYTM5YTVjMzUyNjU4MDU4NTA4NmIz
ZDlmNzJmLi5hODIzMzMxNmVmMTcyNGZmNzUzYzkzOTJlOWJkNGI3MTllYWFkZGU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTQ3LDcgKzQ3LDcg
QEAKICNkZWZpbmUgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpIEFTU0VSVCghbV9zeW5jVGhyZWFk
UnVubmluZyB8fCAhSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAvLyBGb3IgbWV0aG9kcyB0aGF0
IGFyZSBtZWFudCB0byBzdXBwb3J0IHRoZSBzeW5jIHRocmVhZCBPTkxZCi0jZGVmaW5lIElTX0lD
T05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSkKKyNkZWZp
bmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5bmNUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKQogI2RlZmluZSBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpIEFTU0VSVChJU19JQ09OX1NZ
TkNfVEhSRUFEKCkpCiAKICNpZiBQTEFURk9STShHVEspCkBAIC0xNDEsNyArMTQxLDcgQEAgYm9v
bCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpCiAgICAgLy8gTG9jayBoZXJlIGFzIHdlbGwgYXMgZmlyc3QgdGhpbmcgaW4g
dGhlIHRocmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNuJ3QgYWN0dWFsbHkgY29tbWVuY2UgdW50aWwg
dGhlIGNyZWF0ZVRocmVhZCgpIGNhbGwgCiAgICAgLy8gY29tcGxldGVzIGFuZCBtX3N5bmNUaHJl
YWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3luY0xvY2subG9jaygpOwotICAgIG1f
c3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNU
aHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIpOworICAgIG1fc3luY1Ro
cmVhZCA9IFRocmVhZDo6Y3JlYXRlKEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVh
ZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogSWNvbkRhdGFiYXNlIik7CiAgICAgbV9zeW5jVGhyZWFk
UnVubmluZyA9IG1fc3luY1RocmVhZDsKICAgICBtX3N5bmNMb2NrLnVubG9jaygpOwogICAgIGlm
ICghbV9zeW5jVGhyZWFkKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpj
bG9zZSgpCiAgICAgICAgIHdha2VTeW5jVGhyZWFkKCk7CiAgICAgICAgIAogICAgICAgICAvLyBX
YWl0IGZvciB0aGUgc3luYyB0aHJlYWQgdG8gdGVybWluYXRlCi0gICAgICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKG1fc3luY1RocmVhZCk7CisgICAgICAgIG1fc3luY1RocmVhZC0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gZmFsc2U7
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAppbmRleCAwNjFh
ZjRhMTI1NTc3MWRlMTFhMzJmNTY4M2MwZWZkYTU5MjkzYjlkLi44NjQwOTU1NDc1MzNmZDg5MGYw
M2FmZTkyYmIwNmY2MDg3ZWU3MzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIEljb25EYXRhYmFzZSBmaW5hbCA6
IHB1YmxpYyBJY29uRGF0YWJhc2VCYXNlIHsKICAgICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7CiAg
ICAgCiAgICAgVGltZXIgbV9zeW5jVGltZXI7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3N5bmNU
aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9zeW5jVGhyZWFkOwogICAgIGJvb2wgbV9zeW5j
VGhyZWFkUnVubmluZzsKICAgICAKICAgICBIYXNoU2V0PFJlZlB0cjxEb2N1bWVudExvYWRlcj4+
IG1fbG9hZGVyc1BlbmRpbmdEZWNpc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwCmluZGV4IDkxMjAwYzM0NWY0NTVmOTZkNDk0YmZkMmFkNzAzZjI4YzVj
NjI5ZDEuLmQ5YjZmNzJmYTM2ZmE3MDBjODI2ZjNjOTdkNmJhYTAyZDQyZThiNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcApAQCAtOTYsMTEgKzk2LDEx
IEBAIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6bm90aWZ5T2JzZXJ2ZXJzKFJlc291cmNlVXNh
Z2VEYXRhJiYgZGF0YSkKIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJ
Zk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJl
YWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdm0gPSAmY29tbW9uVk0oKTsKLSAgICBtX3Ro
cmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJD
b3JlOiBSZXNvdXJjZVVzYWdlIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJl
YWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0KIAogdm9pZCBS
ZXNvdXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiByZXNvdXJjZVVzYWdlVGhy
ZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFk
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAppbmRleCAxOGEx
ZTY3NTQzZDIyMDljMTc5NTc0NzM2NjIyYTc4YjM4NGJiOGZjLi5lZmRlMjdlZmU2YjBhYzQ1NDY0
ZGU4OTFjNjdjZTc5ZjljZjJlMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VUaHJlYWQuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBSZXNvdXJjZVVzYWdlVGhyZWFkIHsK
ICAgICB2b2lkIHRocmVhZEJvZHkoKTsKICAgICB2b2lkIHBsYXRmb3JtVGhyZWFkQm9keShKU0M6
OlZNKiwgUmVzb3VyY2VVc2FnZURhdGEmKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJl
YWRJZGVudGlmaWVyIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0
ciB9OwogICAgIExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBI
YXNoTWFwPHZvaWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
Jik+PiBtX29ic2VydmVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IDczMGMwYTZiZDkzZjQ1NzhkMWVkYmY5YWNlMWNkODY1
NjZlNmM5ODguLmQyMDc4NDA1NjBkZGY5MDU5MGEwZGFkZDI3MzA4NGM5MWM5ZmIxMzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApA
QCAtMzUsMTQgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcm9sbGluZ1RocmVh
ZDo6U2Nyb2xsaW5nVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgIDog
bV90aHJlYWQobnVsbHB0cikKIHsKIH0KIAogYm9vbCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVu
dFRocmVhZCgpCiB7Ci0gICAgYXV0byB0aHJlYWRJZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFk
OjpzaW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZpZXI7Ci0gICAgcmV0dXJuIHRocmVhZElkZW50
aWZpZXIgJiYgY3VycmVudFRocmVhZCgpID09IHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRy
PFRocmVhZD4gdGhyZWFkID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZDsK
KyAgICByZXR1cm4gdGhyZWFkICYmIHRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7CiB9
CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1
bmN0aW9uKQpAQCAtNzQsMTQgKzc0LDE0IEBAIFNjcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhy
ZWFkOjpzaW5nbGV0b24oKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZO
ZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFk
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGluaXRp
YWxpemUgdGhlIHJ1biBsb29wLgogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2Nr
PiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKLSAgICAgICAgbV90aHJlYWRJZGVu
dGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Ny
b2xsaW5nIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJh
Y2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKICAgICAgICAgCiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0
KGxvY2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFkUnVuTG9vcDsgfSk7CkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiAKIHZvaWQg
U2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpCiB7
Ci0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKKyAgICBXVEY6
OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCk7CiAgICAgc3RhdGlj
X2Nhc3Q8U2Nyb2xsaW5nVGhyZWFkKj4oc2Nyb2xsaW5nVGhyZWFkKS0+dGhyZWFkQm9keSgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5o
CmluZGV4IGRlMDYyZDc3YWMwMWRmOWQyYTA5ODYwZWJlNmI4ZTlmZDNjZmY1YzAuLmQ4ODkyZjA1
YmU2NDM3ZDRhYWNjMGE3NTFhN2NhN2U5M2JlZTBkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNz
IFNjcm9sbGluZ1RocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2so
KTsKICNlbmRpZgogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7Cisg
ICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXpl
UnVuTG9vcENvbmRpdGlvblZhcmlhYmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11
dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFi
YXNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFz
ZUxvYWRlci5jcHAKaW5kZXggZjcxMzMzYzVhMzdhOTk4OTY0ZjNhNzQxYzczMTUyZTk1MTQ2NmNm
Ni4uZGRiZTNiYTk4MGU0NTBhNDk0Y2QwNjQ4ZjQxYjVlMzZhZmVlYjVmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCkBA
IC02NCw3ICs2NCw3IEBAIFBhc3NSZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVyPiBIUlRGRGF0YWJh
c2VMb2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hyb25vdXNseUlmCiB9CiAKIEhSVEZEYXRhYmFz
ZUxvYWRlcjo6SFJURkRhdGFiYXNlTG9hZGVyKGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2Rh
dGFiYXNlTG9hZGVyVGhyZWFkKDApCisgICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKG51bGxw
dHIpCiAgICAgLCBtX2RhdGFiYXNlU2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBIUlRGRGF0YWJhc2VM
b2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSgpCiAgICAgCiAgICAgaWYgKCFtX2hydGZEYXRhYmFz
ZS5nZXQoKSAmJiAhbV9kYXRhYmFzZUxvYWRlclRocmVhZCkgewogICAgICAgICAvLyBTdGFydCB0
aGUgYXN5bmNocm9ub3VzIGRhdGFiYXNlIGxvYWRpbmcgcHJvY2Vzcy4KLSAgICAgICAgbV9kYXRh
YmFzZUxvYWRlclRocmVhZCA9IGNyZWF0ZVRocmVhZChkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlz
LCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFi
YXNlIGxvYWRlciIpOwogICAgIH0KIH0KIApAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgSFJURkRh
dGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbigpCiAgICAgCiAgICAg
Ly8gd2FpdEZvclRocmVhZENvbXBsZXRpb24oKSBzaG91bGQgbm90IGJlIGNhbGxlZCB0d2ljZSBm
b3IgdGhlIHNhbWUgdGhyZWFkLgogICAgIGlmIChtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKQotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKLSAg
ICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0g
bnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAppbmRleCBjODY5ZDEzN2Ex
ZGIyZjUyNDk4ZDBlMWI2NWQ1ODdlNmM4MTliMzgxLi4zYWQyNTFmMjE5OTA5ZjRiYzY0NTRkMDEz
MjAxYjZhN2NhNzAyNjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9IUlRGRGF0YWJhc2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9IUlRGRGF0YWJhc2VMb2FkZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBIUlRGRGF0YWJh
c2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxIUlRGRGF0YWJhc2VMb2FkZXI+IHsKIAogICAg
IC8vIEhvbGRpbmcgYSBtX3RocmVhZExvY2sgaXMgcmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgbV9k
YXRhYmFzZUxvYWRlclRocmVhZC4KICAgICBMb2NrIG1fdGhyZWFkTG9jazsKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9k
YXRhYmFzZUxvYWRlclRocmVhZDsKIAogICAgIGZsb2F0IG1fZGF0YWJhc2VTYW1wbGVSYXRlOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
Y3BwCmluZGV4IDk2ZjMzMDgyODA3OWE3OWFkNjQ4MjBkMDcyMWM1OWM1ZWExNmZkYjEuLjIxYmU5
OTZlZjM3ZTUzZGI3MDMxMDAxOTYyN2MwYzQwZDJiMjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3
IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxz
ZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgLy8gU3RhcnQgdXAgYmFja2dyb3VuZCB0
aHJlYWQKICAgICAvLyBGSVhNRTogd291bGQgYmUgYmV0dGVyIHRvIHVwIHRoZSB0aHJlYWQgcHJp
b3JpdHkgaGVyZS4gIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZWFsLXRpbWUsIGJ1dCBoaWdoZXIg
dGhhbiB0aGUgZGVmYXVsdC4uLgogICAgIGlmICh0aGlzLT51c2VCYWNrZ3JvdW5kVGhyZWFkcygp
ICYmIG1fYmFja2dyb3VuZFN0YWdlcy5zaXplKCkgPiAwKQotICAgICAgICBtX2JhY2tncm91bmRU
aHJlYWQgPSBjcmVhdGVUaHJlYWQoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlz
LCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5k
VGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0
aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKIH0KIAogUmV2ZXJiQ29udm9s
dmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKQEAgLTE0Niw3ICsxNDYsNyBAQCBSZXZlcmJDb252b2x2
ZXI6On5SZXZlcmJDb252b2x2ZXIoKQogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgICAgIH0KIAotICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbihtX2JhY2tncm91bmRUaHJlYWQpOworICAgICAgICBtX2JhY2tncm91
bmRUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4IDZiYWViN2NjZTI5
ODk2Yzk4OTYzNTEyZjQxYjQzYTJmMTI4ODU0MWMuLjA1OTYzMzY3YWUyODM0OTQ4NzkwYmE3Y2Ni
NzIwNjBlYzU5ODEwNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Jl
dmVyYkNvbnZvbHZlci5oCkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlciB7
CiAKICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBhbmQgc3luY2hyb25pemF0aW9uCiAgICAgYm9v
bCBtX3VzZUJhY2tncm91bmRUaHJlYWRzOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9iYWNrZ3Jv
dW5kVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBi
b29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBtX21vcmVJbnB1dEJ1ZmZlcmVkOwogICAgIG11
dGFibGUgTG9jayBtX2JhY2tncm91bmRUaHJlYWRNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJl
YWRlckdTdHJlYW1lci5jcHAKaW5kZXggNmNkOGJkN2Y4MWJmZjIyMjdmZTE0ZmJjYTBmYmZkMDU1
ZDA5YzU3MS4uMWYyNWU4ZTU0ZTllZTg1ZmEwY2NhNmEzMWI5MmUxMTFlNmRmMGNhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJl
YWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKQEAgLTM3MCwyMCArMzcwLDIwIEBA
IFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNh
bXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNG
cm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQg
c2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1
dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFs
dWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0
aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9G
aWxlUmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAg
ICB9KTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFk
LT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGFz
c1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJh
dGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVh
ZElEID0gY3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRh
LCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBU
aHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0
YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1
ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRv
TW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOwor
ICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXgg
MWM1YzMwZjM3N2E0MmJlMDAxNzcxNjUxZTg3ZjcwNDNhNWQ2NWM5MC4uMjY0NjZmNTNiNDgyMThk
MzM3YTVhODk0ZjFkYjcyOGRmNGM0N2M4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIFN0
cmVhbQogICAgICAgICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsK
ICAgICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAK
LSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZCB7IDAgfTsKKyAgICAgICAgUmVmUHRy
PFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgICAgIExvY2sgbV9pbml0aWFsaXpl
UnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVu
TG9vcENvbmRpdGlvbjsKICAgICAgICAgUnVuTG9vcCogbV9ydW5Mb29wIHsgbnVsbHB0ciB9OwpA
QCAtMTA3Nyw3ICsxMDc3LDcgQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogICAgIDogU3RyZWFt
aW5nQ2xpZW50KHNyYykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5M
b29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKCJSZXNvdXJj
ZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0
KV0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIlJlc291cmNlSGFuZGxlU3RyZWFt
aW5nQ2xpZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25k
aXRpb25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgp
OwpAQCAtMTExMyw4ICsxMTEzLDggQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCgpCiB7
CiAgICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3RocmVhZCk7Ci0g
ICAgICAgIG1fdGhyZWFkID0gMDsKKyAgICAgICAgbV90aHJlYWQtPmRldGFjaCgpOworICAgICAg
ICBtX3RocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKG1fcnVuTG9vcCA9PSAmUnVu
TG9vcDo6Y3VycmVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCmluZGV4IDQ2Yjg5OTRhODQxZWY3MWVhMjc5Y2U3
N2NiYzhmYjQzYzI5ZjBhNjIuLmZmYmZkYTliODkzNDgzNTQ5MGM5YTQwYmExZjQ4MzM2ZTQ3NjBj
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVy
UnVuTG9vcENGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xv
YWRlclJ1bkxvb3BDRi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1
bkxvb3AoKQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5M
b29wTXV0ZXgpOwogCiAgICAgaWYgKCFsb2FkZXJSdW5Mb29wT2JqZWN0KSB7Ci0gICAgICAgIGNy
ZWF0ZVRocmVhZChydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVy
Iik7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKHJ1bkxvYWRlclRocmVhZCwgMCwgIldlYkNvcmU6
IENGTmV0d29yayBMb2FkZXIiKTsKIAogICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFy
aWFibGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuY3BwCmluZGV4IDQ0MDhjZDE5ODcwNWJhODZjYzhjMTk4NmZiM2UyY2FkZTc5NmRj
YzYuLmYxMDU3MTVlZDhkODc5MzczYjYzMzFjYjI2ZTA4MmMzZTFhYjhiMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3Bw
CkBAIC05NCwxMCArOTQsMTAgQEAgaW50IEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdE
b3dubG9hZENvdW50KCkgY29uc3QKIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJl
YWRJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFydW5UaHJlYWQoKSkgewotICAgICAgICBpZiAobV90
aHJlYWRJZCkKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQp
OworICAgICAgICBpZiAobV90aHJlYWQpCisgICAgICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICAgICAgc2V0UnVuVGhyZWFkKHRydWUpOwotICAgICAgICBtX3RocmVh
ZElkID0gY3JlYXRlVGhyZWFkKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQi
KTsKKyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3dubG9hZFRocmVhZCwgdGhp
cywgImRvd25sb2FkVGhyZWFkIik7CiAgICAgfQogfQogCkBAIC0xMDUsOSArMTA1LDkgQEAgdm9p
ZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKIHsKICAgICBzZXRSdW5UaHJlYWQo
ZmFsc2UpOwogCi0gICAgaWYgKG1fdGhyZWFkSWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24obV90aHJlYWRJZCk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSAwOworICAgIGlmICht
X3RocmVhZCkgeworICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAg
ICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCmluZGV4IDAyY2U3MzFiZDEw
YTgwMTliN2ViZTFmYWM1MmI0NWU0MDkyNTYyMzEuLmY2YmJjNzdmNGQzY2UwYjk2ODdkMWQ4ZmNh
NjA5MTU4N2M5YWU0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgQ3VybERvd25s
b2FkTWFuYWdlciB7CiAKICAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVhZCh2b2lkKiBkYXRh
KTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAgICBSZWZQdHI8VGhyZWFk
PiBtX3RocmVhZDsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7CiAgICAgVmVjdG9yPENV
UkwqPiBtX3BlbmRpbmdIYW5kbGVMaXN0OwogICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5k
bGVMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKaW5kZXggNWY5ZTA5NTQwNDcxN2QzMGJk
ODk5NDFlNWYyNTJmMTdiMGE4NjdiOS4uNjhlMjFmNDc0NDUxYWMzODc1MmI5YmM4OTQzYzM1ZDIz
YjY5NjliYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCkBAIC05Miw3ICs5Miw3IEBAIGNs
YXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsK
ICAgICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgfTsKIAotICAgIFRocmVhZElkZW50aWZp
ZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrZXJUaHJl
YWQgeyBudWxscHRyIH07CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFs
c2UgfTsKICAgICBMb2NrIG1fbXV0ZXhTZW5kOwogICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbEN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAppbmRleCAxZTM3OWQxYjAwZDA5NTVm
YzJkYTAwYmUzZjk2Zjk5MmE5MWI5NDNmLi5lY2I5ZjU0YjY1YTMzNTI0ZTNhMzU2YTNiYzEzZDBl
MmY2ZjZhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKQEAgLTE5
OSw3ICsxOTksNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkK
IAogICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVmKCkuCiAKLSAgICBt
X3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7
CisgICAgbV93b3JrZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV2ViU29ja2V0IHRocmVhZCIs
IFt0aGlzXSB7CiAKICAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTI0OSw4
ICsyNDksOCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQoKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOwotICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKLSAgICBtX3dvcmtlclRocmVhZCA9IDA7Cisg
ICAgbV93b3JrZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV93b3JrZXJUaHJl
YWQgPSBudWxscHRyOwogICAgIGRlcmVmKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyVGhyZWFkLmNwcAppbmRleCA3YWQ1YjU3OTEzYTE2NzJkZjkxOTZlOWViMDEzM2UyM2UyMzI5
ODVkLi5kZWU2Y2U2ZDY3M2Q3NmI0MWYyNzQ1NDA0ZmIwNzlmMjE5NjUzYjYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFdvcmtlclRo
cmVhZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBVUkwmIHNjcmlw
dFVSTCwgY29uc3QgU3RyCiB9CiAKIFdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVS
TCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3Jr
ZXJMb2FkZXJQcm94eSwgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5
LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
cywgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0
IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwgSURC
Q2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGNvbm5lY3Rpb25Qcm94eSwgU29ja2V0UHJvdmlk
ZXIqIHNvY2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRpbWVGbGFncyBydW50aW1lRmxhZ3MpCi0gICAg
OiBtX3RocmVhZElEKDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICwgbV93b3JrZXJM
b2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAsIG1fd29ya2VyUmVwb3J0aW5nUHJv
eHkod29ya2VyUmVwb3J0aW5nUHJveHkpCiAgICAgLCBtX3J1bnRpbWVGbGFncyhydW50aW1lRmxh
Z3MpCkBAIC0xMzMsMTUgKzEzMywxNSBAQCBXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQog
CiBib29sIFdvcmtlclRocmVhZDo6c3RhcnQoKQogewotICAgIC8vIE11dGV4IHByb3RlY3Rpb24g
aXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hl
biB0aGUgdGhyZWFkIHN0YXJ0cy4KKyAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2Fy
eSB0byBlbnN1cmUgdGhhdCBtX3RocmVhZCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQg
c3RhcnRzLgogICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0g
ICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJU
aHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOworICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNv
cmU6IFdvcmtlciIpOwogCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhy
ZWFkOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhy
ZWFkKQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQo
KQogICAgIGdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQo
KSk7CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBtX3RocmVhZElE
OworICAgIFJlZlB0cjxUaHJlYWQ+IHByb3RlY3RvciA9IG1fdGhyZWFkOwogCiAgICAgQVNTRVJU
KG1fd29ya2VyR2xvYmFsU2NvcGUtPmhhc09uZVJlZigpKTsKIApAQCAtMjA1LDcgKzIwNSw3IEBA
IHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIHRocmVhZEdsb2JhbERhdGEo
KS5kZXN0cm95KCk7CiAKICAgICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBk
ZXN0cm95ZWQgZnJvbSBub3RpZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlz
Ii4KLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHByb3RlY3Rvci0+ZGV0YWNoKCk7
CiB9CiAKIHZvaWQgV29ya2VyVGhyZWFkOjpzdGFydFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmggYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCmluZGV4IDA3YWQzY2U3ODRmOTE5ZjcwYzQ1
NjgxYjk1NGMwMDk5OTZmNTU3ZjIuLmY4MDllZTY2NzI3ZWUxMzlkYzRmMTlkMmNiNjFiMjI2NWU0
ZWE0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApAQCAtNjAsNyArNjAs
NyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+
IHsKICAgICBib29sIHN0YXJ0KCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJRDsgfQorICAgIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZCA/IG1fdGhyZWFk
LT5pZCgpIDogMDsgfQogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AoKSB7IHJldHVybiBtX3J1
bkxvb3A7IH0KICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHkoKSBjb25z
dCB7IHJldHVybiBtX3dvcmtlckxvYWRlclByb3h5OyB9CiAgICAgV29ya2VyUmVwb3J0aW5nUHJv
eHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRp
bmdQcm94eTsgfQpAQCAtOTgsNyArOTgsNyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMg
UmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRT
dGFydCh2b2lkKik7CiAgICAgdm9pZCB3b3JrZXJUaHJlYWQoKTsKIAotICAgIFRocmVhZElkZW50
aWZpZXIgbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBXb3Jr
ZXJSdW5Mb29wIG1fcnVuTG9vcDsKICAgICBXb3JrZXJMb2FkZXJQcm94eSYgbV93b3JrZXJMb2Fk
ZXJQcm94eTsKICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgbV93b3JrZXJSZXBvcnRpbmdQcm94
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBi
L1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAppbmRleCBiYjY2ZmNlYTdl
NTI4YmMyN2Y2MzNhM2U1Mjg3OGI1MDFlZjBlMTg3Li4zNTc2Nzk0NmFkZTM3MmE0Nzk0NWY4NWQz
Zjg5NThiNTI1NGFiZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3Bw
CkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBIYXNoU2V0PFN0b3JhZ2VUaHJlYWQqPiYgYWN0aXZl
U3RvcmFnZVRocmVhZHMoKQogfQogCiBTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKLSAg
ICA6IG1fdGhyZWFkSUQoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKIH0KQEAgLTQ4LDE2ICs0OCwxNiBAQCBTdG9yYWdlVGhyZWFkOjpT
dG9yYWdlVGhyZWFkKCkKIFN0b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgQVNT
RVJUKCFtX3RocmVhZCk7CiB9CiAKIGJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBt
X3RocmVhZElEID0gY3JlYXRlVGhyZWFkKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRD
YWxsYmFjaywgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOworICAgIGlmICghbV90aHJl
YWQpCisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoU3RvcmFnZVRocmVhZDo6dGhy
ZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CiAg
ICAgYWN0aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0dXJuIG1fdGhyZWFk
SUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVh
ZEVudHJ5UG9pbnRDYWxsYmFjayh2b2lkKiB0aHJlYWQpCkBAIC03OCwyNSArNzgsMjUgQEAgdm9p
ZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKIHZvaWQgU3RvcmFnZVRocmVhZDo6
ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElE
KTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIG1fcXVl
dWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFdURk1vdmUoZnVu
Y3Rpb24pKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBt
X3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwog
ICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwogICAgIC8vIEV2ZW4gaW4g
d2VpcmQsIGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhy
ZWFkIHRvIHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgaWYgKCFtX3RocmVh
ZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxGdW5jdGlvbjx2b2lkICgpPj4oW3RoaXNdIHsKICAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgp
OwogICAgIH0pKTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKKyAg
ICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxs
ZWQoKSk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQog
CiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9TdG9yYWdlVGhyZWFkLmgKaW5kZXggOTU2NGI4YWEwNmU1MjQzZTMwZTQ2N2M1ZmJmZTJjZGFk
YjI0MGM1Ni4uOGNmMWIzZDRhZGM1YTMwNmE3N2VjNzdjOWMzMjY2NjE2ODdiZWM1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFN0
b3JhZ2VUaHJlYWQgewogICAgIC8vIEJhY2tncm91bmQgdGhyZWFkIHBhcnQgb2YgdGhlIHRlcm1p
bmF0ZSBwcm9jZWR1cmUuCiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAg
ICAgTWVzc2FnZVF1ZXVlPEZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVlOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNi
ODVmMjJmZmFlMDFlMjhhYWI5OTgxNjY5OGFkYWQ3YTM4NDNjNWYuLmIwNGFjYzhjMzFjNWVjYTgy
YTUxNzQxNjY3ZGI3MGUwNTNmMWQyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmJgogewogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBh
cmFtZXRlcnMpOwogCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7
CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKIAog
ICAgIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0ZXJzLnNob3VsZFN1
cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIG1fbG9hZFRocm90dGxlTGF0ZW5jeSA9
IHBhcmFtZXRlcnMubG9hZFRocm90dGxlTGF0ZW5jeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVs
U291cC5jcHAKaW5kZXggZWY3YmE4OTk4MjAyMzI1ODllNzM5MWYyN2ZjZDNkNmUxNjlmNjg5NC4u
ZmEwMzBmYjNhMmEwZjgyZDZhMjQ1YmY4NTZiMzZhYTI3MzIwMDcxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlSU9DaGFubmVsU291cC5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIElPQ2hhbm5lbDo6
cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBx
dWV1ZSwgcwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUmVmUHRyPElPQ2hh
bm5lbD4gY2hhbm5lbCh0aGlzKTsKLSAgICBkZXRhY2hUaHJlYWQoY3JlYXRlVGhyZWFkKCJJT0No
YW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxl
cl0geworICAgIFRocmVhZDo6Y3JlYXRlKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWws
IHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0gewogICAgICAgICBzaXplX3QgYnVmZmVy
U2l6ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUpOwogICAgICAgICB1
aW50OF90KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2MoYnVm
ZmVyU2l6ZSkpOwogICAgICAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9w
dEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwg
YnVmZmVyRGF0YSwgZmFzdEZyZWUpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIElPQ2hhbm5l
bDo6cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVl
KiBxdWV1ZSwgcwogICAgICAgICAgICAgRGF0YSBkYXRhID0geyBXVEZNb3ZlKGJ1ZmZlcikgfTsK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEsIDApOwogICAgICAgICB9LCBxdWV1
ZSk7Ci0gICAgfSkpOworICAgIH0pLT5kZXRhY2goKTsKIH0KIAogc3RydWN0IFdyaXRlQXN5bmNE
YXRhIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBi
YWY1MzA2NmJlMjAwOWUyNmRiZWI3YWM4ODhjNDA1ZTNiZGJhNmZmLi5iMzg3YjZiNDQ1ZTM3ZDNk
YTNlOGE3MmM3YzBiYTM1Yzg2M2YyNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uY3BwCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9j
ZXNzSW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBtZXNzYWdlKQogCiAj
aWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpICYm
IG1fc2hvdWxkQm9vc3RNYWluVGhyZWFkT25TeW5jTWVzc2FnZSkgewotICAgICAgICBwdGhyZWFk
X292ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFzc19zdGFydF9u
cChtX21haW5UaHJlYWQsIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJ
VkUpLCAwKTsKKyAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9v
dmVycmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBUaHJlYWQ6OmFkanVzdGVk
UU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAwKTsKICAgICAgICAgbWVzc2Fn
ZS0+c2V0UU9TQ2xhc3NPdmVycmlkZShvdmVycmlkZSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9y
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0
b3IuY3BwCmluZGV4IDA2MDhhYjcyZjk5MjQ4ZWYyNGNkMmQ1MjQ1ZWU1MzMzYTAwZDlkMGQuLjQ4
ZDEwNjk3NzY1YTk1YThiMzU4NzIzMGUxMDJkODAzYWQ1OGMwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3Bw
CkBAIC0yNDgsNyArMjQ4LDcgQEAgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3Vy
ZU1vbml0b3IoKQogICAgIGlmIChtX2V2ZW50RkQgPT0gLTEpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgiTWVt
b3J5UHJlc3N1cmVNb25pdG9yIiwgW3RoaXNdIHsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSgiTWVtb3J5UHJlc3N1cmVNb25pdG9yIiwgW3RoaXNdIHsKICAgICAg
ICAgZG91YmxlIHBvbGxJbnRlcnZhbCA9IHNfbWF4UG9sbGluZ0ludGVydmFsSW5TZWNvbmRzOwog
ICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgc2xlZXAocG9sbEludGVydmFsKTsK
QEAgLTI3MSw3ICsyNzEsNyBAQCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6Ok1lbW9yeVByZXNzdXJl
TW9uaXRvcigpCiAgICAgICAgIH0KICAgICAgICAgY2xvc2UobV9ldmVudEZEKTsKICAgICB9KTsK
LSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSWRlbnRpZmllcik7CisgICAgdGhyZWFkLT5kZXRhY2go
KTsKIH0KIAogSVBDOjpBdHRhY2htZW50IE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6Y3JlYXRlSGFu
ZGxlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4
IDFkNTAyMTVhMjAzMTE0YjRmMjNkNWQ1OGYyZDI1M2ZmNzkwNTZkNWUuLjRmOTZhYmJmMGRjOTcy
ZjhiOWMyYzZjZjZlODI2NDY5ZTI1ZmJmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcApAQCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlh
bGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMp
CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
IAogICAgIC8vIE1hdGNoIHRoZSBRb1Mgb2YgdGhlIFVJUHJvY2VzcyBhbmQgdGhlIHNjcm9sbGlu
ZyB0aHJlYWQgYnV0IHVzZSBhIHNsaWdodGx5IGxvd2VyIHByaW9yaXR5LgotICAgIFdURjo6c2V0
Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKC0xKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0
Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKC0xKTsKIAogICAgIG1fc3VwcHJlc3NNZW1v
cnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyOwogICAgIGlmICghbV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcikgewpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQzNWFl
ZDg3MTUwZGVlNDExOTcxNDZmZWVmMGIwOWZmNDZlODQwNjAuLmVhMjcwNWNjYzRkMWVhMzc2ZTNj
YjVlYjQ5ZjE0ODU1NmI0ZGJjZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVr
aSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhy
ZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFk
aW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9KYXZh
U2NyaXB0VGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKHJ1bkphdmFTY3JpcHRUaHJlYWQpOgorICAg
ICAgICAoc3RhcnRKYXZhU2NyaXB0VGhyZWFkcyk6CisgICAgICAgIChzdG9wSmF2YVNjcmlwdFRo
cmVhZHMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToK
KyAgICAgICAgKHRlc3RUaHJlYWRJZGVudGlmaWVyTWFwKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0xvY2suY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwOgorCiAyMDE3
LTA0LTA2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgTWFrZSBGb250V2l0aEZlYXR1cmVzIHRlc3QgZm9udCBwYXNzIE9UUwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcAppbmRleCBlMmY5YmFkZTZjYTdjMjY5
NDg1YTRjZGNiZTYwOTljMzZiYTAyMTk4Li5kYzIzYWUyMmE4NWUwYzk5NTMxNjdmOTk4NTllYzlk
ZWU0M2YxN2ZiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhy
ZWFkaW5nLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5n
LmNwcApAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgTG9jayYgamF2YVNjcmlwdFRocmVhZHNNdXRl
eCgpCiAgICAgcmV0dXJuIHN0YXRpY011dGV4OwogfQogCi10eXBlZGVmIEhhc2hTZXQ8VGhyZWFk
SWRlbnRpZmllcj4gVGhyZWFkU2V0OwordHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxUaHJlYWQ+PiBU
aHJlYWRTZXQ7CiBzdGF0aWMgVGhyZWFkU2V0JiBqYXZhU2NyaXB0VGhyZWFkcygpCiB7CiAgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFRocmVhZFNldCwgc3RhdGljSmF2YVNjcmlw
dFRocmVhZHMsICgpKTsKQEAgLTEwOCwxMCArMTA4LDkgQEAgdm9pZCBydW5KYXZhU2NyaXB0VGhy
ZWFkKHZvaWQqKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRldGFjaFRocmVhZCh0aHJlYWQp
OworICAgICAgICBUaHJlYWQ6OmN1cnJlbnQoKS5kZXRhY2goKTsKICAgICAgICAgamF2YVNjcmlw
dFRocmVhZHMoKS5yZW1vdmUodGhyZWFkKTsKLSAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5h
ZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CisgICAgICAgIGph
dmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6Y3JlYXRlKCZydW5KYXZhU2NyaXB0VGhyZWFk
LCAwLCAwKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTI4LDcgKzEyNyw3IEBAIHZv
aWQgc3RhcnRKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNj
cmlwdFRocmVhZHNNdXRleCgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamF2YVNj
cmlwdFRocmVhZHNDb3VudDsgKytpKQotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChj
cmVhdGVUaHJlYWQoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAgICAgamF2YVNj
cmlwdFRocmVhZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAs
IDApKTsKIH0KIAogdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQpAQCAtMTM4LDcgKzEzNyw3
IEBAIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICAgICAgamF2YVNjcmlwdFRocmVh
ZHNTaG91bGRUZXJtaW5hdGUgPSB0cnVlOwogICAgIH0KIAotICAgIFZlY3RvcjxUaHJlYWRJZGVu
dGlmaWVyLCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQ
dHI8VGhyZWFkPiwgamF2YVNjcmlwdFRocmVhZHNDb3VudD4gdGhyZWFkczsKICAgICB7CiAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7CiAgICAgICAg
IGNvcHlUb1ZlY3RvcihqYXZhU2NyaXB0VGhyZWFkcygpLCB0aHJlYWRzKTsKQEAgLTE0Niw3ICsx
NDUsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgfQogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50OyArK2kpCi0gICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbaV0pOworICAgICAgICB0aHJlYWRzW2ldLT53
YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihq
YXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tCmluZGV4IGZiNGQyNmZjY2ViNzBjNGI1MzIwMTBkYTg1ZmI5Y2U3ODU1YzEz
ODQuLjNjZWFhNmYzZTY1NzM1ZDMwZWYxYTRmODk3ZDVlNjljNGZhNWZmMDYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTEwNzIsOCArMTA3Miw4IEBA
IHN0YXRpYyB2b2lkIHRlc3RUaHJlYWRJZGVudGlmaWVyTWFwKCkKICAgICBwdGhyZWFkX2pvaW4o
cHRocmVhZCwgMCk7CiAKICAgICAvLyBOb3cgY3JlYXRlIGFub3RoZXIgdGhyZWFkIHVzaW5nIFdU
Ri4gT24gT1NYLCBpdCB3aWxsIGhhdmUgdGhlIHNhbWUgcHRocmVhZCBoYW5kbGUKLSAgICAvLyBi
dXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBUaHJlYWRJZGVudGlmaWVyLgotICAgIGNyZWF0ZVRo
cmVhZChydW5UaHJlYWQsIDAsICJEdW1wUmVuZGVyVHJlZTogdGVzdCIpOworICAgIC8vIGJ1dCBz
aG91bGQgZ2V0IGEgZGlmZmVyZW50IFJlZlB0cjxUaHJlYWQ+LgorICAgIFRocmVhZDo6Y3JlYXRl
KHJ1blRocmVhZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0ZXN0Iik7CiB9CiAKIHN0YXRpYyB2b2lk
IGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0NvbmRpdGlvbi5jcHAKaW5kZXggODQ4NTI3MzUxZjYwNjNmYzI2MzY4NzgwNTZkOWMyNGRi
YWJlODNkYy4uNzcyMTYzNmI3NzgwN2YxMzk1MWVhMTEyZmJkNDEzZThmYWM0NjBiYyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCkBAIC04OSwxNCArODks
MTQgQEAgdm9pZCBydW5UZXN0KAogICAgIENvbmRpdGlvbiBlbXB0eUNvbmRpdGlvbjsKICAgICBD
b25kaXRpb24gZnVsbENvbmRpdGlvbjsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBj
b25zdW1lclRocmVhZHM7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhy
ZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKKyAgICBW
ZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1Y2VyVGhyZWFkczsKIAogICAgIFZlY3Rvcjx1bnNp
Z25lZD4gcmVjZWl2ZWQ7CiAgICAgTG9jayByZWNlaXZlZExvY2s7CiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtQ29uc3VtZXJzOyBpLS07KSB7Ci0gICAgICAgIFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgUmVmUHRyPFRocmVh
ZD4gdGhyZWFkSWRlbnRpZmllciA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkNvbnN1
bWVyIHRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAo
OzspIHsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW1wdHlDb25kaXRpb24sIGxvY2tlciwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgY29uc3VtcHRpb24gcHJlZGljYXRlIHdp
dGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09
ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcgY29u
c3VtcHRpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51
ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXNob3VsZENvbnRpbnVlIHx8ICFxdWV1ZS5p
c0VtcHR5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lb3V0KTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIHJ1blRlc3Qo
CiAgICAgc2xlZXAoZGVsYXkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUHJvZHVjZXJz
OyBpLS07KSB7Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNy
ZWF0ZVRocmVhZCgKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA9IFRo
cmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIlByb2R1Y2VyIFRocmVhZCIsCiAgICAgICAgICAg
ICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1N
ZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIHJ1blRl
c3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENvbmRpdGlvbiwgbG9ja2VyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIHByb2R1
Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwg
IiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQo
KSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9
ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAi
XG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZS5zaXpl
KCkgPCBtYXhRdWV1ZVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKQEAgLTE1NSw4ICsxNTUsOCBAQCB2b2lk
IHJ1blRlc3QoCiAgICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmll
cik7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIg
OiBwcm9kdWNlclRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVh
ZElkZW50aWZpZXIpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6
IHByb2R1Y2VyVGhyZWFkcykKKyAgICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihs
b2NrKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgfQogICAgIGVtcHR5
Q29uZGl0aW9uLm5vdGlmeUFsbCgpOwogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFk
SWRlbnRpZmllciA6IGNvbnN1bWVyVGhyZWFkcykKKyAgICAgICAgdGhyZWFkSWRlbnRpZmllci0+
d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIEVYUEVDVF9FUShudW1Qcm9kdWNlcnMgKiBudW1N
ZXNzYWdlc1BlclByb2R1Y2VyLCByZWNlaXZlZC5zaXplKCkpOwogICAgIHN0ZDo6c29ydChyZWNl
aXZlZC5iZWdpbigpLCByZWNlaXZlZC5lbmQoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0xvY2suY3BwCmluZGV4IDU1NzYzMDJkNjkwZGZjYTM1OTkyOTI4YjFjODUzYzc2MjJlNDVmYjku
LjZhNGU1MzhmNTZmNDZkMTc3YTNmNjJmMWRkZWIzYTRkMGFmMmFmMDggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCkBAIC00NiwxMyArNDYsMTMgQEAgdm9pZCBydW5Mb2Nr
VGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91
cCwgdW5zaWduZWQKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9ja1R5cGVbXT4gbG9ja3MgPSBz
dGQ6Om1ha2VfdW5pcXVlPExvY2tUeXBlW10+KG51bVRocmVhZEdyb3Vwcyk7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8ZG91YmxlW10+KG51
bVRocmVhZEdyb3Vwcyk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4g
dGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRH
cm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8
VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZQdHI8VGhyZWFkPltdPihu
dW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgZm9yICh1bnNpZ25l
ZCB0aHJlYWRHcm91cEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzOyB0aHJlYWRHcm91cEluZGV4LS07
KSB7CiAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdID0gMDsKIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0t
OykgewotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Bl
ckdyb3VwICsgdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgdGhyZWFk
c1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0g
VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgIkxvY2sgdGVzdCB0aHJlYWQiLAogICAg
ICAgICAgICAgICAgIFt0aHJlYWRHcm91cEluZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0
aW9ucywgd29ya1BlckNyaXRpY2FsU2VjdGlvbl0gKCkgewogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1JdGVyYXRpb25zOyBpLS07KSB7CkBAIC02Niw3ICs2Niw3IEBA
IHZvaWQgcnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1U
aHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVkCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCB0aHJl
YWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5k
ZXgtLTspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5k
ZXhdKTsKKyAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAKICAgICBkb3VibGUgZXhwZWN0ZWQgPSAwOwogICAgIGZvciAodWludDY0X3QgaSA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihudW1JdGVyYXRpb25zKSAqIHdvcmtQZXJDcml0aWNhbFNlY3Rpb24g
KiBudW1UaHJlYWRzUGVyR3JvdXA7IGktLTspCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1BhcmtpbmdMb3QuY3BwCmluZGV4IGM2N2UxZTA4MTVhODNhZmE5MzMzZTJhYzlhMmJkNzhi
NjdiMTY0NWIuLjVhZjljN2M4MjdiMjFlMjFkOGRmOTMwNTI2MGQ2ZmZlZTY4ZmJkMWMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCkBAIC00OCwxNiAr
NDgsMTQgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1UaHJlYWRzOyBpLS07KSB7CiAgICAgICAgICAgICB0aHJlYWRzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgVGhy
ZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJQYXJraW5nIFRlc3QgVGhyZWFkIiwK
ICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVY
UEVDVF9ORSgwdSwgY3VycmVudFRocmVhZCgpKTsKLQogICAgICAgICAgICAgICAgICAgICAgICAg
ZG93bigpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9ja2VyKGxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgYXdha2UuYWRkKGN1
cnJlbnRUaHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdva2VuID0gY3Vy
cmVudFRocmVhZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXdha2UuYWRkKFRocmVhZDo6
Y3VycmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSAmVGhyZWFk
OjpjdXJyZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5X29u
ZSgpOwogICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgIH0KQEAgLTY1LDE2ICs2Mywx
NiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKIAogICAgIHZvaWQgdW5wYXJrT25lKHVuc2ln
bmVkIHNpbmdsZVVucGFya0luZGV4KQogICAgIHsKLSAgICAgICAgRVhQRUNUX0VRKDB1LCBsYXN0
QXdva2VuKTsKKyAgICAgICAgRVhQRUNUX1RSVUUobnVsbHB0ciA9PSBsYXN0QXdva2VuKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwotICAgICAg
ICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllciwgOD4gcXVldWU7CisgICAgICAgIFZlY3RvcjxSZWZQ
dHI8VGhyZWFkPiwgOD4gcXVldWU7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAg
ICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9p
ZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmIHRocmVhZElkZW50aWZpZXIs
IGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAm
c2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAg
ICBxdWV1ZS5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgcXVldWUu
YXBwZW5kKCZ0aHJlYWRJZGVudGlmaWVyKTsKIAogICAgICAgICAgICAgICAgIG51bVdhaXRpbmdP
bkFkZHJlc3MrKzsKICAgICAgICAgICAgIH0pOwpAQCAtODcsMTIgKzg1LDEyIEBAIHN0cnVjdCBT
aW5nbGVMYXRjaFRlc3QgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4
PiBsb2NrZXIobG9jayk7CiAgICAgICAgICAgICB3aGlsZSAoYXdha2Uuc2l6ZSgpIDwgc2luZ2xl
VW5wYXJrSW5kZXggKyAxKQogICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlcik7
Ci0gICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGxhc3RBd29rZW4pOworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUobnVsbHB0ciAhPSBsYXN0QXdva2VuKTsKICAgICAgICAgICAgIGlmICghcXVldWUu
aXNFbXB0eSgpICYmIHF1ZXVlWzBdICE9IGxhc3RBd29rZW4pIHsKICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJXb2tlIHVwIHdyb25nIHRocmVhZDogcXVldWUgPSAiLCBsaXN0RHVtcChxdWV1ZSks
ICIsIGxhc3QgYXdva2VuID0gIiwgbGFzdEF3b2tlbiwgIlxuIik7CiAgICAgICAgICAgICAgICAg
RVhQRUNUX0VRKHF1ZXVlWzBdLCBsYXN0QXdva2VuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxhc3RBd29rZW4gPSAwOworICAgICAgICAgICAgbGFzdEF3b2tlbiA9IG51bGxwdHI7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTEwMCw3ICs5OCw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRl
c3QgewogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CiAg
ICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50
aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiwg
Y29uc3Qgdm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZz
ZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAK
QEAgLTExNCw3ICsxMTIsNyBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKIAogICAgICAgICBu
dW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAg
ICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgewor
ICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgCkBAIC0xMjksOCArMTI3LDggQEAgc3RydWN0IFNpbmdsZUxh
dGNoVGVzdCB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDog
dGhyZWFkcykKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50
aWZpZXIpOworICAgICAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiB0
aHJlYWRzKQorICAgICAgICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24o
KTsKICAgICB9CiAKICAgICAvLyBTZW1hcGhvcmUgb3BlcmF0aW9ucy4KQEAgLTE3OSw5ICsxNzcs
OSBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICBBdG9taWM8aW50PiBzZW1hcGhvcmU7
CiAgICAgc3RkOjptdXRleCBsb2NrOwogICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIGNvbmRp
dGlvbjsKLSAgICBIYXNoU2V0PFRocmVhZElkZW50aWZpZXI+IGF3YWtlOwotICAgIFZlY3RvcjxU
aHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwotICAgIFRocmVhZElkZW50aWZpZXIgbGFzdEF3b2tl
biB7IDAgfTsKKyAgICBIYXNoU2V0PFJlZjxUaHJlYWQ+PiBhd2FrZTsKKyAgICBWZWN0b3I8UmVm
UHRyPFRocmVhZD4+IHRocmVhZHM7CisgICAgUmVmUHRyPFRocmVhZD4gbGFzdEF3b2tlbiB7IG51
bGxwdHIgfTsKIH07CiAKIHZvaWQgcnVuUGFya2luZ1Rlc3QodW5zaWduZWQgbnVtTGF0Y2hlcywg
dW5zaWduZWQgZGVsYXksIHVuc2lnbmVkIG51bVRocmVhZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVu
cGFya3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306493</attachid>
            <date>2017-04-07 06:21:37 -0700</date>
            <delta_ts>2017-04-07 06:42:28 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407222136.patch</filename>
            <type>text/plain</type>
            <size>228708</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5kYWRjMzZjMGJmMTQ1NjQ5
ZTY5YjkwMjdkOWFjNTAyMWU1MjdkMGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6b3duZXJUaHJl
YWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAgIChKU0M6OmZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6U2lnbmFsU2Vu
ZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6ZmlyZVRyYXApOgorICAgICAgICAq
IHRvb2xzL0hlYXBWZXJpZmllci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6cHJp
bnRWZXJpZmljYXRpb25IZWFkZXIpOgorCiAyMDE3LTA0LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBVcGRhdGUgdGhlIHByaW9y
aXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVjMGJiNTBkODUwY2Nk
NWZkNGVjNTBkYzk0NDg4MzRjZmM2Y2NjM2QuLjRmYTUyZTVmZWE4YmM4MGQ2N2FiMzhiODUyOTIy
YzA0ZjA4NjAyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU5IEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6
dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBU
aHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJl
YWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNw
cDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwOgorICAgICAgICAq
IGJlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHA6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHA6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6Cisg
ICAgICAgIChXVEY6OmNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZCk6CisgICAgICAg
ICogd3RmL01haW5UaHJlYWQuaDoKKyAgICAgICAgKiB3dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
Lmg6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwOgorICAgICAgICAoV1RG
OjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0cnlMb2NrRm9yKToKKyAgICAg
ICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVu
dmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjpUaHJlYWRQcml2YXRlKToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OmZvckVhY2hJbXBs
KToKKyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5oOgorICAgICAgICAoV1RGOjpQYXJraW5nTG90
Ojpmb3JFYWNoKToKKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0
cjo6UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6Cisg
ICAgICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFkR3JvdXAuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmguCisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAuCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRl
cjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZU9uY2UpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAo
V1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xk
ZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaDogQ29w
aWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuY3BwLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAg
ICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6
VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAg
ICogd3RmL1RocmVhZEhvbGRlcldpbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6
OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6VGhyZWFkSG9sZGVyKToKKyAg
ICAgICAgKiB3dGYvVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpub3JtYWxp
emVUaHJlYWROYW1lKToKKyAgICAgICAgKFdURjo6dGhyZWFkRW50cnlQb2ludCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50
VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJl
bnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEdsb2Jh
bE1heFFPU0NsYXNzKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkdW1wKToKKyAgICAgICAgKFdURjo6bm9ybWFsaXplVGhy
ZWFkTmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmFkanVzdGVkUU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJl
YWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjppZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6YWRkT25FeGl0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmpvaW5hYmxlU3RhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRpZEJlY29tZURldGFj
aGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRKb2luKToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpoYXNFeGl0ZWQpOgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKToKKyAgICAgICAg
KiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25h
bEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGlu
Zyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6ZGlkRXhpdCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0YWJs
aXNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRl
dGFjaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRJRCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpy
ZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChX
VEY6OlB0aHJlYWRTdGF0ZTo6UHRocmVhZFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
UHRocmVhZFN0YXRlOjpqb2luYWJsZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRo
cmVhZFN0YXRlOjpwdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRocmVh
ZFN0YXRlOjpkaWRCZWNvbWVEZXRhY2hlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJl
YWRTdGF0ZTo6ZGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6
ZGlkSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6aGFzRXhpdGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppZGVudGlmaWVy
QnlQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZXN0YWJsaXNoSWRlbnRp
ZmllckZvclB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpwdGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFu
Z2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6dGhyZWFkRGlkRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OmN1cnJlbnRUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzaWduYWxUaHJlYWQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRJRCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6VGhyZWFkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp+VGhyZWFk
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFk
Ojplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6c3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjp0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjaGFuZ2VUaHJl
YWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1dvcmtR
dWV1ZS5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KToKKyAg
ICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2NvY29hL1dvcmtRdWV1ZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hRT1NDbGFzcyk6CisgICAgICAgICogd3Rm
L2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRm
b3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgICogd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcDoKKyAg
ICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9sbGVyOjpFdmVudEZE
UG9sbGVyKToKKyAgICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9s
bGVyOjp+RXZlbnRGRFBvbGxlcik6CisgICAgICAgICogd3RmL21hYy9NYWluVGhyZWFkTWFjLm1t
OgorICAgICAgICAoV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQpOgorCiAy
MDE3LTA0LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBVcGRhdGUgdGhlIHByaW9yaXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9v
cCBzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODczZDM3OTM0ODRkZGQ2MDhiY2M1OWEwMGE1YmVmNTky
Y2FjMGI2ZC4uYTVjZDYxMDQ4MmU5NDU2N2QxMzlmODU3YzRhMjIzYzQ1MDhmM2E4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3Mg
YW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVt
ZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OnVuaW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3Jp
Z2luKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VGhyZWFkOjpnZXRUaHJlYWRJRCk6CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFs
dGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAg
ICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25E
YXRhYmFzZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToK
KyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jl
c291cmNlVXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRo
cmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2Fn
ZVRocmVhZC5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0
YWJhc2VMb2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRG
RGF0YWJhc2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpI
UlRGRGF0YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJi
Q29udm9sdmVyOjpSZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29u
dm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9G
aWxlUmVhZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21B
dWRpb0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9G
aWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291
cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsb2FkZXJSdW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6
OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFu
YWdlcjo6c3RvcFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZUltcGxDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZUltcGw6OnN0YXJ0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZUltcGw6OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkOjp3b3JrZXJUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0w
NyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAyYjM5Yjk4Yzc0OTY5NjY0ZDI3MGRhYzU4MDk3N2YxMjk1ZDFmYmZlLi43
ODUzODE0ODY0M2I1Njg2MjM2YjEwYWVkMjc4NjY5YWZlYWVhZGNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQ
dHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2Vt
YW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VU
aHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAg
ICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmg6CisKIDIwMTctMDQtMDYgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBPbmx5IENh
cHR1cmUgRXh0cmEgTmV0d29yayBMb2FkIE1ldHJpY3Mgd2hlbiB0aGVyZSBpcyBhIFdlYiBJbnNw
ZWN0b3IgRnJvbnRlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhNTJjZDdhY2RkMTIyNjNlNjVhZjE5NmJhMDAz
MzAyMTM4YjkxZTY2Li41NDFlYzEyNGMwMTY0NGJmOWJiZGY2NjFiMGViY2YxYTYyZTI2NDQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBj
bGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBp
bXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVJT0NoYW5uZWxTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0No
YW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0
aW9uLmNwcDoKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2Fn
ZSk6CisgICAgICAgICogU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2Uv
WFBDU2VydmljZUVudHJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRp
YWxpemVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9y
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVz
c3VyZU1vbml0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNy0w
NC0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291
cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJl
QW5kU3dhcFRlc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJl
QW5kU3dhcFRlc3QuY3BwCmluZGV4IGU3ODA4NmMzYTk2MTJhMmYwYjRkN2FhZjFhZGM3YmExYTEw
MWM1NDcuLjQzYWVmMDc3OTcwY2ZlZGIyY2FjMDQ2M2ZjZDllY2NhMjlkMTUyNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVz
dC5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAoKQogewogICAg
IEJpdG1hcCBiaXRtYXA7CiAgICAgY29uc3QgaW50IG51bVRocmVhZHMgPSA1OwotICAgIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSURzW251bVRocmVhZHNdOworICAgIFJlZlB0cjxUaHJlYWQ+IHRo
cmVhZHNbbnVtVGhyZWFkc107CiAgICAgRGF0YSBkYXRhW251bVRocmVhZHNdOwogCiAgICAgV1RG
Ojppbml0aWFsaXplVGhyZWFkaW5nKCk7CkBAIC0xMDcsMTIgKzEwNywxMiBAQCB2b2lkIHRlc3RD
b21wYXJlQW5kU3dhcCgpCiAgICAgICAgIGRhdGFbaV0uaWQgPSBpOwogICAgICAgICBkYXRhW2ld
Lm51bVRocmVhZHMgPSBudW1UaHJlYWRzOwogICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
dGhyZWFkRnVuYyA9IHN0ZDo6YmluZChzZXRCaXRUaHJlYWRGdW5jLCAmZGF0YVtpXSk7Ci0gICAg
ICAgIHRocmVhZElEc1tpXSA9IGNyZWF0ZVRocmVhZCgic2V0Qml0VGhyZWFkRnVuYyIsIHRocmVh
ZEZ1bmMpOworICAgICAgICB0aHJlYWRzW2ldID0gVGhyZWFkOjpjcmVhdGUoInNldEJpdFRocmVh
ZEZ1bmMiLCB0aHJlYWRGdW5jKTsKICAgICB9CiAKICAgICBwcmludGYoIldhaXRpbmcgZm9yICVk
IHRocmVhZHMgdG8gam9pblxuIiwgbnVtVGhyZWFkcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1UaHJlYWRzOyBpKyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVh
ZElEc1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAg
ICBwcmludGYoIlBBU1M6IENvbXBhcmVBbmRTd2FwIHRlc3QgY29tcGxldGVkIHdpdGhvdXQgYSBo
YW5nXG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzIxN2I1Yzg1NTFh
NThlNmNmZDAwYzViZDFmMmRhYTEwMjVmNDA4ZS4uN2QyMDM2YmU4NjE2ZmY1Mzg2N2U1ZTA3OTU2
NWZkYTVhNzg4NTFlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0NjcsNyAr
MjQ2Nyw2IEBACiAJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMjg3QjExNUVD
OUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
RDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi87IH07CiAJCUZFRDk0RjJG
MTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9n
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkVF
NDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEg
LyogUGxhdGZvcm1UaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBU
ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
RjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovOyB9Owog
CQlGRUZENkZDNjFENUU3OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZDNTFENUU3OTcwMDA4
RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwpAQCAtNTA5
Myw3ICs1MDkyLDYgQEAKIAkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoZG9nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0
YWNrT3ZlcmZsb3dUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1BpbmdQb25n
U3RhY2tPdmVyZmxvd1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURB
NTBENTFCOTdGNEQ5MDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7
IHBhdGggPSBBUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1U
aHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1UaHJlYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIw
IC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVB
bmRTd2FwVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUyMUFB
RUM0RUQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ29t
cGFyZUFuZFN3YXBUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRkQ2RkM1
MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02ODU0LDcgKzY4NTIsNiBAQAogCQkJCUY2OTJBODc4MDI1NTU5N0QwMUZGNjBGNyAv
KiBPcGVyYXRpb25zLmggKi8sCiAJCQkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlv
bnMuY3BwICovLAogCQkJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8s
Ci0JCQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8sCiAJ
CQkJODY4OTE2QTkxNTVGMjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggKi8sCiAJCQkJMTQ3
MzQxREYxREMyQ0U5NjAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmNwcCAqLywKIAkJCQkx
NDczNDFEMzFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUuaCAqLywKQEAgLTkz
MzQsNyArOTMzMSw2IEBACiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2Ft
cGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5
bWJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5
bWJvbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUU0M0ZDRTFFNjY0MTcxMDA3
N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJE
QTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcwNUI0MUIwMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwNUI0MUIyMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKaW5k
ZXggODdiMzUzYWEzNzkyNWNhMWUyZmE4NDExOTk3NmFkZjBiMWUwN2JhYS4uYzkxNzcwNzk1ODhm
ODZkNDMxYTI4YmMwNzRkNGZlMmUzZjEzZGM0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL3Rlc3RhaXIuY3BwCkBAIC0xOTEzLDEwICsxOTEzLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKIAogICAgIExvY2sgbG9jazsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlm
aWVyPiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVz
KCk7IGktLTspIHsKICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICBjcmVhdGVU
aHJlYWQoCisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAidGVz
dGIzIHRocmVhZCIsCiAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAg
ICAgZm9yICg7OykgewpAQCAtMTkzMyw4ICsxOTMzLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciog
ZmlsdGVyKQogICAgICAgICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkIDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24odGhyZWFkKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisg
ICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IDAxOTk2YWY3MWFiNGYw
OWViNDliNzAxMWMxN2RiYzkzYzQwY2U4N2EuLjkwNDY1NjQ4ODdiNmIzYTRhZmFjMzU5ZGMxMGM1
MDM4NGQ3NGRlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0xNjg1MCwx
MCArMTY4NTAsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBs
b2NrOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9y
PFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/
IDEgOiBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJl
YWRzLmFwcGVuZCgKLSAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVh
ZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAg
ICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xNjg3MCw4
ICsxNjg3MCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgICAgICAg
ICB9KSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVh
ZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgZm9yIChS
ZWZQdHI8VGhyZWFkPiB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JD
b21wbGV0aW9uKCk7CiAgICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAppbmRleCBhNGUyMWY5ZmEzY2Q0
NzIxZWEyNjc1ZTA2ZTRkNTMwYzViYTk1YjM1Li5lOWIxZjVjMmYwYmMyN2IwMjkzMTBjNTU4MTUy
MGIxYjU1MjI1OTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3VwZXJTYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Vw
ZXJTYW1wbGVyLmNwcApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIGluaXRpYWxpemVTdXBlclNhbXBs
ZXIoKQogICAgIGlmICghT3B0aW9uczo6dXNlU3VwZXJTYW1wbGVyKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNyZWF0ZVRocmVhZCgKKyAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpT
QyBTdXBlciBTYW1wbGVyIiwKICAgICAgICAgW10gKCkgewogICAgICAgICAgICAgY29uc3QgaW50
IHNsZWVwUXVhbnR1bSA9IDEwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAppbmRleCBjZWY5OTBjYjQ4MzNhNmJiOTQ3MWJkMDhhNTA0ZTU1ZmI0N2RmNDU4Li5hZDBl
Y2M2OWE3N2QxNzJjZjRiYzFlZmFjOTNkZjkzMDI3YzAwOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGNsYXNzIFdvcmts
aXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICBk
YXRhTG9nKG1fd29ya2xpc3QsICI6IFRocmVhZCBzdGFydGVkXG4iKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChtX3JlbGF0aXZlUHJpb3JpdHkpCi0gICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlv
cml0eShjdXJyZW50VGhyZWFkKCksIG1fcmVsYXRpdmVQcmlvcml0eSk7CisgICAgICAgICAgICBU
aHJlYWQ6OmN1cnJlbnQoKS5jaGFuZ2VQcmlvcml0eShtX3JlbGF0aXZlUHJpb3JpdHkpOwogICAg
ICAgICAKICAgICAgICAgbV9jb21waWxhdGlvblNjb3BlID0gc3RkOjptYWtlX3VuaXF1ZTxDb21w
aWxhdGlvblNjb3BlPigpOwogICAgICAgICBtX2xvbmdMaXZlZFN0YXRlID0gc3RkOjptYWtlX3Vu
aXF1ZTxMb25nTGl2ZWRTdGF0ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
aXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAppbmRleCA3ODhhNmMzNjIzNjljNThkYWQyOWE2
MGEzODcxMDQ0ZTQ2NGVkMzA1Li4yYjgyNGVjZmRlNTg5M2IyYzZiNzA2ZjQ3MDJlY2QyMjk1ZDIz
NTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNh
c3NlbWJsZXIuY3BwCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIEFzeW5jaHJvbm91c0Rpc2Fzc2Vt
YmxlciB7CiBwdWJsaWM6CiAgICAgQXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkKICAgICB7Ci0g
ICAgICAgIGNyZWF0ZVRocmVhZCgiQXN5bmNocm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7
IHJ1bigpOyB9KTsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIkFzeW5jaHJvbm91cyBEaXNhc3Nl
bWJsZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZW5xdWV1
ZShzdGQ6OnVuaXF1ZV9wdHI8RGlzYXNzZW1ibHlUYXNrPiB0YXNrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAppbmRleCAzYWVlMzAxMDRmNTI5MWEyODc2NGE1Y2RlZTVhYThmMGNhNzJh
ZDMxLi43MjIzYjIwYzlkZmJhMTA0MzA5OGE3ODU3NGJhMjhhNjk0YzA0NWJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSGVhcDo6bGFz
dENoYW5jZVRvRmluYWxpemUoKQogICAgICAgICAgICAgbV9zaG91bGRTdG9wQ29sbGVjdGluZ0Nv
bnRpbnVvdXNseSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlDb25k
aXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIH0KLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkKTsKKyAgICAgICAgbV9jb2xsZWN0Q29u
dGludW91c2x5VGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KICAgICAKICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIHZvaWQgSGVhcDo6bm90
aWZ5SXNTYWZlVG9Db2xsZWN0KCkKICAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkgewotICAgICAgICBtX2Nv
bGxlY3RDb250aW51b3VzbHlUaHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIG1fY29sbGVj
dENvbnRpbnVvdXNseVRocmVhZCA9IFdURjo6VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAi
SlNDIERFQlVHIENvbnRpbnVvdXMgR0MiLAogICAgICAgICAgICAgW3RoaXNdICgpIHsKICAgICAg
ICAgICAgICAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggZDA2NTcwMTZiZWVmOWE4OWQwNmRm
Mjc5NzE3ZTc3MGIxNjRhNDcxNC4uZDY3ODM3YWZlZjEzMDFmOTY3MmY2MGVhMjljNDNmYzg1OTdk
ZWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtNDksNiArNDksNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY2Niw3ICs2NjcsNyBAQCBjbGFzcyBIZWFw
IHsKICAgICBMb2NrIG1fY29sbGVjdENvbnRpbnVvdXNseUxvY2s7CiAgICAgQ29uZGl0aW9uIG1f
Y29sbGVjdENvbnRpbnVvdXNseUNvbmRpdGlvbjsKICAgICBib29sIG1fc2hvdWxkU3RvcENvbGxl
Y3RpbmdDb250aW51b3VzbHkgeyBmYWxzZSB9OwotICAgIFRocmVhZElkZW50aWZpZXIgbV9jb2xs
ZWN0Q29udGludW91c2x5VGhyZWFkIHsgMCB9OworICAgIFJlZlB0cjxXVEY6OlRocmVhZD4gbV9j
b2xsZWN0Q29udGludW91c2x5VGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIAogICAgIE1vbm90b25p
Y1RpbWUgbV9sYXN0R0NTdGFydFRpbWU7CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ0VuZFRp
bWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tN
YXJrZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmNwcAppbmRleCBiODViNzY0OGUyZjVkMTlmYTIyZDc2M2Y3YmNkZWY4ZjQ0YzQyYzg4Li40ZmZk
ZjljYzRlM2MzNjA2YjFkYTlhOTQwNzdmYzc0Yzg4NmVjMTg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKQEAgLTY0LDYzICs2NCwx
MyBAQAogI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4KICNlbmRpZgogCi0jaWYgVVNFKFBUSFJFQURT
KSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLQot
Ly8gV2UgdXNlIFNJR1VTUjIgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBp
biBKYXZhU2NyaXB0Q29yZS4KLXN0YXRpYyBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSA9IFNJR1VTUjI7Ci1zdGF0aWMgU3RhdGljTG9jayBnbG9iYWxTaWduYWxMb2NrOwotdGhyZWFk
X2xvY2FsIHN0YXRpYyBzdGQ6OmF0b21pYzxKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRh
Kj4gdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkIHsgbnVsbHB0ciB9OwotCi1zdGF0aWMgdm9pZCBw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1
Y29udGV4dCkKLXsKLSAgICAvLyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZy
b20gc2lnbmFsIGhhbmRsZXJzIGlzIGFsbG93ZWQuCi0gICAgSlNDOjpNYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5sb2FkKCk7
Ci0KLSAgICBpZiAodGhyZWFkRGF0YS0+c3VzcGVuZGVkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
YWNxdWlyZSkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFuZGxlciBpbnZvY2F0aW9u
IHRoYXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2lnc3VzcGVuZC4KLSAgICAg
ICAgLy8gU28gdGhpcyBoYW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNob3VsZCBub3QgcHJvY2Vz
cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gV2hlbiBzaWduYWwgY29tZXMsIGZpcnN0LCB0aGUg
c3lzdGVtIGNhbGxzIHNpZ25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNpZ3N1c3BlbmQgd2lsbCBi
ZSByZXN1bWVkLiBTaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5cyBwcmVjZWRlcy4KLSAg
ICAgICAgLy8gU28sIHRoZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhhdCBzdXNwZW5kZWQuc3Rv
cmUodHJ1ZSwgLi4uKSB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxs
ZWQuCi0gICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2
OTUzOTkvZnVuY3Rpb25zL3NpZ3N1c3BlbmQuaHRtbAotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4o
dWNvbnRleHQpOwotI2lmIENQVShQUEMpCi0gICAgdGhyZWFkRGF0YS0+c3VzcGVuZGVkTWFjaGlu
ZUNvbnRleHQgPSAqdXNlckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7Ci0jZWxzZQotICAg
IHRocmVhZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21j
b250ZXh0OwotI2VuZGlmCi0KLSAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhh
dCB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQuCi0gICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2ln
bmFsLXNhZmUgZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEg
c2lnbmFsIGhhbmRsZXIuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVw
dWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMwot
ICAgIC8vCi0gICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5z
dXJlcyB0aGF0IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KLSAg
ICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNl
ZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdfMDRfMTEKLSAgICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+
c2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAvLyBSZWFjaGluZyBoZXJlLCBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlzIGNv
bmZpZ3VyZWQgYnkgc2lnYWN0aW9uJ3Mgc2FfbWFzaykuCi0gICAgLy8gU28gYmVmb3JlIGNhbGxp
bmcgc2lnc3VzcGVuZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBpcyBk
ZWZlcnJlZC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJl
Y3Vyc2l2ZWx5LgotICAgIHNpZ3NldF90IGJsb2NrZWRTaWduYWxTZXQ7Ci0gICAgc2lnZmlsbHNl
dCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0gICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0LCBT
aWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0
KTsKLQotICAgIC8vIEFsbG93IHJlc3VtZSBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQg
aXMgcmVzdW1lZC4KLSAgICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+c2VtYXBob3JlRm9yU3VzcGVu
ZFJlc3VtZSk7Ci19Ci0jZW5kaWYgLy8gVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYg
IU9TKERBUldJTikKLQogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi11c2luZyBUaHJlYWQgPSBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOwordXNpbmcg
SlNUaHJlYWQgPSBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ7CiAKIGNsYXNzIEFjdGl2ZU1hY2hp
bmVUaHJlYWRzTWFuYWdlcjsKIHN0YXRpYyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXImIGFj
dGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdlcigpOwpAQCAtMTk0LDQxICsxNDQsMTMgQEAgTWFjaGlu
ZVRocmVhZHM6On5NYWNoaW5lVGhyZWFkcygpCiAgICAgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUo
bV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKTsKIAogICAgIExvY2tIb2xkZXIgcmVn
aXN0ZXJlZFRocmVhZHNMb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgZm9yIChU
aHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0OykgewotICAgICAgICBUaHJlYWQqIG5l
eHQgPSB0LT5uZXh0OworICAgIGZvciAoSlNUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0OykgeworICAgICAgICBKU1RocmVhZCogbmV4dCA9IHQtPm5leHQ7CiAgICAgICAgIGRlbGV0
ZSB0OwogICAgICAgICB0ID0gbmV4dDsKICAgICB9CiB9CiAKLXN0YXRpYyBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YSogdGhyZWFkRGF0YSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFRocmVhZFNwZWNpZmljPE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhLCBDYW5CZUdDVGhyZWFk
OjpUcnVlPj4gdGhyZWFkRGF0YTsKLSAgICByZXR1cm4gdGhyZWFkRGF0YS5nZXQoKTsKLX0KLQot
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6VGhyZWFkKFRocmVhZERhdGEqIHRocmVhZERhdGEpCi0g
ICAgOiBkYXRhKHRocmVhZERhdGEpCi17Ci0gICAgQVNTRVJUKHRocmVhZERhdGEpOwotfQotCi1U
aHJlYWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKQot
ewotICAgIHJldHVybiBuZXcgVGhyZWFkKHRocmVhZERhdGEoKSk7Ci19Ci0KLWJvb2wgTWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6b3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIp
IGNvbnN0Ci17Ci0jaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgIHJldHVybiBkYXRh
LT5wbGF0Zm9ybVRocmVhZCA9PSBvdGhlcjsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICByZXR1
cm4gISFwdGhyZWFkX2VxdWFsKGRhdGEtPnBsYXRmb3JtVGhyZWFkLCBvdGhlcik7Ci0jZWxzZQot
I2Vycm9yIE5lZWQgYSB3YXkgdG8gY29tcGFyZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNl
bmRpZgotfQotCiB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKIHsKICAg
ICBpZiAodGhyZWFkU3BlY2lmaWNHZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRz
KSkgewpAQCAtMjM5LDcgKzE2MSw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRU
aHJlYWQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVGhyZWFkKiB0aHJlYWQgPSBU
aHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkID0g
bmV3IEpTVGhyZWFkKHRoaXMpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhyZWFkU3BlY2lm
aWNGb3JNYWNoaW5lVGhyZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdp
c3RlcmVkVGhyZWFkc011dGV4KTsKQEAgLTI0OCwxMiArMTcwLDEyIEBAIHZvaWQgTWFjaGluZVRo
cmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVhZHMgPSB0aHJl
YWQ7CiB9CiAKLVRocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50
VGhyZWFkKCkKK0pTVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJl
bnRUaHJlYWQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0
ZXgpOwotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3Jt
VGhyZWFkKCk7Ci0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7
IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkID09
IHBsYXRmb3JtVGhyZWFkKQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFk
KCk7CisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhy
ZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFk
SUQoKSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQogCkBAIC0yODMs
MjIgKzIwNSwyMSBAQCB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVUaHJlYWRzOjpy
ZW1vdmVUaHJlYWQodm9pZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAg
ICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQbGF0Zm9ybVRo
cmVhZCgpKTsKKyAgICAgICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElmRm91bmQoY3Vy
cmVudFRocmVhZCgpKTsKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhy
ZWFkPgotdm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRo
cmVhZCBwbGF0Zm9ybVRocmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElm
Rm91bmQoVGhyZWFkSWRlbnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdp
c3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OwotICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIEpTVGhyZWFkKiB0ID0gbV9y
ZWdpc3RlcmVkVGhyZWFkczsKKyAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAg
ICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsKICAgICAg
ICAgZGVsZXRlIHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVGhyZWFkKiBsYXN0ID0gbV9yZWdp
c3RlcmVkVGhyZWFkczsKKyAgICAgICAgSlNUaHJlYWQqIGxhc3QgPSBtX3JlZ2lzdGVyZWRUaHJl
YWRzOwogICAgICAgICBmb3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0OyB0OyB0ID0g
dC0+bmV4dCkgewotICAgICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAg
ICAgICAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAgICAgIGxhc3Qt
Pm5leHQgPSB0LT5uZXh0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMzIwLDE4MiArMjQxLDIyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJy
ZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAgICAgY29uc2Vy
dmF0aXZlUm9vdHMuYWRkKGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3VycmVudFRocmVh
ZFN0YXRlLnN0YWNrT3JpZ2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCi1N
YWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5lVGhyZWFkczo6
SlNUaHJlYWQ6OkpTVGhyZWFkKE1hY2hpbmVUaHJlYWRzKikKKyAgICA6IG5leHQobnVsbHB0cikK
KyAgICAsIG1fdGhyZWFkKFdURjo6VGhyZWFkOjpjdXJyZW50KCkpCiB7CiAgICAgYXV0byBzdGFj
a0JvdW5kcyA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwotICAgIHBsYXRmb3JtVGhyZWFkID0g
Y3VycmVudFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAgc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3Jp
Z2luKCk7Ci0gICAgc3RhY2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKLQotI2lmIE9TKFdJTkRP
V1MpCi0gICAgQVNTRVJUKHBsYXRmb3JtVGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsK
LSAgICBib29sIGlzU3VjY2Vzc2Z1bCA9Ci0gICAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJy
ZW50UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksCi0g
ICAgICAgICAgICAmcGxhdGZvcm1UaHJlYWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FN
RV9BQ0NFU1MpOwotICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7Ci0jZWxpZiBVU0Uo
UFRIUkVBRFMpICYmICFPUyhEQVJXSU4pCi0gICAgdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkLnN0
b3JlKHRoaXMpOwotCi0gICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBj
b25maWd1cmF0aW9uLgotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplU2lnbmFs
SGFuZGxlcjsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplU2lnbmFsSGFuZGxlciwgW10g
ewotICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
aW4gdGhlIGhhbmRsZXIuCi0gICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBi
ZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgICAgIHN0cnVjdCBz
aWdhY3Rpb24gYWN0aW9uOwotICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwot
ICAgICAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KTsKLQotICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcHRocmVhZFNpZ25hbEhhbmRsZXJT
dXNwZW5kUmVzdW1lOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0Ff
U0lHSU5GTzsKLSAgICAgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rp
b24sIDApOwotICAgIH0pOwotCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgm
bWFzayk7Ci0gICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAg
ICBwdGhyZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLQotICAgIHNlbV9pbml0
KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHBy
b2Nlc3MuICovIDAsIC8qIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwot
I2VuZGlmCisgICAgbV9zdGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKKyAgICBtX3N0
YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7CiB9CiAKLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWRE
YXRhOjp+VGhyZWFkRGF0YSgpCitzaXplX3QgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRS
ZWdpc3RlcnMoSlNUaHJlYWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogewotI2lmIE9TKFdJTkRP
V1MpCi0gICAgQ2xvc2VIYW5kbGUocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBU
SFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgIHNlbV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNw
ZW5kUmVzdW1lKTsKLSNlbmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSBy
ZWdpc3RlcnMucmVnczsKKyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdzKTsK
IH0KIAotYm9vbCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCgpCi17Ci0jaWYg
T1MoREFSV0lOKQotICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQocGxh
dGZvcm1UaHJlYWQpOwotICAgIHJldHVybiByZXN1bHQgPT0gS0VSTl9TVUNDRVNTOwotI2VsaWYg
T1MoV0lORE9XUykKLSAgICBib29sIHRocmVhZElzU3VzcGVuZGVkID0gKFN1c3BlbmRUaHJlYWQo
cGxhdGZvcm1UaHJlYWRIYW5kbGUpICE9IChEV09SRCktMSk7Ci0gICAgQVNTRVJUKHRocmVhZElz
U3VzcGVuZGVkKTsKLSAgICByZXR1cm4gdGhyZWFkSXNTdXNwZW5kZWQ7Ci0jZWxpZiBVU0UoUFRI
UkVBRFMpCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSAh
PSBwbGF0Zm9ybVRocmVhZCwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhl
IGN1cnJlbnQgdGhyZWFkIGl0c2VsZi4iKTsKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyBzdXNw
ZW5kLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90
aGVyIHRocmVhZHMuCi0gICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBl
ciB0aHJlYWQgbG9jay4KLSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0
aGVyZSBhcmUgdGhyZWFkcyBBIGFuZCBCLgotICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1
c3BlbmQgQiBhbmQgQiBhdHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAgICAgLy8gQSBhbmQgQiBz
ZW5kIHNpZ25hbHMuIEFuZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIu
Ci0gICAgICAgIC8vIEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAg
ICAgTG9ja0hvbGRlciBsb2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoIXN1c3Bl
bmRDb3VudCkgewotICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2Ug
cHRocmVhZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRo
ZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBh
IGZldyBwbGF0Zm9ybXMsIGxpa2UgTGludXguCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1
c2UgVGhyZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQg
dG8gdGhlIHNpZ25hbCBoYW5kbGVyLgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0
Zm9ybVRocmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1
c3BlbmRSZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhh
dCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBw
cm9jZXNzaW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytzdXNwZW5kQ291
bnQ7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRv
IHN1c3BlbmQgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6cmVzdW1lKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAg
dGhyZWFkX3Jlc3VtZShwbGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIFJl
c3VtZVRocmVhZChwbGF0Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0g
ICAgewotICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQg
bm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgICAgIExvY2tIb2xk
ZXIgbG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKHN1c3BlbmRDb3VudCA9PSAx
KSB7Ci0gICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
aW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgICAgIC8vIHRoZSBz
aWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KLSAgICAgICAg
ICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIg
aW52b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgotICAgICAgICAgICAgLy8gMS4gVXNl
IGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGlu
IHRoZSBoYW5kbGVyLgotICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRp
c3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9z
aWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAgICAgIC8vIDMu
IFVzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNp
Z25hbCBoYW5kbGVyLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2Ug
dGFrZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAg
ICAgICAgICBpZiAocHRocmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lKSA9PSBFU1JDSCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBz
ZW1fd2FpdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0gICAgICAgICAgICAvLyBSZWxl
YXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRl
ZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgIHN1
c3BlbmRlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgLS1zdXNwZW5kQ291bnQ7Ci0gICAgfQotI2Vsc2UKLSNlcnJvciBOZWVkIGEg
d2F5IHRvIHJlc3VtZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi1zaXpl
X3QgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpS
ZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lm
IENQVShYODYpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2Yo
aW50KTsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RB
VEU7Ci0jZWxpZiBDUFUoWDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhS
RUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4
Nl9USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291
bnQgPSBQUENfVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBm
bGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVk
IHVzZXJfY291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0g
ICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUo
QVJNNjQpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VO
VDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0
OwotI2Vsc2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJu
X3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZv
ciwgKHRocmVhZF9zdGF0ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAh
PSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywg
X19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRf
Z2V0X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJl
c3VsdCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIs
IHJlc3VsdCk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50
ICogc2l6ZW9mKHVpbnRwdHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5E
T1dTKQotICAgIHJlZ3MuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9D
T05UUk9MOwotICAgIEdldFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdz
KTsKLSAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBk
ZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRN
YWNoaW5lQ29udGV4dDsKLSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdp
c3RlcnMpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdz
LmF0dHJpYnV0ZSk7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAh
T1MoT1BFTkJTRCkKLSAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3Jn
Ci0gICAgcHRocmVhZF9hdHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRl
KTsKLSNlbmRpZgotI2Vsc2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9y
dGFibGU7IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0
aXZlcwotICAgIHB0aHJlYWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmli
dXRlKTsKLSNlbmRpZgotICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRv
IGdldCB0aHJlYWQgcmVnaXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi12b2lk
KiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBj
b25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OnN0YWNrUG9p
bnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoKE9TKEZS
RUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCiAgICAgcmV0dXJu
IE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIocmVncyk7CkBAIC01MTksNyArMjgwLDcgQEAg
dm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVy
KCkgY29uc3QKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0Cit2
b2lkKiBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkg
Y29uc3QKIHsKICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8
fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIocmVncyk7CkBAIC01MjgsNyArMjg5LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKICNlbmRpZgogfQogCi12
b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBv
aW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6
Omluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5E
T1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBN
YWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAtNTM3LDcgKzI5OCw3
IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6Omluc3RydWN0
aW9uUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFk
czo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0CiB7CiAgICAgLy8gTExJbnQg
dXNlcyByZWdUNCBhcyBQQy4KICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCkBAIC01NDgsMTYgKzMwOSw2IEBAIHZvaWQq
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAog
fQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotdm9pZCBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6ZnJlZVJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJl
Z2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJz
JiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9X
UykgJiYgIU9TKERBUldJTikgJiYgISgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18p
KSAmJiBFTkFCTEUoSklUKSkKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmcmVncy5hdHRyaWJ1
dGUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVncyk7Ci0jZW5kaWYKLX0KLQogc3RhdGlj
IGlubGluZSBpbnQgb3NSZWRab25lQWRqdXN0bWVudCgpCiB7CiAgICAgaW50IHJlZFpvbmVBZGp1
c3RtZW50ID0gMDsKQEAgLTU3MywxNyArMzI0LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG9zUmVk
Wm9uZUFkanVzdG1lbnQoKQogICAgIHJldHVybiByZWRab25lQWRqdXN0bWVudDsKIH0KIAotc3Rk
OjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpjYXB0dXJl
U3RhY2sodm9pZCogc3RhY2tUb3ApCitzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gTWFjaGluZVRo
cmVhZHM6OkpTVGhyZWFkOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hh
ciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tCYXNlKTsKKyAgICBj
aGFyKiBiZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrQmFzZSk7CiAg
ICAgY2hhciogZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrVG9wKSkp
OwogICAgIEFTU0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5kV2l0aFJlZFpvbmUg
PSBlbmQgKyBvc1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5k
V2l0aFJlZFpvbmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpv
bmUpKTsKIAotICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQotICAgICAgICBlbmRX
aXRoUmVkWm9uZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0VuZCk7CisgICAg
aWYgKGVuZFdpdGhSZWRab25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUg
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAKICAgICBzdGQ6OnN3
YXAoYmVnaW4sIGVuZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVn
aW4sIGVuZFdpdGhSZWRab25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzM2Nyw5IEBAIHN0YXRpYyB2
b2lkIGNvcHlNZW1vcnkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBzaXplKQog
Ly8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
ayBpcyBvbmx5IGNhbGxlZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAvLyBvcGVyYXRpb24u
IEFzIHRoZSBoZWFwIGlzIGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRoZSBzdGFjayB0aGUg
cGVyZm9ybWFuY2UgaGl0IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlP
dGhlclRocmVhZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBh
Y2l0eSwgc2l6ZV90KiBzaXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhy
ZWFkU3RhY2soSlNUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHks
IHNpemVfdCogc2l6ZSkKIHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAg
SlNUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgc2l6ZV90IHJlZ2lzdGVyc1NpemUg
PSB0aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgIHN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBzdGFjayA9IHRocmVhZC0+Y2FwdHVyZVN0YWNrKHJlZ2lzdGVycy5zdGFja1BvaW50
ZXIoKSk7CiAKQEAgLTYzMSw4ICszODIsNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5
T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplXwogICAg
IGlmIChjYW5Db3B5KQogICAgICAgICBjb3B5TWVtb3J5KHN0YXRpY19jYXN0PGNoYXIqPihidWZm
ZXIpICsgKnNpemUsIHN0YWNrLmZpcnN0LCBzdGFjay5zZWNvbmQpOwogICAgICpzaXplICs9IHN0
YWNrLnNlY29uZDsKLQotICAgIHRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogfQog
CiBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXpl
KQpAQCAtNjQ0LDM2ICszOTMsMzQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVy
VGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKIAogICAgICpz
aXplID0gMDsKIAotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBs
YXRmb3JtVGhyZWFkKCk7CisgICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IGN1cnJlbnRUaHJlYWQo
KTsKICAgICBpbnQgbnVtYmVyT2ZUaHJlYWRzID0gMDsgLy8gVXNpbmcgMCB0byBkZW5vdGUgdGhh
dCB3ZSBoYXZlbid0IGNvdW50ZWQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHlldC4KICAgICBpbnQg
aW5kZXggPSAxOwotICAgIFRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKKyAg
ICBKU1RocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAotICAgIFRocmVhZCog
cHJldmlvdXNUaHJlYWQgPSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAgaWYgKCp0aHJlYWQg
IT0gcGxhdGZvcm1UaHJlYWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRocmVhZC0+
c3VzcGVuZCgpOworICAgIEpTVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51bGxwdHI7CisgICAg
Zm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRl
eCsrKSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpIHsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAjaWYgT1MoREFSV0lOKQotICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAg
ICAgICAgICAgICAgIGlmICghbnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRl
ZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCisgICAgICAgICAg
ICAgICAgICAgIGZvciAoSlNUaHJlYWQqIGNvdW50ZWRUaHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJl
YWRzOyBjb3VudGVkVGhyZWFkOyBjb3VudGVkVGhyZWFkID0gY291bnRlZFRocmVhZC0+bmV4dCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mVGhyZWFkcysrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBSZS1kbyB0aGUgc3Vz
cGVuc2lvbiB0byBnZXQgdGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3IgbG9nZ2luZy4KLSAg
ICAgICAgICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1c3BlbmQodGhyZWFk
LT5wbGF0Zm9ybVRocmVhZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gS0VS
Tl9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuZXJyb3IoKSAhPSBL
RVJOX1NVQ0NFU1MpOwogCiAgICAgICAgICAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18s
IF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLAotICAgICAgICAgICAgICAgICAgICAiSmF2
YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQg
KGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIHBsYXRmb3JtVGhyZWFkICVwLiIsCi0gICAg
ICAgICAgICAgICAgICAgIGVycm9yLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSkpOworICAgICAg
ICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQg
YW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIGlkICVwLiIs
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcigpLCBpbmRleCwgbnVtYmVyT2ZUaHJl
YWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+dGhyZWFkSUQoKSkp
OwogCiAgICAgICAgICAgICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVhZCBvbiB0aGUgdGhy
ZWFkc1RvQmVEZWxldGVkIGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBk
ZWxldGUgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVyCiAgICAgICAgICAg
ICAgICAgLy8gdGhyZWFkcywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRpbmcgdGhlIEMgaGVh
cCBsb2NrIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3IgZGVsZXRpbmcgdGhl
IGludmFsaWQgdGhyZWFkLiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAgICAgICAgIC8vIGRl
ZmVyIHRoZSBkZWxldGlvbiB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBhbGwgdGhyZWFkcy4K
LSAgICAgICAgICAgICAgICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CisgICAg
ICAgICAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAg
ICAgICAgICAgdGhyZWFkLT5uZXh0ID0gdGhyZWFkc1RvQmVEZWxldGVkOwogICAgICAgICAgICAg
ICAgIHRocmVhZHNUb0JlRGVsZXRlZCA9IHRocmVhZDsKIApAQCAtNjg3LDI1ICs0MzQsMjUgQEAg
Ym9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKICNlbHNlCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
bnVtYmVyT2ZUaHJlYWRzKTsKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShwcmV2aW91c1RocmVh
ZCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgICAgICBwcmV2aW91c1RocmVhZCA9IHRocmVhZDsKICAgICAgICAgdGhyZWFkID0gdGhyZWFk
LT5uZXh0OwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRU
aHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRo
cmVhZCAhPSBwbGF0Zm9ybVRocmVhZCkKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAg
ICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdHJ5Q29weU90aGVy
VGhyZWFkU3RhY2sodGhyZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsKICAgICB9CiAKLSAg
ICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJl
YWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJl
YWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhy
ZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFk
SUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRocmVhZC0+cmVzdW1lKCk7CiAgICAgfQogCi0gICAg
Zm9yIChUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKLSAg
ICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgIGZvciAoSlNUaHJl
YWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKKyAgICAgICAgSlNU
aHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0aHJlYWQ7
CiAgICAgICAgIHRocmVhZCA9IG5leHRUaHJlYWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAppbmRleCBkMTk2ZmM5ZTVmNGQ3OTA3
NWJkNjE4MjQyY2Q4N2Y3OTk0NDg3ZjIyLi45MTk3YzQ0MDhjZTJmZDRlZTZhYTNkMTRhN2M2OWU2
ZjhjYTEwOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuaApAQCAtMjIsMjUgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
Ik1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaHJlYWQuaCIKICNpbmNsdWRl
ICJSZWdpc3RlclN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5ET1dT
KSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2luY2x1ZGUgPHNpZ25h
bC5oPgotLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRfdCBhbmQgdWNvbnRl
eHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KLS8vIFRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkIGlu
IEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2FuIGJlCi0vLyByZW1v
dmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4KLS8vIGh0dHBzOi8vYnVncy5mcmVlYnNk
Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc5Ci0jaWYgT1MoRlJFRUJTRCkKLSNp
bmNsdWRlIDx1Y29udGV4dC5oPgotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIENvZGVCbG9ja1NldDsKQEAgLTY0LDEzICs1MSwxMCBAQCBjbGFzcyBNYWNoaW5lVGhy
ZWFkcyB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEN1cnJlbnRUaHJlYWQoKTsg
Ly8gT25seSBuZWVkcyB0byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNhbiB1c2UgdGhlIHNh
bWUgaGVhcCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCiAKLSAgICBjbGFzcyBUaHJlYWREYXRhIHsK
KyAgICBjbGFzcyBKU1RocmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIHB1YmxpYzoKLSAgICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+VGhyZWFkRGF0YSgp
OwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7
CisgICAgICAgIEpTVGhyZWFkKE1hY2hpbmVUaHJlYWRzKik7CiAKICAgICAgICAgc3RydWN0IFJl
Z2lzdGVycyB7CiAgICAgICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXIoKSBjb25zdDsKQEAgLTc5
LDg0ICs2Myw0MCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgICAgICB2b2lkKiBp
bnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBj
b25zdDsKICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICAK
LSNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpCi0gICAgICAgICAgICB1c2luZyBQbGF0Zm9y
bVJlZ2lzdGVycyA9IE1hY2hpbmVDb250ZXh0OjpQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIChP
UyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpCi0gICAgICAg
ICAgICB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7Ci0jZWxpZiBVU0UoUFRI
UkVBRFMpCi0gICAgICAgICAgICBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewotICAgICAgICAg
ICAgICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIH07Ci0jZWxzZQot
I2Vycm9yIE5lZWQgYSB0aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0j
ZW5kaWYKLQotICAgICAgICAgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKKyAgICAgICAgICAg
IFdURjo6UGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKICAgICAgICAgfTsKIAotICAgICAgICBib29s
IHN1c3BlbmQoKTsKLSAgICAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgc2l6ZV90IGdldFJl
Z2lzdGVycyhSZWdpc3RlcnMmKTsKLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVy
cyYpOworICAgICAgICBFeHBlY3RlZDx2b2lkLCBUaHJlYWQ6OlBsYXRmb3JtU3VzcGVuZEVycm9y
PiBzdXNwZW5kKCkgeyByZXR1cm4gbV90aHJlYWQtPnN1c3BlbmQoKTsgfQorICAgICAgICB2b2lk
IHJlc3VtZSgpIHsgbV90aHJlYWQtPnJlc3VtZSgpOyB9CisgICAgICAgIHNpemVfdCBnZXRSZWdp
c3RlcnMoUmVnaXN0ZXJzJiByZWdzKTsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+
IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCk7CiAKLSAgICAgICAgUGxhdGZvcm1UaHJlYWQg
cGxhdGZvcm1UaHJlYWQ7Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZTsKLSAgICAgICAgdm9pZCog
c3RhY2tFbmQ7Ci0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgSEFORExFIHBsYXRmb3JtVGhyZWFk
SGFuZGxlOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgICAgICBzZW1f
dCBzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOwotICAgICAgICBtY29udGV4dF90IHN1c3BlbmRl
ZE1hY2hpbmVDb250ZXh0OwotICAgICAgICBpbnQgc3VzcGVuZENvdW50IHsgMCB9OwotICAgICAg
ICBzdGQ6OmF0b21pYzxib29sPiBzdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsK
LQotICAgIGNsYXNzIFRocmVhZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgICAgICBUaHJlYWQoVGhyZWFkRGF0YSopOwotCi0gICAgcHVibGljOgotICAgICAgICB1c2lu
ZyBSZWdpc3RlcnMgPSBUaHJlYWREYXRhOjpSZWdpc3RlcnM7Ci0KLSAgICAgICAgc3RhdGljIFRo
cmVhZCogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsgfQotCi0gICAgICAgIGJvb2wgc3VzcGVuZCgpIHsgcmV0dXJuIGRhdGEtPnN1
c3BlbmQoKTsgfQotICAgICAgICB2b2lkIHJlc3VtZSgpIHsgZGF0YS0+cmVzdW1lKCk7IH0KLSAg
ICAgICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgcmV0dXJuIGRhdGEt
PmdldFJlZ2lzdGVycyhyZWdzKTsgfQotICAgICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0
ZXJzJiByZWdzKSB7IGRhdGEtPmZyZWVSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgc3RkOjpw
YWlyPHZvaWQqLCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkgeyByZXR1cm4g
ZGF0YS0+Y2FwdHVyZVN0YWNrKHN0YWNrVG9wKTsgfQotCi0gICAgICAgIGNvbnN0IFBsYXRmb3Jt
VGhyZWFkJiBwbGF0Zm9ybVRocmVhZCgpIHsgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkOyB9
Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrQmFz
ZTsgfQotICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNr
RW5kOyB9CisgICAgICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGhyZWFkLT5pZCgpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2tCYXNlOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFja0VuZDsgfQogCi0gICAgICAgIFRocmVhZCogbmV4dDsKLSAgICAgICAg
VGhyZWFkRGF0YSogZGF0YTsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQ7CisgICAgICAgIFJlZjxX
VEY6OlRocmVhZD4gbV90aHJlYWQ7CisgICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOworICAgICAg
ICB2b2lkKiBtX3N0YWNrRW5kOwogICAgIH07CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1
cm4gbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OyB9Ci0gICAgVGhyZWFkKiB0aHJlYWRzTGlzdEhl
YWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJl
YWRzTXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9Ci0gICAg
VGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTVGhyZWFkKiB0
aHJlYWRzTGlzdEhlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3Jl
Z2lzdGVyZWRUaHJlYWRzTXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJl
YWRzOyB9CisgICAgSlNUaHJlYWQqIG1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVS
b290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0
YXRlJik7CiAKLSAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCosIHZvaWQq
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCopOworICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFk
U3RhY2soSlNUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBi
b29sIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQq
LCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQ
RUNJRklDX0NBTEwgcmVtb3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFBsYXRmb3JtVGhyZWFkPgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRo
cmVhZCk7CisgICAgdm9pZCByZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwog
CiAgICAgTG9jayBtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lz
dGVyZWRUaHJlYWRzOworICAgIEpTVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdU
Rjo6VGhyZWFkU3BlY2lmaWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgz
M2QyZDIzMmI4YTljZDZmM2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDlj
ZTcyMTMzYzQxY2RkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0
YXRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01
OCw3ICs1OCw3IEBAIEF0b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNT
dGF0czo6SUNTdGF0cygpCiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAg
W3RoaXNdICgpIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04
NCw3ICs4NCw3IEBAIElDU3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90
aWZ5QWxsKCk7CiAgICAgfQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhy
ZWFkKTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0
YXRzOjphZGQoY29uc3QgSUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5oCmluZGV4IGU3NWNmZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2Ux
ZTkyY2U5N2RkMWQ5NTA4OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRl
OgogCiAgICAgU3BlY3RydW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAg
ICBMb2NrIG1fbG9jazsKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3No
b3VsZFN0b3AgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA1OWI2MjczZGVhYjFk
ZDU5ZmQ3NTk0MWNkNmU2MTE0OTI4NzkyNDcwLi43NWFjNjBkOWIzNDYwODFjYjY3MDY5ZWRlZDM1
Mjg1NDNmYmQzZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhl
Y1N0YXRlKiBleGVjKQogICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29s
IGRpZFN0YXJ0ID0gZmFsc2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBj
cmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
CiAgICAgICAgICJKU0MgQWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9j
aywgJmRpZFN0YXJ0Q29uZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1h
bmRMaW5lIGNvbW1hbmRMaW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAg
dGhyZWFkLT5kZXRhY2goKTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2soZGlkU3RhcnRMb2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0
YXJ0VGltZW91dFRocmVhZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6
IHRpbWVvdXQgc3RyaW5nIGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAg
ICAgICAgICAgICAgIiBidXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQu
XG4iKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRo
cmVhZE1haW4sIDAsICJqc2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6
Y3JlYXRlKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIx
ZmUxMjdlOGI3MzFmYjUzYjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUy
NTRhOGUxZWYxM2RhNWM0MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBs
b2NrQ291bnQpCiAgICAgICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRo
cmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVh
ZCA9IHRydWU7CiAgICAgQVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5oCmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5
ZGJlNzQuLmFhN2RkOGQ1ZmY2OTA5Mjg0MDgwMTNkOWM0OTI0MGFhZjg0MTM0NzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3Mg
SlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0q
IHZtKCkgeyByZXR1cm4gbV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlm
aWVyPiBvd25lclRocmVhZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFk
Pj4gb3duZXJUaHJlYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJl
YWQpCiAgICAgICAgICAgICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
IHsgcmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhy
ZWFkKCk7IH0KKyAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4g
bV9oYXNPd25lclRocmVhZCAmJiBtX293bmVyVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKTsg
fQogCiAgICAgdm9pZCB3aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBj
bGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAg
Ly8gZGlmZmVyZW50IHRocmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8gcmFj
ZXMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjkwNDIjYzYKICAgICBib29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRocmVh
ZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVyVGhy
ZWFkOwogICAgIGludHB0cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BE
ZXB0aDsKICAgICBib29sIG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTQxOTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0aHJl
YWQuaD4KLSNlbmRpZgotCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9T
KERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQot
I2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJXSU4p
Ci10eXBlZGVmIG1hY2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykK
LXR5cGVkZWYgRFdPUkQgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10eXBl
ZGVmIHB0aHJlYWRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0gICAg
Ci1pbmxpbmUgUGxhdGZvcm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNpZiBP
UyhEQVJXSU4pCi0gICAgcmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9zZWxm
KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7
Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2VuZGlm
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4NDkz
YjMzYmM4OWZlM2ZhZDk4YTlkLi5iMWUwMTU0MzgzN2E4ZjgzYTk4NGIzMjNjZjhmZTlmZDljZDM5
MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAgICBi
b29sIGlzVmFsaWRGcmFtZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVpbnQ4
X3QqIGZwQ2FzdCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZvciAo
TWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRz
KCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKG1f
bWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewog
ICAgICAgICAgICAgdWludDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRo
cmVhZC0+c3RhY2tCYXNlKCkpOwogICAgICAgICAgICAgdWludDhfdCogc3RhY2tMaW1pdCA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhY2tCYXNlKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIFNhbXBsaW5n
UHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2VyJikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFNhbXBsaW5nUHJvZmlsZXI+IHByb2ZpbGVy
ID0gdGhpczsKLSAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoImpzYy5zYW1w
bGluZy1wcm9maWxlci50aHJlYWQiLCBbcHJvZmlsZXJdIHsKKyAgICBtX3RocmVhZElkZW50aWZp
ZXIgPSBUaHJlYWQ6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9m
aWxlcl0gewogICAgICAgICBwcm9maWxlci0+dGltZXJMb29wKCk7CiAgICAgfSk7CiB9CkBAIC0z
NDQsNyArMzQ0LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgTG9ja0hvbGRl
ciBjb2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7
CiAgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihFeGVjdXRhYmxl
QWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkpOwogCi0gICAgICAgIGJvb2wgZGlkU3Vz
cGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGF1dG8gZGlk
U3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAgIGlmIChk
aWRTdXNwZW5kKSB7CiAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNw
ZW5kZWQsIHdlIGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhy
ZWFkCiAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCkBAIC0z
NTQsMTMgKzM1NCwxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICAgICAgYm9v
bCB0b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVn
aXN0ZXJzIHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJl
YWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25U
aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVG
cmFtZSA9IHJlZ2lzdGVycy5mcmFtZVBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBjYWxsRnJh
bWUgPSBzdGF0aWNfY2FzdDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAg
ICAgIG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKICAgICAgICAg
ICAgICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICBt
X2pzY0V4ZWN1dGlvblRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcg
d2hlbiB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKaW5kZXggYjQ0YTNiYTQ3ZjllNjc2OGFkNDM3
YmIxOGUwYThhYmM3OTViZDZjZi4uZGQ0MjAwY2YxNWRjMDg1NTBhZjNjMjk1YWY3NzY5ODRkYTYw
N2QxMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuaApAQCAtMTk1LDggKzE5NSw4IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIHN0ZDo6Y2hy
b25vOjptaWNyb3NlY29uZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGlt
ZTsKICAgICBMb2NrIG1fbG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRp
ZmllcjsKLSAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsK
KyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZElkZW50aWZpZXI7CisgICAgTWFjaGluZVRocmVh
ZHM6OkpTVGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKICAgICBib29sIG1faXNQYXVzZWQ7
CiAgICAgYm9vbCBtX2lzU2h1dERvd247CiAgICAgYm9vbCBtX25lZWRzUmVwb3J0QXRFeGl0IHsg
ZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDk5YTI2ZmNhMWMyMWYz
ZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5NWY0NmUuLmU5N2MzMTg1ZmM2ZjJjNjI4NGFlNzFiZWI5MDVj
MDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjU5LDcgKzY1
OSw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGlj
IERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
ICAgICB2b2lkIGxvZ0V2ZW50KENvZGVCbG9jayosIGNvbnN0IGNoYXIqIHN1bW1hcnksIGNvbnN0
IEZ1bmMmIGZ1bmMpOwogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25l
clRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQorICAg
IHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1
cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsg
cmV0dXJuIG1fdHJhcHM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcAppbmRleCA1Mjc2M2Y4NTNkNDYzYjcyZjMzZTQ2NGI3YjVhNTlkMDExOTM4ZjY5Li4yNzJj
NGRlZmE4NTVmYzM5YjBjZDQxMDFlNWU3ZTRiMmJkYzBkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBFeHBl
Y3RlZDxzdGQ6OnBhaXI8Vk0qLCBTdGFja0JvdW5kcz4sIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0
aXZlVk1BbmRTdGFjCiAgICAgICAgICAgICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0
dXM6OkNvbnRpbnVlOyAvLyBUcnkgbmV4dCBWTS4KICAgICAgICAgfQogCi0gICAgICAgIGZvciAo
TWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xp
c3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5l
eHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1h
Y2hpbmVUaHJlYWRzLnRocmVhZHNMaXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVh
ZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0
aHJlYWQtPnN0YWNrQmFzZSgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+
c3RhY2tFbmQoKSk7CiAgICAgICAgICAgICBpZiAoc3RhY2tQb2ludGVyIDw9IHRocmVhZC0+c3Rh
Y2tCYXNlKCkgJiYgc3RhY2tQb2ludGVyID49IHRocmVhZC0+c3RhY2tFbmQoKSkgewpAQCAtNDU1
LDcgKzQ1NSw3IEBAIHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAg
ICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFk
ID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFk
KSB7Ci0gICAgICAgICAgICAgICAgc2lnbmFsVGhyZWFkKG9wdGlvbmFsT3duZXJUaHJlYWQudmFs
dWUoKSwgU0lHVVNSMSk7CisgICAgICAgICAgICAgICAgb3B0aW9uYWxPd25lclRocmVhZC52YWx1
ZSgpLT5zaWduYWwoU0lHVVNSMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAKQEAgLTQ5Myw3ICs0OTMsNyBAQCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6
OkV2ZW50VHlwZSBldmVudFR5cGUpCiAgICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3QgYmxv
Y2suCiAgICAgICAgIFJlZlB0cjxTaWduYWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5ldyBT
aWduYWxTZW5kZXIodm0oKSwgZXZlbnRUeXBlKSk7CiAgICAgICAgIGFkZFNpZ25hbFNlbmRlcihz
ZW5kZXIuZ2V0KCkpOwotICAgICAgICBjcmVhdGVUaHJlYWQoImpzYy52bXRyYXBzLnNpZ25hbGxp
bmcudGhyZWFkIiwgW3NlbmRlcl0geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZtdHJh
cHMuc2lnbmFsbGluZy50aHJlYWQiLCBbc2VuZGVyXSB7CiAgICAgICAgICAgICBzZW5kZXItPnNl
bmQoKTsKICAgICAgICAgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0hlYXBWZXJpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SGVhcFZlcmlmaWVyLmNwcAppbmRleCA1NDI2ZDk4ZGU2NjJjOWE0M2FmY2NiYTFiYjYwNTRiOWY5
ODgwZDhhLi40Mjg2YjIzZTAyNTA5YWFkNDdkMGI5ZDRmYmZjZjQ5ZmViODkxYmIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcApAQCAtMTQzLDcgKzE0
Myw3IEBAIHZvaWQgSGVhcFZlcmlmaWVyOjpwcmludFZlcmlmaWNhdGlvbkhlYWRlcigpCiAgICAg
UkVMRUFTRV9BU1NFUlQobV9oZWFwLT5jb2xsZWN0aW9uU2NvcGUoKSk7CiAgICAgQ29sbGVjdGlv
blNjb3BlIHNjb3BlID0gY3VycmVudEN5Y2xlKCkuc2NvcGU7CiAgICAgTW9ub3RvbmljVGltZSBn
Y0N5Y2xlVGltZXN0YW1wID0gY3VycmVudEN5Y2xlKCkudGltZXN0YW1wOwotICAgIGRhdGFMb2co
IlZlcmlmeWluZyBoZWFwIGluIFtwIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiLCB0IiwgY3Vy
cmVudFRocmVhZCgpLCAiXSB2bSAiLAorICAgIGRhdGFMb2coIlZlcmlmeWluZyBoZWFwIGluIFtw
IiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiLCB0IiwgVGhyZWFkOjpjdXJyZW50KCksICJdIHZt
ICIsCiAgICAgICAgIFJhd1BvaW50ZXIobV9oZWFwLT52bSgpKSwgIiBvbiAiLCBzY29wZSwgIiBH
QyBAICIsIGdjQ3ljbGVUaW1lc3RhbXAsICJcbiIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNThmMTliNTZkMzNjYjg4YTZmYjQ5ZDZlNWYzYjYw
OTc4NmJjMGNjLi43NDE0OGE4MDE0YjJlZTBjZTUxMTI2NmNiYTRhOGE3NGVlZDI2ODc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMyNSw4ICszMjUsOCBA
QAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzJEMTUxQTgyNUIwMDQx
MjNGRiAvKiBXVEZTdHJpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIzRkYg
LyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggKi87IH07CiAJCUE4
QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzJGMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCAqLzsgfTsKLQkJQThBNDc0
NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovOyB9Owot
CQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcz
MzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLzsg
fTsKKwkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMw
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi87IH07CisJCUE4
QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgKi87IH07CiAJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMzMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLzsgfTsKIAkJQThBNDc0NEQxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQ
cmltaXRpdmVzLmggKi87IH07CkBAIC03MjgsOCArNzI4LDggQEAKIAkJQThBNDczMkQxNTFBODI1
QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXVEZTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0
NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdURlN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyUHRo
cmVhZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzMzMTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nUHJpbWl0aXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRp
bmdQcmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTY0LDggKzEx
NjQsOCBAQAogCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhl
ZFF1ZXVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNp
bmcuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uLmggKi8sCi0JCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovLAotCQkJCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8sCisJCQkJQThBNDczMzAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLywKKwkJCQlBOEE0NzMz
MTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuaCAqLywKIAkJCQlBOEE0
NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCAqLywKIAkJCQlBOEE0NzMzMzE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8sCiAJCQkJQThBNDczMzUxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLywKQEAgLTE2MTgsNyArMTYxOCw3IEBA
CiAJCQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBvc2l0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQ0OTE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0RDE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NTQxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKQEAgLTE4NDMs
NyArMTg0Myw3IEBACiAJCQkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lz
dHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzdGMUQzMDc4REEwMEY1RkExNiAvKiBU
ZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM5NjFEMzA4MDBB
MDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0
QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3NDRFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1h
cmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0
aW9uU3BlZWRUZXN0LmNwcAppbmRleCBjYjFkMTAxZTg1NjUyOWU4YWFlYTZhYmY2MGVjMzhlYTBi
OGRkZTcyLi40YzNiZDU0ZTM5Mjg3NWM2NTU3NjYyNzIwZGI4YzBiOTlhYmMzYjdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcAorKysgYi9T
b3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcApAQCAtNzksMTQgKzc5
LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAgICBDb25kaXRpb25UeXBlIGVtcHR5Q29uZGl0aW9uOwog
ICAgIENvbmRpdGlvblR5cGUgZnVsbENvbmRpdGlvbjsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVu
dGlmaWVyPiBjb25zdW1lclRocmVhZHM7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHBy
b2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IGNvbnN1bWVyVGhyZWFk
czsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1Y2VyVGhyZWFkczsKIAogICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7CiAgICAgTG9ja1R5cGUgcmVjZWl2ZWRMb2NrOwogICAg
IAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAg
IFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkNv
bnN1bWVyIHRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZv
ciAoOzspIHsKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRo
IHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAi
LCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIGNvbnN1
bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUs
ICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRDb250aW51ZSB8fCAhcXVldWUuaXNF
bXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSAmJiBxdWV1ZS5pc0VtcHR5KCkpCkBAIC0xMTQs
MTEgKzExNCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFw
cGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0
aHJlYWQpOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2VyczsgaS0t
OykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVU
aHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAog
ICAgICAgICAgICAgIlByb2R1Y2VyIFRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1
Y2VyOyArK2kpIHsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVsbENvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3
aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9
PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIHBy
b2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51
ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXpl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbXVzdE5vdGlmeSA9IHF1ZXVlLmlzRW1wdHkoKTsKQEAgLTEzOCwxMSArMTM4LDExIEBAIHZv
aWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5KGVtcHR5Q29uZGl0aW9uLCBt
dXN0Tm90aWZ5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAg
cHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgcHJvZHVj
ZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJl
YWQ+JiB0aHJlYWQgOiBwcm9kdWNlclRocmVhZHMpCisgICAgICAgIHRocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2tUeXBlPiBs
b2NrZXIobG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJu
ZXNzVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAK
aW5kZXggZjA4MzIxYzBmNjg4MzY1MzVkODNjYjZiYzc1MTE4NDhiYjUyZDk0Zi4uNjhjZTg0YzQ4
YTNmZDRjOGY4MzViYTA5YWE2MWE1MDcyMzc2Nzk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9i
ZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJr
cy9Mb2NrRmFpcm5lc3NUZXN0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgQmVuY2htYXJr
IHsKICAgICB7CiAgICAgICAgIExvY2tUeXBlIGxvY2s7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjx1bnNpZ25lZFtdPiBjb3VudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkW10+KG51bVRo
cmVhZHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJl
YWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZHMpOwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6
bWFrZV91bmlxdWU8UmVmUHRyPFRocmVhZD5bXT4obnVtVGhyZWFkcyk7CiAgICAgCiAgICAgICAg
IHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKICAgICAKQEAgLTcwLDcgKzcwLDcgQEAg
c3RydWN0IEJlbmNobWFyayB7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5k
ZXggPSBudW1UaHJlYWRzOyB0aHJlYWRJbmRleC0tOykgewogICAgICAgICAgICAgY291bnRzW3Ro
cmVhZEluZGV4XSA9IDA7Ci0gICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IGNyZWF0
ZVRocmVhZCgKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVh
dGUoCiAgICAgICAgICAgICAgICAgIkJlbmNobWFyayBUaHJlYWQiLAogICAgICAgICAgICAgICAg
IFsmLCB0aHJlYWRJbmRleF0gKCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW1pY3Jvc2Vj
b25kc0luQ3JpdGljYWxTZWN0aW9uKSB7CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RydWN0IEJlbmNo
bWFyayB7CiAgICAgCiAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzOyB0aHJlYWRJbmRleC0tOykKLSAgICAgICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAg
ICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcCBi
L1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAppbmRleCA1NDVkMmUwYjA0
ODhmMzM4OTRhNTk2ODhmZDkxYjBkM2EzODdjY2EyLi44MmQzOWY4N2M2YzcwNmMxOWNlNGYyOTRj
OWI2MWIyYWJiOGE1OThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1Nw
ZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3Bw
CkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIHsKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPiBsb2NrcyA9IHN0ZDo6bWFrZV91
bmlxdWU8V2l0aFBhZGRpbmc8TG9ja1R5cGU+W10+KG51bVRocmVhZEdyb3Vwcyk7CiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxkb3VibGU+W10+IHdvcmRzID0gc3RkOjptYWtl
X3VuaXF1ZTxXaXRoUGFkZGluZzxkb3VibGU+W10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Bl
ckdyb3VwKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVh
ZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZnB0cjxUaHJlYWQ+W10+KG51bVRocmVhZEdyb3VwcyAq
IG51bVRocmVhZHNQZXJHcm91cCk7CiAKICAgICAgICAgdm9sYXRpbGUgYm9vbCBrZWVwR29pbmcg
PSB0cnVlOwogCkBAIC05MCw3ICs5MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgICAgICAg
ICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0udmFsdWUgPSAwOwogCiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0t
OykgewotICAgICAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVh
ZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAg
ICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJ
bmRleF0gPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgIkJlbmNobWFyayB0
aHJlYWQiLAogICAgICAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAm
d29yZHMsICZrZWVwR29pbmcsICZudW1JdGVyYXRpb25zTG9jaywgJm51bUl0ZXJhdGlvbnNdICgp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsb2NhbFdvcmQgPSAwOwpAQCAtMTIx
LDcgKzEyMSw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgICAgICBrZWVwR29pbmcgPSBmYWxz
ZTsKICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdy
b3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgICAg
ICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgICAgICBk
b3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCmluZGV4IDM4N2M2ZTI1ZDcwNjI5YTgzYWE2MWNkNmE2YTg3
NDllYTA3YzdmMDAuLjQxMGJmYjU3NDQyNWE1N2M1YmRmYmQwZTc5ZmI5MTliMTdkYWQyODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgQXV0
b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgCiAgICAgbV9o
YXNVbmRlcmx5aW5nVGhyZWFkID0gdHJ1ZTsKICAgICAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgIldURjo6QXV0b21hdGljVGhyZWFkIiwKICAgICAgICAgWz1dICgp
IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgQXV0
b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IFdvcmtSZXN1bHQ6OkNvbnRpbnVlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhy
ZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnRocmVhZERpZFN0YXJ0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggYTM0MTkxMTljYTcxZWRkZjk1NTNjYjMwYTc2YTJh
ODU1ZmViYTJjNy4uYjUwYmJiYzNiZjNhZDJiMWZkZDEzNDUzNDg2NTRhYjFkNDE4Y2JjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEyOCw3ICsxMjgsNiBAQCBzZXQoV1RGX0hFQURFUlMKICAg
ICBTdHJpbmdFeHRyYXMuaAogICAgIFN0cmluZ1ByaW50U3RyZWFtLmgKICAgICBTeXN0ZW1UcmFj
aW5nLmgKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKICAgICBUaHJlYWRTYWZl
UmVmQ291bnRlZC5oCiAgICAgVGhyZWFkU3BlY2lmaWMuaAogICAgIFRocmVhZGluZy5oCkBAIC0z
MjksMTYgKzMyOCwxNCBAQCBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVTCiBpZiAoV0lOMzIpCiAg
ICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgT1NBbGxvY2F0b3JXaW4uY3BwCisg
ICAgICAgIFRocmVhZEhvbGRlcldpbi5jcHAKICAgICAgICAgVGhyZWFkU3BlY2lmaWNXaW4uY3Bw
CiAgICAgICAgIFRocmVhZGluZ1dpbi5jcHAKICAgICApCiBlbHNlICgpCi0gICAgbGlzdChBUFBF
TkQgV1RGX0hFQURFUlMKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCi0g
ICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAgIE9TQWxsb2NhdG9yUG9z
aXguY3BwCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisgICAgICAg
IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcAogICAgICAgICBUaHJlYWRpbmdQdGhyZWFkcy5jcHAK
ICAgICApCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAppbmRleCAwMjQ5NTQ0YzUxOGU4MmFm
ZjE3MDVkZTE5ZWM5NjVhYjk4YjFkMTA2Li4zNGI5NDI1NTVhYjU2MTgzMjEwMThiNGYwNzkwZjI4
MjUwYTdkY2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAtMTg2LDkgKzE4Niw5IEBAIGJvb2wg
aXNNYWluVGhyZWFkKCkKICNlbmRpZgogCiAjaWYgIVVTRShXRUJfVEhSRUFEKQotYm9vbCBjYW5B
Y2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZCkK
K2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkKQogewotICAgIHJldHVybiB0aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkKCk7CisgICAg
cmV0dXJuIHRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oIGIvU291cmNlL1dURi93dGYvTWFpblRocmVh
ZC5oCmluZGV4IDI1ZDhmNzY2ZGNmYjg3OWExZDc2ODNjZTU1MDhkZDhkN2YxZDc3YWYuLjBlNzhl
OGU1MWFiZThkOTU1NDcyYzc5ZGQzNDY5MmYxNTQ2ZGIxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL01haW5UaHJlYWQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKQEAg
LTM0LDEzICszNCwxMiBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFByaW50U3RyZWFtOwogCi10eXBlZGVm
IHVpbnQzMl90IFRocmVhZElkZW50aWZpZXI7Ci0KIC8vIE11c3QgYmUgY2FsbGVkIGZyb20gdGhl
IG1haW4gdGhyZWFkLgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJl
YWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
LmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAppbmRleCBkZmRkZjBh
OTU1NTJkYjNlMmFlY2ZlZjRlYzE2ZWZiNWM2ZTZjN2JkLi40MTI4ZjVjZDcxYTdkYjJmNGZkNzAz
Mjk1M2YwYzNmMWY1MDBkMTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVz
c3VyZUhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIu
aApAQCAtMTczLDcgKzE3Myw3IEBAIGNsYXNzIE1lbW9yeVByZXNzdXJlSGFuZGxlciB7CiAjaWYg
VVNFKEdMSUIpCiAgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7CiAjZWxzZQotICAg
ICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+
IG1fdGhyZWFkOwogI2VuZGlmCiAgICAgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpv
YnNHZW5lcmljLmNwcAppbmRleCA0MDIzZjQzZTZmMjBhMzhlMTAzZTdjOWEyZTRmMGY3ZTA2MTA1
NzE0Li45MDg5MmFhNDk3MTQ4YmZkN2EyZTIxOTA3MDYxYzExZjFjMmM4NTI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcApAQCAtOTQsNyArOTQsNyBAQCBib29sIFBhcmFs
bGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9u
bWVudCogcGFyZW50KQogICAgIH0KIAogICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90
aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0
ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisgICAgICAgIG1fdGhy
ZWFkSUQgPSBUaHJlYWQ6OmNyZWF0ZSgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0
ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CiAKICAgICBpZiAobV90
aHJlYWRJRCkKICAgICAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpv
YnNHZW5lcmljLmgKaW5kZXggNDU4NDA3YzRjYjRhM2Y5OTVjOTBjNTU1NjI3YzFjYmQyMmI0MWI1
Yy4uNzFiNzY0NDM4ZTZiZjkzZmZlMjI5MWI1YWU3MzI1MmQwODE1ZjE1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1BhcmFsbGVsSm9ic0dlbmVyaWMuaApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBQYXJhbGxlbEVu
dmlyb25tZW50IHsKICAgICBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8
VGhyZWFkUHJpdmF0ZT4gewogICAgIHB1YmxpYzoKICAgICAgICAgVGhyZWFkUHJpdmF0ZSgpCi0g
ICAgICAgICAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICAgICAgICAgIDogbV90aHJlYWRJRChudWxs
cHRyKQogICAgICAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGFy
ZW50KDApCiAgICAgICAgIHsKQEAgLTc0LDcgKzc0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9u
bWVudCB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZCh2b2lkKik7CiAKICAgICBw
cml2YXRlOgotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fdGhyZWFkSUQ7CiAgICAgICAgIGJvb2wgbV9ydW5uaW5nOwogICAgICAg
ICBQYXJhbGxlbEVudmlyb25tZW50KiBtX3BhcmVudDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAppbmRl
eCBlNmM2NzhiZWZjMGYxOTBhMjIzZTlhZGRiMmNjNTgxMGI1NmUxYzE0Li42MjJlZjcxNWNmNWRl
MzMyY2ZjM2FhODE0MjdmY2YxMTY5MTIxNTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Q
YXJraW5nTG90LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcApAQCAtNTIs
NyArNTIsNyBAQCBzdHJ1Y3QgVGhyZWFkRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxUaHJlYWREYXRhPiB7CiAgICAgVGhyZWFkRGF0YSgpOwogICAgIH5UaHJlYWREYXRhKCk7CiAK
LSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmPFRocmVhZD4g
dGhyZWFkSWRlbnRpZmllcjsKICAgICAKICAgICBNdXRleCBwYXJraW5nTG9jazsKICAgICBUaHJl
YWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKQEAgLTgxLDcgKzgxLDcgQEAgc3RydWN0IEJ1
Y2tldCB7CiAgICAgdm9pZCBlbnF1ZXVlKFRocmVhZERhdGEqIGRhdGEpCiAgICAgewogICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVh
ZCgpLCAiOiBlbnF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIgd2l0aCBhZGRyZXNzID0g
IiwgUmF3UG9pbnRlcihkYXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJhd1BvaW50ZXIodGhpcyks
ICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCks
ICI6IGVucXVldWVpbmcgIiwgUmF3UG9pbnRlcihkYXRhKSwgIiB3aXRoIGFkZHJlc3MgPSAiLCBS
YXdQb2ludGVyKGRhdGEtPmFkZHJlc3MpLCAiIG9udG8gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxu
IikpOwogICAgICAgICBBU1NFUlQoZGF0YS0+YWRkcmVzcyk7CiAgICAgICAgIEFTU0VSVCghZGF0
YS0+bmV4dEluUXVldWUpOwogICAgICAgICAKQEAgLTk5LDExICs5OSwxMSBAQCBzdHJ1Y3QgQnVj
a2V0IHsKICAgICB2b2lkIGdlbmVyaWNEZXF1ZXVlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgewogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
Y3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJhd1BvaW50
ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpj
dXJyZW50KCksICI6IGRlcXVldWVpbmcgZnJvbSBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcih0aGlz
KSwgIlxuIikpOwogICAgICAgICAKICAgICAgICAgaWYgKCFxdWV1ZUhlYWQpIHsKICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBlbXB0eS5cbiIpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBlbXB0eS5cbiIpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC0xNDMsMTQgKzE0MywxNCBAQCBzdHJ1Y3QgQnVja2V0IHsKICAg
ICAgICAgd2hpbGUgKHNob3VsZENvbnRpbnVlKSB7CiAgICAgICAgICAgICBUaHJlYWREYXRhKiBj
dXJyZW50ID0gKmN1cnJlbnRQdHI7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZ290IHRocmVhZCAi
LCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZ290IHRocmVhZCAiLCBSYXdQb2ludGVyKGN1
cnJlbnQpLCAiXG4iKSk7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3VsdCA9IGZ1bmN0b3IoY3Vy
cmVudCwgdGltZVRvQmVGYWlyKTsKICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAg
ICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6Oklnbm9yZToKICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhy
ZWFkKCksICI6IGN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKGN1cnJlbnRQdHIpLCAiLCAqY3Vy
cmVudFB0ciA9ICIsIFJhd1BvaW50ZXIoKmN1cnJlbnRQdHIpLCAiXG4iKSk7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGN1cnJlbnRQ
dHIgPSAiLCBSYXdQb2ludGVyKGN1cnJlbnRQdHIpLCAiLCAqY3VycmVudFB0ciA9ICIsIFJhd1Bv
aW50ZXIoKmN1cnJlbnRQdHIpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBj
dXJyZW50OwogICAgICAgICAgICAgICAgIGN1cnJlbnRQdHIgPSAmKCpjdXJyZW50UHRyKS0+bmV4
dEluUXVldWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTksNyArMTU5LDcgQEAgc3Ry
dWN0IEJ1Y2tldCB7CiAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgICAgICBj
YXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgogICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRU
aHJlYWQoKSwgIjogZGVxdWV1ZWluZyAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiIGZyb20gIiwg
UmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBkZXF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoY3Vy
cmVudCksICIgZnJvbSAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gcXVldWVUYWlsKQogICAgICAgICAgICAgICAgICAgICBxdWV1ZVRh
aWwgPSBwcmV2aW91czsKICAgICAgICAgICAgICAgICBkaWREZXF1ZXVlID0gdHJ1ZTsKQEAgLTI3
MSw3ICsyNzEsNyBAQCBIYXNodGFibGUqIGVuc3VyZUhhc2h0YWJsZSgpCiAgICAgICAgICAgICBj
dXJyZW50SGFzaHRhYmxlID0gSGFzaHRhYmxlOjpjcmVhdGUobWF4TG9hZEZhY3Rvcik7CiAgICAg
ICAgICAgICBpZiAoaGFzaHRhYmxlLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgY3VycmVu
dEhhc2h0YWJsZSkpIHsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgaW5p
dGlhbCBoYXNodGFibGUgIiwgUmF3UG9pbnRlcihjdXJyZW50SGFzaHRhYmxlKSwgIlxuIikpOwor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAi
OiBjcmVhdGVkIGluaXRpYWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIoY3VycmVudEhhc2h0YWJs
ZSksICJcbiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEhhc2h0YWJsZTsKICAg
ICAgICAgICAgIH0KIApAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6
ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQogICAgIEhhc2h0YWJsZSogb2xkSGFzaHRhYmxlID0gaGFz
aHRhYmxlLmxvYWQoKTsKICAgICBpZiAob2xkSGFzaHRhYmxlICYmIHN0YXRpY19jYXN0PGRvdWJs
ZT4ob2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtVGhyZWFkcykg
Pj0gbWF4TG9hZEZhY3RvcikgewogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBubyBuZWVkIHRvIHJlaGFzaCBiZWNh
dXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRocmVhZHMsICIgPj0gIiwgbWF4
TG9hZEZhY3RvciwgIlxuIikpOworICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6
OmN1cnJlbnQoKSwgIjogbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUt
PnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQgZW5zdXJl
SGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQogICAgIG9sZEhhc2h0YWJsZSA9IGhh
c2h0YWJsZS5sb2FkKCk7CiAgICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG9sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMp
ID49IG1heExvYWRGYWN0b3IpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogYWZ0ZXIgbG9ja2luZywgbm8gbmVl
ZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUsICIgLyAiLCBudW1UaHJl
YWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsKKyAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IGFmdGVyIGxvY2tpbmcsIG5vIG5lZWQgdG8g
cmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwgbnVtVGhyZWFkcywg
IiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CiAgICAgICAgIHVubG9ja0hhc2h0YWJsZShi
dWNrZXRzVG9VbmxvY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzc4LDE0ICszNzgs
MTQgQEAgdm9pZCBlbnN1cmVIYXNodGFibGVTaXplKHVuc2lnbmVkIG51bVRocmVhZHMpCiAgICAg
CiAgICAgSGFzaHRhYmxlKiBuZXdIYXNodGFibGUgPSBIYXNodGFibGU6OmNyZWF0ZShuZXdTaXpl
KTsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhy
ZWFkKCksICI6IGNyZWF0ZWQgbmV3IGhhc2h0YWJsZTogIiwgUmF3UG9pbnRlcihuZXdIYXNodGFi
bGUpLCAiXG4iKSk7CisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCks
ICI6IGNyZWF0ZWQgbmV3IGhhc2h0YWJsZTogIiwgUmF3UG9pbnRlcihuZXdIYXNodGFibGUpLCAi
XG4iKSk7CiAgICAgZm9yIChUaHJlYWREYXRhKiB0aHJlYWREYXRhIDogdGhyZWFkRGF0YXMpIHsK
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogcmVoYXNoaW5nIHRocmVhZCBkYXRhICIsIFJhd1BvaW50ZXIodGhyZWFk
RGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNz
KSwgIlxuIikpOworICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQo
KSwgIjogcmVoYXNoaW5nIHRocmVhZCBkYXRhICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIg
d2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikp
OwogICAgICAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3ModGhyZWFkRGF0YS0+YWRkcmVz
cyk7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG5ld0hhc2h0YWJsZS0+c2l6ZTsK
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogaW5kZXggPSAiLCBpbmRleCwgIlxuIikpOworICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogaW5kZXggPSAiLCBpbmRleCwgIlxu
IikpOwogICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpbmRleF0u
bG9hZCgpOwogICAgICAgICBpZiAoIWJ1Y2tldCkgewogICAgICAgICAgICAgaWYgKHJldXNhYmxl
QnVja2V0cy5pc0VtcHR5KCkpCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBlbnN1cmVIYXNodGFi
bGVTaXplKHVuc2lnbmVkIG51bVRocmVhZHMpCiB9CiAKIFRocmVhZERhdGE6OlRocmVhZERhdGEo
KQotICAgIDogdGhyZWFkSWRlbnRpZmllcihjdXJyZW50VGhyZWFkKCkpCisgICAgOiB0aHJlYWRJ
ZGVudGlmaWVyKFRocmVhZDo6Y3VycmVudCgpKQogewogICAgIHVuc2lnbmVkIGN1cnJlbnROdW1U
aHJlYWRzOwogICAgIGZvciAoOzspIHsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBib29sIGVucXVldWUo
Y29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGVucXVldWVpbmcgb250byBidWNrZXQg
IiwgUmF3UG9pbnRlcihidWNrZXQpLCAiIHdpdGggaW5kZXggIiwgaW5kZXgsICIgZm9yIGFkZHJl
c3MgIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIiB3aXRoIGhhc2ggIiwgaGFzaCwgIlxuIikpOwor
ICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogZW5xdWV1
ZWluZyBvbnRvIGJ1Y2tldCAiLCBSYXdQb2ludGVyKGJ1Y2tldCksICIgd2l0aCBpbmRleCAiLCBp
bmRleCwgIiBmb3IgYWRkcmVzcyAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiIHdpdGggaGFzaCAi
LCBoYXNoLCAiXG4iKSk7CiAgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CiAKICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIg
dXMuCkBAIC00OTgsNyArNDk4LDcgQEAgYm9vbCBlbnF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3Ms
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAgICBp
ZiAodGhyZWFkRGF0YSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHByb2NlZWRpbmcgdG8gZW5x
dWV1ZSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogcHJvY2VlZGluZyB0byBlbnF1
ZXVlICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICJcbiIpKTsKICAgICAgICAgICAgIGJ1Y2tl
dC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAg
ICAgIH0gZWxzZQpAQCAtNTY3LDcgKzU2Nyw3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQ
YXJrUmVzdWx0IFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5SW1wbCgKICAgICBjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpCiB7CiAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwYXJraW5nLlxuIikp
OworICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBwYXJraW5n
LlxuIikpOwogICAgIAogICAgIFRocmVhZERhdGEqIG1lID0gbXlUaHJlYWREYXRhKCk7CiAgICAg
bWUtPnRva2VuID0gMDsKQEAgLTY2MSw3ICs2NjEsNyBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xv
dDo6UGFya1Jlc3VsdCBQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseUltcGwoCiBORVZFUl9J
TkxJTkUgUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IFBhcmtpbmdMb3Q6OnVucGFya09uZShjb25z
dCB2b2lkKiBhZGRyZXNzKQogewogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIG9uZS5cbiIpKTsKKyAgICAgICAg
ZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogdW5wYXJraW5nIG9uZS5cbiIp
KTsKICAgICAKICAgICBVbnBhcmtSZXN1bHQgcmVzdWx0OwogCkBAIC03MDYsNyArNzA2LDcgQEAg
TkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrT25lSW1wbCgKICAgICBjb25zdCBT
Y29wZWRMYW1iZGE8aW50cHRyX3QoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0KT4mIGNhbGxiYWNr
KQogewogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRU
aHJlYWQoKSwgIjogdW5wYXJraW5nIG9uZSB0aGUgaGFyZCB3YXkuXG4iKSk7CisgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHVucGFya2luZyBvbmUgdGhlIGhh
cmQgd2F5LlxuIikpOwogICAgIAogICAgIFJlZlB0cjxUaHJlYWREYXRhPiB0aHJlYWREYXRhOwog
ICAgIGJvb2wgdGltZVRvQmVGYWlyID0gZmFsc2U7CkBAIC03NTEsNyArNzUxLDcgQEAgTkVWRVJf
SU5MSU5FIHVuc2lnbmVkIFBhcmtpbmdMb3Q6OnVucGFya0NvdW50KGNvbnN0IHZvaWQqIGFkZHJl
c3MsIHVuc2lnbmVkIGNvdW4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtp
bmcgY291bnQgPSAiLCBjb3VudCwgIiBmcm9tICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIuXG4i
KSk7CisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IHVucGFy
a2luZyBjb3VudCA9ICIsIGNvdW50LCAiIGZyb20gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIi5c
biIpKTsKICAgICAKICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZERhdGE+LCA4PiB0aHJlYWREYXRh
czsKICAgICBkZXF1ZXVlKApAQCAtNzYxLDcgKzc2MSw3IEBAIE5FVkVSX0lOTElORSB1bnNpZ25l
ZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBj
b3VuCiAgICAgICAgIEJ1Y2tldE1vZGU6Oklnbm9yZUVtcHR5LAogICAgICAgICBbJl0gKFRocmVh
ZERhdGEqIGVsZW1lbnQsIGJvb2wpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBPYnNlcnZpbmcg
ZWxlbWVudCB3aXRoIGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKGVsZW1lbnQtPmFkZHJlc3MpLCAi
XG4iKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQo
KSwgIjogT2JzZXJ2aW5nIGVsZW1lbnQgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihlbGVt
ZW50LT5hZGRyZXNzKSwgIlxuIikpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3Mg
IT0gYWRkcmVzcykKICAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3Jl
OwogICAgICAgICAgICAgdGhyZWFkRGF0YXMuYXBwZW5kKGVsZW1lbnQpOwpAQCAtNzczLDcgKzc3
Myw3IEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25z
dCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VuCiAKICAgICBmb3IgKFJlZlB0cjxUaHJlYWRE
YXRhPiYgdGhyZWFkRGF0YSA6IHRocmVhZERhdGFzKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2lu
ZyAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEuZ2V0KCkpLCAiIHdpdGggYWRkcmVzcyAiLCBSYXdQ
b2ludGVyKHRocmVhZERhdGEtPmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0
aHJlYWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRh
LT5hZGRyZXNzKSwgIlxuIikpOwogICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7
CiAgICAgICAgIHsKICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5w
YXJraW5nTG9jayk7CkBAIC03ODMsNyArNzgzLDcgQEAgTkVWRVJfSU5MSU5FIHVuc2lnbmVkIFBh
cmtpbmdMb3Q6OnVucGFya0NvdW50KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHVuc2lnbmVkIGNvdW4K
ICAgICB9CiAKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IGRvbmUgdW5wYXJraW5nLlxuIikpOworICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsKICAgICAK
ICAgICByZXR1cm4gdGhyZWFkRGF0YXMuc2l6ZSgpOwogfQpAQCAtNzkzLDcgKzc5Myw3IEBAIE5F
VkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25zdCB2b2lkKiBhZGRyZXNz
KQogICAgIHVucGFya0NvdW50KGFkZHJlc3MsIFVJTlRfTUFYKTsKIH0KIAotTkVWRVJfSU5MSU5F
IHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhy
ZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCitORVZFUl9JTkxJTkUgdm9p
ZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWQm
LCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKIHsKICAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0
c1RvVW5sb2NrID0gbG9ja0hhc2h0YWJsZSgpOwogCkBAIC04MDMsNyArODAzLDcgQEAgTkVWRVJf
SU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZv
aWQoVGhyZWFkSWRlbnRpZmkKICAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgZm9yIChUaHJlYWREYXRhKiBjdXJyZW50VGhyZWFkRGF0YSA9IGJ1Y2tl
dC0+cXVldWVIZWFkOyBjdXJyZW50VGhyZWFkRGF0YTsgY3VycmVudFRocmVhZERhdGEgPSBjdXJy
ZW50VGhyZWFkRGF0YS0+bmV4dEluUXVldWUpCi0gICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50
VGhyZWFkRGF0YS0+dGhyZWFkSWRlbnRpZmllciwgY3VycmVudFRocmVhZERhdGEtPmFkZHJlc3Mp
OworICAgICAgICAgICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZp
ZXIuZ2V0KCksIGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICB9CiAgICAgCiAgICAg
dW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QYXJraW5nTG90LmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKaW5kZXggN2Q1
ZmIxN2VmYTAyYWI3NmIxMjhlYWY1OTk4MTM4MDEwMGJhYmQ5Ni4uYjZkODgzMGQxOWM3YjdmZDRj
YzZhY2FlMzYyYWVhM2I5NDNhOWQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaApAQCAtMTU4LDcgKzE1OCw3
IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAg
c3RhdGljIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAgIHsKLSAgICAgICAgZm9y
RWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9p
ZCopPihmdW5jKSk7CisgICAgICAgIGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRo
cmVhZCYsIGNvbnN0IHZvaWQqKT4oZnVuYykpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE3MSw3
ICsxNzEsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywgY29u
c3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+JiBjYWxsYmFjayk7CiAKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVk
TGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8
dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVm
UHRyLmgKaW5kZXggZmUxNjMwYzk3MzViNWZmNTM1M2NiMmM1NThlMzEwNTgxMjQ3ODdkOC4uMjc3
ZTY3NWRiM2M1NTVkNWU0YzZjZTA0OTQ2ODg3NGQzNjc2OTU5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUmVmUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQyLDcg
KzQyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc1JlZlB0ciA9IHRydWU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJl
ZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIg
UmVmUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihU
KiBwdHIpIDogbV9wdHIocHRyKSB7IHJlZklmTm90TnVsbChwdHIpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBSZWZQdHIoY29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3RO
dWxsKG1fcHRyKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQ
dHI8VT4mIG8pIDogbV9wdHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCmluZGV4IDk0M2ZkNmQ3OWQwOTQ0
MjU1MDNhYzg5NzMxYjBhMDZhNmFjNDBmZmQuLmNiMjc1ZjcwMTJjZmU1NjYxZTQ5ZTBiNGZmMGQ5
YzYyMWIwZTQ5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5o
CkBAIC0yOSw2ICsyOSw4IEBACiAjaWZuZGVmIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAj
ZGVmaW5lIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAKKyNpbmNsdWRlICJUaHJlYWRpbmcu
aCIKKwogbmFtZXNwYWNlIFdURiB7CiAKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2
b2lkKiBhcmd1bWVudCk7CkBAIC0zNiwxMyArMzgsMTUgQEAgdHlwZWRlZiB2b2lkICgqVGhyZWFk
RnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAg
ICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIFJlZlB0
cjxUaHJlYWQ+JiYgdGhyZWFkLCB2b2lkKiBkYXRhKQogICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0
aW9uKQorICAgICAgICAsIHRocmVhZChXVEZNb3ZlKHRocmVhZCkpCiAgICAgICAgICwgZGF0YShk
YXRhKQogICAgIHsKICAgICB9CiAKICAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBS
ZWZQdHI8VGhyZWFkPiB0aHJlYWQ7CiAgICAgdm9pZCogZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZEdyb3VwLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91
cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJkNzUwN2NlNDc3MWRkYzJjOTFlMjMwYzQ4YTNmOGY5ZjNhNjVhMDUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oCkBAIC0wLDAg
KzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBUaHJlYWRHcm91
cCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkR3JvdXApOworcHVibGljOgorcHJp
dmF0ZToKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0
aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43YWMyM2IwYWZlOTYxMjRkMmZkMGM1NjExN2YwMGYzMDk0YjBlYjVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9s
ZGVyUHRocmVhZHMuaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCisjaWYgVVNFKFBUSFJF
QURTKQorCisjaWYgT1MoSFVSRCkKKy8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQg
aW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgorI2Rl
ZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKKyNlbHNlCisjaW5jbHVkZSA8bGltaXRzLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKK3B0aHJlYWRfa2V5X3QgVGhyZWFkSG9sZGVyOjpt
X2tleSA9IFBUSFJFQURfS0VZU19NQVg7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQpOwor
CitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRFeGl0
KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAgaW50
IGVycm9yID0gcHRocmVhZF9rZXlfY3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOworICAgIGlmIChl
cnJvcikKKyAgICAgICAgQ1JBU0goKTsKK30KKworVGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6
OmN1cnJlbnQoKQoreworICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4ocHRocmVhZF9nZXRzcGVjaWZpYyht
X2tleSkpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRocmVh
ZCkKK3sKKyAgICBpZiAoIWN1cnJlbnQoKSkgeworICAgICAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2
ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVy
dCBwZXJmb3JtYW5lLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJl
IG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAgICAg
ICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgbmV3IFRocmVhZEhvbGRlcih0aHJlYWQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQorewor
ICAgIFRocmVhZEhvbGRlciogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJl
YWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmllckRhdGEpOworCisg
ICAgaWYgKHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSkgeworICAgICAg
ICBkZWxldGUgdGhyZWFkSWRlbnRpZmllckRhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworICAg
IC8vIFJlLXNldHRpbmcgdGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3Qo
KSBjYWxsIGFmdGVyIGFsbCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBj
YWxsZWQuCisgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgdGhyZWFkSWRlbnRpZmllckRh
dGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhM2NlZGYxNTgw
MzVmY2M2NDNkMzJmNWUyZWQyMjU2N2U3MGVjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorI2RlZmluZSBUaHJlYWRIb2xkZXJQdGhyZWFkc19o
CisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBI
b2xkcyBUaHJlYWQgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0
aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8v
IFRocmVhZCBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmlj
IHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFk
SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGlj
OgorICAgIH5UaHJlYWRIb2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9u
IGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRz
IGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdl
LgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5z
IDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBz
dGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRo
cmVhZCYgdGhyZWFkKQorICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lz
RGVzdHJveWVkT25jZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5h
dGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ry
b3llZCBvbmNlJworICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3Bl
Y2lmaWMgc2xvdCB0byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisgICAg
Ly8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBp
bnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQor
ICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAu
CisgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFk
PiBtX3RocmVhZDsKKyAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBwdGhy
ZWFkX2tleV90IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBU
aHJlYWRIb2xkZXJQdGhyZWFkc19oCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkSG9sZGVyV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTdjNWYxZTRhOGQ2YTNlODA0ZGU0NDVhMWY1MjBhOTg5MDc0YzRmYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJX
aW4uaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworRFdP
UkQgVGhyZWFkSG9sZGVyOjptX2tleSA9IDA7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQp
OworCitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRF
eGl0KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAg
RFdPUkQgbV9rZXkgPSBGbHNBbGxvYyhkZXN0cnVjdG9yKTsKKyAgICBpZiAobV9rZXkgPT0gRkxT
X09VVF9PRl9JTkRFWEVTKQorICAgICAgICBDUkFTSCgpOworfQorCitUaHJlYWRIb2xkZXIqIFRo
cmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhv
bGRlcio+KEZsc0dldFZhbHVlKG1fa2V5KSk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0
aWFsaXplKFRocmVhZCYgdGhyZWFkKQoreworICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAg
IC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJl
LCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZvcm1hbmUuCisgICAgICAgIC8vIEhhdmluZyB0aGlz
IHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2Fs
bAorICAgICAgICAvLyBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKSBzb29uIGVub3VnaCIgYnVn
cyBpbiByZWxlYXNlIG1vZGUuCisgICAgICAgIEZsc1NldFZhbHVlKG1fa2V5LCBuZXcgVGhyZWFk
SG9sZGVyKHRocmVhZCkpOworICAgIH0KK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0
KHZvaWQqIGRhdGEpCit7CisgICAgVGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9
IHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVu
dGlmaWVyRGF0YSk7CisKKyAgICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95
ZWRPbmNlKSB7CisgICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVk
T25jZSA9IHRydWU7CisgICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMg
YW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBk
ZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KKyAgICBGbHNTZXRWYWx1ZShtX2tleSwgdGhyZWFkSWRl
bnRpZmllckRhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjljYmJhOTk3OWI2ZWY5NzhiODEwN2MxNzJiMzFmNDgwNWJmMzU0
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkSG9sZGVyV2luX2gKKyNkZWZpbmUgVGhy
ZWFkSG9sZGVyV2luX2gKKworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIEhvbGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ug
YW5kIGVtcGxveXMgRkxTIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8v
IFRocmVhZCBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmlj
IHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFk
SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGlj
OgorICAgIH5UaHJlYWRIb2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9u
IGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRz
IGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdl
LgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5z
IDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBz
dGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRo
cmVhZCYgdGhyZWFkKQorICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lz
RGVzdHJveWVkT25jZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5h
dGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ry
b3llZCBvbmNlJworICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3Bl
Y2lmaWMgc2xvdCB0byBtYWtlIFdpbiB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0g
c2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tl
ZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAv
LyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAg
IHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90
aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgRFdPUkQgbV9r
ZXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFRocmVhZEhvbGRlcldp
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2
NTcyMWRkMTY5YmZmMTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShQVEhSRUFEUykKLQotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuaCIKLQotI2luY2x1ZGUgIlRocmVhZGluZy5oIgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJF
QURfS0VZU19NQVggaXMgbm90IGRlZmluZWQgaW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBs
aWNpdGx5IGRlZmluZSBpdCBoZXJlLgotI2RlZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNl
bHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0
aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRpZmllckRhdGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01B
WDsKLQotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVu
dGlmaWVyRGF0YTo6flRocmVhZElkZW50aWZpZXJEYXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0
KG1faWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxp
emVPbmNlKCkKLXsKLSAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBk
ZXN0cnVjdCk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJ
ZGVudGlmaWVyIFRocmVhZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NF
UlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEq
IHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEq
PihwdGhyZWFkX2dldHNwZWNpZmljKG1fa2V5KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRp
ZmllckRhdGEgPyB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQot
dm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlk
KQotewotICAgIEFTU0VSVCghaWRlbnRpZmllcigpKTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2
ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVy
dCBwZXJmb3JtYW5lLgotICAgIC8vIEhhdmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVh
bnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6
ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxF
QVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNw
ZWNpZmljKG1fa2V5LCBuZXcgVGhyZWFkSWRlbnRpZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJ
ZGVudGlmaWVyRGF0YSo+KGRhdGEpOwotICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7
Ci0KLSAgICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0g
ICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7
Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0
cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3
ZXJlIGNhbGxlZC4KLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlm
aWVyRGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJF
QURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcy
NWJkMjc1ZTcyZWJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHNfaAotI2RlZmluZSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElk
ZW50aWZpZXIgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJl
YWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKLS8vIFRo
cmVhZElkZW50aWZpZXIgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRT
cGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNz
IFRocmVhZElkZW50aWZpZXJEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJ
ZGVudGlmaWVyRGF0YSk7Ci1wdWJsaWM6Ci0gICAgflRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0K
LSAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xl
LgotICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkg
YW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25j
ZSgpOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVu
dGlmaWVyRGF0YSBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemUoVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVy
bnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAg
IHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YShUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAg
IDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2Uo
ZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3Ry
dWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAt
IGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFy
ZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAg
ICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8g
bWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBh
ZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0
cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJ
ZGVudGlmaWVyIGZyb20gdGhlIHRocmVhZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lkKiBkYXRhKTsKLQotICAgIFRocmVhZElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwotICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGlj
IHB0aHJlYWRfa2V5X3QgbV9rZXk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlm
IC8vIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmlu
ZGV4IGMxZGMzNTAxOTAzYWI3NmIzNzA0NmQ5MzMzZjkzMmEzZWYwYzZjNmUuLmYxMDQ1OTQ4ZDI1
ZTQ0ZmQ4ODU3N2E5OTIyMzkwOWU2ZjU2MjlhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtNDUs
NyArNDUsNyBAQCBzdHJ1Y3QgTmV3VGhyZWFkQ29udGV4dCB7CiAgICAgTXV0ZXggY3JlYXRpb25N
dXRleDsKIH07CiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciog
dGhyZWFkTmFtZSkKK2NvbnN0IGNoYXIqIFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25z
dCBjaGFyKiB0aHJlYWROYW1lKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQogICAg
IHJldHVybiB0aHJlYWROYW1lOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRF
bnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
Y29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKICAgICBhdXRvIGVudHJ5UG9pbnQg
PSBXVEZNb3ZlKGNvbnRleHQtPmVudHJ5UG9pbnQpOwogCkBAIC05MiwyNCArOTIsMjQgQEAgc3Rh
dGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICBlbnRyeVBv
aW50KCk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQorUmVmUHRyPFRocmVhZD4gVGhy
ZWFkOjpjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3Qg
Y2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUobmFtZSwgW2VudHJ5UG9p
bnQsIGRhdGFdIHsKKyAgICAgICAgZW50cnlQb2ludChkYXRhKTsKKyAgICB9KTsKK30KKworUmVm
UHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGVudHJ5UG9pbnQpCiB7CiAgICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9
IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFtZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgeyB9IH07
CiAKICAgICAvLyBQcmV2ZW50IHRoZSB0aHJlYWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1bnRpbCB3
ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgdGhyZWFkIGlkZW50aWZpZXIuCiAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVh
ZEludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOworICAgIHJldHVybiBU
aHJlYWQ6OmNyZWF0ZUludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOwog
fQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBv
aW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIHJldHVybiBjcmVhdGVU
aHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKLSAgICAgICAgZW50cnlQb2ludChkYXRh
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
aW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNT
RVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcg
QEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCiAjZW5kaWYKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVk
KGludCByZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1Vz
ZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NF
UykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEz
IEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlv
cml0eSkKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1h
eFFPU2NsYXNzIHsgUU9TX0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4
UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRT
Y2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3Mg
PSBtYXhDbGFzczsKIH0KIAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3Nf
dCBvcmlnaW5hbENsYXNzKQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFv
c19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9
IFFPU19DTEFTU19VTlNQRUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFs
Q2xhc3MsIGdsb2JhbE1heFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3Nf
dCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYK
IAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQobV9pZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2
YjU1OGIzZTFkNTE3ZTgxMGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi40MzMzYjYyOGVmNmMxODcw
ZTA2ODJjMWU2YjE4YjliY2QzYTRlOGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29k
IChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOCw3MiArMzksMjI2IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMpCisjaWYgT1Mo
REFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxz
ZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5nIHNpZ25hbC5oIGRpZG4n
dCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCisv
LyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhp
cyB3b3JrYXJvdW5kIGNhbiBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBF
T0wuCisvLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lk
PTIwNzA3OQorI2lmIE9TKEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgor
CisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKyNlbmRpZgor
CisjaWYgIUNPTVBJTEVSKE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2No
ZWQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5kaWYKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKKyNpZiBPUyhEQVJX
SU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
UmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0
X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFk
X3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBw
Y190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5
cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFS
TTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5E
T1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZv
cm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdp
c3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit1c2luZyBU
aHJlYWRJZGVudGlmaWVyID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlv
bikodm9pZCogYXJndW1lbnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZy
b20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8v
IERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0
IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBj
YWxscyBhcmUgbm90IHJlZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxp
emVUaHJlYWRpbmcoKTsKK2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50U3RyZWFtOwor
CitjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7Citw
dWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0dXJucyAwIGlm
IHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxp
dGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVh
ZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25z
dCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSB+VGhyZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJl
cXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1
ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBs
b3dlciBwcmlvcml0eS4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJ
c1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQ
cmlvcml0eSA9IDApOworICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQgY3JlYXRpb24g
ZmFpbGVkLgorICAgIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBv
biBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0IGNoYXIqIHRo
cmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBUaHJl
YWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNo
YW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOwotV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAg
IC8vIFJldHVybnMgVGhyZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNhbiBiZSAoYSBiaXQpIGNv
c3RseSBpbiBXaW5kb3dzLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBj
dXJyZW50KCk7CiAKLS8vIERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQg
Y3JlYXRpb24uCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICAv
LyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUg
dXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFkcyBhbmQgZW5z
dXJlIHRoZSB0aHJlYWQgbGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBU
aHJlYWRJZGVudGlmaWVyIGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVj
aWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0
ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFk
TmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHkoaW50KTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFk
IGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0
aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQg
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsK
KyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBrZXJuX3Jl
dHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVy
cm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRF
cnJvciA9IERXT1JEOworI2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUo
Y29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVk
PHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcmVzdW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnZXRS
ZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLWJvb2wg
c2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNlbmRpZgog
CisgICAgLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3BvbnNp
dmVuZXNzLgorICAgIC8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ug
Wy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4K
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJl
bGF0aXZlUHJpb3JpdHkgPSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFv
c19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFk
anVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdU
RgorICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxl
bWVudGF0aW9uLgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRlcm5hbChUaHJl
YWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11c2luZyBXVEY6
OlRocmVhZElkZW50aWZpZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVzaW5nIFdURjo6
Y3VycmVudFRocmVhZDsKLXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7Ci11c2luZyBX
VEY6OmRldGFjaFRocmVhZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247Cisg
ICAgLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgIC8v
IEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQg
ZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCiAj
aWYgVVNFKFBUSFJFQURTKQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgdm9pZCBlc3Rh
Ymxpc2gocHRocmVhZF90KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJl
YWRJZGVudGlmaWVyKTsKICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdU
Rjo6c2V0R2xvYmFsTWF4UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQg
c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4
dCk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQor
CisgICAgdm9pZCBhZGRPbkV4aXRDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+
IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbV9vbkV4aXRDYWxsYmFjay5hcHBlbmQoY2FsbGJh
Y2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBpZCgpID09IHRocmVhZC5pZCgpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpZCgpICE9IHRocmVhZC5pZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQo
KTsKKworICAgIGVudW0gSm9pbmFibGVTdGF0ZSB7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRo
cmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgorICAgICAgICBKb2luYWJs
ZSwKKworICAgICAgICAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBh
bmQgdGhpcyB0aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNl
IHRoZXJlIGNhbiBiZSBhCisgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0
aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQg
dGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAg
Ly8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhp
dCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdz
CisgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2Fz
ZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisg
ICAgICAgIEpvaW5lZCwKKworICAgICAgICAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVk
IGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVh
ZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERl
dGFjaGVkLAorICAgIH07CisKKyAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJl
dHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KKyAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBt
X2pvaW5hYmxlU3RhdGUgPSBEZXRhY2hlZDsgfQorICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZv
aWQgZGlkSm9pbigpIHsgbV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNF
eGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4aXQ7IH0KKworICAgIFdvcmRMb2NrIG1fbXV0ZXg7Cisg
ICAgVGhyZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2lu
YWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKKyAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07Cisg
ICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWQmKT4+IG1fb25FeGl0Q2FsbGJhY2s7
CisjaWYgVVNFKFBUSFJFQURTKQorICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJX
SU4pCisgICAgbWFjaF9wb3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3Qg
bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOworICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRN
YWNoaW5lQ29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBz
dGQ6OmF0b21pYzxib29sPiBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyNlbGlmIE9T
KFdJTkRPV1MpCisgICAgSEFORExFIG1faGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5
c3RlbQorI2VuZGlmCit9OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERh
cndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZy
b20gYW55IHRocmVhZCwgdGhlIG9ubHkKKy8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxz
IGFyZSBub3QgcmVlbnRyYW50LgorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpOworCitpbmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sK
KyAgICByZXR1cm4gVGhyZWFkOjpjdXJyZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNp
bmcgV1RGOjpjdXJyZW50VGhyZWFkOwogCiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZj
YTFkYTVhNjkyZDBmLi4yZmJiODhhY2JkYzMxZGY3MmIwZjkxMzc2ZDIwY2QxMjI1YzMzODdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJl
YWt0aXguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29v
ZEByZWFrdGl4LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQxLDE2MiArNDIsMTE3IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2Vl
ZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbi5oIgotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIK
LSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJl
YWRzLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0j
aWYgIUNPTVBJTEVSKE1TVkMpCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2NoZWQu
aD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLSNpZiBPUyhMSU5VWCkKLSNpbmNs
dWRlIDxzeXMvcHJjdGwuaD4KLSNlbmRpZgotCi0jaWYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxz
aWduYWwuaD4KLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotY2xhc3MgUHRocmVhZFN0YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBlbnVtIEpvaW5hYmxlU3RhdGUgewotICAgICAgICBKb2luYWJsZSwg
Ly8gVGhlIGRlZmF1bHQgdGhyZWFkIHN0YXRlLiBUaGUgdGhyZWFkIGNhbiBiZSBqb2luZWQgb24u
Ci0KLSAgICAgICAgSm9pbmVkLCAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8g
ZXhpdCBhbmQgdGhpcyB0aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBi
ZWNhdXNlIHRoZXJlIGNhbiBiZSBhIAotICAgICAgICAgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1l
IGJldHdlZW4gd2hlbiB0aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2lu
IHRvIHJldHVybiBhbmQgdGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRv
IHJ1bikgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxs
ZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0
aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdzIAotICAgICAgICAgICAgICAgIC8vIG5vYm9keSBlbHNl
IHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29t
cGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCi0KLSAgICAgICAgRGV0YWNoZWQgLy8gVGhl
IHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24u
IEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAg
YWZ0ZXIgaXRzZWxmLgotICAgIH07Ci0KLSAgICAvLyBDdXJyZW50bHkgYWxsIHRocmVhZHMgY3Jl
YXRlZCBieSBXVEYgc3RhcnQgb3V0IGFzIGpvaW5hYmxlLiAKLSAgICBQdGhyZWFkU3RhdGUocHRo
cmVhZF90IGhhbmRsZSkKLSAgICAgICAgOiBtX2pvaW5hYmxlU3RhdGUoSm9pbmFibGUpCi0gICAg
ICAgICwgbV9kaWRFeGl0KGZhbHNlKQotICAgICAgICAsIG1fcHRocmVhZEhhbmRsZShoYW5kbGUp
Ci0gICAgewotICAgIH0KLQotICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0
dXJuIG1fam9pbmFibGVTdGF0ZTsgfQotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlKCkgeyBy
ZXR1cm4gbV9wdGhyZWFkSGFuZGxlOyB9Ci0gICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsg
bV9qb2luYWJsZVN0YXRlID0gRGV0YWNoZWQ7IH0KLSAgICB2b2lkIGRpZEV4aXQoKSB7IG1fZGlk
RXhpdCA9IHRydWU7IH0KLSAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpv
aW5lZDsgfQotICAgIGJvb2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9Ci0KLXBy
aXZhdGU6Ci0gICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGU7Ci0gICAgYm9vbCBtX2Rp
ZEV4aXQ7Ci0gICAgcHRocmVhZF90IG1fcHRocmVhZEhhbmRsZTsKLX07Ci0KLXR5cGVkZWYgSGFz
aE1hcDxUaHJlYWRJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UHRocmVhZFN0YXRlPj4gVGhy
ZWFkTWFwOworI2lmICFPUyhEQVJXSU4pCiAKLXZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQo
VGhyZWFkSWRlbnRpZmllcik7Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7
Ci12b2lkIHRocmVhZFdhc0pvaW5lZChUaHJlYWRJZGVudGlmaWVyKTsKKy8vIFdlIHVzZSBTSUdV
U1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENv
cmUuCitzdGF0aWMgY29uc3RleHByIGNvbnN0IGludCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lID0g
U0lHVVNSMjsKK3N0YXRpYyBzdGQ6OmF0b21pYzxUaHJlYWQqPiB0YXJnZXRUaHJlYWQgeyBudWxs
cHRyIH07CitzdGF0aWMgU3RhdGljV29yZExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CiAKLXN0YXRp
YyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQordm9pZCBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXpl
ZDsKLQotICAgIGlmIChpc0luaXRpYWxpemVkKQorICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2Nh
bCBhdG9taWMgdHlwZXMgZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJl
YWQqIHRocmVhZCA9IHRhcmdldFRocmVhZC5sb2FkKCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1
c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRo
aXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVz
ZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCisgICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZv
Y2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxl
ci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIg
aW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCisgICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBu
ZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVj
dXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgorICAgICAgICAvLyBodHRwOi8vcHVi
cy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5k
Lmh0bWwKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVl
OwotCi0gICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0
cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGlu
IGEgdGhyZWFkc2FmZSBmYXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0
aWFsaXplZCBmcm9tIGhlcmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRN
YXBNdXRleCgpOwotICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2UoKTsKLSAgICB3dGZUaHJlYWREYXRh
KCk7Ci0gICAgaW5pdGlhbGl6ZURhdGVzKCk7Ci19CisgICAgdWNvbnRleHRfdCogdXNlckNvbnRl
eHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpOworI2lmIENQVShQUEMpCisg
ICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19t
Y29udGV4dC51Y19yZWdzOworI2Vsc2UKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNv
bnRleHQgPSB1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQ7CisjZW5kaWYKIAotc3RhdGljIFRocmVh
ZE1hcCYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTWFw
PiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBz
ZWUgdGhhdCB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5
bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBm
cm9tIGEgc2lnbmFsIGhhbmRsZXIuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9v
bmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8w
NF8wMworICAgIC8vCisgICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRo
YXQgZW5zdXJlcyB0aGF0IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZl
ZC4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5
OS9iYXNlZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFk
LT5tX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBp
cyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBj
YWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQg
aXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRl
ZCByZWN1cnNpdmVseS4KKyAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2Zp
bGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOworICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNl
dCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25h
bFNldCk7CisKKyAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhy
ZWFkIGlzIHJlc3VtZWQuCisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNw
ZW5kUmVzdW1lKTsKIH0KIAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRo
cmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCi17Ci0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgVGhyZWFkTWFwOjppdGVyYXRv
ciBpID0gdGhyZWFkTWFwKCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFk
SGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gaS0+a2V5OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQorI2VuZGlm
IC8vICFPUyhEQVJXSU4pCiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50
aWZpZXJGb3JQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKK3Zv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhy
ZWFkSGFuZGxlKHB0aHJlYWRIYW5kbGUpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
TWFwTXV0ZXgoKSk7Ci0gICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckNvdW50
ID0gMTsKLSAgICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCBzdGQ6Om1ha2VfdW5p
cXVlPFB0aHJlYWRTdGF0ZT4ocHRocmVhZEhhbmRsZSkpOwotICAgIHJldHVybiBpZGVudGlmaWVy
Q291bnQrKzsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBz
dGQ6OmNhbGxfb25jZShpbml0aWFsaXplS2V5LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OmluaXRpYWxpemUoKTsKKyAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXpl
T25jZSgpOworICAgICAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVj
dCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8g
c28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3Ry
aW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRv
cigpOworICAgICAgICB3dGZUaHJlYWREYXRhKCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygp
OworCisjaWYgIU9TKERBUldJTikKKyAgICAgICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9j
ZXNzIGdsb2JhbCBjb25maWd1cmF0aW9uLgorICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2Nr
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgIC8vIFNpZ1Ro
cmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1
c3BlbmQuCisgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICBzaWdlbXB0
eXNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNr
LCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9u
ID0gVGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKKyAgICAgICAgYWN0aW9uLnNh
X2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbihTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAwKTsKKyNlbmRpZgorICAgIH0pOwogfQogCi1z
dGF0aWMgcHRocmVhZF90IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5
SGVsZChUaHJlYWRJZGVudGlmaWVyIGlkKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCkKIHsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0
KGlkKS0+cHRocmVhZEhhbmRsZSgpOworI2lmICFPUyhEQVJXSU4pCisgICAgc2lnc2V0X3QgbWFz
azsKKyAgICBzaWdlbXB0eXNldCgmbWFzayk7CisgICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lKTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNr
LCAwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lk
KiBwYXJhbSkKIHsKLSAgICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIGNyZWF0ZVRocmVh
ZEludGVybmFsLgorICAgIC8vIEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpjcmVh
dGVJbnRlcm5hbC4KICAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uPihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24q
PihwYXJhbSkpOwotICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZElu
dGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIq
KQotewotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKLSAgICBwdGhyZWFkX3QgdGhyZWFkSGFu
ZGxlOwotICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7Ci0gICAgcHRocmVhZF9hdHRyX2luaXQoJmF0
dHIpOwotI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi0gICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xh
c3NfbnAoJmF0dHIsIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKSwg
MCk7Ci0jZW5kaWYKLSAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxl
LCAmYXR0ciwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0gICAgcHRo
cmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHIpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRh
dGEgJXAiLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQogCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNv
bnN0cnVjdG9yIGluIHd0ZlRocmVhZEVudHJ5UG9pbnQuCi0gICAgVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uKiBsZWFrZWRJbnZvY2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24pOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRy
OwogCi0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVh
ZEhhbmRsZSk7CisgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRl
cm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBU
SFJFQURfU0VUTkFNRV9OUCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFk
TmFtZSh0aHJlYWROYW1lKSk7CkBAIC0yMDUsMTIzICsxNjEsNyBAQCB2b2lkIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHRocmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlmaWVy
IGlkID0gaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgQVNT
RVJUKGlkKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Ci19Ci0g
ICAgCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQs
IGludCBkZWx0YSkKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQo
dGhyZWFkSUQpOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFw
TXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRp
ZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVh
ZEhhbmRsZSk7Ci0gICAgfQotCi0gICAgaW50IHBvbGljeTsKLSAgICBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gcGFyYW07Ci0KLSAgICBpZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUs
ICZwb2xpY3ksICZwYXJhbSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhcmFtLnNjaGVkX3By
aW9yaXR5ICs9IGRlbHRhOwotCi0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5k
bGUsIHBvbGljeSwgJnBhcmFtKTsKLX0KLQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7
Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBsb2NrIGFjcm9zcyB0aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBv
dXIgdGhyZWFkIGFuZCBjYXVzZSBkZWFkbG9jay4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRs
ZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNT
RVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLQotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVh
ZF9qb2luKHB0aHJlYWRIYW5kbGUsIDApOwotCi0gICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURM
SykKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBi
ZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotICAgIGVsc2UgaWYgKGpv
aW5SZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5h
YmxlIHRvIGJlIGpvaW5lZC5cbiIsIHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFw
KCkuZ2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+
am9pbmFibGVTdGF0ZSgpID09IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOwotCi0gICAgLy8gVGhl
IHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgotICAgIGlm
IChzdGF0ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJ
RCk7Ci0gICAgLy8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4g
YW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQg
c28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KLSAgICBlbHNlCi0gICAgICAg
IHN0YXRlLT5kaWRKb2luKCk7Ci0KLSAgICByZXR1cm4gam9pblJlc3VsdDsKLX0KLQotdm9pZCBk
ZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhy
ZWFkSUQpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAg
IHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0K
LSAgICBpbnQgZGV0YWNoUmVzdWx0ID0gcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0g
ICAgaWYgKGRldGFjaFJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVy
ICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRocmVhZElEKTsKLQotICAgIFB0aHJl
YWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhyZWFkTWFwKCku
cmVtb3ZlKHRocmVhZElEKTsKLSAgICBlbHNlCi0gICAgICAgIHRocmVhZE1hcCgpLmdldCh0aHJl
YWRJRCktPmRpZEJlY29tZURldGFjaGVkKCk7Ci19Ci0KLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRo
cmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7
Ci0KLSAgICBpZiAoc3RhdGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5h
YmxlKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwotfQotCi1UaHJlYWRJ
ZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQotewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAg
cmV0dXJuIGlkOwotCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVu
dGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlm
aWVyRm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmll
ckRhdGE6OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsKLX0KLQotYm9vbCBzaWduYWxU
aHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgaW50IHNpZ25hbE51bWJlcikKLXsKLSAg
ICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIHsK
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBw
dGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlI
ZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLSAg
ICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVyKTsK
LSAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KKyAgICBpbml0
aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0KIAogTXV0ZXg6Ok11
dGV4KCkKQEAgLTQxNSw2ICsyNTUsMjcyIEBAIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNh
c3QoKQogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKIH0KIAorVGhyZWFkOjpU
aHJlYWQoKQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9y
U3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAv
KiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgorfQorCitU
aHJlYWQ6On5UaHJlYWQoKQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2Rlc3Ryb3koJm1f
c2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRp
ZEV4aXQoKQoreworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgICAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxi
YWNrIDogbV9vbkV4aXRDYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2
b2lkIFRocmVhZDo6ZXN0YWJsaXNoKHB0aHJlYWRfdCBoYW5kbGUpCit7CisgICAgV29yZExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIGlmICgh
bV9pZCkgeworICAgICAgICBzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkSWRlbnRpZmllcj4gcHJv
dmlkZXIgeyAwIH07CisgICAgICAgIG1faWQgPSArK3Byb3ZpZGVyOworI2lmIE9TKERBUldJTikK
KyAgICAgICAgbV9wbGF0Zm9ybVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxl
KTsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBk
ZWx0YSkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpbnQg
cG9saWN5OworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworICAgIGlmIChwdGhyZWFk
X2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOworCisgICAgcHRocmVhZF9z
ZXRzY2hlZHBhcmFtKG1faGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7Cit9CisKK2ludCBUaHJlYWQ6
OndhaXRGb3JDb21wbGV0aW9uKCkKK3sKKyAgICBwdGhyZWFkX3QgaGFuZGxlOworICAgIHsKKyAg
ICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBt
X2hhbmRsZTsKKyAgICB9CisKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihoYW5k
bGUsIDApOworCisgICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKKyAgICAgICAgTE9HX0VS
Uk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWlu
ZyB0byBxdWl0IiwgbV9pZCk7CisgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKKyAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwg
bV9pZCk7CisKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJU
KGpvaW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBh
bHJlYWR5IGV4aXRlZCwgZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0
ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2
ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRz
ZWxmLgorICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJl
dHVybiBqb2luUmVzdWx0OworfQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJl
YWRfZGV0YWNoKG1faGFuZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwg
bV9pZCk7CisKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hl
ZCgpOworfQorCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQoreworICAgIFJlZlB0
cjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgYXV0byBpbnZv
Y2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5
UG9pbnQsIHRocmVhZC5nZXQoKSwgZGF0YSk7CisgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsK
KyAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsK
KyNpZiBIQVZFKFFPU19DTEFTU0VTKQorICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2NsYXNzX25w
KCZhdHRyLCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCksIDApOwor
I2VuZGlmCisgICAgaW50IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgJmF0
dHIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOworICAgIHB0aHJlYWRf
YXR0cl9kZXN0cm95KCZhdHRyKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVw
Iiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVlX3B0ciBj
b25zdHJ1Y3RvciBpbiB3dGZUaHJlYWRFbnRyeVBvaW50LgorICAgIFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbiogbGVha2VkSW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOworICAgIFVO
VVNFRF9QQVJBTShsZWFrZWRJbnZvY2F0aW9uKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRo
cmVhZEhhbmRsZSk7CisgICAgcmV0dXJuIHRocmVhZDsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1
cnJlbnQoKQoreworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVu
dCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAg
ICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVz
dGFibGlzaGVkIHlldC4KKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcg
VGhyZWFkKCkpOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBU
aHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7Cit9CisKK1Ro
cmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQoreworICAgIHJldHVybiBjdXJyZW50
KCkuaWQoKTsKK30KKworYm9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQorewor
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhy
ZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8g
QSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4g
RXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSh0aGlzICE9ICZjdXJyZW50KCksICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBz
dXNwZW5kIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7CisgICAgV29yZExvY2tIb2xkZXIg
bG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyAgICBrZXJuX3JldHVybl90IHJlc3Vs
dCA9IHRocmVhZF9zdXNwZW5kKG1fcGxhdGZvcm1UaHJlYWQpOworICAgIGlmIChyZXN1bHQgIT0g
S0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworI2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBz
dXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRo
cmVhZHMuCisgICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJl
YWQgbG9jay4KKyAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBh
cmUgdGhyZWFkcyBBIGFuZCBCLgorICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQg
QiBhbmQgQiBhdHRlbXB0IHRvIHN1c3BlbmQgQS4KKyAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNp
Z25hbHMuIEFuZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCisgICAg
ICAgIC8vIEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAgICAgV29y
ZExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKCFtX3N1
c3BlbmRDb3VudCkgeworICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1
c2UgcHRocmVhZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRv
IHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBp
biBhIGZldyBwbGF0Zm9ybXMsIGxpa2UgTGludXguCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3
ZSB1c2UgVGhyZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3Mg
aXQgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3Jl
KHRoaXMpOworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgICAgICAgICAgc2Vt
X3dhaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxl
YXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRl
ZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1f
c3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAg
ICB9CisgICAgICAgICsrbV9zdXNwZW5kQ291bnQ7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZSht
X3BsYXRmb3JtVGhyZWFkKTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1l
LCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVy
IHRocmVhZHMuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9j
ayk7CisgICAgICAgIGlmIChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBX
aGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWdu
YWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFj
dHVhbGx5IGlzc3VlZCwKKyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYg
d2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZl
cmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVu
ZCBhbmQgcmVzdW1lLgorICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVt
YmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAg
ICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5k
IHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwg
d2UgY2FuIHRha2UgdGhpcy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3Rv
cmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAg
ICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBm
bGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQu
c3RvcmUodGhpcyk7CisgICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAg
ICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMg
YWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgor
ICAgICAgICAgICAgbV9zdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGVhc2UpOworICAgICAgICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK3NpemVfdCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVnaXN0ZXJzKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBP
UyhEQVJXSU4pCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2Yo
cmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2
b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoUFBDKQorICAg
IHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoUFBD
NjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwor
ICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Cisj
ZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVf
Q09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RB
VEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVB
RF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1f
VEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5k
aWYKKworICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX2dldF9zdGF0ZShtX3BsYXRm
b3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3RhdGVfdCkmcmVnaXN0ZXJzLCAmdXNlckNvdW50
KTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBXVEZSZXBvcnRG
YXRhbEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgIkphdmFT
Y3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRocmVhZF9nZXRfc3RhdGUg
cmV0dXJuZWQgYW4gZXJyb3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIHJ1
bm5pbmcgaW5zaWRlIFJvc2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgcmVzdWx0KTsK
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgcmV0dXJuIHVzZXJDb3VudCAqIHNpemVvZih1
aW50cHRyX3QpOworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYg
KENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BV
KE1JUFMpKQorICAgIHJlZ2lzdGVycyA9IG1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7CisgICAg
cmV0dXJuIHNpemVvZihQbGF0Zm9ybVJlZ2lzdGVycyk7CisjZWxzZQorICAgIHB0aHJlYWRfYXR0
cl90IGF0dHJpYnV0ZTsKKyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlKTsKKyNpZiBI
QVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQorI2lmICFPUyhPUEVOQlNEKQorICAgIC8v
IGUuZy4gb24gRnJlZUJTRCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJf
Z2V0X25wKG1faGFuZGxlLCAmYXR0cmlidXRlKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAvLyBGSVhN
RTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5
IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcworICAgIHB0aHJlYWRfZ2V0YXR0cl9ucCht
X2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZW5kaWYKKworICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7
CisgICAgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7CisgICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dl
dHN0YWNrKCZhdHRyaWJ1dGUsICZzdGFja0Jhc2UsICZzdGFja1NpemUpOworICAgIEFTU0VSVF9V
TlVTRUQocmMsICFyYyk7CisgICAgQVNTRVJUKHN0YWNrQmFzZSk7CisgICAgcmVnaXN0ZXJzLnN0
YWNrUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXplOwor
CisgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHJpYnV0ZSk7CisKKyAgICByZXR1cm4gMDsK
KyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFE
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IDU0YjQzZWZlZjM1Y2Q2NjMyYTcwMDgxNTA3
YTViMzc5OWRlZmI2ZmIuLjAxODdlN2QwMzgwNjVlOGU2NTA3YzU2ZDg4MTgxYzFjNGFhZTU1Yzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtMTQwLDcwICsxNDAsMzkgQEAgdm9pZCBpbml0
aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNl
bmRpZgogfQogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9p
ZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVk
OwotICAgIAotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
c0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBp
dHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1
cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVt
cHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVy
R2VuZXJhdG9yKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygp
OwotfQotCi1zdGF0aWMgSGFzaE1hcDxEV09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxEV09SRCwgSEFORExFPj4gbWFwOwotICAg
IHJldHVybiBtYXA7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7Cisg
ICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJs
ZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlh
bGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25z
dHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAg
IC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAg
IFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5l
cmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0
ZXMoKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50
aWZpZXIoRFdPUkQgdGhyZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWdu
ZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFw
KCkuY29udGFpbnModGhyZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRo
cmVhZEhhbmRsZSk7Ci19CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6
OmNyZWF0ZUludGVybmFsLgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxU
aHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbio+KHBhcmFtKSk7CiAKLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJl
YWRIb2xkZXI6OmluaXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlv
bi0+dGhyZWFkID0gbnVsbHB0cjsKIAotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkp
OwotICAgIHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0
ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRo
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rp
b24oaW52b2NhdGlvbi0+ZGF0YSk7Ci0KICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRp
ZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lk
KiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpj
cmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25z
dCBjaGFyKiB0aHJlYWROYW1lKQogeworICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVm
KCpuZXcgVGhyZWFkKCkpOwogICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAg
IFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRh
KTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUg
dGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAs
IDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVu
dGlmaWVyKSk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpA
QCAtMjE5LDUxICsxODgsMzAgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5h
bChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURf
UEFSQU0obGVha2VkSW52b2NhdGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRo
cmVhZElkZW50aWZpZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxl
QnlJZGVudGlmaWVyKHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1
cm4gdGhyZWFkSUQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJ
ZGVudGlmaWVyKTsKKyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFBy
aW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK1RocmVhZCYgVGhy
ZWFkOjpjdXJyZW50KCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIFRocmVhZEhvbGRl
ciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAg
ICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CiAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhy
ZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUp
Ci0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBjb3JyZXNw
b25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQiLCB0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNy
ZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisg
ICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAKLSAgICBT
ZXRUaHJlYWRQcmlvcml0eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBk
ZWx0YSk7Ci19CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBib29sIGlzU3VjY2Vzc2Z1bCA9IER1
cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdl
dEN1cnJlbnRQcm9jZXNzKCksICZoYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NF
U1MpOworICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7CiAKLWludCB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIEFTU0VSVCh0
aHJlYWRJRCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBM
T0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFj
dGl2ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09S
RCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRF
KTsKLSAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9S
KCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0
byBxdWl0IiwgdGhyZWFkSUQpOwotCi0gICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAg
ICBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotCi0gICAgcmV0dXJu
IGpvaW5SZXN1bHQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7
CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJu
IHRocmVhZC5nZXQoKTsKIH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAgSEFORExFIHRocmVhZEhh
bmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJl
YWRIYW5kbGUpCi0gICAgICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJU
aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLX0KLQotVGhyZWFkSWRlbnRpZmll
ciBjdXJyZW50VGhyZWFkKCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQog
ewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJyZW50VGhy
ZWFkSWQoKSk7CiB9CkBAIC00OTIsNiArNDQwLDk5IEBAIERXT1JEIGFic29sdXRlVGltZVRvV2Fp
dFRpbWVvdXRJbnRlcnZhbChkb3VibGUgYWJzb2x1dGVUaW1lKQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxEV09SRD4oKGFic29sdXRlVGltZSAtIGN1cnJlbnRUaW1lKSAqIDEwMDAuMCk7CiB9CiAK
K1RocmVhZDo6VGhyZWFkKCkKK3sKK30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwordm9p
ZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgICAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgICAgICAvLyBJdCBp
cyBPSyBiZWNhdXNlIEZMU0FsbG9jJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXZlbiBiZWZv
cmUgdGhlcmUgYXJlIHNvbWUgb3BlbiBoYW5kbGVzLgorICAgICAgICAvLyBUaGlzIGVhc2lseSBl
bnN1cmVzIHRoYXQgYWxsIHRoZSB0aHJlYWQgcmVzb3VyY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNs
b3NlZC4KKyAgICAgICAgaWYgKG1faGFuZGxlKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUobV9o
YW5kbGUpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRDYWxsYmFj
aykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNo
KEhBTkRMRSBoYW5kbGUsIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgV29yZExv
Y2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1f
aWQgPSB0aHJlYWRJRDsKK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0
YSkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0VGhyZWFk
UHJpb3JpdHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7Cit9CisK
K2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKK3sKKyAgICBIQU5ETEUgaGFuZGxlOwor
ICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBo
YW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZv
clNpbmdsZU9iamVjdChoYW5kbGUsIElORklOSVRFKTsKKyAgICBpZiAoam9pblJlc3VsdCA9PSBX
QUlUX0ZBSUxFRCkKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBm
b3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CisKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9
PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8g
bm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBj
bGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBv
biBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFz
RXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0Owor
fQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBXZSBmb2xsb3cgdGhlIHB0aHJl
YWQgc2VtYW50aWNzOiBldmVuIGFmdGVyIHRoZSBkZXRhY2ggaXMgY2FsbGVkLAorICAgIC8vIHdl
IHN0aWxsIGNhbiBwZXJmb3JtIG9wZXJhdGlvbiBvbnRvIHRoZSB0aHJlYWQuIFRvIGRvIHNvLCB3
ZSBkbworICAgIC8vIG5vdGhpbmcgaGVyZSBpbiBXaW5kb3dzLiBDbG9zZUhhbmRsZSB3aWxsIGJl
IGNhbGxlZCBhdXRvbWF0aWNhbGx5CisgICAgLy8gYnkgdGhlIEZMUyBkZXN0cnVjdG9yIG9uIHRo
cmVhZCB0ZXJtaW5hdGlvbi4KKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Cisg
ICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KKwor
YXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRF
cnJvcj4KK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgRFdPUkQg
cmVzdWx0ID0gU3VzcGVuZFRocmVhZChtX2hhbmRsZSk7CisgICAgaWYgKHJlc3VsdCAhPSAoRFdP
UkQpLTEpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJl
c3VsdCk7Cit9CisKKy8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBu
b3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KK3ZvaWQgVGhyZWFkOjpyZXN1
bWUoKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBSZXN1bWVU
aHJlYWQobV9oYW5kbGUpOworfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9t
dXRleCk7CisgICAgcmVnaXN0ZXJzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENP
TlRFWFRfQ09OVFJPTDsKKyAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxl
LCAmcmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRl
eCBiMmEwYTc5ZjRhYjVhYWMyODliMTY5ZjkyYmJjMWE4MDU4NTJjYTMyLi45NzMwZmNmMGYwOTIx
ZmRlZDkwZjg5ZjEyOTBlNzc0OTBiNTM5NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9X
b3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9u
cywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKIAogICAgICAgICAgICAgbV93b3JrZXJz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFkQ291bnQpOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBt
X3dvcmtlcnMuYXBwZW5kKGNyZWF0ZVRocmVhZChTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBX
b3JrZXIgJXUiLCBpKS51dGY4KCkuZGF0YSgpLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1f
d29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wg
V29ya2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAg
ICAgdGhyZWFkQm9keSgpOwogICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KQEAg
LTExNCw3ICsxMTQsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBp
dGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogICAgICAgICBDb25kaXRp
b24gbV9jb25kaXRpb247CiAgICAgICAgIERlcXVlPGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4qPiBtX3F1ZXVlOwogCi0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3dvcmtl
cnM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gbV93b3JrZXJzOwogICAgIH07CiAK
ICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFRocmVhZFBvb2w+IHRocmVhZFBvb2w7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oCmluZGV4IGE0N2YyMWUyMGQzMWJjOGJmNzMxOGY0MWI5NTdhYjM2NmMxOTE1MDMu
Ljc2MzQ1YzA2OTMxNjRmNjhjYTRiMWM2NjQ0ODRhMjczY2M2ZThiZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5o
CkBAIC0xMDMsNyArMTAzLDcgQEAgY2xhc3MgV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0
aW9uRGlzcGF0Y2hlciB7CiAKICAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwogI2VsaWYgVVNFKEdM
SUJfRVZFTlRfTE9PUCkgfHwgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya1F1ZXVl
VGhyZWFkOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAg
IENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgIFJ1bkxvb3AqIG1f
cnVuTG9vcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29h
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCAxYTcy
MTlhZDI1OWVkNzU5NzJhNWE0NThjNWM0ODQ5N2EzODhlNGQzLi41OWVlMWY4NWI0MzVjZTFhNzJm
NTA1MGY0ZGY2MmVmY2ZiYmM4MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9X
b3JrUXVldWVDb2NvYS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29j
b2EuY3BwCkBAIC00OSwxNSArNDksMTUgQEAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFzc190IGRp
c3BhdGNoUU9TQ2xhc3MoV29ya1F1ZXVlOjpRT1MgcW9zKQogewogICAgIHN3aXRjaCAocW9zKSB7
CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlOgotICAgICAgICByZXR1
cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CisgICAgICAg
IHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJ
VkUpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQ6Ci0gICAgICAgIHJl
dHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CisgICAgICAg
IHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVE
KTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpEZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRq
dXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfREVGQVVMVCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOwogICAgIGNhc2UgV29ya1F1ZXVl
OjpRT1M6OlV0aWxpdHk6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFT
U19VVElMSVRZKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1Nf
Q0xBU1NfVVRJTElUWSk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3VuZDoKLSAg
ICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOworICAg
ICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5E
KTsKICAgICB9CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9X
b3JrUXVldWVHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2Vu
ZXJpYy5jcHAKaW5kZXggOTM0YTM4Y2JiZTY0YmJmZmFlYjRkMzdkZjFiOGQ5OTUyYjg4NTM0NC4u
ZGE4NzVkMWZhMDRjZWY1MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0NDYzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zNSw3ICszNSw3IEBACiB2b2lk
IFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFP
UykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXgpOwotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKG5hbWUsIFt0aGlz
XSB7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbdGhpc10g
ewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVS
dW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6
OmN1cnJlbnQoKTsKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCiAgICAgaWYgKG1fcnVuTG9vcCkKICAgICAgICAgbV9ydW5Mb29wLT5zdG9wKCk7
CiAgICAgaWYgKG1fd29ya1F1ZXVlVGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3dv
cmtRdWV1ZVRocmVhZCk7Ci0gICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICAgICAg
bV93b3JrUXVldWVUaHJlYWQtPmRldGFjaCgpOworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9
IG51bGxwdHI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1v
cnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKaW5kZXggYjI5NDE5NDQ0ZTc0MjczNmE2N2RjMGMx
YWE4NTFkZWMzYWU1ODdlNC4uZmZkNDAwODU1YjgyOTNhOGI1YTNjM2FlYjIzYWI3N2FhZjVhN2Vl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
TGludXguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxl
ckxpbnV4LmNwcApAQCAtMTE5LDcgKzExOSwxMCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2
ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIoaW50IGZkLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKAog
ICAgIH0sIHRoaXMsIG51bGxwdHIpOwogICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQo
KSwgbnVsbHB0cik7CiAjZWxzZQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIldURjog
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwgW3RoaXNdIHsgcmVhZEFuZE5vdGlmeSgpOyB9CisgICAg
bV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLAor
ICAgICAgICBbdGhpc10geworICAgICAgICAgICAgcmVhZEFuZE5vdGlmeSgpOworICAgICAgICB9
KTsKICNlbmRpZgogfQogCkBAIC0xMjksNyArMTMyLDcgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVy
OjpFdmVudEZEUG9sbGVyOjp+RXZlbnRGRFBvbGxlcigpCiAjaWYgVVNFKEdMSUIpCiAgICAgZ19z
b3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CiAjZWxzZQotICAgIGRldGFjaFRocmVhZCht
X3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvbWFjL01haW5UaHJlYWRNYWMubW0gYi9Tb3VyY2UvV1RGL3d0
Zi9tYWMvTWFpblRocmVhZE1hYy5tbQppbmRleCAyNzJlM2Y1Zjk3NzQwYzlhMTFmNzQ4YThiNWFl
NjAwNjI2NmU5MmQ2Li5kN2IzYTUxODYwZTUwYzk3MTJhNDkxYWJlYTYyNDIwYWE5OWFmM2IwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQpAQCAtMTkyLDE0ICsxOTIsMTQgQEAgdm9p
ZCBpbml0aWFsaXplV2ViVGhyZWFkUGxhdGZvcm0oKQogICAgIG1haW5UaHJlYWROU1RocmVhZCA9
IFtbTlNUaHJlYWQgY3VycmVudFRocmVhZF0gcmV0YWluXTsKIH0KIAotYm9vbCBjYW5BY2Nlc3NU
aHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZCkKK2Jvb2wg
Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZCYgdGhyZWFkKQogewotICAg
IFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZElkID0gY3VycmVudFRocmVhZCgpOwotICAg
IGlmICh0aHJlYWRJZCA9PSBjdXJyZW50VGhyZWFkSWQpCisgICAgVGhyZWFkJiBjdXJyZW50VGhy
ZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CisgICAgaWYgKHRocmVhZCA9PSBjdXJyZW50VGhyZWFk
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh0aHJlYWRJZCA9PSBzV2ViVGhyZWFk
SWRlbnRpZmllciB8fCB0aHJlYWRJZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIp
Ci0gICAgICAgIHJldHVybiAoY3VycmVudFRocmVhZElkID09IHNXZWJUaHJlYWRJZGVudGlmaWVy
IHx8IGN1cnJlbnRUaHJlYWRJZCA9PSBzQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXIpICYm
IHdlYlRocmVhZElzVW5pbml0aWFsaXplZE9yTG9ja2VkT3JEaXNhYmxlZCgpOworICAgIGlmICh0
aHJlYWQgPT0gc1dlYlRocmVhZElkZW50aWZpZXIgfHwgdGhyZWFkID09IHNBcHBsaWNhdGlvblVJ
VGhyZWFkSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIChjdXJyZW50VGhyZWFkID09IHNXZWJU
aHJlYWRJZGVudGlmaWVyIHx8IGN1cnJlbnRUaHJlYWQgPT0gc0FwcGxpY2F0aW9uVUlUaHJlYWRJ
ZGVudGlmaWVyKSAmJiB3ZWJUaHJlYWRJc1VuaW5pdGlhbGl6ZWRPckxvY2tlZE9yRGlzYWJsZWQo
KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggODc0NzY0MzhjYWU2NWE2
Mzg3ZDkwMWE3NTI4ODE1ZWM5NTQ3ZjIzMi4uOWNkM2RiNGQxYmMxNGEzNjE3MzIxYWIwMDVhMDE5
NjIwNTI3ODI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSURCU2VydmVyOjpJREJT
ZXJ2ZXIoSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQog
ICAgIDogbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsK
ICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwot
ICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVu
dHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhl
ZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhh
bmRsZXImIGZpbGVIYW5kbGVyKQpAQCAtNjYsNyArNjYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZl
cihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVt
cG9yYQogICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgTG9ja2VyPExvY2s+
IGxvY2tlcihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0g
Y3JlYXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4
ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNl
cnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIi
KTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9u
VG9DbGllbnQmIGNvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggMjU2Y2Q1MDdlNmU2ZDdmNjU2ZWVjZTBj
MTE5ODk0OGZkOTIzZGExZC4uOTM0YTFkMTc0NTI5MDg0MjhhM2FlNmUwZWQ3ZTUxMGE5YTljYTZl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaApAQCAtMTI1LDcgKzEyNSw3IEBAIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQlNlcnZlcj4gewogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJREJD
b25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRh
YmFzZUlkZW50aWZpZXIsIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0
YWJhc2VNYXA7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAg
UmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgTG9jayBtX2RhdGFiYXNl
VGhyZWFkQ3JlYXRpb25Mb2NrOwogICAgIExvY2sgbV9tYWluVGhyZWFkUmVwbHlMb2NrOwogICAg
IGJvb2wgbV9tYWluVGhyZWFkUmVwbHlTY2hlZHVsZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAppbmRl
eCAyOTJmMDViOGNkNTA2ZTIyOWFlNmI4YmQ4NjI5YzA5NTRkMTg0NTliLi5jODE2MTcxNjlhMzE0
MmIxOGU5ZDdlNzUzYmZkOWI4MGNhMzE5MDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcApAQCAtMzksNyArMzksNyBA
QCBBc3luY0F1ZGlvRGVjb2Rlcjo6QXN5bmNBdWRpb0RlY29kZXIoKQogewogICAgIC8vIFN0YXJ0
IHdvcmtlciB0aHJlYWQuCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRl
eCk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChBc3luY0F1ZGlvRGVjb2Rlcjo6dGhy
ZWFkRW50cnksIHRoaXMsICJBdWRpbyBEZWNvZGVyIik7CisgICAgbV90aHJlYWRJRCA9IFRocmVh
ZDo6Y3JlYXRlKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERl
Y29kZXIiKTsKIH0KIAogQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCkBA
IC00Nyw4ICs0Nyw4IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQog
ICAgIG1fcXVldWUua2lsbCgpOwogICAgIAogICAgIC8vIFN0b3AgdGhyZWFkLgotICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAg
IG1fdGhyZWFkSUQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV90aHJlYWRJRCA9IG51bGxw
dHI7CiB9CiAKIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKFJlZjxBcnJheUJ1
ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNh
bGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYg
ZXJyb3JDYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXN5bmNBdWRpb0RlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuaAppbmRleCBiYjVjNWUzMzdiNWVjZjFmOGU2MTc1M2EyOWY4ZDBm
OTcxNDE1NTNkLi5lMWIzYTNlYWVlNmJkNTU0ZmQ3Y2NhZDNjZGNhZWJmMzViYTg0NTE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rl
ci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEFzeW5jQXVkaW9EZWNvZGVyIHsKICAgICBzdGF0
aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKICAgICB2b2lkIHJ1bkxvb3Ao
KTsKIAotICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0cjxU
aHJlYWQ+IG1fdGhyZWFkSUQ7CiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7CiAgICAg
TWVzc2FnZVF1ZXVlPERlY29kaW5nVGFzaz4gbV9xdWV1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHAKaW5kZXggNTA1MjMwNDE5N2NkZWRkZTQ3ZmRjYmI5MTJlYzQ3NDA1NTc5NzQy
OC4uZTdkNTY3ZGZlYWQ0NDJjMzk2YWYwZjcwNTEwOTczZmZlMTQ4YWIwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBjb25zdCBzaXplX3QgcmVuZGVy
UXVhbnR1bVNpemUgPSAxMjg7CiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiBy
ZW5kZXJUYXJnZXQpCiAgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCByZW5kZXJU
YXJnZXQtPnNhbXBsZVJhdGUoKSkKICAgICAsIG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkK
LSAgICAsIG1fcmVuZGVyVGhyZWFkKDApCisgICAgLCBtX3JlbmRlclRocmVhZChudWxscHRyKQog
ICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQogewogICAgIG1fcmVuZGVyQnVzID0gQXVk
aW9CdXM6OmNyZWF0ZShyZW5kZXJUYXJnZXQtPm51bWJlck9mQ2hhbm5lbHMoKSwgcmVuZGVyUXVh
bnR1bVNpemUpOwpAQCAtNjYsOCArNjYsOCBAQCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6dW5pbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcmVuZGVy
VGhyZWFkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fcmVuZGVyVGhyZWFk
KTsKLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSAwOworICAgICAgICBtX3JlbmRlclRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBudWxscHRyOwog
ICAgIH0KIAogICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7CkBAIC04Myw3ICs4Myw3IEBA
IHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZygpCiAgICAg
aWYgKCFtX3N0YXJ0ZWRSZW5kZXJpbmcpIHsKICAgICAgICAgbV9zdGFydGVkUmVuZGVyaW5nID0g
dHJ1ZTsKICAgICAgICAgcmVmKCk7IC8vIFNlZSBjb3JyZXNwb25kaW5nIGRlcmVmKCkgY2FsbCBp
biBub3RpZnlDb21wbGV0ZURpc3BhdGNoKCkuCi0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVudHJ5
LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVu
dHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgKaW5kZXggNzU1NjA0NjQ3MjMyYzRiYzUxM2NjOWUzOWRkNDQ1ZjM4YjYyY2Vm
NC4uNTY5MDEzOGIxNjU3MGIzZjlkMjM3ZjlkZDRhOGVhMjNkNzNmZmFhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAgICAgUmVmUHRyPEF1
ZGlvQnVzPiBtX3JlbmRlckJ1czsKICAgICAKICAgICAvLyBSZW5kZXJpbmcgdGhyZWFkLgotICAg
IHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV9yZW5kZXJUaHJlYWQ7CiAgICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CiAgICAg
c3RhdGljIHZvaWQgb2ZmbGluZVJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZv
aWQgb2ZmbGluZVJlbmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmNwcAppbmRleCA4ODY5ZjZiZjIyMzIzMmU2M2NjM2ZiNTJlMTZhZTFkYjNl
YjQxYmU2Li44YzkyZDZlNTM5NmFkZjEyZmJkZDY4ZDdhYzk3ZjllZDE5YWRjMDE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtNzcw
LDggKzc3MCw3IEBAIFNlY3VyaXR5T3JpZ2luRGF0YSBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4o
KQogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4o
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotICAgIGF1dG8mIHRocmVhZCA9
IGRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWQuZ2V0
VGhyZWFkSUQoKSkKKyAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlVGhyZWFkKCku
Z2V0VGhyZWFkSUQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNl
Y3VyaXR5T3JpZ2luKG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggMGRkZTVmNzI2
OGVlNjQyYzAwNDMwNWNlZmUzNmIxYzllNDRiODdkMy4uYjM1M2JiOGZhNTc1YmFmODU1ODExMmFi
NTNlYTgzYTFjOTA4OThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKQEAgLTYwLDEyICs2MCwxMiBAQCBib29sIERh
dGFiYXNlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3Jl
YXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNl
Iik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShEYXRhYmFzZVRocmVhZDo6ZGF0YWJh
c2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7CiAKLSAgICByZXR1cm4g
bV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnJlcXVlc3RUZXJtaW5hdGlvbihEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBT
eW5jKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkKCkKICAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdCBvZiBhbGwgcGVuZGluZyB0cmFuc2FjdGlv
bnMgb24gdGhpcyBkYXRhYmFzZSB0aHJlYWQKICAgICBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3It
PnNodXRkb3duKCk7CiAKLSAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJl
YWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJl
bnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUg
cmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIs
IG1fdGhyZWFkLT5pZCgpLCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8vIENsb3NlIHRoZSBk
YXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhhdCBp
ZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFjayBh
bmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCiAgICAgLy8gaW5jb25zaXN0ZW50
IG9yIGxvY2tlZCBzdGF0ZS4KQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFk
OjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5EYXRhYmFzZS0+cGVyZm9ybUNsb3NlKCk7
CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25n
ZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90aHJl
YWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogCiAgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiBjbGVhbnVwU3luYyA9IG1fY2xlYW51cFN5bmM7CiAKQEAgLTE0Miw3ICsxNDIsNyBA
QCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UmIGRhdGFi
YXNlKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAot
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCZU
aHJlYWQ6OmN1cnJlbnQoKSA9PSBtX3RocmVhZCk7CiAgICAgQVNTRVJUKCFtX29wZW5EYXRhYmFz
ZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5hZGQoJmRh
dGFiYXNlKTsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNv
cmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRlciBs
b2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoJlRocmVhZDo6Y3VycmVudCgpID09IG1fdGhy
ZWFkKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBtX29wZW5EYXRhYmFzZVNldC5j
b250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5yZW1vdmUoJmRhdGFi
YXNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUaHJlYWQuaAppbmRleCBlYzA0MWUzMTgxNzI0OTJlY2E2YmNlZmU4ZjFkYTI1ZWM5MmVk
MjZjLi5hNTIxMmRmYjhiMTcyY2UyZmY2YTk4ODhkZTBhOWRiOTc3YWUyZDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCkBA
IC01OCw3ICs1OCw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAKICAgICB2b2lkIHJlY29yZERhdGFiYXNlT3Bl
bihEYXRhYmFzZSYpOwogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UmKTsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsg
fQorICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZCA/
IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogCiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciog
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
ci5nZXQoKTsgfQogCkBAIC02OSw3ICs2OSw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAgICAgdm9pZCBkYXRh
YmFzZVRocmVhZCgpOwogCiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhy
ZWFkIHsgbnVsbHB0ciB9OwogICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9zZWxmUmVmOwog
CiAgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZmOWZjYTY3ZjNjNDdhZGRjODNk
ZWM4Y2IwZDVlYjhjY2I0MGQ3NDMuLjEzOWFhOTkxYTE2ZWFkMjJmNjhmNTAxYmU3Yjk0NTk2MzIy
MTM1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcApA
QCAtMTAxLDE0ICsxMDEsMTQgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93
SWZOb3REb25lUmVjZW50bHkoKQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RP
bkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhib29sIHdhaXRVbnRpbERvbmUpCiB7Ci0gICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChjb2xsZWN0LCAwLCAiV2Vi
Q29yZTogR0NDb250cm9sbGVyIik7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoY29sbGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOwogCiAgICAgaWYg
KHdhaXRVbnRpbERvbmUpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
SUQpOworICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHRocmVhZC0+ZGV0
YWNoKCk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxl
Y3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmNwcAppbmRleCAxNjhlNGUyNzc5NWQ0MjVmNDA0ZjE3NWM5YmNiYTkzZjcz
NjgwNzRjLi41NWM3Y2IwMjM5ODU5OWM5NzFlNmEzN2EwZjlhNzI0ODQ4NDJlNmJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCkBAIC03NCw3ICs3NCw3IEBA
IHN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlv
bikKIAogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVhdGVGaWxlVGhyZWFkT25jZTsKICAg
ICBzdGQ6OmNhbGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25jZSwgW10gewotICAgICAgICBjcmVh
dGVUaHJlYWQoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKKyAgICAgICAgVGhyZWFk
OjpjcmVhdGUoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKICAgICAgICAgICAgIGZv
ciAoOzspIHsKICAgICAgICAgICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggNGNkY2ZhYWQ2ZTgz
MmEzOWE1YzM1MjY1ODA1ODUwODZiM2Q5ZjcyZi4uYTgyMzMzMTZlZjE3MjRmZjc1M2M5MzkyZTli
ZDRiNzE5ZWFhZGRlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2UuY3BwCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQo
KSBBU1NFUlQoIW1fc3luY1RocmVhZFJ1bm5pbmcgfHwgIUlTX0lDT05fU1lOQ19USFJFQUQoKSkK
IAogLy8gRm9yIG1ldGhvZHMgdGhhdCBhcmUgbWVhbnQgdG8gc3VwcG9ydCB0aGUgc3luYyB0aHJl
YWQgT05MWQotI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkgKG1fc3luY1RocmVhZCA9PSBj
dXJyZW50VGhyZWFkKCkpCisjZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhy
ZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKSkKICNkZWZpbmUgQVNTRVJUX0lDT05fU1lOQ19USFJF
QUQoKSBBU1NFUlQoSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAjaWYgUExBVEZPUk0oR1RLKQpA
QCAtMTQxLDcgKzE0MSw3IEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIC8vIExvY2sgaGVyZSBhcyB3
ZWxsIGFzIGZpcnN0IHRoaW5nIGluIHRoZSB0aHJlYWQgc28gdGhlIHRocmVhZCBkb2Vzbid0IGFj
dHVhbGx5IGNvbW1lbmNlIHVudGlsIHRoZSBjcmVhdGVUaHJlYWQoKSBjYWxsIAogICAgIC8vIGNv
bXBsZXRlcyBhbmQgbV9zeW5jVGhyZWFkUnVubmluZyBpcyBwcm9wZXJseSBzZXQKICAgICBtX3N5
bmNMb2NrLmxvY2soKTsKLSAgICBtX3N5bmNUaHJlYWQgPSBjcmVhdGVUaHJlYWQoSWNvbkRhdGFi
YXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBJY29uRGF0
YWJhc2UiKTsKKyAgICBtX3N5bmNUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJY29uRGF0YWJhc2U6
Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFz
ZSIpOwogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQ7CiAgICAgbV9zeW5j
TG9jay51bmxvY2soKTsKICAgICBpZiAoIW1fc3luY1RocmVhZCkKQEAgLTE2MSw3ICsxNjEsNyBA
QCB2b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQogICAgICAgICB3YWtlU3luY1RocmVhZCgpOwog
ICAgICAgICAKICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHN5bmMgdGhyZWFkIHRvIHRlcm1pbmF0
ZQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3N5bmNUaHJlYWQpOworICAgICAg
ICBtX3N5bmNUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgbV9zeW5j
VGhyZWFkUnVubmluZyA9IGZhbHNlOyAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkRhdGFiYXNlLmgKaW5kZXggMDYxYWY0YTEyNTU3NzFkZTExYTMyZjU2ODNjMGVmZGE1OTI5M2I5
ZC4uODY0MDk1NTQ3NTMzZmQ4OTBmMDNhZmU5MmJiMDZmNjA4N2VlNzM2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKQEAgLTExOSw3ICsxMTksNyBAQCBjbGFz
cyBJY29uRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgSWNvbkRhdGFiYXNlQmFzZSB7CiAgICAgdm9p
ZCBzeW5jVGltZXJGaXJlZCgpOwogICAgIAogICAgIFRpbWVyIG1fc3luY1RpbWVyOwotICAgIFRo
cmVhZElkZW50aWZpZXIgbV9zeW5jVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fc3luY1Ro
cmVhZDsKICAgICBib29sIG1fc3luY1RocmVhZFJ1bm5pbmc7CiAgICAgCiAgICAgSGFzaFNldDxS
ZWZQdHI8RG9jdW1lbnRMb2FkZXI+PiBtX2xvYWRlcnNQZW5kaW5nRGVjaXNpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAppbmRleCA5MTIwMGMzNDVmNDU1
Zjk2ZDQ5NGJmZDJhZDcwM2YyOGM1YzYyOWQxLi5kOWI2ZjcyZmEzNmZhNzAwYzgyNmYzYzk3ZDZi
YWEwMmQ0MmU4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5jcHAKQEAgLTk2LDExICs5NiwxMSBAQCB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6Om5vdGlm
eU9ic2VydmVycyhSZXNvdXJjZVVzYWdlRGF0YSYmIGRhdGEpCiAKIHZvaWQgUmVzb3VyY2VVc2Fn
ZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElkZW50
aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ZtID0g
JmNvbW1vblZNKCk7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVh
ZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogUmVzb3VyY2VVc2FnZSIpOworICAgIG1fdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNvdXJj
ZVVzYWdlIik7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6dGhyZWFkQ2FsbGJhY2so
dm9pZCogcmVzb3VyY2VVc2FnZVRocmVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVz
YWdlVGhyZWFkLmgKaW5kZXggMThhMWU2NzU0M2QyMjA5YzE3OTU3NDczNjYyMmE3OGIzODRiYjhm
Yy4uZWZkZTI3ZWZlNmIwYWM0NTQ2NGRlODkxYzY3Y2U3OWY5Y2YyZTE5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKQEAgLTYyLDcgKzYyLDcgQEAgY2xhc3Mg
UmVzb3VyY2VVc2FnZVRocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRCb2R5KCk7CiAgICAgdm9pZCBw
bGF0Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSosIFJlc291cmNlVXNhZ2VEYXRhJik7CiAKLSAgICBU
aHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllciB7IDAgfTsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fbG9jazsKICAgICBDb25kaXRp
b24gbV9jb25kaXRpb247CiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpmdW5jdGlvbjx2b2lkIChj
b25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpPj4gbV9vYnNlcnZlcnM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAppbmRleCA3MzBjMGE2YmQ5
M2Y0NTc4ZDFlZGJmOWFjZTFjZDg2NTY2ZTZjOTg4Li5kMjA3ODQwNTYwZGRmOTA1OTBhMGRhZGQy
NzMwODRjOTFjOWZiMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTM1LDE0ICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCgpCi0gICAgOiBtX3RocmVh
ZElkZW50aWZpZXIoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiB9CiAKIGJvb2wgU2Ny
b2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQogewotICAgIGF1dG8gdGhyZWFkSWRlbnRp
ZmllciA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlmaWVyOwot
ICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWRJ
ZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFNjcm9sbGluZ1RocmVhZDo6
c2luZ2xldG9uKCkubV90aHJlYWQ7CisgICAgcmV0dXJuIHRocmVhZCAmJiB0aHJlYWQtPmlkKCkg
PT0gY3VycmVudFRocmVhZCgpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2go
RnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKQEAgLTc0LDE0ICs3NCwxNCBAQCBTY3JvbGxp
bmdUaHJlYWQmIFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkKIAogdm9pZCBTY3JvbGxpbmdU
aHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV90aHJlYWRJZGVudGlm
aWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2FpdCBm
b3IgdGhlIHRocmVhZCB0byBpbml0aWFsaXplIHRoZSBydW4gbG9vcC4KICAgICB7CiAgICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXgpOwog
Ci0gICAgICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxsYmFj
aywgdGhpcywgIldlYkNvcmU6IFNjcm9sbGluZyIpOworICAgICAgICBtX3RocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5nIik7CiAg
ICAgICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBtX2luaXRpYWxpemVSdW5Mb29w
Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc117IHJldHVybiBtX3RocmVhZFJ1bkxv
b3A7IH0pOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhy
ZWFkSWZOZWVkZWQoKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2sodm9p
ZCogc2Nyb2xsaW5nVGhyZWFkKQogewotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRl
cmFjdGl2ZSgpOwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGluZ1RocmVhZCo+KHNjcm9sbGluZ1Ro
cmVhZCktPnRocmVhZEJvZHkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuaAppbmRleCBkZTA2MmQ3N2FjMDFkZjlkMmEwOTg2MGViZTZi
OGU5ZmQzY2ZmNWMwLi5kODg5MmYwNWJlNjQzN2Q0YWFjYzBhNzUxYTdjYTdlOTNiZWUwZGZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaApA
QCAtNzMsNyArNzMsNyBAQCBjbGFzcyBTY3JvbGxpbmdUaHJlYWQgewogICAgIHZvaWQgdGhyZWFk
UnVuTG9vcFNvdXJjZUNhbGxiYWNrKCk7CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogCiAgICAg
Q29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKICAgICBMb2Nr
IG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCmluZGV4IGY3MTMzM2M1YTM3YTk5ODk2
NGYzYTc0MWM3MzE1MmU5NTE0NjZjZjYuLmRkYmUzYmE5ODBlNDUwYTQ5NGNkMDY0OGY0MWI1ZTM2
YWZlZWI1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZE
YXRhYmFzZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJU
RkRhdGFiYXNlTG9hZGVyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBQYXNzUmVmUHRyPEhSVEZEYXRh
YmFzZUxvYWRlcj4gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3Vz
bHlJZgogfQogCiBIUlRGRGF0YWJhc2VMb2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcihmbG9hdCBz
YW1wbGVSYXRlKQotICAgIDogbV9kYXRhYmFzZUxvYWRlclRocmVhZCgwKQorICAgIDogbV9kYXRh
YmFzZUxvYWRlclRocmVhZChudWxscHRyKQogICAgICwgbV9kYXRhYmFzZVNhbXBsZVJhdGUoc2Ft
cGxlUmF0ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTA2LDcgKzEwNiw3
IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoKQogICAgIAog
ICAgIGlmICghbV9ocnRmRGF0YWJhc2UuZ2V0KCkgJiYgIW1fZGF0YWJhc2VMb2FkZXJUaHJlYWQp
IHsKICAgICAgICAgLy8gU3RhcnQgdGhlIGFzeW5jaHJvbm91cyBkYXRhYmFzZSBsb2FkaW5nIHBy
b2Nlc3MuCi0gICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoZGF0
YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJhc2UgbG9hZGVyIik7CisgICAgICAg
IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkYXRhYmFzZUxvYWRlckVu
dHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKICAgICB9CiB9CiAKQEAgLTEyMSw4
ICsxMjEsOCBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6d2FpdEZvckxvYWRlclRocmVhZENv
bXBsZXRpb24oKQogICAgIAogICAgIC8vIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKCkgc2hvdWxk
IG5vdCBiZSBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIHRocmVhZC4KICAgICBpZiAobV9kYXRh
YmFzZUxvYWRlclRocmVhZCkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9kYXRh
YmFzZUxvYWRlclRocmVhZCk7Ci0gICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IDA7CisgICAg
ICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV9k
YXRhYmFzZUxvYWRlclRocmVhZCA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFz
ZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9h
ZGVyLmgKaW5kZXggYzg2OWQxMzdhMWRiMmY1MjQ5OGQwZTFiNjVkNTg3ZTZjODE5YjM4MS4uM2Fk
MjUxZjIxOTkwOWY0YmM2NDU0ZDAxMzIwMWI2YTdjYTcwMjY4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKQEAgLTc3LDcgKzc3
LDcgQEAgY2xhc3MgSFJURkRhdGFiYXNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8SFJURkRh
dGFiYXNlTG9hZGVyPiB7CiAKICAgICAvLyBIb2xkaW5nIGEgbV90aHJlYWRMb2NrIGlzIHJlcXVp
cmVkIHdoZW4gYWNjZXNzaW5nIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQuCiAgICAgTG9jayBtX3Ro
cmVhZExvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CiAKICAgICBmbG9hdCBt
X2RhdGFiYXNlU2FtcGxlUmF0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA5NmYzMzA4MjgwNzlhNzlhZDY0ODIwZDA3
MjFjNTljNWVhMTZmZGIxLi4yMWJlOTk2ZWYzN2U1M2RiNzAzMTAwMTk2MjdjMGM0MGQyYjIxMGRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
ci5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZvbHZl
cihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAgIC8v
IFN0YXJ0IHVwIGJhY2tncm91bmQgdGhyZWFkCiAgICAgLy8gRklYTUU6IHdvdWxkIGJlIGJldHRl
ciB0byB1cCB0aGUgdGhyZWFkIHByaW9yaXR5IGhlcmUuICBJdCBkb2Vzbid0IG5lZWQgdG8gYmUg
cmVhbC10aW1lLCBidXQgaGlnaGVyIHRoYW4gdGhlIGRlZmF1bHQuLi4KICAgICBpZiAodGhpcy0+
dXNlQmFja2dyb3VuZFRocmVhZHMoKSAmJiBtX2JhY2tncm91bmRTdGFnZXMuc2l6ZSgpID4gMCkK
LSAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gY3JlYXRlVGhyZWFkKFdlYkNvcmU6OmJhY2tn
cm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91bmQgdGhyZWFkIik7
CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdlYkNvcmU6OmJh
Y2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91bmQgdGhyZWFk
Iik7CiB9CiAKIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZlcigpCkBAIC0xNDYsNyAr
MTQ2LDcgQEAgUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKICAgICAgICAgICAg
IG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9iYWNrZ3JvdW5kVGhyZWFk
KTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJi
Q29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuaAppbmRleCA2YmFlYjdjY2UyOTg5NmM5ODk2MzUxMmY0MWI0M2EyZjEyODg1NDFjLi4wNTk2
MzM2N2FlMjgzNDk0ODc5MGJhN2NjYjcyMDYwZWM1OTgxMDcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaApAQCAtODYsNyArODYsNyBAQCBj
bGFzcyBSZXZlcmJDb252b2x2ZXIgewogCiAgICAgLy8gQmFja2dyb3VuZCB0aHJlYWQgYW5kIHN5
bmNocm9uaXphdGlvbgogICAgIGJvb2wgbV91c2VCYWNrZ3JvdW5kVGhyZWFkczsKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fYmFja2dyb3VuZFRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2Jh
Y2tncm91bmRUaHJlYWQ7CiAgICAgYm9vbCBtX3dhbnRzVG9FeGl0OwogICAgIGJvb2wgbV9tb3Jl
SW5wdXRCdWZmZXJlZDsKICAgICBtdXRhYmxlIExvY2sgbV9iYWNrZ3JvdW5kVGhyZWFkTXV0ZXg7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVk
aW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCmluZGV4IDZjZDhiZDdmODFi
ZmYyMjI3ZmUxNGZiY2EwZmJmZDA1NWQwOWM1NzEuLjFmMjVlOGU1NGU5ZWU4NWZhMGNjYTZhMzFi
OTJlMTExZTZkZjBjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3Bw
CkBAIC0zNzAsMjAgKzM3MCwyMCBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBBdWRpb0ZpbGVSZWFk
ZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubwogUGFzc1JlZlB0
cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCwg
Ym9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVz
PiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJBdWRpb0Zp
bGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRl
XSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVyIiwg
WyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAgICAg
ICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBs
ZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1l
bW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4
VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIFJlZlB0cjxBdWRpb0J1cz4gcmV0dXJu
VmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgiQXVkaW9GaWxlUmVhZGVy
IiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0g
eworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIkF1ZGlvRmlsZVJlYWRlciIsIFsm
cmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsKICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIoZGF0YSwgZGF0YVNpemUpLmNyZWF0
ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0pOwotICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwCmluZGV4IDFjNWMzMGYzNzdhNDJiZTAwMTc3MTY1MWU4N2Y3MDQzYTVk
NjVjOTAuLjI2NDY2ZjUzYjQ4MjE4ZDMzN2E1YTg5NGYxZGI3MjhkZjRjNDdjODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJT
b3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0xMDgsNyArMTA4LDcg
QEAgY2xhc3MgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgUmVzb3VyY2VI
YW5kbGVDbGllbnQsIHB1YmxpYyBTdHJlYW0KICAgICAgICAgdm9pZCB3YXNCbG9ja2VkKFJlc291
cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJj
ZUhhbmRsZSopIG92ZXJyaWRlOwogCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQg
eyAwIH07CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAg
ICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAgICAgICAgQ29u
ZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgICAgIFJ1bkxvb3AqIG1f
cnVuTG9vcCB7IG51bGxwdHIgfTsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIFJlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJT
cmMqIHNyYywKICAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCiB7CiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKLSAgICBtX3RocmVhZCA9
IGNyZWF0ZVRocmVhZCgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBbdGhpcywgcmVx
dWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRl
KCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RGTW92
ZShyZXF1ZXN0KV0gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29w
ID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTExMTMsOCArMTExMyw4IEBAIFJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRX
ZWJTcmMqIHNyYywKIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp+UmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQoKQogewogICAgIGlmIChtX3RocmVhZCkgewotICAgICAgICBkZXRh
Y2hUaHJlYWQobV90aHJlYWQpOwotICAgICAgICBtX3RocmVhZCA9IDA7CisgICAgICAgIG1fdGhy
ZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIAogICAg
IGlmIChtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAppbmRleCA0
NmI4OTk0YTg0MWVmNzFlYTI3OWNlNzdjYmM4ZmI0M2MyOWYwYTYyLi5mZmJmZGE5Yjg5MzQ4MzU0
OTBjOWE0MGJhMWY0ODMzNmU0NzYwYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCkBAIC03Nyw3ICs3Nyw3IEBA
IENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRp
Y0xvY2s+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KTsKIAogICAgIGlmICghbG9hZGVyUnVuTG9v
cE9iamVjdCkgewotICAgICAgICBjcmVhdGVUaHJlYWQocnVuTG9hZGVyVGhyZWFkLCAwLCAiV2Vi
Q29yZTogQ0ZOZXR3b3JrIExvYWRlciIpOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZShydW5Mb2Fk
ZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CiAKICAgICAgICAgbG9h
ZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW10geyByZXR1cm4gbG9hZGVy
UnVuTG9vcE9iamVjdDsgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA0NDA4Y2QxOTg3MDViYTg2
Y2M4YzE5ODZmYjNlMmNhZGU3OTZkY2M2Li5mMTA1NzE1ZWQ4ZDg3OTM3M2I2MzMxY2IyNmUwODJj
M2UxYWI4YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtOTQsMTAgKzk0LDEwIEBAIGludCBDdXJsRG93bmxv
YWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpIGNvbnN0CiB2b2lkIEN1cmxEb3du
bG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogewogICAgIGlmICghcnVuVGhyZWFk
KCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkSWQpCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX3RocmVhZElkKTsKKyAgICAgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICAg
ICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHNldFJ1blRocmVhZCh0
cnVlKTsKLSAgICAgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZChkb3dubG9hZFRocmVhZCwg
dGhpcywgImRvd25sb2FkVGhyZWFkIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOwogICAgIH0KIH0KIApA
QCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVhZCgp
CiB7CiAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIAotICAgIGlmIChtX3RocmVhZElkKSB7Ci0g
ICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOwotICAgICAgICBtX3Ro
cmVhZElkID0gMDsKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPndhaXRG
b3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuaAppbmRleCAwMmNlNzMxYmQxMGE4MDE5YjdlYmUxZmFjNTJiNDVlNDA5MjU2MjMxLi5mNmJi
Yzc3ZjRkM2NlMGI5Njg3ZDFkOGZjYTYwOTE1ODdjOWFlNDljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC02OSw3ICs2
OSw3IEBAIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewogCiAgICAgc3RhdGljIHZvaWQgZG93
bmxvYWRUaHJlYWQodm9pZCogZGF0YSk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgQ1VSTE0qIG1fY3VybE11bHRp
SGFuZGxlOwogICAgIFZlY3RvcjxDVVJMKj4gbV9wZW5kaW5nSGFuZGxlTGlzdDsKICAgICBWZWN0
b3I8Q1VSTCo+IG1fYWN0aXZlSGFuZGxlTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCmlu
ZGV4IDVmOWUwOTU0MDQ3MTdkMzBiZDg5OTQxZTVmMjUyZjE3YjBhODY3YjkuLjY4ZTIxZjQ3NDQ1
MWFjMzg3NTJiOWJjODk0M2MzNWQyM2I2OTY5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsIDogcHVibGlj
IFNvY2tldFN0cmVhbUhhbmRsZSB7CiAgICAgICAgIHNpemVfdCBzaXplIHsgMCB9OwogICAgIH07
CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkIHsgMCB9OworICAgIFJlZlB0
cjxUaHJlYWQ+IG1fd29ya2VyVGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIHN0ZDo6YXRvbWljPGJv
b2w+IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07CiAgICAgTG9jayBtX211dGV4U2VuZDsKICAgICBM
b2NrIG1fbXV0ZXhSZWNlaXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAK
aW5kZXggMWUzNzlkMWIwMGQwOTU1ZmMyZGEwMGJlM2Y5NmY5OTJhOTFiOTQzZi4uZWNiOWY1NGI2
NWEzMzUyNGUzYTM1NmEzYmMxM2QwZTJmNmY2YWNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsOjpzdGFydFRocmVhZCgpCiAKICAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgpIHdpbGwg
Y2FsbCBkZXJlZigpLgogCi0gICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoIldlYlNv
Y2tldCB0aHJlYWQiLCBbdGhpc10geworICAgIG1fd29ya2VyVGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10gewogCiAgICAgICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpzdG9wVGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdG9wVGhyZWFkID0g
dHJ1ZTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3dvcmtlclRocmVhZCk7Ci0gICAg
bV93b3JrZXJUaHJlYWQgPSAwOworICAgIG1fd29ya2VyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlv
bigpOworICAgIG1fd29ya2VyVGhyZWFkID0gbnVsbHB0cjsKICAgICBkZXJlZigpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggN2FkNWI1NzkxM2ExNjcy
ZGY5MTk2ZTllYjAxMzNlMjNlMjMyOTg1ZC4uZGVlNmNlNmQ2NzNkNzZiNDFmMjc0NTQwNGZiMDc5
ZjIxOTY1M2I2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAt
OTksNyArOTksNyBAQCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1
cERhdGEoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cgogfQogCiBXb3JrZXJUaHJlYWQ6
OldvcmtlclRocmVhZChjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBX
b3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHksIFdvcmtlclJlcG9ydGluZ1Byb3h5
JiB3b3JrZXJSZXBvcnRpbmdQcm94eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSwg
Y29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiBjb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVu
dFNlY3VyaXR5UG9saWN5LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luLCBNb25vdG9u
aWNUaW1lIHRpbWVPcmlnaW4sIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5KiBjb25uZWN0
aW9uUHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92aWRlciwgSlNDOjpSdW50aW1lRmxh
Z3MgcnVudGltZUZsYWdzKQotICAgIDogbV90aHJlYWRJRCgwKQorICAgIDogbV90aHJlYWQobnVs
bHB0cikKICAgICAsIG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCiAgICAg
LCBtX3dvcmtlclJlcG9ydGluZ1Byb3h5KHdvcmtlclJlcG9ydGluZ1Byb3h5KQogICAgICwgbV9y
dW50aW1lRmxhZ3MocnVudGltZUZsYWdzKQpAQCAtMTMzLDE1ICsxMzMsMTUgQEAgV29ya2VyVGhy
ZWFkOjp+V29ya2VyVGhyZWFkKCkKIAogYm9vbCBXb3JrZXJUaHJlYWQ6OnN0YXJ0KCkKIHsKLSAg
ICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVh
ZElEIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCisgICAgLy8gTXV0ZXgg
cHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWQgaXMgaW5pdGlh
bGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVh
ZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIi
KTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdvcmtlclRocmVhZDo6d29ya2VyVGhy
ZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKIAotICAgIHJldHVybiBtX3RocmVh
ZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWQ6Ondvcmtl
clRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIFdvcmtl
clRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2Rl
ZmF1bHQobWFpbkNvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEID0gbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBwcm90ZWN0b3IgPSBt
X3RocmVhZDsKIAogICAgIEFTU0VSVChtX3dvcmtlckdsb2JhbFNjb3BlLT5oYXNPbmVSZWYoKSk7
CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkK
ICAgICB0aHJlYWRHbG9iYWxEYXRhKCkuZGVzdHJveSgpOwogCiAgICAgLy8gVGhlIHRocmVhZCBv
YmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIGZyb20gbm90aWZpY2F0aW9uIG5vdywgZG9u
J3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCi0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsKKyAg
ICBwcm90ZWN0b3ItPmRldGFjaCgpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6c3RhcnRSdW5u
aW5nRGVidWdnZXJUYXNrcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAppbmRl
eCAwN2FkM2NlNzg0ZjkxOWY3MGM0NTY4MWI5NTRjMDA5OTk2ZjU1N2YyLi5mODA5ZWU2NjcyN2Vl
MTM5ZGM0ZjE5ZDJjYjYxYjIyNjVlNGVhNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgV29ya2VyVGhyZWFkIDogcHVibGljIFJl
ZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgYm9vbCBzdGFydCgpOwogICAgIHZvaWQgc3Rv
cCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KICAgICBXb3JrZXJSdW5Mb29wJiBy
dW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkmIHdv
cmtlckxvYWRlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJMb2FkZXJQcm94eTsgfQog
ICAgIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgpIGNvbnN0IHsg
cmV0dXJuIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KQEAgLTk4LDcgKzk4LDcgQEAgY2xhc3Mg
V29ya2VyVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgc3Rh
dGljIHZvaWQgd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwogICAgIHZvaWQgd29ya2VyVGhyZWFk
KCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVh
ZD4gbV90aHJlYWQ7CiAgICAgV29ya2VyUnVuTG9vcCBtX3J1bkxvb3A7CiAgICAgV29ya2VyTG9h
ZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkm
IG1fd29ya2VyUmVwb3J0aW5nUHJveHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5jcHAKaW5kZXggYmI2NmZjZWE3ZTUyOGJjMjdmNjMzYTNlNTI4NzhiNTAxZWYwZTE4Ny4uMzU3
Njc5NDZhZGUzNzJhNDc5NDVmODVkM2Y4OTU4YjUyNTRhYmU0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU3Rv
cmFnZS9TdG9yYWdlVGhyZWFkLmNwcApAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgSGFzaFNldDxT
dG9yYWdlVGhyZWFkKj4mIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkKIH0KIAogU3RvcmFnZVRocmVh
ZDo6U3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCisgICAgOiBtX3RocmVhZChu
dWxscHRyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiB9CkBAIC00OCwxNiArNDgs
MTYgQEAgU3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgpCiBTdG9yYWdlVGhyZWFkOjp+U3Rv
cmFnZVRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
IW1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV90aHJlYWQpOwogfQogCiBib29sIFN0b3JhZ2VU
aHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICgh
bV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChTdG9yYWdlVGhy
ZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3Jh
Z2UiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3Jl
YXRlKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhpcywgIldlYkNv
cmU6IExvY2FsU3RvcmFnZSIpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkuYWRkKHRoaXMp
OwotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9p
ZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2sodm9pZCogdGhyZWFkKQpA
QCAtNzgsMjUgKzc4LDI1IEBAIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludCgp
CiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWUu
a2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYm
IG1fdGhyZWFkKTsKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9u
PHZvaWQgKCk+PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6
OnRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
IW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtp
bGxlZCgpICYmIG1fdGhyZWFkKTsKICAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygpLnJlbW92ZSh0
aGlzKTsKICAgICAvLyBFdmVuIGluIHdlaXJkLCBleGNlcHRpb25hbCBjYXNlcywgZG9uJ3Qgd2Fp
dCBvbiBhIG5vbmV4aXN0ZW50IHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgaWYgKCFtX3RocmVh
ZElEKQorICAgIGlmICghbV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcXVldWUu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFt0aGlzXSB7CiAgICAg
ICAgIHBlcmZvcm1UZXJtaW5hdGUoKTsKICAgICB9KSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1f
dGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjpwZXJmb3JtVGVybWlu
YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgg
Yi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCmluZGV4IDk1NjRiOGFhMDZl
NTI0M2UzMGU0NjdjNWZiZmUyY2RhZGIyNDBjNTYuLjhjZjFiM2Q0YWRjNWEzMDZhNzdlYzc3Yzlj
MzI2NjYxNjg3YmVjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaApAQCAt
NTYsNyArNTYsNyBAQCBjbGFzcyBTdG9yYWdlVGhyZWFkIHsKICAgICAvLyBCYWNrZ3JvdW5kIHRo
cmVhZCBwYXJ0IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJlLgogICAgIHZvaWQgcGVyZm9ybVRl
cm1pbmF0ZSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0
cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIE1lc3NhZ2VRdWV1ZTxGdW5jdGlvbjx2b2lkICgpPj4g
bV9xdWV1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAppbmRleCAzYjg1ZjIyZmZhZTAxZTI4YWFiOTk4MTY2OThhZGFkN2EzODQz
YzVmLi5iMDRhY2M4YzMxYzVlY2E4MmE1MTc0MTY2N2RiNzBlMDUzZjFkMmM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yMDQs
NyArMjA0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIHsKICAgICBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKIAotICAgIFdURjo6c2V0Q3VycmVudFRo
cmVhZElzVXNlckluaXRpYXRlZCgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW5pdGlhdGVkKCk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
ID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcjsKICAgICBt
X2xvYWRUaHJvdHRsZUxhdGVuY3kgPSBwYXJhbWV0ZXJzLmxvYWRUaHJvdHRsZUxhdGVuY3k7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IGVmN2JhODk5ODIwMjMyNTg5ZTcz
OTFmMjdmY2QzZDZlMTY5ZjY4OTQuLmZhMDMwZmIzYTJhMGY4MmQ2YTI0NWJmODU2YjM2YWEyNzMy
MDA3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0xODMsNyArMTgz
LDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNldCwgc2l6
ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKIAogICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7Ci0gICAgZGV0YWNoVGhy
ZWFkKGNyZWF0ZVRocmVhZCgiSU9DaGFubmVsOjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBx
dWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICBUaHJlYWQ6OmNyZWF0ZSgiSU9DaGFubmVs
OjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsK
ICAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVmYXVsdFJlYWRC
dWZmZXJTaXplKTsKICAgICAgICAgdWludDhfdCogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihmYXN0TWFsbG9jKGJ1ZmZlclNpemUpKTsKICAgICAgICAgR1JlZlB0cjxTb3VwQnVm
ZmVyPiByZWFkQnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGJ1
ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGJ1ZmZlckRhdGEsIGZhc3RGcmVlKSk7CkBAIC0yMTcsNyAr
MjE3LDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNldCwg
c2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICAgICAgICAgIERhdGEgZGF0YSA9
IHsgV1RGTW92ZShidWZmZXIpIH07CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRh
LCAwKTsKICAgICAgICAgfSwgcXVldWUpOwotICAgIH0pKTsKKyAgICB9KS0+ZGV0YWNoKCk7CiB9
CiAKIHN0cnVjdCBXcml0ZUFzeW5jRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMv
Q29ubmVjdGlvbi5jcHAKaW5kZXggYmFmNTMwNjZiZTIwMDllMjZkYmViN2FjODg4YzQwNWUzYmRi
YTZmZi4uYjM4N2I2YjQ0NWUzN2QzZGEzZThhNzJjN2MwYmEzNWM4NjNmMjcxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcApAQCAtNjc1LDcgKzY3NSw3IEBA
IHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8
RGVjb2Rlcj4gbWVzc2FnZSkKIAogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgaWYgKG1lc3Nh
Z2UtPmlzU3luY01lc3NhZ2UoKSAmJiBtX3Nob3VsZEJvb3N0TWFpblRocmVhZE9uU3luY01lc3Nh
Z2UpIHsKLSAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9vdmVy
cmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBhZGp1c3RlZFFPU0NsYXNzKFFP
U19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKSwgMCk7CisgICAgICAgIHB0aHJlYWRfb3ZlcnJpZGVf
dCBvdmVycmlkZSA9IHB0aHJlYWRfb3ZlcnJpZGVfcW9zX2NsYXNzX3N0YXJ0X25wKG1fbWFpblRo
cmVhZCwgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZF
KSwgMCk7CiAgICAgICAgIG1lc3NhZ2UtPnNldFFPU0NsYXNzT3ZlcnJpZGUob3ZlcnJpZGUpOwog
ICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9p
bnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1Nl
cnZpY2VFbnRyeVBvaW50LmgKaW5kZXggM2JiN2M2ZDQ3ZDQzYzY5NzZiMDNjZmY3NzM2NDRmNDg3
ODQ5M2Q0MS4uZjIzZGI0M2MwMjM0ZGM3YzgxMDQ5NTNmMDRlZjg3OTUyZjliODc0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1Nl
cnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5o
CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBYUENTZXJ2aWNlSW5pdGlhbGl6ZXIoT1NPYmplY3RQ
dHI8eHBjX2Nvbm5lY3Rpb25fdD4gY29ubmVjdGlvbiwgeHBjX29iamVjdF8KIAogI2lmIEhBVkUo
UU9TX0NMQVNTRVMpCiAgICAgaWYgKHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEu
Y29udGFpbnMoQVNDSUlMaXRlcmFsKCJhbHdheXMtcnVucy1hdC1iYWNrZ3JvdW5kLXByaW9yaXR5
IikpKQotICAgICAgICBzZXRHbG9iYWxNYXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7Cisg
ICAgICAgIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MoUU9TX0NMQVNTX1VUSUxJVFkpOwog
I2VuZGlmCiAKICAgICBYUENTZXJ2aWNlVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShwYXJh
bWV0ZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51eC9NZW1v
cnlQcmVzc3VyZU1vbml0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01l
bW9yeVByZXNzdXJlTW9uaXRvci5jcHAKaW5kZXggMDYwOGFiNzJmOTkyNDhlZjI0Y2QyZDUyNDVl
ZTUzMzNhMDBkOWQwZC4uNDhkMTA2OTc3NjVhOTVhOGIzNTg3MjMwZTEwMmQ4MDNhZDU4YzBhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJl
TW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVBy
ZXNzdXJlTW9uaXRvci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBNZW1vcnlQcmVzc3VyZU1vbml0
b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgaWYgKG1fZXZlbnRGRCA9PSAtMSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKCJNZW1vcnlQcmVzc3VyZU1vbml0b3IiLCBbdGhpc10geworICAgIFJlZlB0
cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJNZW1vcnlQcmVzc3VyZU1vbml0b3Ii
LCBbdGhpc10gewogICAgICAgICBkb3VibGUgcG9sbEludGVydmFsID0gc19tYXhQb2xsaW5nSW50
ZXJ2YWxJblNlY29uZHM7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBzbGVl
cChwb2xsSW50ZXJ2YWwpOwpAQCAtMjcxLDcgKzI3MSw3IEBAIE1lbW9yeVByZXNzdXJlTW9uaXRv
cjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKCkKICAgICAgICAgfQogICAgICAgICBjbG9zZShtX2V2
ZW50RkQpOwogICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAg
ICB0aHJlYWQtPmRldGFjaCgpOwogfQogCiBJUEM6OkF0dGFjaG1lbnQgTWVtb3J5UHJlc3N1cmVN
b25pdG9yOjpjcmVhdGVIYW5kbGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggMWQ1MDIxNWEyMDMxMTRiNGYyM2Q1ZDU4ZjJkMjUzZmY3OTA1NmQ1
ZS4uNGY5NmFiYmYwZGM5NzJmOGI5YzJjNmNmNmU4MjY0NjllMjVmYmY1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBX
ZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzJiYgcGFyYW1ldGVycykKICAgICBwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdURk1v
dmUocGFyYW1ldGVycykpOwogCiAgICAgLy8gTWF0Y2ggdGhlIFFvUyBvZiB0aGUgVUlQcm9jZXNz
IGFuZCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBidXQgdXNlIGEgc2xpZ2h0bHkgbG93ZXIgcHJpb3Jp
dHkuCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoLTEpOworICAg
IFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoLTEpOwogCiAg
ICAgbV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IHBhcmFtZXRlcnMuc2hvdWxkU3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgaWYgKCFtX3N1cHByZXNzTWVtb3J5UHJl
c3N1cmVIYW5kbGVyKSB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggZDM1YWVkODcxNTBkZWU0MTE5NzE0NmZlZWYwYjA5ZmY0NmU4NDA2MC4uZWEy
NzA1Y2NjNGQxZWEzNzZlM2NiNWViNDlmMTQ4NTU2YjRkYmNlNSAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA0
LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtX
VEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxp
Z24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQg
b25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwOgorICAgICAgICAocnVuSmF2YVNj
cmlwdFRocmVhZCk6CisgICAgICAgIChzdGFydEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAg
KHN0b3BKYXZhU2NyaXB0VGhyZWFkcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAodGVzdFRocmVhZElkZW50aWZpZXJNYXApOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHA6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpydW5Mb2NrVGVzdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2lu
Z0xvdC5jcHA6CisKIDIwMTctMDQtMDYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KIAogICAgICAgICBNYWtlIEZvbnRXaXRoRmVhdHVyZXMgdGVzdCBmb250IHBhc3Mg
T1RTCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5n
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCmluZGV4
IGUyZjliYWRlNmNhN2MyNjk0ODVhNGNkY2JlNjA5OWMzNmJhMDIxOTguLmRjMjNhZTIyYTg1ZTBj
OTk1MzE2N2Y5OTg1OWVjOWRlZTQzZjE3ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0ph
dmFTY3JpcHRUaHJlYWRpbmcuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBMb2NrJiBqYXZh
U2NyaXB0VGhyZWFkc011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9CiAKLXR5cGVk
ZWYgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBUaHJlYWRTZXQ7Cit0eXBlZGVmIEhhc2hTZXQ8
UmVmUHRyPFRocmVhZD4+IFRocmVhZFNldDsKIHN0YXRpYyBUaHJlYWRTZXQmIGphdmFTY3JpcHRU
aHJlYWRzKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVGhyZWFkU2V0
LCBzdGF0aWNKYXZhU2NyaXB0VGhyZWFkcywgKCkpOwpAQCAtMTA4LDEwICsxMDgsOSBAQCB2b2lk
IHJ1bkphdmFTY3JpcHRUaHJlYWQodm9pZCopCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwotICAgICAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSAgICAgICAgZGV0
YWNoVGhyZWFkKHRocmVhZCk7CisgICAgICAgIFRocmVhZDo6Y3VycmVudCgpLmRldGFjaCgpOwog
ICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLnJlbW92ZSh0aHJlYWQpOwotICAgICAgICBqYXZh
U2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAs
IDApKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUoJnJ1
bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0x
MjgsNyArMTI3LDcgQEAgdm9pZCBzdGFydEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50OyArK2kpCi0gICAgICAgIGphdmFTY3Jp
cHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkp
OworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVuSmF2
YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogfQogCiB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygp
CkBAIC0xMzgsNyArMTM3LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQogICAgICAg
ICBqYXZhU2NyaXB0VGhyZWFkc1Nob3VsZFRlcm1pbmF0ZSA9IHRydWU7CiAgICAgfQogCi0gICAg
VmVjdG9yPFRocmVhZElkZW50aWZpZXIsIGphdmFTY3JpcHRUaHJlYWRzQ291bnQ+IHRocmVhZHM7
CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0aHJl
YWRzOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNN
dXRleCgpKTsKICAgICAgICAgY29weVRvVmVjdG9yKGphdmFTY3JpcHRUaHJlYWRzKCksIHRocmVh
ZHMpOwpAQCAtMTQ2LDcgKzE0NSw3IEBAIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKICAg
ICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ7
ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAg
ICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggZmI0ZDI2ZmNjZWI3MGM0YjUzMjAx
MGRhODVmYjljZTc4NTVjMTM4NC4uM2NlYWE2ZjNlNjU3MzVkMzBlZjFhNGY4OTdkNWU2OWM0ZmE1
ZmYwNiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAt
MTA3Miw4ICsxMDcyLDggQEAgc3RhdGljIHZvaWQgdGVzdFRocmVhZElkZW50aWZpZXJNYXAoKQog
ICAgIHB0aHJlYWRfam9pbihwdGhyZWFkLCAwKTsKIAogICAgIC8vIE5vdyBjcmVhdGUgYW5vdGhl
ciB0aHJlYWQgdXNpbmcgV1RGLiBPbiBPU1gsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZSBwdGhyZWFk
IGhhbmRsZQotICAgIC8vIGJ1dCBzaG91bGQgZ2V0IGEgZGlmZmVyZW50IFRocmVhZElkZW50aWZp
ZXIuCi0gICAgY3JlYXRlVGhyZWFkKHJ1blRocmVhZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0ZXN0
Iik7CisgICAgLy8gYnV0IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQgUmVmUHRyPFRocmVhZD4uCisg
ICAgVGhyZWFkOjpjcmVhdGUocnVuVGhyZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsK
IH0KIAogc3RhdGljIHZvaWQgYWxsb2NhdGVHbG9iYWxDb250cm9sbGVycygpCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAppbmRleCA4NDg1MjczNTFmNjA2M2Zj
MjYzNjg3ODA1NmQ5YzI0ZGJhYmU4M2RjLi43NzIxNjM2Yjc3ODA3ZjEzOTUxZWExMTJmYmQ0MTNl
OGZhYzQ2MGJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25k
aXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5j
cHAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uIGVtcHR5
Q29uZGl0aW9uOwogICAgIENvbmRpdGlvbiBmdWxsQ29uZGl0aW9uOwogCi0gICAgVmVjdG9yPFRo
cmVhZElkZW50aWZpZXI+IGNvbnN1bWVyVGhyZWFkczsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRp
Zmllcj4gcHJvZHVjZXJUaHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gY29uc3Vt
ZXJUaHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gcHJvZHVjZXJUaHJlYWRzOwog
CiAgICAgVmVjdG9yPHVuc2lnbmVkPiByZWNlaXZlZDsKICAgICBMb2NrIHJlY2VpdmVkTG9jazsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAg
ICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAg
ICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAg
ICAgICAgICAgICAiQ29uc3VtZXIgdGhyZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAg
ICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgcnVuVGVzdCgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9ja2VyLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1w
dGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAi
LCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgp
LCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9
ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAi
XG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29u
dGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOwpAQCAtMTMxLDcgKzEzMSw3
IEBAIHZvaWQgcnVuVGVzdCgKICAgICBzbGVlcChkZWxheSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiUHJvZHVjZXIgVGhy
ZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzUGVyUHJvZHVjZXI7ICsraSkgewpAQCAtMTQyLDcgKzE0
Miw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ29u
ZGl0aW9uLCBsb2NrZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIs
IHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4i
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRo
IHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAi
LCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOwpAQCAtMTU1
LDggKzE1NSw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVu
ZCh0aHJlYWRJZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0
aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlm
aWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9ja2VyKGxvY2spOwpAQCAtMTY0LDggKzE2NCw4IEBAIHZvaWQgcnVuVGVzdCgK
ICAgICB9CiAgICAgZW1wdHlDb25kaXRpb24ubm90aWZ5QWxsKCk7CiAKLSAgICBmb3IgKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IGNvbnN1bWVyVGhyZWFkcykKLSAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQ
dHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogY29uc3VtZXJUaHJlYWRzKQorICAgICAgICB0
aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgRVhQRUNUX0VRKG51
bVByb2R1Y2VycyAqIG51bU1lc3NhZ2VzUGVyUHJvZHVjZXIsIHJlY2VpdmVkLnNpemUoKSk7CiAg
ICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJlZ2luKCksIHJlY2VpdmVkLmVuZCgpKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKaW5kZXggNTU3NjMwMmQ2OTBkZmNhMzU5OTI5Mjhi
MWM4NTNjNzYyMmU0NWZiOS4uNmE0ZTUzOGY1NmY0NmQxNzdhM2Y2MmYxZGRlYjNhNGQwYWYyYWYw
OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKQEAgLTQ2LDEzICs0Niwx
MyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQg
bnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2Nr
VHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3Jv
dXBzKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhy
ZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlm
aWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJl
ZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRo
cmVhZEdyb3VwSW5kZXgtLTspIHsKICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAw
OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3Jv
dXA7IHRocmVhZEluZGV4LS07KSB7Ci0gICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5k
ZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisg
ICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAg
KyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAiTG9jayB0
ZXN0IHRocmVhZCIsCiAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2Nrcywg
JndvcmRzLCBudW1JdGVyYXRpb25zLCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uXSAoKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsK
QEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBydW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91
cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cCwgdW5zaWduZWQKICAgICB9CiAKICAgICBm
b3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Bl
ckdyb3VwOyB0aHJlYWRJbmRleC0tOykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKIAogICAgIGRvdWJsZSBleHBlY3RlZCA9IDA7CiAgICAgZm9yICh1
aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1Bl
ckNyaXRpY2FsU2VjdGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsgaS0tOykKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKaW5kZXggYzY3ZTFlMDgxNWE4M2Fm
YTkzMzNlMmFjOWEyYmQ3OGI2N2IxNjQ1Yi4uNWFmOWM3YzgyN2IyMWUyMWQ4ZGY5MzA1MjYwZDZm
ZmVlNjhmYmQxYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFy
a2luZ0xvdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xv
dC5jcHAKQEAgLTQ4LDE2ICs0OCwxNCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAg
ICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVRocmVhZHM7IGktLTspIHsKICAgICAg
ICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgIlBhcmtp
bmcgVGVzdCBUaHJlYWQiLAogICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBjdXJyZW50VGhyZWFkKCkpOwotCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3duKCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhd2FrZS5hZGQoY3VycmVudFRocmVhZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxhc3RBd29rZW4gPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
d2FrZS5hZGQoVGhyZWFkOjpjdXJyZW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dEF3b2tlbiA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvbi5ub3RpZnlfb25lKCk7CiAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAg
fQpAQCAtNjUsMTYgKzYzLDE2IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgdm9p
ZCB1bnBhcmtPbmUodW5zaWduZWQgc2luZ2xlVW5wYXJrSW5kZXgpCiAgICAgewotICAgICAgICBF
WFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4pOworICAgICAgICBFWFBFQ1RfVFJVRShudWxscHRyID09
IGxhc3RBd29rZW4pOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRk
cmVzcyA9IDA7Ci0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyLCA4PiBxdWV1ZTsKKyAg
ICAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCA4PiBxdWV1ZTsKICAgICAgICAgUGFya2luZ0xv
dDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVu
dGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYg
dGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAg
IGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAg
ICAgICAgICAgICBxdWV1ZS5hcHBlbmQoJnRocmVhZElkZW50aWZpZXIpOwogCiAgICAgICAgICAg
ICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOwogICAgICAgICAgICAgfSk7CkBAIC04NywxMiAr
ODUsMTIgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKICAgICAgICAgICAgIHdoaWxlIChhd2Fr
ZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJbmRleCArIDEpCiAgICAgICAgICAgICAgICAgY29uZGl0
aW9uLndhaXQobG9ja2VyKTsKLSAgICAgICAgICAgIEVYUEVDVF9ORSgwdSwgbGFzdEF3b2tlbik7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShudWxscHRyICE9IGxhc3RBd29rZW4pOwogICAgICAg
ICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgcXVldWVbMF0gIT0gbGFzdEF3b2tlbikgewog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIldva2UgdXAgd3JvbmcgdGhyZWFkOiBxdWV1ZSA9ICIs
IGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFzdCBhd29rZW4gPSAiLCBsYXN0QXdva2VuLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEocXVldWVbMF0sIGxhc3RBd29rZW4pOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbGFzdEF3b2tlbiA9IDA7CisgICAgICAgICAgICBsYXN0QXdv
a2VuID0gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAwLDcgKzk4LDcgQEAgc3Ry
dWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgewogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5n
T25BZGRyZXNzID0gMDsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAg
IFsmXSAoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAg
ICAgWyZdIChUaHJlYWQmLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIApAQCAtMTE0LDcgKzExMiw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRl
c3QgewogCiAgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5n
TG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2
b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFk
ZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKQEAgLTEyOSw4ICsxMjcsOCBA
QCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgICAgICAgICBjb25kaXRpb24ud2Fp
dChsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhy
ZWFkSWRlbnRpZmllciA6IHRocmVhZHMpCisgICAgICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53
YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIAogICAgIC8vIFNlbWFwaG9yZSBvcGVyYXRpb25z
LgpAQCAtMTc5LDkgKzE3Nyw5IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgIEF0b21p
YzxpbnQ+IHNlbWFwaG9yZTsKICAgICBzdGQ6Om11dGV4IGxvY2s7CiAgICAgc3RkOjpjb25kaXRp
b25fdmFyaWFibGUgY29uZGl0aW9uOwotICAgIEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gYXdh
a2U7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgVGhyZWFkSWRl
bnRpZmllciBsYXN0QXdva2VuIHsgMCB9OworICAgIEhhc2hTZXQ8UmVmPFRocmVhZD4+IGF3YWtl
OworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKKyAgICBSZWZQdHI8VGhyZWFk
PiBsYXN0QXdva2VuIHsgbnVsbHB0ciB9OwogfTsKIAogdm9pZCBydW5QYXJraW5nVGVzdCh1bnNp
Z25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxheSwgdW5zaWduZWQgbnVtVGhyZWFkcywgdW5z
aWduZWQgbnVtU2luZ2xlVW5wYXJrcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306495</attachid>
            <date>2017-04-07 06:42:31 -0700</date>
            <delta_ts>2017-04-07 06:45:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407224229.patch</filename>
            <type>text/plain</type>
            <size>218363</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5jMTBkYzA5MGMwMzI1Mzlj
NzM1MWJmNDEyMDFmYzg2MzhiM2Y0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Om93bmVyVGhyZWFkKToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6
c2VuZCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKwogMjAxNy0wNC0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA1YzBiYjUwZDg1MGNjZDVmZDRlYzUwZGM5NDQ4ODM0Y2ZjNmNjYzNkLi44Yjc4ZTgyYTM4
YTY1M2Y3MjgzNmM0ZWU0ZGI2MDg2YTIzMGJkMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAx
Ny0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5k
IGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhy
ZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0Nv
bmRpdGlvblNwZWVkVGVzdC5jcHA6CisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NU
ZXN0LmNwcDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAg
ICAqIHd0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJl
YWQ6OnN0YXJ0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3Rm
L01haW5UaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQpOgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisgICAgICAgICogd3RmL01l
bW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6
dHJ5TG9ja0Zvcik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFBy
aXZhdGU6OndvcmtlclRocmVhZCk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6VGhy
ZWFkUHJpdmF0ZSk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorICAgICAgICAoV1RG
OjpQYXJraW5nTG90Ojpmb3JFYWNoSW1wbCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoK
KyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9yRWFjaCk6CisgICAgICAgICogd3RmL1JlZlB0
ci5oOgorICAgICAgICAoV1RGOjpSZWZQdHI6OlJlZlB0cik6CisgICAgICAgICogd3RmL1RocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oOgorICAgICAgICAoV1RGOjpUaHJlYWRGdW5jdGlvbkludm9j
YXRpb246OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbik6CisgICAgICAgICogd3RmL1RocmVhZEdy
b3VwLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9y
bVRocmVhZC5oLgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAgICAgICAoV1RG
OjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAgICogd3RmL1Ro
cmVhZEhvbGRlclB0aHJlYWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAg
ICogd3RmL1RocmVhZEhvbGRlcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9U
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFs
aXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJXaW4uaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAg
ICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRI
b2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZHVtcCk6Cisg
ICAgICAgIChXVEY6Om5vcm1hbGl6ZVRocmVhZE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpjcmVhdGVUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW50ZXJhY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW5pdGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjphZGp1c3RlZFFPU0NsYXNzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6
aWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkZE9uRXhpdENhbGxiYWNrKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlk
Sm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6
Y3VycmVudFRocmVhZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZSk6CisgICAgICAg
IChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3Vy
cmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQpOgorICAgICAgICAoV1RGOjp3dGZUaHJlYWRF
bnRyeVBvaW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRpZEV4aXQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmVzdGFibGlzaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y2hh
bmdlUHJpb3JpdHkpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkZXRhY2gpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNy
ZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjdXJyZW50SUQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6cmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpn
ZXRSZWdpc3RlcnMpOgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpQdGhyZWFkU3RhdGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVh
ZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlI
ZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmRldGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6c2lnbmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5n
V2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChX
VEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUlu
dGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpjdXJyZW50SUQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OlRocmVhZCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkRXhp
dCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0YWJsaXNoKToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBs
ZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6cmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpnZXRSZWdpc3RlcnMpOgorICAg
ICAgICAoV1RGOjp0aHJlYWRNYXBNdXRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVh
ZE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlm
aWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRl
dGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpXb3JrUXVl
dWU6OmNvbmN1cnJlbnRBcHBseSk6CisgICAgICAgICogd3RmL1dvcmtRdWV1ZS5oOgorICAgICAg
ICAqIHd0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHA6CisgICAgICAgIChXVEY6OmRpc3BhdGNo
UU9TQ2xhc3MpOgorICAgICAgICAqIHd0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwOgor
ICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV29ya1F1
ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAqIHd0Zi9saW51eC9NZW1vcnlQcmVz
c3VyZUhhbmRsZXJMaW51eC5jcHA6CisgICAgICAgIChXVEY6Ok1lbW9yeVByZXNzdXJlSGFuZGxl
cjo6RXZlbnRGRFBvbGxlcjo6RXZlbnRGRFBvbGxlcik6CisgICAgICAgIChXVEY6Ok1lbW9yeVBy
ZXNzdXJlSGFuZGxlcjo6RXZlbnRGRFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIpOgorCiAyMDE3LTA0
LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBVcGRhdGUgdGhlIHByaW9yaXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3Vy
Y2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggODczZDM3OTM0ODRkZGQ2MDhiY2M1OWEwMGE1YmVmNTkyY2FjMGI2
ZC4uYWVmY2Y0YWRkMmI0ZWVjMThhYTFiMGIzYmYzZGNiZjc5ZGM4MjlkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDgxIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVz
ZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRp
b24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0
UmVuZGVyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRo
cmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6
cmVjb3JkRGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpnZXRUaHJl
YWRJRCk6CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZv
ckRlYnVnZ2luZyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6b3Blbik6
CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKiBsb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJl
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhy
ZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0hSVEZEYXRh
YmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OkhS
VEZEYXRhYmFzZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6
OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2Fk
ZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZl
cmJDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJi
Q29udm9sdmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVh
bWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkZXJS
dW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVh
ZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJl
YWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJU
aHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRlIHRo
ZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAy
YjM5Yjk4Yzc0OTY5NjY0ZDI3MGRhYzU4MDk3N2YxMjk1ZDFmYmZlLi43ODUzODE0ODY0M2I1Njg2
MjM2YjEwYWVkMjc4NjY5YWZlYWVhZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3
LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAg
IFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQg
YWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJl
YWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhy
ZWFkOjpTdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6On5T
dG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAgICogU3RvcmFnZS9TdG9y
YWdlVGhyZWFkLmg6CisKIDIwMTctMDQtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBPbmx5IENhcHR1cmUgRXh0cmEgTmV0
d29yayBMb2FkIE1ldHJpY3Mgd2hlbiB0aGVyZSBpcyBhIFdlYiBJbnNwZWN0b3IgRnJvbnRlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhNTJjZDdhY2RkMTIyNjNlNjVhZjE5NmJhMDAzMzAyMTM4YjkxZTY2Li41
NDFlYzEyNGMwMTY0NGJmOWJiZGY2NjFiMGViY2YxYTYyZTI2NDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJl
ZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBz
ZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5j
SW5UaHJlYWQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKElQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6CisgICAgICAgICog
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5
UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRpYWxpemVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRl
IHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
CmluZGV4IGU3ODA4NmMzYTk2MTJhMmYwYjRkN2FhZjFhZGM3YmExYTEwMWM1NDcuLjQzYWVmMDc3
OTcwY2ZlZGIyY2FjMDQ2M2ZjZDllY2NhMjlkMTUyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKQEAgLTk2LDcg
Kzk2LDcgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAoKQogewogICAgIEJpdG1hcCBiaXRtYXA7
CiAgICAgY29uc3QgaW50IG51bVRocmVhZHMgPSA1OwotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSURzW251bVRocmVhZHNdOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZHNbbnVtVGhyZWFk
c107CiAgICAgRGF0YSBkYXRhW251bVRocmVhZHNdOwogCiAgICAgV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CkBAIC0xMDcsMTIgKzEwNywxMiBAQCB2b2lkIHRlc3RDb21wYXJlQW5kU3dhcCgp
CiAgICAgICAgIGRhdGFbaV0uaWQgPSBpOwogICAgICAgICBkYXRhW2ldLm51bVRocmVhZHMgPSBu
dW1UaHJlYWRzOwogICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gdGhyZWFkRnVuYyA9IHN0
ZDo6YmluZChzZXRCaXRUaHJlYWRGdW5jLCAmZGF0YVtpXSk7Ci0gICAgICAgIHRocmVhZElEc1tp
XSA9IGNyZWF0ZVRocmVhZCgic2V0Qml0VGhyZWFkRnVuYyIsIHRocmVhZEZ1bmMpOworICAgICAg
ICB0aHJlYWRzW2ldID0gVGhyZWFkOjpjcmVhdGUoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRG
dW5jKTsKICAgICB9CiAKICAgICBwcmludGYoIldhaXRpbmcgZm9yICVkIHRocmVhZHMgdG8gam9p
blxuIiwgbnVtVGhyZWFkcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBp
KyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEc1tpXSk7CisgICAg
ICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBwcmludGYoIlBBU1M6
IENvbXBhcmVBbmRTd2FwIHRlc3QgY29tcGxldGVkIHdpdGhvdXQgYSBoYW5nXG4iKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzIxN2I1Yzg1NTFhNThlNmNmZDAwYzViZDFm
MmRhYTEwMjVmNDA4ZS4uN2QyMDM2YmU4NjE2ZmY1Mzg2N2U1ZTA3OTU2NWZkYTVhNzg4NTFlOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0NjcsNyArMjQ2Nyw2IEBACiAJCUZF
RDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8q
IExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJCMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi87IH07CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkVFNDNGQ0UxRTY2NDE3MTAw
NzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJl
YWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjA0MDUwMUFBRTY2MkQw
MEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovOyB9OwogCQlGRUZENkZDNjFENUU3
OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJp
bmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwpAQCAtNTA5Myw3ICs1MDkyLDYgQEAK
IAkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoZG9nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBpbmdQb25nU3RhY2tP
dmVyZmxvd1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rl
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBNTBENTFCOTdGNEQ5MDA5
QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHBhdGggPSBBUEkvdGVz
dHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1UaHJlYWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRT
d2FwVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb21wYXJl
QW5kU3dhcFRlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUyMUFBRUM0RUQwMEJEMjhCMCAv
KiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q29tcGFyZUFuZFN3YXBUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYw
QiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTdHJpbmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODU0LDcg
KzY4NTIsNiBAQAogCQkJCUY2OTJBODc4MDI1NTU5N0QwMUZGNjBGNyAvKiBPcGVyYXRpb25zLmgg
Ki8sCiAJCQkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovLAogCQkJ
CTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8sCi0JCQkJRkVFNDNGQ0Qx
RTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8sCiAJCQkJODY4OTE2QTkxNTVG
Mjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggKi8sCiAJCQkJMTQ3MzQxREYxREMyQ0U5NjAw
QUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmNwcCAqLywKIAkJCQkxNDczNDFEMzFEQzAyRTZE
MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUuaCAqLywKQEAgLTkzMzQsNyArOTMzMSw2IEBA
CiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUU0M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZv
cm1UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4RUYwMDMzMUI4NCAv
KiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIwMUE2
RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0
MUIyMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKaW5kZXggODdiMzUzYWEzNzky
NWNhMWUyZmE4NDExOTk3NmFkZjBiMWUwN2JhYS4uYzkxNzcwNzk1ODhmODZkNDMxYTI4YmMwNzRk
NGZlMmUzZjEzZGM0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3Bw
CkBAIC0xOTEzLDEwICsxOTEzLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAog
ICAgIExvY2sgbG9jazsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAg
ICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAg
ICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAg
ICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpA
QCAtMTkzMyw4ICsxOTMzLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAg
ICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFk
IDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAg
ICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IDAxOTk2YWY3MWFiNGYwOWViNDliNzAxMWMxN2Ri
YzkzYzQwY2U4N2EuLjkwNDY1NjQ4ODdiNmIzYTRhZmFjMzU5ZGMxMGM1MDM4NGQ3NGRlZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0xNjg1MCwxMCArMTY4NTAsMTAgQEAg
dm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVj
dG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+
PiB0aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJl
ck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAg
ICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAg
ICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xNjg3MCw4ICsxNjg3MCw4IEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgfQog
Ci0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0
aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAppbmRleCBhNGUyMWY5ZmEzY2Q0NzIxZWEyNjc1ZTA2ZTRk
NTMwYzViYTk1YjM1Li5lOWIxZjVjMmYwYmMyN2IwMjkzMTBjNTU4MTUyMGIxYjU1MjI1OTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcApA
QCAtNDYsNyArNDYsNyBAQCB2b2lkIGluaXRpYWxpemVTdXBlclNhbXBsZXIoKQogICAgIGlmICgh
T3B0aW9uczo6dXNlU3VwZXJTYW1wbGVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNyZWF0
ZVRocmVhZCgKKyAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBTdXBlciBTYW1wbGVy
IiwKICAgICAgICAgW10gKCkgewogICAgICAgICAgICAgY29uc3QgaW50IHNsZWVwUXVhbnR1bSA9
IDEwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAppbmRleCBjZWY5
OTBjYjQ4MzNhNmJiOTQ3MWJkMDhhNTA0ZTU1ZmI0N2RmNDU4Li5hZDBlY2M2OWE3N2QxNzJjZjRi
YzFlZmFjOTNkZjkzMDI3YzAwOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xp
c3QsICI6IFRocmVhZCBzdGFydGVkXG4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3JlbGF0
aXZlUHJpb3JpdHkpCi0gICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlvcml0eShjdXJyZW50VGhy
ZWFkKCksIG1fcmVsYXRpdmVQcmlvcml0eSk7CisgICAgICAgICAgICBUaHJlYWQ6OmN1cnJlbnQo
KS5jaGFuZ2VQcmlvcml0eShtX3JlbGF0aXZlUHJpb3JpdHkpOwogICAgICAgICAKICAgICAgICAg
bV9jb21waWxhdGlvblNjb3BlID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvblNjb3BlPigp
OwogICAgICAgICBtX2xvbmdMaXZlZFN0YXRlID0gc3RkOjptYWtlX3VuaXF1ZTxMb25nTGl2ZWRT
dGF0ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlz
YXNzZW1ibGVyLmNwcAppbmRleCA3ODhhNmMzNjIzNjljNThkYWQyOWE2MGEzODcxMDQ0ZTQ2NGVk
MzA1Li4yYjgyNGVjZmRlNTg5M2IyYzZiNzA2ZjQ3MDJlY2QyMjk1ZDIzNTU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIGNsYXNzIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciB7CiBwdWJsaWM6
CiAgICAgQXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkKICAgICB7Ci0gICAgICAgIGNyZWF0ZVRo
cmVhZCgiQXN5bmNocm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKKyAg
ICAgICAgVGhyZWFkOjpjcmVhdGUoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkg
eyBydW4oKTsgfSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZW5xdWV1ZShzdGQ6OnVuaXF1ZV9w
dHI8RGlzYXNzZW1ibHlUYXNrPiB0YXNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApp
bmRleCAzYWVlMzAxMDRmNTI5MWEyODc2NGE1Y2RlZTVhYThmMGNhNzJhZDMxLi43MjIzYjIwYzlk
ZmJhMTA0MzA5OGE3ODU3NGJhMjhhNjk0YzA0NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxp
emUoKQogICAgICAgICAgICAgbV9zaG91bGRTdG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSA9IHRy
dWU7CiAgICAgICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlDb25kaXRpb24ubm90aWZ5T25l
KCk7CiAgICAgICAgIH0KLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9jb2xsZWN0
Q29udGludW91c2x5VGhyZWFkKTsKKyAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFk
LT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIHZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xs
ZWN0KCkKICAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkgewotICAgICAgICBtX2NvbGxlY3RDb250aW51b3Vz
bHlUaHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRo
cmVhZCA9IFdURjo6VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiSlNDIERFQlVHIENvbnRp
bnVvdXMgR0MiLAogICAgICAgICAgICAgW3RoaXNdICgpIHsKICAgICAgICAgICAgICAgICBNb25v
dG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggZDA2NTcwMTZiZWVmOWE4OWQwNmRmMjc5NzE3ZTc3MGIxNjRh
NDcxNC4uZDY3ODM3YWZlZjEzMDFmOTY3MmY2MGVhMjljNDNmYzg1OTdkZWI5MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bh
cmFsbGVsSGVscGVyUG9vbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTY2Niw3ICs2NjcsNyBAQCBjbGFzcyBIZWFwIHsKICAgICBMb2NrIG1f
Y29sbGVjdENvbnRpbnVvdXNseUxvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29sbGVjdENvbnRpbnVv
dXNseUNvbmRpdGlvbjsKICAgICBib29sIG1fc2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3Vz
bHkgeyBmYWxzZSB9OwotICAgIFRocmVhZElkZW50aWZpZXIgbV9jb2xsZWN0Q29udGludW91c2x5
VGhyZWFkIHsgMCB9OworICAgIFJlZlB0cjxXVEY6OlRocmVhZD4gbV9jb2xsZWN0Q29udGludW91
c2x5VGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIAogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NT
dGFydFRpbWU7CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ0VuZFRpbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAppbmRleCBiODVi
NzY0OGUyZjVkMTlmYTIyZDc2M2Y3YmNkZWY4ZjQ0YzQyYzg4Li40ZmZkZjljYzRlM2MzNjA2YjFk
YTlhOTQwNzdmYzc0Yzg4NmVjMTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKQEAgLTY0LDYzICs2NCwxMyBAQAogI2luY2x1ZGUg
PHB0aHJlYWRfbnAuaD4KICNlbmRpZgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9X
UykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotLy8gV2UgdXNlIFNJR1VT
UjIgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBpbiBKYXZhU2NyaXB0Q29y
ZS4KLXN0YXRpYyBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7Ci1z
dGF0aWMgU3RhdGljTG9jayBnbG9iYWxTaWduYWxMb2NrOwotdGhyZWFkX2xvY2FsIHN0YXRpYyBz
dGQ6OmF0b21pYzxKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhKj4gdGhyZWFkTG9jYWxD
dXJyZW50VGhyZWFkIHsgbnVsbHB0ciB9OwotCi1zdGF0aWMgdm9pZCBwdGhyZWFkU2lnbmFsSGFu
ZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKLXsKLSAg
ICAvLyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRs
ZXJzIGlzIGFsbG93ZWQuCi0gICAgSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSogdGhy
ZWFkRGF0YSA9IHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5sb2FkKCk7Ci0KLSAgICBpZiAodGhy
ZWFkRGF0YS0+c3VzcGVuZGVkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpIHsKLSAg
ICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIHRoYXQgaXMgaW50ZW5k
ZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2lnc3VzcGVuZC4KLSAgICAgICAgLy8gU28gdGhpcyBo
YW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNob3VsZCBub3QgcHJvY2Vzcy4KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gV2hlbiBzaWduYWwgY29tZXMsIGZpcnN0LCB0aGUgc3lzdGVtIGNhbGxzIHNp
Z25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNpZ3N1c3BlbmQgd2lsbCBiZSByZXN1bWVkLiBTaWdu
YWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5cyBwcmVjZWRlcy4KLSAgICAgICAgLy8gU28sIHRo
ZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhhdCBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgLi4uKSB3
aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQuCi0gICAgICAgIC8v
IGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25z
L3NpZ3N1c3BlbmQuaHRtbAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWNvbnRleHRf
dCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpOwotI2lm
IENQVShQUEMpCi0gICAgdGhyZWFkRGF0YS0+c3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSAqdXNl
ckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7Ci0jZWxzZQotICAgIHRocmVhZERhdGEtPnN1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OwotI2VuZGlm
Ci0KLSAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBp
cyBzdXNwZW5kZWQuCi0gICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rp
b24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhhbmRsZXIu
Ci0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9m
dW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMwotICAgIC8vCi0gICAgLy8g
QW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0IHN1c3Bl
bmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KLSAgICAvLyBodHRwOi8vcHVi
cy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9jaGFwMDQu
aHRtbCN0YWdfMDRfMTEKLSAgICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+c2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7Ci0KLSAgICAvLyBSZWFjaGluZyBoZXJlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlzIGNvbmZpZ3VyZWQgYnkgc2ln
YWN0aW9uJ3Mgc2FfbWFzaykuCi0gICAgLy8gU28gYmVmb3JlIGNhbGxpbmcgc2lnc3VzcGVuZCwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBpcyBkZWZlcnJlZC4gVGhpcyBl
bnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJlY3Vyc2l2ZWx5LgotICAg
IHNpZ3NldF90IGJsb2NrZWRTaWduYWxTZXQ7Ci0gICAgc2lnZmlsbHNldCgmYmxvY2tlZFNpZ25h
bFNldCk7Ci0gICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0LCBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lKTsKLSAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0KTsKLQotICAgIC8vIEFs
bG93IHJlc3VtZSBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgcmVzdW1lZC4KLSAg
ICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+c2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci19Ci0j
ZW5kaWYgLy8gVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLQog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCi11c2lu
ZyBUaHJlYWQgPSBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOwordXNpbmcgSlNUaHJlYWQgPSBNYWNo
aW5lVGhyZWFkczo6SlNUaHJlYWQ7CiAKIGNsYXNzIEFjdGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdl
cjsKIHN0YXRpYyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXImIGFjdGl2ZU1hY2hpbmVUaHJl
YWRzTWFuYWdlcigpOwpAQCAtMTk0LDQxICsxNDQsMTMgQEAgTWFjaGluZVRocmVhZHM6On5NYWNo
aW5lVGhyZWFkcygpCiAgICAgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUobV90aHJlYWRTcGVjaWZp
Y0Zvck1hY2hpbmVUaHJlYWRzKTsKIAogICAgIExvY2tIb2xkZXIgcmVnaXN0ZXJlZFRocmVhZHNM
b2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgZm9yIChUaHJlYWQqIHQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyB0OykgewotICAgICAgICBUaHJlYWQqIG5leHQgPSB0LT5uZXh0Owor
ICAgIGZvciAoSlNUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0OykgeworICAgICAg
ICBKU1RocmVhZCogbmV4dCA9IHQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0OwogICAgICAgICB0
ID0gbmV4dDsKICAgICB9CiB9CiAKLXN0YXRpYyBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSog
dGhyZWFkRGF0YSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZFNwZWNpZmlj
PE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhLCBDYW5CZUdDVGhyZWFkOjpUcnVlPj4gdGhyZWFk
RGF0YTsKLSAgICByZXR1cm4gdGhyZWFkRGF0YS5nZXQoKTsKLX0KLQotTWFjaGluZVRocmVhZHM6
OlRocmVhZDo6VGhyZWFkKFRocmVhZERhdGEqIHRocmVhZERhdGEpCi0gICAgOiBkYXRhKHRocmVh
ZERhdGEpCi17Ci0gICAgQVNTRVJUKHRocmVhZERhdGEpOwotfQotCi1UaHJlYWQqIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKQotewotICAgIHJldHVybiBu
ZXcgVGhyZWFkKHRocmVhZERhdGEoKSk7Ci19Ci0KLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVh
ZDo6b3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0Ci17Ci0jaWYg
T1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgIHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVh
ZCA9PSBvdGhlcjsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICByZXR1cm4gISFwdGhyZWFkX2Vx
dWFsKGRhdGEtPnBsYXRmb3JtVGhyZWFkLCBvdGhlcik7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3
YXkgdG8gY29tcGFyZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCiB2b2lk
IE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKIHsKICAgICBpZiAodGhyZWFkU3Bl
Y2lmaWNHZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKSkgewpAQCAtMjM5LDcg
KzE2MSw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZUZv
ckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkID0gbmV3IEpTVGhyZWFkKHRo
aXMpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhy
ZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011
dGV4KTsKQEAgLTI0OCwxMiArMTcwLDEyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJl
bnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVhZHMgPSB0aHJlYWQ7CiB9CiAKLVRocmVh
ZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKK0pTVGhy
ZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKQogewog
ICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIFBsYXRm
b3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAg
Zm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkID09IHBsYXRmb3JtVGhyZWFk
KQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgZm9yIChK
U1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSA9PSBpZCkKICAg
ICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQogCkBAIC0yODMsMjIgKzIwNSwyMSBAQCB2
b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWQodm9p
ZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgICAgIG1hY2hpbmVUaHJl
YWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpKTsKKyAgICAg
ICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElmRm91bmQoY3VycmVudFRocmVhZCgpKTsK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFkPgotdm9pZCBNYWNo
aW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRo
cmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoVGhyZWFkSWRl
bnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011
dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOwotICAgIGlmICgqdCA9
PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsKKyAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICBtX3JlZ2lzdGVyZWRU
aHJlYWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsKICAgICAgICAgZGVsZXRlIHQ7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsK
KyAgICAgICAgSlNUaHJlYWQqIGxhc3QgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgICAgICBm
b3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0OyB0OyB0ID0gdC0+bmV4dCkgewotICAg
ICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAgICAgICAgICBpZiAodC0+
dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAgICAgIGxhc3QtPm5leHQgPSB0LT5uZXh0
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzIwLDE4MiArMjQx
LDIyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRk
KGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3VycmVudFRocmVhZFN0YXRlLnN0YWNrT3Jp
Z2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKE1hY2hpbmVUaHJlYWRzKikKKyAgICA6IG5leHQobnVsbHB0cikKKyAgICAsIG1fdGhyZWFk
KFdURjo6VGhyZWFkOjpjdXJyZW50KCkpCiB7CiAgICAgYXV0byBzdGFja0JvdW5kcyA9IHd0ZlRo
cmVhZERhdGEoKS5zdGFjaygpOwotICAgIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3Jt
VGhyZWFkKCk7Ci0gICAgc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7Ci0gICAgc3Rh
Y2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgQVNTRVJU
KHBsYXRmb3JtVGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKLSAgICBib29sIGlzU3Vj
Y2Vzc2Z1bCA9Ci0gICAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBH
ZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksCi0gICAgICAgICAgICAmcGxh
dGZvcm1UaHJlYWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOwotICAg
IFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpICYmICFP
UyhEQVJXSU4pCi0gICAgdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkLnN0b3JlKHRoaXMpOwotCi0g
ICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25maWd1cmF0aW9uLgot
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplU2lnbmFsSGFuZGxlcjsKLSAgICBz
dGQ6OmNhbGxfb25jZShpbml0aWFsaXplU2lnbmFsSGFuZGxlciwgW10gewotICAgICAgICAvLyBJ
bnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIu
Ci0gICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRo
ZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9u
OwotICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBzaWdhZGRz
ZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLQotICAgICAgICBh
Y3Rpb24uc2Ffc2lnYWN0aW9uID0gcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lOwot
ICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKLSAgICAg
ICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDApOwotICAgIH0p
OwotCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgmbWFzayk7Ci0gICAgc2ln
YWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBwdGhyZWFkX3NpZ21h
c2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLQotICAgIHNlbV9pbml0KCZzZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MuICovIDAsIC8q
IEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwotI2VuZGlmCisgICAgbV9z
dGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKKyAgICBtX3N0YWNrRW5kID0gc3RhY2tC
b3VuZHMuZW5kKCk7CiB9CiAKLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0
YSgpCitzaXplX3QgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3RlcnMoSlNUaHJl
YWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0gICAgQ2xvc2VI
YW5kbGUocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1Mo
REFSV0lOKQotICAgIHNlbV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSNl
bmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsK
KyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdzKTsKIH0KIAotYm9vbCBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAg
IGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQocGxhdGZvcm1UaHJlYWQpOwot
ICAgIHJldHVybiByZXN1bHQgPT0gS0VSTl9TVUNDRVNTOwotI2VsaWYgT1MoV0lORE9XUykKLSAg
ICBib29sIHRocmVhZElzU3VzcGVuZGVkID0gKFN1c3BlbmRUaHJlYWQocGxhdGZvcm1UaHJlYWRI
YW5kbGUpICE9IChEV09SRCktMSk7Ci0gICAgQVNTRVJUKHRocmVhZElzU3VzcGVuZGVkKTsKLSAg
ICByZXR1cm4gdGhyZWFkSXNTdXNwZW5kZWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSAhPSBwbGF0Zm9ybVRocmVh
ZCwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJlbnQgdGhyZWFk
IGl0c2VsZi4iKTsKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9y
IHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0g
ICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4K
LSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFk
cyBBIGFuZCBCLgotICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBh
dHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFu
ZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCi0gICAgICAgIC8vIElu
IHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAgICAgTG9ja0hvbGRlciBs
b2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoIXN1c3BlbmRDb3VudCkgewotICAg
ICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9zaWdxdWV1
ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwgaGFuZGxl
ci4KLSAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0Zm9ybXMs
IGxpa2UgTGludXguCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBzdG9y
ZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNpZ25hbCBo
YW5kbGVyLgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwot
ICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlv
biBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRv
bmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1vcnlfb3JkZXJf
cmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytzdXNwZW5kQ291bnQ7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3BlbmQgdGhyZWFk
cyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6cmVzdW1lKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFkX3Jlc3VtZShw
bGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIFJlc3VtZVRocmVhZChwbGF0
Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgewotICAgICAgICAv
LyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVk
IGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxT
aWduYWxMb2NrKTsKLSAgICAgICAgaWYgKHN1c3BlbmRDb3VudCA9PSAxKSB7Ci0gICAgICAgICAg
ICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRo
ZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
IGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBp
dHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KLSAgICAgICAgICAgIC8vIFRoZXJlIGFy
ZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Ig
c3VzcGVuZCBhbmQgcmVzdW1lLgotICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWdu
YWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgot
ICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3Bl
bmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUg
dXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9j
YWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgot
ICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3Bl
bmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgICAgICBpZiAocHRo
cmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JD
SCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZW1fd2FpdCgmc2VtYXBo
b3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5z
dXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhl
IGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRlZC5zdG9yZShm
YWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLS1z
dXNwZW5kQ291bnQ7Ci0gICAgfQotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHJlc3VtZSB0
aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi1zaXplX3QgTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJlZ2lz
dGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzJiBy
ZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShYODYpCi0gICAg
dW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsKLSAgICB0aHJl
YWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUo
WDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09V
TlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2
NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQUENfVEhSRUFE
X1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhS
RUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQ
UENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZv
ciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5zaWduZWQgdXNl
cl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vsc2UKLSNlcnJv
ciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVybl90IHJlc3Vs
dCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVhZF9zdGF0
ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1Mp
IHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9Q
UkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYXZhU2NyaXB0
IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVy
bmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5uaW5n
IGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7Ci0gICAg
ICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6ZW9mKHVpbnRw
dHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQotICAgIHJlZ3Mu
Q29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MOwotICAgIEdl
dFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAgICByZXR1cm4g
c2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNf
XykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsK
LSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMpOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJpYnV0ZSk7Ci0j
aWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BFTkJTRCkKLSAg
ICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAgcHRocmVhZF9h
dHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgotI2Vs
c2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVyIFBP
U0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwotICAgIHB0aHJl
YWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgot
ICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aHJlYWQgcmVn
aXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi12b2lkKiBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAordm9pZCogTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB7
CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoKE9TKEZSRUVCU0QpIHx8IGRlZmlu
ZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0
OjpzdGFja1BvaW50ZXIocmVncyk7CkBAIC01MTksNyArMjgwLDcgQEAgdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKIH0KIAog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhy
ZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBP
UyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJ
QkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBA
IC01MjgsNyArMjg5LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lz
dGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAor
dm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9p
bnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJF
RUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAtNTM3LDcgKzI5OCw3IEBAIHZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNv
bnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lz
dGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJl
Z2lzdGVyczo6bGxpbnRQQygpIGNvbnN0CiB7CiAgICAgLy8gTExJbnQgdXNlcyByZWdUNCBhcyBQ
Qy4KICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpCkBAIC01NDgsMTYgKzMwOSw2IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRz
OjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogfQogI2VuZGlmIC8vIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0
YTo6ZnJlZVJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAg
ICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0
ZXJzLnJlZ3M7Ci0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJ
TikgJiYgISgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklU
KSkKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmcmVncy5hdHRyaWJ1dGUpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0ocmVncyk7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSBpbnQgb3NS
ZWRab25lQWRqdXN0bWVudCgpCiB7CiAgICAgaW50IHJlZFpvbmVBZGp1c3RtZW50ID0gMDsKQEAg
LTU3MywxNyArMzI0LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQo
KQogICAgIHJldHVybiByZWRab25lQWRqdXN0bWVudDsKIH0KIAotc3RkOjpwYWlyPHZvaWQqLCBz
aXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpjYXB0dXJlU3RhY2sodm9pZCogc3Rh
Y2tUb3ApCitzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWlu
dGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tCYXNlKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrQmFzZSk7CiAgICAgY2hhciogZW5kID0g
Yml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQq
KT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrVG9wKSkpOwogICAgIEFTU0VSVChi
ZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5kV2l0aFJlZFpvbmUgPSBlbmQgKyBvc1JlZFpv
bmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKSA9
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKTsKIAotICAgIGlm
IChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQotICAgICAgICBlbmRXaXRoUmVkWm9uZSA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0VuZCk7CisgICAgaWYgKGVuZFdpdGhSZWRa
b25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJldF9j
YXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVuZFdp
dGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhSZWRa
b25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzM2Nyw5IEBAIHN0YXRpYyB2b2lkIGNvcHlNZW1vcnko
dm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBzaXplKQogLy8gc2lnbmlmaWNhbnQg
cGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayBpcyBvbmx5IGNhbGxl
ZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAvLyBvcGVyYXRpb24uIEFzIHRoZSBoZWFwIGlz
IGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRoZSBzdGFjayB0aGUgcGVyZm9ybWFuY2UgaGl0
IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNr
KFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBz
aXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJl
YWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkK
IHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAgSlNUaHJlYWQ6OlJlZ2lz
dGVycyByZWdpc3RlcnM7CiAgICAgc2l6ZV90IHJlZ2lzdGVyc1NpemUgPSB0aHJlYWQtPmdldFJl
Z2lzdGVycyhyZWdpc3RlcnMpOwogICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBzdGFjayA9
IHRocmVhZC0+Y2FwdHVyZVN0YWNrKHJlZ2lzdGVycy5zdGFja1BvaW50ZXIoKSk7CiAKQEAgLTYz
MSw4ICszODIsNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
ayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplXwogICAgIGlmIChjYW5Db3B5KQog
ICAgICAgICBjb3B5TWVtb3J5KHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXIpICsgKnNpemUsIHN0
YWNrLmZpcnN0LCBzdGFjay5zZWNvbmQpOwogICAgICpzaXplICs9IHN0YWNrLnNlY29uZDsKLQot
ICAgIHRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogfQogCiBib29sIE1hY2hpbmVU
aHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2
b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQpAQCAtNjQ0LDM2ICsz
OTMsMzQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKIAogICAgICpzaXplID0gMDsKIAotICAg
IFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7
CisgICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IGN1cnJlbnRUaHJlYWQoKTsKICAgICBpbnQgbnVt
YmVyT2ZUaHJlYWRzID0gMDsgLy8gVXNpbmcgMCB0byBkZW5vdGUgdGhhdCB3ZSBoYXZlbid0IGNv
dW50ZWQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHlldC4KICAgICBpbnQgaW5kZXggPSAxOwotICAg
IFRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKKyAgICBKU1RocmVhZCogdGhy
ZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAotICAgIFRocmVhZCogcHJldmlvdXNUaHJlYWQg
PSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJl
YWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRocmVhZC0+c3VzcGVuZCgpOworICAg
IEpTVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51bGxwdHI7CisgICAgZm9yIChKU1RocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7CisgICAgICAg
IGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAjaWYgT1MoREFSV0lOKQotICAgICAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgIGlm
ICghbnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVGhyZWFkKiBj
b3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRocmVhZDsgY291bnRl
ZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCisgICAgICAgICAgICAgICAgICAgIGZvciAo
SlNUaHJlYWQqIGNvdW50ZWRUaHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhy
ZWFkOyBjb3VudGVkVGhyZWFkID0gY291bnRlZFRocmVhZC0+bmV4dCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mVGhyZWFkcysrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBSZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQg
dGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3IgbG9nZ2luZy4KLSAgICAgICAgICAgICAgICBr
ZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVh
ZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKwor
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwog
CiAgICAgICAgICAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLAotICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdl
IGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhy
ZWFkIFslZC8lZDogJXBdIHBsYXRmb3JtVGhyZWFkICVwLiIsCi0gICAgICAgICAgICAgICAgICAg
IGVycm9yLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSkpOworICAgICAgICAgICAgICAgICAgICAi
SmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJl
YWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIGlkICVwLiIsCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5lcnJvcigpLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+dGhyZWFkSUQoKSkpOwogCiAgICAgICAgICAg
ICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVhZCBvbiB0aGUgdGhyZWFkc1RvQmVEZWxldGVk
IGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBkZWxldGUgaXQgaGVyZSBi
ZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVyCiAgICAgICAgICAgICAgICAgLy8gdGhyZWFk
cywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRpbmcgdGhlIEMgaGVhcCBsb2NrIHdoaWNoCiAg
ICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3IgZGVsZXRpbmcgdGhlIGludmFsaWQgdGhyZWFk
LiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAgICAgICAgIC8vIGRlZmVyIHRoZSBkZWxldGlv
biB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBhbGwgdGhyZWFkcy4KLSAgICAgICAgICAgICAg
ICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CisgICAgICAgICAgICAgICAgSlNU
aHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgICAgICAgICAgdGhyZWFk
LT5uZXh0ID0gdGhyZWFkc1RvQmVEZWxldGVkOwogICAgICAgICAgICAgICAgIHRocmVhZHNUb0Jl
RGVsZXRlZCA9IHRocmVhZDsKIApAQCAtNjg3LDI1ICs0MzQsMjUgQEAgYm9vbCBNYWNoaW5lVGhy
ZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCogYnVmZmUKICNlbHNlCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZUaHJlYWRz
KTsKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShwcmV2aW91c1RocmVhZCk7Ci0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBwcmV2aW91
c1RocmVhZCA9IHRocmVhZDsKICAgICAgICAgdGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgIH0K
IAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7
IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCAhPSBwbGF0Zm9y
bVRocmVhZCkKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBpZiAodGhyZWFkLT50
aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2sodGhy
ZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5l
eHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChK
U1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAg
ICAgICAgICAgIHRocmVhZC0+cmVzdW1lKCk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRo
cmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKLSAgICAgICAgVGhyZWFkKiBu
ZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IHRo
cmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJl
YWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVh
ZCA9IG5leHRUaHJlYWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YWNoaW5lU3RhY2tNYXJrZXIuaAppbmRleCBkMTk2ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3
OTk0NDg3ZjIyLi45MTk3YzQ0MDhjZTJmZDRlZTZhYTNkMTRhN2M2OWU2ZjhjYTEwOTQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAt
MjIsMjUgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaHJlYWQuaCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNp
ZmljLmg+CiAKLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lO
KQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcg
c2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRfdCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUg
b24gRnJlZUJTRC4KLS8vIFRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1D
VVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2FuIGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVC
U0QgMTAueCBnb2VzIEVPTC4KLS8vIGh0dHBzOi8vYnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9z
aG93X2J1Zy5jZ2k/aWQ9MjA3MDc5Ci0jaWYgT1MoRlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4
dC5oPgotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9j
a1NldDsKQEAgLTY0LDEzICs1MSwxMCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEN1cnJlbnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0
byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11
bHRpcGxlIHRocmVhZHMuCiAKLSAgICBjbGFzcyBUaHJlYWREYXRhIHsKKyAgICBjbGFzcyBKU1Ro
cmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAg
ICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+VGhyZWFkRGF0YSgpOwotCi0gICAgICAgIHN0
YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIEpTVGhy
ZWFkKE1hY2hpbmVUaHJlYWRzKik7CiAKICAgICAgICAgc3RydWN0IFJlZ2lzdGVycyB7CiAgICAg
ICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXIoKSBjb25zdDsKQEAgLTc5LDg0ICs2Myw0MCBAQCBj
bGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgICAgICB2b2lkKiBpbnN0cnVjdGlvblBvaW50
ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25zdDsKICNlbmRpZiAv
LyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICAKLSNpZiBPUyhEQVJXSU4p
IHx8IE9TKFdJTkRPV1MpCi0gICAgICAgICAgICB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IE1h
Y2hpbmVDb250ZXh0OjpQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIChPUyhGUkVFQlNEKSB8fCBk
ZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICB1c2luZyBQbGF0
Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgICAg
ICAgICBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewotICAgICAgICAgICAgICAgIHB0aHJlYWRf
YXR0cl90IGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIH07Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB0
aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLQotICAgICAg
ICAgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKKyAgICAgICAgICAgIFdURjo6UGxhdGZvcm1S
ZWdpc3RlcnMgcmVnczsKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHN1c3BlbmQoKTsKLSAg
ICAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3Rl
cnMmKTsKLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYpOworICAgICAgICBF
eHBlY3RlZDx2b2lkLCBUaHJlYWQ6OlBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCkgeyBy
ZXR1cm4gbV90aHJlYWQtPnN1c3BlbmQoKTsgfQorICAgICAgICB2b2lkIHJlc3VtZSgpIHsgbV90
aHJlYWQtPnJlc3VtZSgpOyB9CisgICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJz
JiByZWdzKTsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2
b2lkKiBzdGFja1RvcCk7CiAKLSAgICAgICAgUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQ7
Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogc3RhY2tFbmQ7Ci0jaWYg
T1MoV0lORE9XUykKLSAgICAgICAgSEFORExFIHBsYXRmb3JtVGhyZWFkSGFuZGxlOwotI2VsaWYg
VVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgICAgICBzZW1fdCBzZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lOwotICAgICAgICBtY29udGV4dF90IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0
OwotICAgICAgICBpbnQgc3VzcGVuZENvdW50IHsgMCB9OwotICAgICAgICBzdGQ6OmF0b21pYzxi
b29sPiBzdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsKLQotICAgIGNsYXNzIFRo
cmVhZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBUaHJlYWQo
VGhyZWFkRGF0YSopOwotCi0gICAgcHVibGljOgotICAgICAgICB1c2luZyBSZWdpc3RlcnMgPSBU
aHJlYWREYXRhOjpSZWdpc3RlcnM7Ci0KLSAgICAgICAgc3RhdGljIFRocmVhZCogY3JlYXRlRm9y
Q3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQbGF0Zm9y
bVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUGxh
dGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQot
Ci0gICAgICAgIGJvb2wgc3VzcGVuZCgpIHsgcmV0dXJuIGRhdGEtPnN1c3BlbmQoKTsgfQotICAg
ICAgICB2b2lkIHJlc3VtZSgpIHsgZGF0YS0+cmVzdW1lKCk7IH0KLSAgICAgICAgc2l6ZV90IGdl
dFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgcmV0dXJuIGRhdGEtPmdldFJlZ2lzdGVycyhy
ZWdzKTsgfQotICAgICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IGRh
dGEtPmZyZWVSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXpl
X3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkgeyByZXR1cm4gZGF0YS0+Y2FwdHVyZVN0
YWNrKHN0YWNrVG9wKTsgfQotCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBwbGF0Zm9y
bVRocmVhZCgpIHsgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkOyB9Ci0gICAgICAgIHZvaWQq
IHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrQmFzZTsgfQotICAgICAgICB2
b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrRW5kOyB9CisgICAgICAg
IFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFk
LT5pZCgpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
Y2tCYXNlOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyByZXR1cm4gbV9zdGFj
a0VuZDsgfQogCi0gICAgICAgIFRocmVhZCogbmV4dDsKLSAgICAgICAgVGhyZWFkRGF0YSogZGF0
YTsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQ7CisgICAgICAgIFJlZjxXVEY6OlRocmVhZD4gbV90
aHJlYWQ7CisgICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOworICAgICAgICB2b2lkKiBtX3N0YWNr
RW5kOwogICAgIH07CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9yZWdpc3RlcmVk
VGhyZWFkc011dGV4OyB9Ci0gICAgVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXguaXNMb2Nr
ZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhyZWFkKiBtYWNoaW5l
VGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9CisgICAgSlNU
aHJlYWQqIG1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCk7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJS
b3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRlJik7CiAKLSAgICB2
b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCosIHZvaWQqLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCopOworICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJlYWQq
LCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29sIHRyeUNvcHlPdGhl
clRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgcmVt
b3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFk
PgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCk7CisgICAgdm9p
ZCByZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAgICAgTG9jayBtX3Jl
Z2lzdGVyZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwor
ICAgIEpTVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdURjo6VGhyZWFkU3BlY2lm
aWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgzM2QyZDIzMmI4YTljZDZm
M2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDljZTcyMTMzYzQxY2RkMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01OCw3ICs1OCw3IEBAIEF0
b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNTdGF0czo6SUNTdGF0cygp
CiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAgW3RoaXNdICgpIHsKICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04NCw3ICs4NCw3IEBAIElD
U3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CiAgICAg
fQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkKTsKKyAgICBtX3Ro
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0YXRzOjphZGQoY29uc3Qg
SUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lD
U3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGU3NWNm
ZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2UxZTkyY2U5N2RkMWQ5NTA4
OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBA
IC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRlOgogCiAgICAgU3BlY3Ry
dW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBt
X3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBMb2NrIG1fbG9jazsK
ICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0b3AgeyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA1OWI2MjczZGVhYjFkZDU5ZmQ3NTk0MWNkNmU2
MTE0OTI4NzkyNDcwLi43NWFjNjBkOWIzNDYwODFjYjY3MDY5ZWRlZDM1Mjg1NDNmYmQzZDg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRlKiBleGVjKQog
ICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29sIGRpZFN0YXJ0ID0gZmFs
c2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisg
ICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0Mg
QWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9jaywgJmRpZFN0YXJ0Q29u
ZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1hbmRMaW5lIGNvbW1hbmRM
aW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhyZWFkLT5kZXRhY2go
KTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZGlkU3RhcnRM
b2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0YXJ0VGltZW91dFRocmVh
ZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IHRpbWVvdXQgc3RyaW5n
IGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgIiBi
dXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQuXG4iKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRocmVhZE1haW4sIDAsICJq
c2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKHRpbWVvdXRU
aHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIxZmUxMjdlOGI3MzFmYjUz
YjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUyNTRhOGUxZWYxM2RhNWM0
MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTEw
OSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBsb2NrQ291bnQpCiAgICAg
ICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRocmVhZCA9IGN1cnJlbnRU
aHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpOwogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVhZCA9IHRydWU7CiAgICAg
QVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5o
CmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5ZGJlNzQuLjFhY2E0Yjlh
N2JiNGRjYWYwNGRmMTIxNzEwOTcyMGVjOGUyZDY4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3MgSlNMb2NrIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0qIHZtKCkgeyByZXR1cm4g
bV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVh
ZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFkPj4gb3duZXJUaHJlYWQo
KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJlYWQpCiAgICAgICAgICAg
ICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsgcmV0dXJuIG1faGFz
T3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7IH0KKyAgICBi
b29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9oYXNPd25lclRocmVh
ZCAmJiBtX293bmVyVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsgfQogCiAgICAgdm9p
ZCB3aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBjbGFzcyBKU0xvY2sg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAgLy8gZGlmZmVyZW50
IHRocmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8gcmFjZXMuCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkwNDIjYzYKICAg
ICBib29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRocmVhZElkZW50aWZpZXIg
bV9vd25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVyVGhyZWFkOwogICAgIGlu
dHB0cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKICAgICBi
b29sIG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTQxOTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRp
ZgotCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNp
bmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPG1h
Y2gvdGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJXSU4pCi10eXBlZGVmIG1h
Y2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykKLXR5cGVkZWYgRFdP
UkQgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10eXBlZGVmIHB0aHJlYWRf
dCBQbGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0gICAgCi1pbmxpbmUgUGxh
dGZvcm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0g
ICAgcmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9zZWxmKCkpOwotI2VsaWYg
T1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7Ci0jZWxpZiBVU0Uo
UFRIUkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2VuZGlmCi19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4NDkzYjMzYmM4OWZlM2Zh
ZDk4YTlkLi42N2YyMGQ5MmNlY2RmMGFiM2JmZjdmNmZkMTI2NjAwYWExNWJmMWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcApA
QCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAgICBib29sIGlzVmFsaWRG
cmFtZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVpbnQ4X3QqIGZwQ2FzdCA9
IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZvciAoTWFjaGluZVRocmVh
ZHM6OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xp
c3RIZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+
bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0g
bV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVh
ZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewogICAgICAgICAgICAg
dWludDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRocmVhZC0+c3RhY2tC
YXNlKCkpOwogICAgICAgICAgICAgdWludDhfdCogc3RhY2tMaW1pdCA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPih0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3RhY2tCYXNlKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGlu
Z1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpCiAgICAgLCBt
X3dlYWtSYW5kb20oKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9wd2F0Y2gpKQogICAg
ICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKE9wdGlvbnM6OnNh
bXBsZUludGVydmFsKCkpKQotICAgICwgbV90aHJlYWRJZGVudGlmaWVyKDApCisgICAgLCBtX3Ro
cmVhZChudWxscHRyKQogICAgICwgbV9qc2NFeGVjdXRpb25UaHJlYWQobnVsbHB0cikKICAgICAs
IG1faXNQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2lzU2h1dERvd24oZmFsc2UpCkBAIC0zMDAsMTEg
KzMwMCwxMSBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkp
OwogCi0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBwcm9maWxlciA9IHRo
aXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJqc2Muc2FtcGxpbmct
cHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0gewogICAgICAg
ICBwcm9maWxlci0+dGltZXJMb29wKCk7CiAgICAgfSk7CiB9CkBAIC0zNDQsNyArMzQ0LDcgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgTG9ja0hvbGRlciBjb2RlQmxvY2tTZXRM
b2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tI
b2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5n
bGV0b24oKS5nZXRMb2NrKCkpOwogCi0gICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhl
Y3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGF1dG8gZGlkU3VzcGVuZCA9IG1fanNj
RXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CiAg
ICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdlIGNhbid0
IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCiAgICAgICAgICAg
ICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQsMTMgKzM1NCwxMiBA
QCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJ
bnQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVy
czsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVycyBy
ZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdldFJlZ2lz
dGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFtZSA9IHJlZ2lzdGVy
cy5mcmFtZVBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0aWNfY2Fz
dDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9
IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBsbGludFBD
ID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRo
cmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdyZSBwYXJz
aW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgKaW5kZXggYjQ0YTNiYTQ3ZjllNjc2OGFkNDM3YmIxOGUwYThhYmM3OTVi
ZDZjZi4uMDQzZGFkYmE0MDcwYjZmOTE4MDdiZDRjYTEzMjY5NGMzY2ViYWM0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaApAQCAtMTk1
LDggKzE5NSw4IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
ZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsKICAgICBMb2NrIG1f
bG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllcjsKLSAgICBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3RocmVhZDsKKyAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIG1fanNjRXhlY3V0
aW9uVGhyZWFkOwogICAgIGJvb2wgbV9pc1BhdXNlZDsKICAgICBib29sIG1faXNTaHV0RG93bjsK
ICAgICBib29sIG1fbmVlZHNSZXBvcnRBdEV4aXQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKaW5kZXggOTlhMjZmY2ExYzIxZjNkMDQ0MDQ3M2I0NDJlODlkYzlhNDk1ZjQ2
ZS4uZTk3YzMxODVmYzZmMmM2Mjg0YWU3MWJlYjkwNWMwMmUzNDlhNzRmYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCkBAIC02NTksNyArNjU5LDcgQEAgY2xhc3MgVk0gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+
IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgbG9nRXZlbnQoQ29kZUJs
b2NrKiwgY29uc3QgY2hhciogc3VtbWFyeSwgY29uc3QgRnVuYyYgZnVuYyk7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4g
bV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhy
ZWFkPj4gb3duZXJUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2stPm93bmVyVGhyZWFk
KCk7IH0KIAogICAgIFZNVHJhcHMmIHRyYXBzKCkgeyByZXR1cm4gbV90cmFwczsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDUyNzYzZjg1M2Q0NjNi
NzJmMzNlNDY0YjdiNWE1OWQwMTE5MzhmNjkuLjI3MmM0ZGVmYTg1NWZjMzliMGNkNDEwMWU1ZTdl
NGIyYmRjMGRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
CkBAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGljIEV4cGVjdGVkPHN0ZDo6cGFpcjxWTSosIFN0YWNr
Qm91bmRzPiwgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWMKICAgICAgICAgICAg
IHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3RvclN0YXR1czo6Q29udGludWU7IC8vIFRyeSBuZXh0
IFZNLgogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiB0
aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNMb2Nr
ZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hp
bmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RI
ZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tCYXNlKCkpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAg
IGlmIChzdGFja1BvaW50ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBzdGFja1BvaW50ZXIg
Pj0gdGhyZWFkLT5zdGFja0VuZCgpKSB7CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBWTVRyYXBz
OjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0gKm1fdm07CiAgICAg
ICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOwogICAg
ICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzaWdu
YWxUaHJlYWQob3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLCBTSUdVU1IxKTsKKyAgICAgICAg
ICAgICAgICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChTSUdVU1IxKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDkzLDcgKzQ5Myw3IEBA
IHZvaWQgVk1UcmFwczo6ZmlyZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKICAg
ICAgICAgLy8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KICAgICAgICAgUmVmUHRyPFNpZ25h
bFNlbmRlcj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2bSgpLCBldmVudFR5
cGUpKTsKICAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7Ci0gICAgICAgIGNy
ZWF0ZVRocmVhZCgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBbc2VuZGVyXSB7Cisg
ICAgICAgIFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5nLnRocmVhZCIsIFtz
ZW5kZXJdIHsKICAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwogICAgICAgICB9KTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNThmMTliNTZk
MzNjYjg4YTZmYjQ5ZDZlNWYzYjYwOTc4NmJjMGNjLi43NDE0OGE4MDE0YjJlZTBjZTUxMTI2NmNi
YTRhOGE3NGVlZDI2ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTMyNSw4ICszMjUsOCBAQAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovOyB9OwogCQlBOEE0
NzQ0NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
U3RyaW5nLmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaCAqLzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZEhvbGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhy
ZWFkcy5jcHAgKi87IH07CisJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi87
IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzIxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLzsgfTsKIAkJ
QThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzM1MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi87IH07CkBAIC03MjgsOCArNzI4LDgg
QEAKIAkJQThBNDczMkQxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdURlN0cmluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0
NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzExNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJl
YWRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzMzE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRocmVhZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzNTE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQcmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMTY0LDggKzExNjQsOCBAQAogCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMy
MSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAw
N0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8sCi0JCQkJQThBNDczMzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovLAotCQkJCUE4
QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgg
Ki8sCisJCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRz
LmNwcCAqLywKKwkJCQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRo
cmVhZHMuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNw
cCAqLywKIAkJCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8sCiAJ
CQkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLywK
QEAgLTE2MTgsNyArMTYxOCw3IEBACiAJCQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRl
eHRCcmVha0l0ZXJhdG9ySUNVLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVC
MDA0MTIzRkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0QjE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0RDE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLywKQEAgLTE4NDMsNyArMTg0Myw3IEBACiAJCQkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzdG
MUQzMDc4REEwMEY1RkExNiAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQzE4MUM5NjFEMzA4MDBBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5h
bElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4
QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQ
dGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0Yg
LyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAgYi9Tb3VyY2Uv
V1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcAppbmRleCBjYjFkMTAxZTg1NjUy
OWU4YWFlYTZhYmY2MGVjMzhlYTBiOGRkZTcyLi40YzNiZDU0ZTM5Mjg3NWM2NTU3NjYyNzIwZGI4
YzBiOTlhYmMzYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9u
U3BlZWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRU
ZXN0LmNwcApAQCAtNzksMTQgKzc5LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAgICBDb25kaXRpb25U
eXBlIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlvblR5cGUgZnVsbENvbmRpdGlvbjsKIAot
ICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1lclRocmVhZHM7Ci0gICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRo
cmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1
Y2VyVGhyZWFkczsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7CiAgICAgTG9ja1R5
cGUgcmVjZWl2ZWRMb2NrOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVy
czsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBj
cmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3Jl
YXRlKAogICAgICAgICAgICAgIkNvbnN1bWVyIHRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkg
ewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBydW5U
ZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1
bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUs
ICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50
KCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVl
ID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCks
ICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRD
b250aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSAmJiBxdWV1
ZS5pc0VtcHR5KCkpCkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgY29u
c3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQpOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQg
aSA9IG51bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIlByb2R1Y2VyIFRocmVhZCIsCiAgICAg
ICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lk
IHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENvbmRpdGlvbiwgbG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBw
cm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGlu
dWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJy
ZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGlu
dWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUo
KSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUu
c2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgbXVzdE5vdGlmeSA9IHF1ZXVlLmlzRW1wdHkoKTsKQEAg
LTEzOCwxMSArMTM4LDExIEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgbm90
aWZ5KGVtcHR5Q29uZGl0aW9uLCBtdXN0Tm90aWZ5KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlm
aWVyKTsKKyAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQpOwogICAgIH0KIAot
ICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJl
YWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsK
KyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+JiB0aHJlYWQgOiBwcm9kdWNlclRocmVhZHMpCisgICAg
ICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPExvY2tUeXBlPiBsb2NrZXIobG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3Mv
TG9ja0ZhaXJuZXNzVGVzdC5jcHAKaW5kZXggZjA4MzIxYzBmNjg4MzY1MzVkODNjYjZiYzc1MTE4
NDhiYjUyZDk0Zi4uNjhjZTg0YzQ4YTNmZDRjOGY4MzViYTA5YWE2MWE1MDcyMzc2Nzk3MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCisrKyBi
L1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcApAQCAtNjIsNyArNjIs
NyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAgICAgIExvY2tUeXBlIGxvY2s7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZFtdPiBjb3VudHMgPSBzdGQ6Om1ha2VfdW5p
cXVlPHVuc2lnbmVkW10+KG51bVRocmVhZHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhy
ZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlm
aWVyW10+KG51bVRocmVhZHMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVmUHRyPFRocmVh
ZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRyPFRocmVhZD5bXT4obnVtVGhy
ZWFkcyk7CiAgICAgCiAgICAgICAgIHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKICAg
ICAKQEAgLTcwLDcgKzcwLDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzOyB0aHJlYWRJbmRleC0tOykgewog
ICAgICAgICAgICAgY291bnRzW3RocmVhZEluZGV4XSA9IDA7Ci0gICAgICAgICAgICB0aHJlYWRz
W3RocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFk
SW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgIkJlbmNobWFyayBUaHJl
YWQiLAogICAgICAgICAgICAgICAgIFsmLCB0aHJlYWRJbmRleF0gKCkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1pY3Jvc2Vjb25kc0luQ3JpdGljYWxTZWN0aW9uKSB7CkBAIC0xMDcsNyAr
MTA3LDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgCiAgICAgICAgIGxvY2sudW5sb2NrKCk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzOyB0aHJlYWRJ
bmRleC0tOykKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhy
ZWFkSW5kZXhdKTsKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0Rm9yQ29t
cGxldGlvbigpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJr
cy9Mb2NrU3BlZWRUZXN0LmNwcCBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0
LmNwcAppbmRleCA1NDVkMmUwYjA0ODhmMzM4OTRhNTk2ODhmZDkxYjBkM2EzODdjY2EyLi44MmQz
OWY4N2M2YzcwNmMxOWNlNGYyOTRjOWI2MWIyYWJiOGE1OThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tTcGVlZFRlc3QuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsg
ewogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdpdGhQYWRkaW5nPExvY2tUeXBlPltd
PiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8TG9ja1R5cGU+W10+KG51bVRo
cmVhZEdyb3Vwcyk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxkb3VibGU+
W10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxXaXRoUGFkZGluZzxkb3VibGU+W10+KG51bVRo
cmVhZEdyb3Vwcyk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+
IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFk
R3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJl
ZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZnB0cjxUaHJlYWQ+
W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAKICAgICAgICAgdm9s
YXRpbGUgYm9vbCBrZWVwR29pbmcgPSB0cnVlOwogCkBAIC05MCw3ICs5MCw3IEBAIHN0cnVjdCBC
ZW5jaG1hcmsgewogICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0udmFsdWUgPSAw
OwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Bl
ckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIHRocmVhZHNbdGhyZWFk
R3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRo
cmVhZCgKKyAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJl
YWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAg
ICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAogICAgICAgICAgICAgICAgICAgICBbdGhyZWFk
R3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsICZrZWVwR29pbmcsICZudW1JdGVyYXRpb25zTG9j
aywgJm51bUl0ZXJhdGlvbnNdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBs
b2NhbFdvcmQgPSAwOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAg
ICAgICBrZWVwR29pbmcgPSBmYWxzZTsKICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJl
YWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5k
ZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVh
ZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKIAogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVh
ZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCmluZGV4IDM4N2M2ZTI1
ZDcwNjI5YTgzYWE2MWNkNmE2YTg3NDllYTA3YzdmMDAuLjQxMGJmYjU3NDQyNWE1N2M1YmRmYmQw
ZTc5ZmI5MTliMTdkYWQyODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcApAQCAtMTU1
LDcgKzE1NSw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBBYnN0cmFjdExv
Y2tlciYpCiAgICAgCiAgICAgbV9oYXNVbmRlcmx5aW5nVGhyZWFkID0gdHJ1ZTsKICAgICAKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICBSZWZQdHI8VGhy
ZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIldURjo6QXV0b21hdGljVGhy
ZWFkIiwKICAgICAgICAgWz1dICgpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMjIw
LDcgKzIyMCw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBBYnN0cmFjdExv
Y2tlciYpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IFdvcmtSZXN1
bHQ6OkNvbnRpbnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhy
ZWFkKHRocmVhZCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBBdXRvbWF0aWNU
aHJlYWQ6OnRocmVhZERpZFN0YXJ0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggYTM0MTkxMTlj
YTcxZWRkZjk1NTNjYjMwYTc2YTJhODU1ZmViYTJjNy4uYjUwYmJiYzNiZjNhZDJiMWZkZDEzNDUz
NDg2NTRhYjFkNDE4Y2JjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEyOCw3ICsxMjgsNiBA
QCBzZXQoV1RGX0hFQURFUlMKICAgICBTdHJpbmdFeHRyYXMuaAogICAgIFN0cmluZ1ByaW50U3Ry
ZWFtLmgKICAgICBTeXN0ZW1UcmFjaW5nLmgKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmgKICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZC5oCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCkBAIC0zMjksMTYgKzMyOCwxNCBAQCBsaXN0KEFQUEVORCBXVEZfTElC
UkFSSUVTCiBpZiAoV0lOMzIpCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAg
T1NBbGxvY2F0b3JXaW4uY3BwCisgICAgICAgIFRocmVhZEhvbGRlcldpbi5jcHAKICAgICAgICAg
VGhyZWFkU3BlY2lmaWNXaW4uY3BwCiAgICAgICAgIFRocmVhZGluZ1dpbi5jcHAKICAgICApCiBl
bHNlICgpCi0gICAgbGlzdChBUFBFTkQgV1RGX0hFQURFUlMKLSAgICAgICAgVGhyZWFkSWRlbnRp
ZmllckRhdGFQdGhyZWFkcy5oCi0gICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgICAgIE9TQWxsb2NhdG9yUG9zaXguY3BwCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwCisgICAgICAgIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcAogICAgICAgICBU
aHJlYWRpbmdQdGhyZWFkcy5jcHAKICAgICApCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApp
bmRleCAwMjQ5NTQ0YzUxOGU4MmFmZjE3MDVkZTE5ZWM5NjVhYjk4YjFkMTA2Li4zNGI5NDI1NTVh
YjU2MTgzMjEwMThiNGYwNzkwZjI4MjUwYTdkY2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAt
MTg2LDkgKzE4Niw5IEBAIGJvb2wgaXNNYWluVGhyZWFkKCkKICNlbmRpZgogCiAjaWYgIVVTRShX
RUJfVEhSRUFEKQotYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJZCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkKQogewotICAgIHJldHVybiB0aHJlYWRJZCA9PSBj
dXJyZW50VGhyZWFkKCk7CisgICAgcmV0dXJuIHRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CiB9
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oIGIvU291
cmNlL1dURi93dGYvTWFpblRocmVhZC5oCmluZGV4IDI1ZDhmNzY2ZGNmYjg3OWExZDc2ODNjZTU1
MDhkZDhkN2YxZDc3YWYuLjBlNzhlOGU1MWFiZThkOTU1NDcyYzc5ZGQzNDY5MmYxNTQ2ZGIxYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9NYWluVGhyZWFkLmgKQEAgLTM0LDEzICszNCwxMiBAQAogI2luY2x1ZGUgPHN0ZGludC5o
PgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFBy
aW50U3RyZWFtOwogCi10eXBlZGVmIHVpbnQzMl90IFRocmVhZElkZW50aWZpZXI7Ci0KIC8vIE11
c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhh
bmRsZXIuaAppbmRleCBkZmRkZjBhOTU1NTJkYjNlMmFlY2ZlZjRlYzE2ZWZiNWM2ZTZjN2JkLi40
MTI4ZjVjZDcxYTdkYjJmNGZkNzAzMjk1M2YwYzNmMWY1MDBkMTMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXIuaApAQCAtMTczLDcgKzE3Myw3IEBAIGNsYXNzIE1lbW9yeVBy
ZXNzdXJlSGFuZGxlciB7CiAjaWYgVVNFKEdMSUIpCiAgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4g
bV9zb3VyY2U7CiAjZWxzZQotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Cisg
ICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogI2VuZGlmCiAgICAgfTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcAppbmRleCA0MDIzZjQzZTZmMjBhMzhl
MTAzZTdjOWEyZTRmMGY3ZTA2MTA1NzE0Li5jY2UxMTA2ZDQ2N2I3MjA4M2MxZWRiMjEzYWQ1OWM0
NDAzMTdhNGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcApAQCAtOTMs
MTQgKzkzLDE0IEBAIGJvb2wgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6dHJ5
TG9ja0ZvcihQYXJhbGxlbEVudmlyb25tZW50KiBwYXJlbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBj
cmVhdGVUaHJlYWQoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRo
cmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOworICAgIGlmICghbV90aHJlYWQpCisgICAg
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVh
ZFByaXZhdGU6OndvcmtlclRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOwogCi0gICAg
aWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICBtX3BhcmVudCA9IHBh
cmVudDsKIAogICAgIG1fbXV0ZXgudW5sb2NrKCk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cisg
ICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVh
ZFByaXZhdGU6OmV4ZWN1dGUoVGhyZWFkRnVuY3Rpb24gdGhyZWFkRnVuY3Rpb24sIHZvaWQqIHBh
cmFtZXRlcnMpCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpU
aHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQodm9pZCogdGhyZWFkRGF0YSkKICAgICBUaHJlYWRQ
cml2YXRlKiBzaGFyZWRUaHJlYWQgPSByZWludGVycHJldF9jYXN0PFRocmVhZFByaXZhdGUqPih0
aHJlYWREYXRhKTsKICAgICBMb2NrSG9sZGVyIGxvY2soc2hhcmVkVGhyZWFkLT5tX211dGV4KTsK
IAotICAgIHdoaWxlIChzaGFyZWRUaHJlYWQtPm1fdGhyZWFkSUQpIHsKKyAgICB3aGlsZSAoc2hh
cmVkVGhyZWFkLT5tX3RocmVhZCkgewogICAgICAgICBpZiAoc2hhcmVkVGhyZWFkLT5tX3J1bm5p
bmcpIHsKICAgICAgICAgICAgICgqc2hhcmVkVGhyZWFkLT5tX3RocmVhZEZ1bmN0aW9uKShzaGFy
ZWRUaHJlYWQtPm1fcGFyYW1ldGVycyk7CiAgICAgICAgICAgICBzaGFyZWRUaHJlYWQtPm1fcnVu
bmluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2Vu
ZXJpYy5oIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCmluZGV4IDQ1ODQw
N2M0Y2I0YTNmOTk1YzkwYzU1NTYyN2MxY2JkMjJiNDFiNWMuLjdkNjhlZjA3MGY2N2E2NTMzYzBi
ODc1ODNkMmE1N2ExMThkMDU2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVs
Sm9ic0dlbmVyaWMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgK
QEAgLTU0LDcgKzU0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgY2xhc3Mg
VGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRocmVhZFByaXZhdGU+IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFRocmVhZFByaXZhdGUoKQotICAgICAgICAgICAgOiBtX3RocmVhZElE
KDApCisgICAgICAgICAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiAgICAgICAgICAgICAsIG1fcnVu
bmluZyhmYWxzZSkKICAgICAgICAgICAgICwgbV9wYXJlbnQoMCkKICAgICAgICAgewpAQCAtNzQs
NyArNzQsNyBAQCBjbGFzcyBQYXJhbGxlbEVudmlyb25tZW50IHsKICAgICAgICAgc3RhdGljIHZv
aWQgd29ya2VyVGhyZWFkKHZvaWQqKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFRocmVhZElk
ZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAg
ICAgICAgIGJvb2wgbV9ydW5uaW5nOwogICAgICAgICBQYXJhbGxlbEVudmlyb25tZW50KiBtX3Bh
cmVudDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAppbmRleCBlNmM2NzhiZWZjMGYxOTBhMjIzZTlhZGRi
MmNjNTgxMGI1NmUxYzE0Li5jYzFhMjFiOWVhNWNjY2M2ZjFhY2U0Yzk3NDk4OTliYmRhNWQ3ZTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9QYXJraW5nTG90LmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3QgVGhyZWFkRGF0
YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWREYXRhPiB7CiAgICAgVGhyZWFk
RGF0YSgpOwogICAgIH5UaHJlYWREYXRhKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXI7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkOwogICAgIAogICAgIE11dGV4IHBh
cmtpbmdMb2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBwYXJraW5nQ29uZGl0aW9uOwpAQCAtNDIz
LDcgKzQyMyw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRz
KQogfQogCiBUaHJlYWREYXRhOjpUaHJlYWREYXRhKCkKLSAgICA6IHRocmVhZElkZW50aWZpZXIo
Y3VycmVudFRocmVhZCgpKQorICAgIDogdGhyZWFkKFRocmVhZDo6Y3VycmVudCgpKQogewogICAg
IHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOwogICAgIGZvciAoOzspIHsKQEAgLTc5Myw3ICs3
OTMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwoY29uc3Qgdm9p
ZCogYWRkcmVzcykKICAgICB1bnBhcmtDb3VudChhZGRyZXNzLCBVSU5UX01BWCk7CiB9CiAKLU5F
VkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQorTkVWRVJf
SU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZv
aWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCiB7CiAgICAgVmVjdG9yPEJ1Y2tl
dCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKIApAQCAtODAzLDcgKzgwMyw3
IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3Bl
ZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpCiAgICAgICAgIGlmICghYnVja2V0KQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoVGhyZWFkRGF0YSogY3VycmVudFRocmVhZERh
dGEgPSBidWNrZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERhdGE7IGN1cnJlbnRUaHJlYWRE
YXRhID0gY3VycmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQotICAgICAgICAgICAgY2FsbGJh
Y2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIsIGN1cnJlbnRUaHJlYWREYXRh
LT5hZGRyZXNzKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJl
YWQuZ2V0KCksIGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICB9CiAgICAgCiAgICAg
dW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QYXJraW5nTG90LmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKaW5kZXggN2Q1
ZmIxN2VmYTAyYWI3NmIxMjhlYWY1OTk4MTM4MDEwMGJhYmQ5Ni4uYjZkODgzMGQxOWM3YjdmZDRj
YzZhY2FlMzYyYWVhM2I5NDNhOWQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaApAQCAtMTU4LDcgKzE1OCw3
IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAg
c3RhdGljIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAgIHsKLSAgICAgICAgZm9y
RWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9p
ZCopPihmdW5jKSk7CisgICAgICAgIGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRo
cmVhZCYsIGNvbnN0IHZvaWQqKT4oZnVuYykpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE3MSw3
ICsxNzEsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywgY29u
c3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+JiBjYWxsYmFjayk7CiAKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVk
TGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8
dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVm
UHRyLmgKaW5kZXggZmUxNjMwYzk3MzViNWZmNTM1M2NiMmM1NThlMzEwNTgxMjQ3ODdkOC4uMjc3
ZTY3NWRiM2M1NTVkNWU0YzZjZTA0OTQ2ODg3NGQzNjc2OTU5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUmVmUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQyLDcg
KzQyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc1JlZlB0ciA9IHRydWU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJl
ZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIg
UmVmUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihU
KiBwdHIpIDogbV9wdHIocHRyKSB7IHJlZklmTm90TnVsbChwdHIpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBSZWZQdHIoY29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3RO
dWxsKG1fcHRyKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQ
dHI8VT4mIG8pIDogbV9wdHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCmluZGV4IDk0M2ZkNmQ3OWQwOTQ0
MjU1MDNhYzg5NzMxYjBhMDZhNmFjNDBmZmQuLmNiMjc1ZjcwMTJjZmU1NjYxZTQ5ZTBiNGZmMGQ5
YzYyMWIwZTQ5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5o
CkBAIC0yOSw2ICsyOSw4IEBACiAjaWZuZGVmIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAj
ZGVmaW5lIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAKKyNpbmNsdWRlICJUaHJlYWRpbmcu
aCIKKwogbmFtZXNwYWNlIFdURiB7CiAKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2
b2lkKiBhcmd1bWVudCk7CkBAIC0zNiwxMyArMzgsMTUgQEAgdHlwZWRlZiB2b2lkICgqVGhyZWFk
RnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAg
ICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIFJlZlB0
cjxUaHJlYWQ+JiYgdGhyZWFkLCB2b2lkKiBkYXRhKQogICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0
aW9uKQorICAgICAgICAsIHRocmVhZChXVEZNb3ZlKHRocmVhZCkpCiAgICAgICAgICwgZGF0YShk
YXRhKQogICAgIHsKICAgICB9CiAKICAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBS
ZWZQdHI8VGhyZWFkPiB0aHJlYWQ7CiAgICAgdm9pZCogZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZEdyb3VwLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91
cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJkNzUwN2NlNDc3MWRkYzJjOTFlMjMwYzQ4YTNmOGY5ZjNhNjVhMDUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oCkBAIC0wLDAg
KzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBUaHJlYWRHcm91
cCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkR3JvdXApOworcHVibGljOgorcHJp
dmF0ZToKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0
aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43YWMyM2IwYWZlOTYxMjRkMmZkMGM1NjExN2YwMGYzMDk0YjBlYjVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9s
ZGVyUHRocmVhZHMuaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCisjaWYgVVNFKFBUSFJF
QURTKQorCisjaWYgT1MoSFVSRCkKKy8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQg
aW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgorI2Rl
ZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKKyNlbHNlCisjaW5jbHVkZSA8bGltaXRzLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKK3B0aHJlYWRfa2V5X3QgVGhyZWFkSG9sZGVyOjpt
X2tleSA9IFBUSFJFQURfS0VZU19NQVg7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQpOwor
CitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRFeGl0
KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAgaW50
IGVycm9yID0gcHRocmVhZF9rZXlfY3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOworICAgIGlmIChl
cnJvcikKKyAgICAgICAgQ1JBU0goKTsKK30KKworVGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6
OmN1cnJlbnQoKQoreworICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4ocHRocmVhZF9nZXRzcGVjaWZpYyht
X2tleSkpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRocmVh
ZCkKK3sKKyAgICBpZiAoIWN1cnJlbnQoKSkgeworICAgICAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2
ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVy
dCBwZXJmb3JtYW5lLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJl
IG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAgICAg
ICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgbmV3IFRocmVhZEhvbGRlcih0aHJlYWQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQorewor
ICAgIFRocmVhZEhvbGRlciogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJl
YWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmllckRhdGEpOworCisg
ICAgaWYgKHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSkgeworICAgICAg
ICBkZWxldGUgdGhyZWFkSWRlbnRpZmllckRhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworICAg
IC8vIFJlLXNldHRpbmcgdGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3Qo
KSBjYWxsIGFmdGVyIGFsbCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBj
YWxsZWQuCisgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgdGhyZWFkSWRlbnRpZmllckRh
dGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhM2NlZGYxNTgw
MzVmY2M2NDNkMzJmNWUyZWQyMjU2N2U3MGVjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorI2RlZmluZSBUaHJlYWRIb2xkZXJQdGhyZWFkc19o
CisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBI
b2xkcyBUaHJlYWQgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0
aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8v
IFRocmVhZCBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmlj
IHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFk
SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGlj
OgorICAgIH5UaHJlYWRIb2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9u
IGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRz
IGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdl
LgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5z
IDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBz
dGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRo
cmVhZCYgdGhyZWFkKQorICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lz
RGVzdHJveWVkT25jZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5h
dGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ry
b3llZCBvbmNlJworICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3Bl
Y2lmaWMgc2xvdCB0byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisgICAg
Ly8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBp
bnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQor
ICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAu
CisgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFk
PiBtX3RocmVhZDsKKyAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBwdGhy
ZWFkX2tleV90IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBU
aHJlYWRIb2xkZXJQdGhyZWFkc19oCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkSG9sZGVyV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTdjNWYxZTRhOGQ2YTNlODA0ZGU0NDVhMWY1MjBhOTg5MDc0YzRmYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJX
aW4uaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworRFdP
UkQgVGhyZWFkSG9sZGVyOjptX2tleSA9IDA7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQp
OworCitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRF
eGl0KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAg
RFdPUkQgbV9rZXkgPSBGbHNBbGxvYyhkZXN0cnVjdG9yKTsKKyAgICBpZiAobV9rZXkgPT0gRkxT
X09VVF9PRl9JTkRFWEVTKQorICAgICAgICBDUkFTSCgpOworfQorCitUaHJlYWRIb2xkZXIqIFRo
cmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhv
bGRlcio+KEZsc0dldFZhbHVlKG1fa2V5KSk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0
aWFsaXplKFRocmVhZCYgdGhyZWFkKQoreworICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAg
IC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJl
LCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZvcm1hbmUuCisgICAgICAgIC8vIEhhdmluZyB0aGlz
IHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2Fs
bAorICAgICAgICAvLyBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKSBzb29uIGVub3VnaCIgYnVn
cyBpbiByZWxlYXNlIG1vZGUuCisgICAgICAgIEZsc1NldFZhbHVlKG1fa2V5LCBuZXcgVGhyZWFk
SG9sZGVyKHRocmVhZCkpOworICAgIH0KK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0
KHZvaWQqIGRhdGEpCit7CisgICAgVGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9
IHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVu
dGlmaWVyRGF0YSk7CisKKyAgICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95
ZWRPbmNlKSB7CisgICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVk
T25jZSA9IHRydWU7CisgICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMg
YW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBk
ZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KKyAgICBGbHNTZXRWYWx1ZShtX2tleSwgdGhyZWFkSWRl
bnRpZmllckRhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjljYmJhOTk3OWI2ZWY5NzhiODEwN2MxNzJiMzFmNDgwNWJmMzU0
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkSG9sZGVyV2luX2gKKyNkZWZpbmUgVGhy
ZWFkSG9sZGVyV2luX2gKKworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIEhvbGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ug
YW5kIGVtcGxveXMgRkxTIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8v
IFRocmVhZCBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmlj
IHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFk
SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGlj
OgorICAgIH5UaHJlYWRIb2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9u
IGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRz
IGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdl
LgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5z
IDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBz
dGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRo
cmVhZCYgdGhyZWFkKQorICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lz
RGVzdHJveWVkT25jZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5h
dGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ry
b3llZCBvbmNlJworICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3Bl
Y2lmaWMgc2xvdCB0byBtYWtlIFdpbiB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0g
c2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tl
ZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAv
LyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAg
IHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90
aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgRFdPUkQgbV9r
ZXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFRocmVhZEhvbGRlcldp
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2
NTcyMWRkMTY5YmZmMTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShQVEhSRUFEUykKLQotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuaCIKLQotI2luY2x1ZGUgIlRocmVhZGluZy5oIgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJF
QURfS0VZU19NQVggaXMgbm90IGRlZmluZWQgaW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBs
aWNpdGx5IGRlZmluZSBpdCBoZXJlLgotI2RlZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNl
bHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0
aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRpZmllckRhdGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01B
WDsKLQotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVu
dGlmaWVyRGF0YTo6flRocmVhZElkZW50aWZpZXJEYXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0
KG1faWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxp
emVPbmNlKCkKLXsKLSAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBk
ZXN0cnVjdCk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJ
ZGVudGlmaWVyIFRocmVhZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NF
UlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEq
IHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEq
PihwdGhyZWFkX2dldHNwZWNpZmljKG1fa2V5KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRp
ZmllckRhdGEgPyB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQot
dm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlk
KQotewotICAgIEFTU0VSVCghaWRlbnRpZmllcigpKTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2
ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVy
dCBwZXJmb3JtYW5lLgotICAgIC8vIEhhdmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVh
bnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6
ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxF
QVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNw
ZWNpZmljKG1fa2V5LCBuZXcgVGhyZWFkSWRlbnRpZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJ
ZGVudGlmaWVyRGF0YSo+KGRhdGEpOwotICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7
Ci0KLSAgICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0g
ICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7
Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0
cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3
ZXJlIGNhbGxlZC4KLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlm
aWVyRGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJF
QURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcy
NWJkMjc1ZTcyZWJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHNfaAotI2RlZmluZSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElk
ZW50aWZpZXIgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJl
YWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKLS8vIFRo
cmVhZElkZW50aWZpZXIgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRT
cGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNz
IFRocmVhZElkZW50aWZpZXJEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJ
ZGVudGlmaWVyRGF0YSk7Ci1wdWJsaWM6Ci0gICAgflRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0K
LSAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xl
LgotICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkg
YW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25j
ZSgpOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVu
dGlmaWVyRGF0YSBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemUoVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVy
bnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAg
IHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YShUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAg
IDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2Uo
ZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3Ry
dWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAt
IGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFy
ZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAg
ICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8g
bWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBh
ZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0
cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJ
ZGVudGlmaWVyIGZyb20gdGhlIHRocmVhZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lkKiBkYXRhKTsKLQotICAgIFRocmVhZElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwotICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGlj
IHB0aHJlYWRfa2V5X3QgbV9rZXk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlm
IC8vIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmlu
ZGV4IGMxZGMzNTAxOTAzYWI3NmIzNzA0NmQ5MzMzZjkzMmEzZWYwYzZjNmUuLmYxMDQ1OTQ4ZDI1
ZTQ0ZmQ4ODU3N2E5OTIyMzkwOWU2ZjU2MjlhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtNDUs
NyArNDUsNyBAQCBzdHJ1Y3QgTmV3VGhyZWFkQ29udGV4dCB7CiAgICAgTXV0ZXggY3JlYXRpb25N
dXRleDsKIH07CiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciog
dGhyZWFkTmFtZSkKK2NvbnN0IGNoYXIqIFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25z
dCBjaGFyKiB0aHJlYWROYW1lKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQogICAg
IHJldHVybiB0aHJlYWROYW1lOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRF
bnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
Y29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKICAgICBhdXRvIGVudHJ5UG9pbnQg
PSBXVEZNb3ZlKGNvbnRleHQtPmVudHJ5UG9pbnQpOwogCkBAIC05MiwyNCArOTIsMjQgQEAgc3Rh
dGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICBlbnRyeVBv
aW50KCk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQorUmVmUHRyPFRocmVhZD4gVGhy
ZWFkOjpjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3Qg
Y2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUobmFtZSwgW2VudHJ5UG9p
bnQsIGRhdGFdIHsKKyAgICAgICAgZW50cnlQb2ludChkYXRhKTsKKyAgICB9KTsKK30KKworUmVm
UHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGVudHJ5UG9pbnQpCiB7CiAgICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9
IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFtZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgeyB9IH07
CiAKICAgICAvLyBQcmV2ZW50IHRoZSB0aHJlYWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1bnRpbCB3
ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgdGhyZWFkIGlkZW50aWZpZXIuCiAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVh
ZEludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOworICAgIHJldHVybiBU
aHJlYWQ6OmNyZWF0ZUludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOwog
fQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBv
aW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIHJldHVybiBjcmVhdGVU
aHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKLSAgICAgICAgZW50cnlQb2ludChkYXRh
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
aW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNT
RVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcg
QEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCiAjZW5kaWYKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVk
KGludCByZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1Vz
ZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NF
UykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEz
IEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlv
cml0eSkKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1h
eFFPU2NsYXNzIHsgUU9TX0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4
UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRT
Y2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3Mg
PSBtYXhDbGFzczsKIH0KIAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3Nf
dCBvcmlnaW5hbENsYXNzKQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFv
c19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9
IFFPU19DTEFTU19VTlNQRUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFs
Q2xhc3MsIGdsb2JhbE1heFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3Nf
dCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYK
IAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQobV9pZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2
YjU1OGIzZTFkNTE3ZTgxMGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi40MzMzYjYyOGVmNmMxODcw
ZTA2ODJjMWU2YjE4YjliY2QzYTRlOGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29k
IChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOCw3MiArMzksMjI2IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMpCisjaWYgT1Mo
REFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxz
ZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5nIHNpZ25hbC5oIGRpZG4n
dCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCisv
LyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhp
cyB3b3JrYXJvdW5kIGNhbiBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBF
T0wuCisvLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lk
PTIwNzA3OQorI2lmIE9TKEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgor
CisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKyNlbmRpZgor
CisjaWYgIUNPTVBJTEVSKE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2No
ZWQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5kaWYKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKKyNpZiBPUyhEQVJX
SU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
UmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0
X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFk
X3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBw
Y190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5
cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFS
TTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5E
T1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZv
cm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdp
c3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit1c2luZyBU
aHJlYWRJZGVudGlmaWVyID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlv
bikodm9pZCogYXJndW1lbnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZy
b20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8v
IERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0
IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBj
YWxscyBhcmUgbm90IHJlZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxp
emVUaHJlYWRpbmcoKTsKK2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50U3RyZWFtOwor
CitjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7Citw
dWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0dXJucyAwIGlm
IHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxp
dGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVh
ZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25z
dCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSB+VGhyZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJl
cXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1
ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBs
b3dlciBwcmlvcml0eS4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJ
c1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQ
cmlvcml0eSA9IDApOworICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQgY3JlYXRpb24g
ZmFpbGVkLgorICAgIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBv
biBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0IGNoYXIqIHRo
cmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBUaHJl
YWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNo
YW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOwotV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAg
IC8vIFJldHVybnMgVGhyZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNhbiBiZSAoYSBiaXQpIGNv
c3RseSBpbiBXaW5kb3dzLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBj
dXJyZW50KCk7CiAKLS8vIERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQg
Y3JlYXRpb24uCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICAv
LyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUg
dXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFkcyBhbmQgZW5z
dXJlIHRoZSB0aHJlYWQgbGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBU
aHJlYWRJZGVudGlmaWVyIGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVj
aWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0
ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFk
TmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHkoaW50KTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFk
IGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0
aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQg
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsK
KyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBrZXJuX3Jl
dHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVy
cm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRF
cnJvciA9IERXT1JEOworI2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUo
Y29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVk
PHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcmVzdW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnZXRS
ZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLWJvb2wg
c2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNlbmRpZgog
CisgICAgLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3BvbnNp
dmVuZXNzLgorICAgIC8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ug
Wy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4K
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJl
bGF0aXZlUHJpb3JpdHkgPSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFv
c19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFk
anVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdU
RgorICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxl
bWVudGF0aW9uLgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRlcm5hbChUaHJl
YWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11c2luZyBXVEY6
OlRocmVhZElkZW50aWZpZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVzaW5nIFdURjo6
Y3VycmVudFRocmVhZDsKLXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7Ci11c2luZyBX
VEY6OmRldGFjaFRocmVhZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247Cisg
ICAgLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgIC8v
IEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQg
ZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCiAj
aWYgVVNFKFBUSFJFQURTKQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgdm9pZCBlc3Rh
Ymxpc2gocHRocmVhZF90KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJl
YWRJZGVudGlmaWVyKTsKICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdU
Rjo6c2V0R2xvYmFsTWF4UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQg
c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4
dCk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQor
CisgICAgdm9pZCBhZGRPbkV4aXRDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+
IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbV9vbkV4aXRDYWxsYmFjay5hcHBlbmQoY2FsbGJh
Y2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBpZCgpID09IHRocmVhZC5pZCgpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpZCgpICE9IHRocmVhZC5pZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQo
KTsKKworICAgIGVudW0gSm9pbmFibGVTdGF0ZSB7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRo
cmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgorICAgICAgICBKb2luYWJs
ZSwKKworICAgICAgICAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBh
bmQgdGhpcyB0aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNl
IHRoZXJlIGNhbiBiZSBhCisgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0
aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQg
dGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAg
Ly8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhp
dCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdz
CisgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2Fz
ZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisg
ICAgICAgIEpvaW5lZCwKKworICAgICAgICAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVk
IGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVh
ZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERl
dGFjaGVkLAorICAgIH07CisKKyAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJl
dHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KKyAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBt
X2pvaW5hYmxlU3RhdGUgPSBEZXRhY2hlZDsgfQorICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZv
aWQgZGlkSm9pbigpIHsgbV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNF
eGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4aXQ7IH0KKworICAgIFdvcmRMb2NrIG1fbXV0ZXg7Cisg
ICAgVGhyZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2lu
YWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKKyAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07Cisg
ICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWQmKT4+IG1fb25FeGl0Q2FsbGJhY2s7
CisjaWYgVVNFKFBUSFJFQURTKQorICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJX
SU4pCisgICAgbWFjaF9wb3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3Qg
bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOworICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRN
YWNoaW5lQ29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBz
dGQ6OmF0b21pYzxib29sPiBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyNlbGlmIE9T
KFdJTkRPV1MpCisgICAgSEFORExFIG1faGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5
c3RlbQorI2VuZGlmCit9OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERh
cndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZy
b20gYW55IHRocmVhZCwgdGhlIG9ubHkKKy8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxz
IGFyZSBub3QgcmVlbnRyYW50LgorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpOworCitpbmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sK
KyAgICByZXR1cm4gVGhyZWFkOjpjdXJyZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNp
bmcgV1RGOjpjdXJyZW50VGhyZWFkOwogCiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZj
YTFkYTVhNjkyZDBmLi4yZmJiODhhY2JkYzMxZGY3MmIwZjkxMzc2ZDIwY2QxMjI1YzMzODdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJl
YWt0aXguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29v
ZEByZWFrdGl4LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQxLDE2MiArNDIsMTE3IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2Vl
ZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbi5oIgotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIK
LSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJl
YWRzLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0j
aWYgIUNPTVBJTEVSKE1TVkMpCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2NoZWQu
aD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLSNpZiBPUyhMSU5VWCkKLSNpbmNs
dWRlIDxzeXMvcHJjdGwuaD4KLSNlbmRpZgotCi0jaWYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxz
aWduYWwuaD4KLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotY2xhc3MgUHRocmVhZFN0YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBlbnVtIEpvaW5hYmxlU3RhdGUgewotICAgICAgICBKb2luYWJsZSwg
Ly8gVGhlIGRlZmF1bHQgdGhyZWFkIHN0YXRlLiBUaGUgdGhyZWFkIGNhbiBiZSBqb2luZWQgb24u
Ci0KLSAgICAgICAgSm9pbmVkLCAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8g
ZXhpdCBhbmQgdGhpcyB0aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBi
ZWNhdXNlIHRoZXJlIGNhbiBiZSBhIAotICAgICAgICAgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1l
IGJldHdlZW4gd2hlbiB0aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2lu
IHRvIHJldHVybiBhbmQgdGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRv
IHJ1bikgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxs
ZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0
aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdzIAotICAgICAgICAgICAgICAgIC8vIG5vYm9keSBlbHNl
IHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29t
cGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCi0KLSAgICAgICAgRGV0YWNoZWQgLy8gVGhl
IHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24u
IEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAg
YWZ0ZXIgaXRzZWxmLgotICAgIH07Ci0KLSAgICAvLyBDdXJyZW50bHkgYWxsIHRocmVhZHMgY3Jl
YXRlZCBieSBXVEYgc3RhcnQgb3V0IGFzIGpvaW5hYmxlLiAKLSAgICBQdGhyZWFkU3RhdGUocHRo
cmVhZF90IGhhbmRsZSkKLSAgICAgICAgOiBtX2pvaW5hYmxlU3RhdGUoSm9pbmFibGUpCi0gICAg
ICAgICwgbV9kaWRFeGl0KGZhbHNlKQotICAgICAgICAsIG1fcHRocmVhZEhhbmRsZShoYW5kbGUp
Ci0gICAgewotICAgIH0KLQotICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0
dXJuIG1fam9pbmFibGVTdGF0ZTsgfQotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlKCkgeyBy
ZXR1cm4gbV9wdGhyZWFkSGFuZGxlOyB9Ci0gICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsg
bV9qb2luYWJsZVN0YXRlID0gRGV0YWNoZWQ7IH0KLSAgICB2b2lkIGRpZEV4aXQoKSB7IG1fZGlk
RXhpdCA9IHRydWU7IH0KLSAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpv
aW5lZDsgfQotICAgIGJvb2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9Ci0KLXBy
aXZhdGU6Ci0gICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGU7Ci0gICAgYm9vbCBtX2Rp
ZEV4aXQ7Ci0gICAgcHRocmVhZF90IG1fcHRocmVhZEhhbmRsZTsKLX07Ci0KLXR5cGVkZWYgSGFz
aE1hcDxUaHJlYWRJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UHRocmVhZFN0YXRlPj4gVGhy
ZWFkTWFwOworI2lmICFPUyhEQVJXSU4pCiAKLXZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQo
VGhyZWFkSWRlbnRpZmllcik7Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7
Ci12b2lkIHRocmVhZFdhc0pvaW5lZChUaHJlYWRJZGVudGlmaWVyKTsKKy8vIFdlIHVzZSBTSUdV
U1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENv
cmUuCitzdGF0aWMgY29uc3RleHByIGNvbnN0IGludCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lID0g
U0lHVVNSMjsKK3N0YXRpYyBzdGQ6OmF0b21pYzxUaHJlYWQqPiB0YXJnZXRUaHJlYWQgeyBudWxs
cHRyIH07CitzdGF0aWMgU3RhdGljV29yZExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CiAKLXN0YXRp
YyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQordm9pZCBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXpl
ZDsKLQotICAgIGlmIChpc0luaXRpYWxpemVkKQorICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2Nh
bCBhdG9taWMgdHlwZXMgZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJl
YWQqIHRocmVhZCA9IHRhcmdldFRocmVhZC5sb2FkKCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1
c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRo
aXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVz
ZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCisgICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZv
Y2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxl
ci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIg
aW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCisgICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBu
ZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVj
dXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgorICAgICAgICAvLyBodHRwOi8vcHVi
cy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5k
Lmh0bWwKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVl
OwotCi0gICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0
cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGlu
IGEgdGhyZWFkc2FmZSBmYXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0
aWFsaXplZCBmcm9tIGhlcmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRN
YXBNdXRleCgpOwotICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2UoKTsKLSAgICB3dGZUaHJlYWREYXRh
KCk7Ci0gICAgaW5pdGlhbGl6ZURhdGVzKCk7Ci19CisgICAgdWNvbnRleHRfdCogdXNlckNvbnRl
eHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpOworI2lmIENQVShQUEMpCisg
ICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19t
Y29udGV4dC51Y19yZWdzOworI2Vsc2UKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNv
bnRleHQgPSB1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQ7CisjZW5kaWYKIAotc3RhdGljIFRocmVh
ZE1hcCYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTWFw
PiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBz
ZWUgdGhhdCB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5
bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBm
cm9tIGEgc2lnbmFsIGhhbmRsZXIuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9v
bmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8w
NF8wMworICAgIC8vCisgICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRo
YXQgZW5zdXJlcyB0aGF0IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZl
ZC4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5
OS9iYXNlZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFk
LT5tX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBp
cyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBj
YWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQg
aXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRl
ZCByZWN1cnNpdmVseS4KKyAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2Zp
bGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOworICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNl
dCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25h
bFNldCk7CisKKyAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhy
ZWFkIGlzIHJlc3VtZWQuCisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNw
ZW5kUmVzdW1lKTsKIH0KIAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRo
cmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCi17Ci0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgVGhyZWFkTWFwOjppdGVyYXRv
ciBpID0gdGhyZWFkTWFwKCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFk
SGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gaS0+a2V5OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQorI2VuZGlm
IC8vICFPUyhEQVJXSU4pCiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50
aWZpZXJGb3JQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKK3Zv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhy
ZWFkSGFuZGxlKHB0aHJlYWRIYW5kbGUpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
TWFwTXV0ZXgoKSk7Ci0gICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckNvdW50
ID0gMTsKLSAgICB0aHJlYWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCBzdGQ6Om1ha2VfdW5p
cXVlPFB0aHJlYWRTdGF0ZT4ocHRocmVhZEhhbmRsZSkpOwotICAgIHJldHVybiBpZGVudGlmaWVy
Q291bnQrKzsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBz
dGQ6OmNhbGxfb25jZShpbml0aWFsaXplS2V5LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OmluaXRpYWxpemUoKTsKKyAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXpl
T25jZSgpOworICAgICAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVj
dCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8g
c28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3Ry
aW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRv
cigpOworICAgICAgICB3dGZUaHJlYWREYXRhKCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygp
OworCisjaWYgIU9TKERBUldJTikKKyAgICAgICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9j
ZXNzIGdsb2JhbCBjb25maWd1cmF0aW9uLgorICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2Nr
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgIC8vIFNpZ1Ro
cmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1
c3BlbmQuCisgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICBzaWdlbXB0
eXNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNr
LCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9u
ID0gVGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKKyAgICAgICAgYWN0aW9uLnNh
X2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbihTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAwKTsKKyNlbmRpZgorICAgIH0pOwogfQogCi1z
dGF0aWMgcHRocmVhZF90IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5
SGVsZChUaHJlYWRJZGVudGlmaWVyIGlkKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCkKIHsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0
KGlkKS0+cHRocmVhZEhhbmRsZSgpOworI2lmICFPUyhEQVJXSU4pCisgICAgc2lnc2V0X3QgbWFz
azsKKyAgICBzaWdlbXB0eXNldCgmbWFzayk7CisgICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lKTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNr
LCAwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lk
KiBwYXJhbSkKIHsKLSAgICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIGNyZWF0ZVRocmVh
ZEludGVybmFsLgorICAgIC8vIEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpjcmVh
dGVJbnRlcm5hbC4KICAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uPihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24q
PihwYXJhbSkpOwotICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZElu
dGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIq
KQotewotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKLSAgICBwdGhyZWFkX3QgdGhyZWFkSGFu
ZGxlOwotICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7Ci0gICAgcHRocmVhZF9hdHRyX2luaXQoJmF0
dHIpOwotI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi0gICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xh
c3NfbnAoJmF0dHIsIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKSwg
MCk7Ci0jZW5kaWYKLSAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxl
LCAmYXR0ciwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0gICAgcHRo
cmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHIpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRh
dGEgJXAiLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQogCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNv
bnN0cnVjdG9yIGluIHd0ZlRocmVhZEVudHJ5UG9pbnQuCi0gICAgVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uKiBsZWFrZWRJbnZvY2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24pOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRy
OwogCi0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVh
ZEhhbmRsZSk7CisgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRl
cm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBU
SFJFQURfU0VUTkFNRV9OUCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFk
TmFtZSh0aHJlYWROYW1lKSk7CkBAIC0yMDUsMTIzICsxNjEsNyBAQCB2b2lkIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHRocmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlmaWVy
IGlkID0gaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgQVNT
RVJUKGlkKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Ci19Ci0g
ICAgCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQs
IGludCBkZWx0YSkKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQo
dGhyZWFkSUQpOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFw
TXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRp
ZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVh
ZEhhbmRsZSk7Ci0gICAgfQotCi0gICAgaW50IHBvbGljeTsKLSAgICBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gcGFyYW07Ci0KLSAgICBpZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUs
ICZwb2xpY3ksICZwYXJhbSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhcmFtLnNjaGVkX3By
aW9yaXR5ICs9IGRlbHRhOwotCi0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5k
bGUsIHBvbGljeSwgJnBhcmFtKTsKLX0KLQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7
Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBsb2NrIGFjcm9zcyB0aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBv
dXIgdGhyZWFkIGFuZCBjYXVzZSBkZWFkbG9jay4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRs
ZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNT
RVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLQotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVh
ZF9qb2luKHB0aHJlYWRIYW5kbGUsIDApOwotCi0gICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURM
SykKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBi
ZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotICAgIGVsc2UgaWYgKGpv
aW5SZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5h
YmxlIHRvIGJlIGpvaW5lZC5cbiIsIHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFw
KCkuZ2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+
am9pbmFibGVTdGF0ZSgpID09IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOwotCi0gICAgLy8gVGhl
IHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgotICAgIGlm
IChzdGF0ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJ
RCk7Ci0gICAgLy8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4g
YW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQg
c28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KLSAgICBlbHNlCi0gICAgICAg
IHN0YXRlLT5kaWRKb2luKCk7Ci0KLSAgICByZXR1cm4gam9pblJlc3VsdDsKLX0KLQotdm9pZCBk
ZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhy
ZWFkSUQpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAg
IHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0K
LSAgICBpbnQgZGV0YWNoUmVzdWx0ID0gcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0g
ICAgaWYgKGRldGFjaFJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVy
ICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRocmVhZElEKTsKLQotICAgIFB0aHJl
YWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhyZWFkTWFwKCku
cmVtb3ZlKHRocmVhZElEKTsKLSAgICBlbHNlCi0gICAgICAgIHRocmVhZE1hcCgpLmdldCh0aHJl
YWRJRCktPmRpZEJlY29tZURldGFjaGVkKCk7Ci19Ci0KLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRo
cmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7
Ci0KLSAgICBpZiAoc3RhdGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5h
YmxlKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwotfQotCi1UaHJlYWRJ
ZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQotewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAg
cmV0dXJuIGlkOwotCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVu
dGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlm
aWVyRm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmll
ckRhdGE6OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsKLX0KLQotYm9vbCBzaWduYWxU
aHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgaW50IHNpZ25hbE51bWJlcikKLXsKLSAg
ICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIHsK
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBw
dGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlI
ZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLSAg
ICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVyKTsK
LSAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KKyAgICBpbml0
aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0KIAogTXV0ZXg6Ok11
dGV4KCkKQEAgLTQxNSw2ICsyNTUsMjcyIEBAIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNh
c3QoKQogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKIH0KIAorVGhyZWFkOjpU
aHJlYWQoKQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9y
U3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAv
KiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgorfQorCitU
aHJlYWQ6On5UaHJlYWQoKQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2Rlc3Ryb3koJm1f
c2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRp
ZEV4aXQoKQoreworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgICAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxi
YWNrIDogbV9vbkV4aXRDYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2
b2lkIFRocmVhZDo6ZXN0YWJsaXNoKHB0aHJlYWRfdCBoYW5kbGUpCit7CisgICAgV29yZExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIGlmICgh
bV9pZCkgeworICAgICAgICBzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkSWRlbnRpZmllcj4gcHJv
dmlkZXIgeyAwIH07CisgICAgICAgIG1faWQgPSArK3Byb3ZpZGVyOworI2lmIE9TKERBUldJTikK
KyAgICAgICAgbV9wbGF0Zm9ybVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxl
KTsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBk
ZWx0YSkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpbnQg
cG9saWN5OworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworICAgIGlmIChwdGhyZWFk
X2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOworCisgICAgcHRocmVhZF9z
ZXRzY2hlZHBhcmFtKG1faGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7Cit9CisKK2ludCBUaHJlYWQ6
OndhaXRGb3JDb21wbGV0aW9uKCkKK3sKKyAgICBwdGhyZWFkX3QgaGFuZGxlOworICAgIHsKKyAg
ICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBt
X2hhbmRsZTsKKyAgICB9CisKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihoYW5k
bGUsIDApOworCisgICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKKyAgICAgICAgTE9HX0VS
Uk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWlu
ZyB0byBxdWl0IiwgbV9pZCk7CisgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKKyAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwg
bV9pZCk7CisKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJU
KGpvaW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBh
bHJlYWR5IGV4aXRlZCwgZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0
ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2
ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRz
ZWxmLgorICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJl
dHVybiBqb2luUmVzdWx0OworfQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJl
YWRfZGV0YWNoKG1faGFuZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwg
bV9pZCk7CisKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hl
ZCgpOworfQorCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQoreworICAgIFJlZlB0
cjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgYXV0byBpbnZv
Y2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5
UG9pbnQsIHRocmVhZC5nZXQoKSwgZGF0YSk7CisgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsK
KyAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsK
KyNpZiBIQVZFKFFPU19DTEFTU0VTKQorICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2NsYXNzX25w
KCZhdHRyLCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCksIDApOwor
I2VuZGlmCisgICAgaW50IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgJmF0
dHIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOworICAgIHB0aHJlYWRf
YXR0cl9kZXN0cm95KCZhdHRyKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVw
Iiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVlX3B0ciBj
b25zdHJ1Y3RvciBpbiB3dGZUaHJlYWRFbnRyeVBvaW50LgorICAgIFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbiogbGVha2VkSW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOworICAgIFVO
VVNFRF9QQVJBTShsZWFrZWRJbnZvY2F0aW9uKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRo
cmVhZEhhbmRsZSk7CisgICAgcmV0dXJuIHRocmVhZDsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1
cnJlbnQoKQoreworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVu
dCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAg
ICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVz
dGFibGlzaGVkIHlldC4KKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcg
VGhyZWFkKCkpOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBU
aHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7Cit9CisKK1Ro
cmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQoreworICAgIHJldHVybiBjdXJyZW50
KCkuaWQoKTsKK30KKworYm9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQorewor
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhy
ZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8g
QSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4g
RXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSh0aGlzICE9ICZjdXJyZW50KCksICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBz
dXNwZW5kIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7CisgICAgV29yZExvY2tIb2xkZXIg
bG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyAgICBrZXJuX3JldHVybl90IHJlc3Vs
dCA9IHRocmVhZF9zdXNwZW5kKG1fcGxhdGZvcm1UaHJlYWQpOworICAgIGlmIChyZXN1bHQgIT0g
S0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAg
ICByZXR1cm4geyB9OworI2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBz
dXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRo
cmVhZHMuCisgICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJl
YWQgbG9jay4KKyAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBh
cmUgdGhyZWFkcyBBIGFuZCBCLgorICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQg
QiBhbmQgQiBhdHRlbXB0IHRvIHN1c3BlbmQgQS4KKyAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNp
Z25hbHMuIEFuZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCisgICAg
ICAgIC8vIEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAgICAgV29y
ZExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKCFtX3N1
c3BlbmRDb3VudCkgeworICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1
c2UgcHRocmVhZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRv
IHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBp
biBhIGZldyBwbGF0Zm9ybXMsIGxpa2UgTGludXguCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3
ZSB1c2UgVGhyZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3Mg
aXQgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3Jl
KHRoaXMpOworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgICAgICAgICAgc2Vt
X3dhaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxl
YXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRl
ZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1f
c3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAg
ICB9CisgICAgICAgICsrbV9zdXNwZW5kQ291bnQ7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZSht
X3BsYXRmb3JtVGhyZWFkKTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1l
LCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVy
IHRocmVhZHMuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9j
ayk7CisgICAgICAgIGlmIChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBX
aGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWdu
YWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFj
dHVhbGx5IGlzc3VlZCwKKyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYg
d2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZl
cmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVu
ZCBhbmQgcmVzdW1lLgorICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVt
YmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAg
ICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5k
IHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwg
d2UgY2FuIHRha2UgdGhpcy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3Rv
cmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAg
ICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBm
bGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQu
c3RvcmUodGhpcyk7CisgICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAg
ICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMg
YWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgor
ICAgICAgICAgICAgbV9zdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGVhc2UpOworICAgICAgICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK3NpemVfdCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVnaXN0ZXJzKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBP
UyhEQVJXSU4pCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2Yo
cmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2
b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoUFBDKQorICAg
IHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoUFBD
NjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwor
ICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Cisj
ZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVf
Q09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RB
VEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVB
RF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1f
VEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5k
aWYKKworICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX2dldF9zdGF0ZShtX3BsYXRm
b3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3RhdGVfdCkmcmVnaXN0ZXJzLCAmdXNlckNvdW50
KTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBXVEZSZXBvcnRG
YXRhbEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgIkphdmFT
Y3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRocmVhZF9nZXRfc3RhdGUg
cmV0dXJuZWQgYW4gZXJyb3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIHJ1
bm5pbmcgaW5zaWRlIFJvc2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgcmVzdWx0KTsK
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgcmV0dXJuIHVzZXJDb3VudCAqIHNpemVvZih1
aW50cHRyX3QpOworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYg
KENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BV
KE1JUFMpKQorICAgIHJlZ2lzdGVycyA9IG1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7CisgICAg
cmV0dXJuIHNpemVvZihQbGF0Zm9ybVJlZ2lzdGVycyk7CisjZWxzZQorICAgIHB0aHJlYWRfYXR0
cl90IGF0dHJpYnV0ZTsKKyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlKTsKKyNpZiBI
QVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQorI2lmICFPUyhPUEVOQlNEKQorICAgIC8v
IGUuZy4gb24gRnJlZUJTRCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJf
Z2V0X25wKG1faGFuZGxlLCAmYXR0cmlidXRlKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAvLyBGSVhN
RTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5
IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcworICAgIHB0aHJlYWRfZ2V0YXR0cl9ucCht
X2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZW5kaWYKKworICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7
CisgICAgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7CisgICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dl
dHN0YWNrKCZhdHRyaWJ1dGUsICZzdGFja0Jhc2UsICZzdGFja1NpemUpOworICAgIEFTU0VSVF9V
TlVTRUQocmMsICFyYyk7CisgICAgQVNTRVJUKHN0YWNrQmFzZSk7CisgICAgcmVnaXN0ZXJzLnN0
YWNrUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXplOwor
CisgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHJpYnV0ZSk7CisKKyAgICByZXR1cm4gMDsK
KyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFE
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IDU0YjQzZWZlZjM1Y2Q2NjMyYTcwMDgxNTA3
YTViMzc5OWRlZmI2ZmIuLjAxODdlN2QwMzgwNjVlOGU2NTA3YzU2ZDg4MTgxYzFjNGFhZTU1Yzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtMTQwLDcwICsxNDAsMzkgQEAgdm9pZCBpbml0
aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNl
bmRpZgogfQogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9p
ZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVk
OwotICAgIAotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
c0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBp
dHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1
cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVt
cHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVy
R2VuZXJhdG9yKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygp
OwotfQotCi1zdGF0aWMgSGFzaE1hcDxEV09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxEV09SRCwgSEFORExFPj4gbWFwOwotICAg
IHJldHVybiBtYXA7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7Cisg
ICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJs
ZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlh
bGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25z
dHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAg
IC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAg
IFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5l
cmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0
ZXMoKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50
aWZpZXIoRFdPUkQgdGhyZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWdu
ZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFw
KCkuY29udGFpbnModGhyZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRo
cmVhZEhhbmRsZSk7Ci19CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6
OmNyZWF0ZUludGVybmFsLgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxU
aHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbio+KHBhcmFtKSk7CiAKLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJl
YWRIb2xkZXI6OmluaXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlv
bi0+dGhyZWFkID0gbnVsbHB0cjsKIAotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkp
OwotICAgIHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0
ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRo
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rp
b24oaW52b2NhdGlvbi0+ZGF0YSk7Ci0KICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRp
ZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lk
KiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpj
cmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25z
dCBjaGFyKiB0aHJlYWROYW1lKQogeworICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVm
KCpuZXcgVGhyZWFkKCkpOwogICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAg
IFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRh
KTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUg
dGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAs
IDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVu
dGlmaWVyKSk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpA
QCAtMjE5LDUxICsxODgsMzAgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5h
bChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURf
UEFSQU0obGVha2VkSW52b2NhdGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRo
cmVhZElkZW50aWZpZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxl
QnlJZGVudGlmaWVyKHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1
cm4gdGhyZWFkSUQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJ
ZGVudGlmaWVyKTsKKyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFBy
aW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK1RocmVhZCYgVGhy
ZWFkOjpjdXJyZW50KCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIFRocmVhZEhvbGRl
ciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAg
ICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CiAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhy
ZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUp
Ci0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBjb3JyZXNw
b25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQiLCB0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNy
ZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisg
ICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAKLSAgICBT
ZXRUaHJlYWRQcmlvcml0eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBk
ZWx0YSk7Ci19CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBib29sIGlzU3VjY2Vzc2Z1bCA9IER1
cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdl
dEN1cnJlbnRQcm9jZXNzKCksICZoYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NF
U1MpOworICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7CiAKLWludCB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIEFTU0VSVCh0
aHJlYWRJRCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBM
T0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFj
dGl2ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09S
RCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRF
KTsKLSAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9S
KCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0
byBxdWl0IiwgdGhyZWFkSUQpOwotCi0gICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAg
ICBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotCi0gICAgcmV0dXJu
IGpvaW5SZXN1bHQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7
CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJu
IHRocmVhZC5nZXQoKTsKIH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAgSEFORExFIHRocmVhZEhh
bmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJl
YWRIYW5kbGUpCi0gICAgICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJU
aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLX0KLQotVGhyZWFkSWRlbnRpZmll
ciBjdXJyZW50VGhyZWFkKCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQog
ewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJyZW50VGhy
ZWFkSWQoKSk7CiB9CkBAIC00OTIsNiArNDQwLDk5IEBAIERXT1JEIGFic29sdXRlVGltZVRvV2Fp
dFRpbWVvdXRJbnRlcnZhbChkb3VibGUgYWJzb2x1dGVUaW1lKQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxEV09SRD4oKGFic29sdXRlVGltZSAtIGN1cnJlbnRUaW1lKSAqIDEwMDAuMCk7CiB9CiAK
K1RocmVhZDo6VGhyZWFkKCkKK3sKK30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwordm9p
ZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgICAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgICAgICAvLyBJdCBp
cyBPSyBiZWNhdXNlIEZMU0FsbG9jJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXZlbiBiZWZv
cmUgdGhlcmUgYXJlIHNvbWUgb3BlbiBoYW5kbGVzLgorICAgICAgICAvLyBUaGlzIGVhc2lseSBl
bnN1cmVzIHRoYXQgYWxsIHRoZSB0aHJlYWQgcmVzb3VyY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNs
b3NlZC4KKyAgICAgICAgaWYgKG1faGFuZGxlKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUobV9o
YW5kbGUpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRDYWxsYmFj
aykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNo
KEhBTkRMRSBoYW5kbGUsIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgV29yZExv
Y2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1f
aWQgPSB0aHJlYWRJRDsKK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0
YSkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0VGhyZWFk
UHJpb3JpdHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7Cit9CisK
K2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKK3sKKyAgICBIQU5ETEUgaGFuZGxlOwor
ICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBo
YW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZv
clNpbmdsZU9iamVjdChoYW5kbGUsIElORklOSVRFKTsKKyAgICBpZiAoam9pblJlc3VsdCA9PSBX
QUlUX0ZBSUxFRCkKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBm
b3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CisKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9
PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8g
bm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBj
bGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBv
biBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFz
RXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0Owor
fQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBXZSBmb2xsb3cgdGhlIHB0aHJl
YWQgc2VtYW50aWNzOiBldmVuIGFmdGVyIHRoZSBkZXRhY2ggaXMgY2FsbGVkLAorICAgIC8vIHdl
IHN0aWxsIGNhbiBwZXJmb3JtIG9wZXJhdGlvbiBvbnRvIHRoZSB0aHJlYWQuIFRvIGRvIHNvLCB3
ZSBkbworICAgIC8vIG5vdGhpbmcgaGVyZSBpbiBXaW5kb3dzLiBDbG9zZUhhbmRsZSB3aWxsIGJl
IGNhbGxlZCBhdXRvbWF0aWNhbGx5CisgICAgLy8gYnkgdGhlIEZMUyBkZXN0cnVjdG9yIG9uIHRo
cmVhZCB0ZXJtaW5hdGlvbi4KKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Cisg
ICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KKwor
YXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRF
cnJvcj4KK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgRFdPUkQg
cmVzdWx0ID0gU3VzcGVuZFRocmVhZChtX2hhbmRsZSk7CisgICAgaWYgKHJlc3VsdCAhPSAoRFdP
UkQpLTEpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJl
c3VsdCk7Cit9CisKKy8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBu
b3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KK3ZvaWQgVGhyZWFkOjpyZXN1
bWUoKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBSZXN1bWVU
aHJlYWQobV9oYW5kbGUpOworfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9t
dXRleCk7CisgICAgcmVnaXN0ZXJzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENP
TlRFWFRfQ09OVFJPTDsKKyAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxl
LCAmcmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRl
eCBiMmEwYTc5ZjRhYjVhYWMyODliMTY5ZjkyYmJjMWE4MDU4NTJjYTMyLi45NzMwZmNmMGYwOTIx
ZmRlZDkwZjg5ZjEyOTBlNzc0OTBiNTM5NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9X
b3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9u
cywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKIAogICAgICAgICAgICAgbV93b3JrZXJz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFkQ291bnQpOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBt
X3dvcmtlcnMuYXBwZW5kKGNyZWF0ZVRocmVhZChTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBX
b3JrZXIgJXUiLCBpKS51dGY4KCkuZGF0YSgpLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1f
d29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wg
V29ya2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAg
ICAgdGhyZWFkQm9keSgpOwogICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KQEAg
LTExNCw3ICsxMTQsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBp
dGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogICAgICAgICBDb25kaXRp
b24gbV9jb25kaXRpb247CiAgICAgICAgIERlcXVlPGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4qPiBtX3F1ZXVlOwogCi0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3dvcmtl
cnM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gbV93b3JrZXJzOwogICAgIH07CiAK
ICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFRocmVhZFBvb2w+IHRocmVhZFBvb2w7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oCmluZGV4IGE0N2YyMWUyMGQzMWJjOGJmNzMxOGY0MWI5NTdhYjM2NmMxOTE1MDMu
Ljc2MzQ1YzA2OTMxNjRmNjhjYTRiMWM2NjQ0ODRhMjczY2M2ZThiZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5o
CkBAIC0xMDMsNyArMTAzLDcgQEAgY2xhc3MgV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0
aW9uRGlzcGF0Y2hlciB7CiAKICAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwogI2VsaWYgVVNFKEdM
SUJfRVZFTlRfTE9PUCkgfHwgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya1F1ZXVl
VGhyZWFkOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAg
IENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgIFJ1bkxvb3AqIG1f
cnVuTG9vcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29h
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCAxYTcy
MTlhZDI1OWVkNzU5NzJhNWE0NThjNWM0ODQ5N2EzODhlNGQzLi41OWVlMWY4NWI0MzVjZTFhNzJm
NTA1MGY0ZGY2MmVmY2ZiYmM4MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9X
b3JrUXVldWVDb2NvYS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29j
b2EuY3BwCkBAIC00OSwxNSArNDksMTUgQEAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFzc190IGRp
c3BhdGNoUU9TQ2xhc3MoV29ya1F1ZXVlOjpRT1MgcW9zKQogewogICAgIHN3aXRjaCAocW9zKSB7
CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlOgotICAgICAgICByZXR1
cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CisgICAgICAg
IHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJ
VkUpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQ6Ci0gICAgICAgIHJl
dHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CisgICAgICAg
IHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVE
KTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpEZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRq
dXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfREVGQVVMVCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOwogICAgIGNhc2UgV29ya1F1ZXVl
OjpRT1M6OlV0aWxpdHk6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFT
U19VVElMSVRZKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1Nf
Q0xBU1NfVVRJTElUWSk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3VuZDoKLSAg
ICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOworICAg
ICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5E
KTsKICAgICB9CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9X
b3JrUXVldWVHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2Vu
ZXJpYy5jcHAKaW5kZXggOTM0YTM4Y2JiZTY0YmJmZmFlYjRkMzdkZjFiOGQ5OTUyYjg4NTM0NC4u
ZGE4NzVkMWZhMDRjZWY1MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0NDYzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zNSw3ICszNSw3IEBACiB2b2lk
IFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFP
UykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXgpOwotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKG5hbWUsIFt0aGlz
XSB7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbdGhpc10g
ewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVS
dW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6
OmN1cnJlbnQoKTsKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCiAgICAgaWYgKG1fcnVuTG9vcCkKICAgICAgICAgbV9ydW5Mb29wLT5zdG9wKCk7
CiAgICAgaWYgKG1fd29ya1F1ZXVlVGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3dv
cmtRdWV1ZVRocmVhZCk7Ci0gICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICAgICAg
bV93b3JrUXVldWVUaHJlYWQtPmRldGFjaCgpOworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9
IG51bGxwdHI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1v
cnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKaW5kZXggYjI5NDE5NDQ0ZTc0MjczNmE2N2RjMGMx
YWE4NTFkZWMzYWU1ODdlNC4uZmZkNDAwODU1YjgyOTNhOGI1YTNjM2FlYjIzYWI3N2FhZjVhN2Vl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
TGludXguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxl
ckxpbnV4LmNwcApAQCAtMTE5LDcgKzExOSwxMCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2
ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIoaW50IGZkLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKAog
ICAgIH0sIHRoaXMsIG51bGxwdHIpOwogICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQo
KSwgbnVsbHB0cik7CiAjZWxzZQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIldURjog
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwgW3RoaXNdIHsgcmVhZEFuZE5vdGlmeSgpOyB9CisgICAg
bV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLAor
ICAgICAgICBbdGhpc10geworICAgICAgICAgICAgcmVhZEFuZE5vdGlmeSgpOworICAgICAgICB9
KTsKICNlbmRpZgogfQogCkBAIC0xMjksNyArMTMyLDcgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVy
OjpFdmVudEZEUG9sbGVyOjp+RXZlbnRGRFBvbGxlcigpCiAjaWYgVVNFKEdMSUIpCiAgICAgZ19z
b3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CiAjZWxzZQotICAgIGRldGFjaFRocmVhZCht
X3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cAppbmRleCA4NzQ3NjQzOGNhZTY1YTYzODdkOTAxYTc1Mjg4MTVlYzk1NDdmMjMyLi45Y2QzZGI0
ZDFiYzE0YTM2MTczMjFhYjAwNWEwMTk2MjA1Mjc4Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNTYsNyAr
NTYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxl
SGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVI
YW5kbGVyKGZpbGVIYW5kbGVyKQogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFz
ZVRocmVhZENyZWF0aW9uTG9jayk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJT
ZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVy
Iik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhy
ZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9CiAKIElEQlNlcnZl
cjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNr
aW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCkBAIC02Niw3ICs2Niw3
IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZl
ciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEo
KSk7CiAKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxv
Y2spOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRo
cmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAi
SW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiB2b2lkIElEQlNlcnZlcjo6cmVnaXN0ZXJD
b25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYgY29ubmVjdGlvbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAy
NTZjZDUwN2U2ZTZkN2Y2NTZlZWNlMGMxMTk4OTQ4ZmQ5MjNkYTFkLi45MzRhMWQxNzQ1MjkwODQy
OGEzYWU2ZTBlZDdlNTEwYTlhOWNhNmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgY2xh
c3MgSURCU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURCU2VydmVyPiB7CiAgICAgSGFzaE1h
cDx1aW50NjRfdCwgUmVmUHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1h
cDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRlbnRpZmllciwgUmVmUHRyPFVuaXF1ZUlEQkRh
dGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsKIAotICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIg
fTsKICAgICBMb2NrIG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2s7CiAgICAgTG9jayBtX21h
aW5UaHJlYWRSZXBseUxvY2s7CiAgICAgYm9vbCBtX21haW5UaHJlYWRSZXBseVNjaGVkdWxlZCB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Fz
eW5jQXVkaW9EZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5
bmNBdWRpb0RlY29kZXIuY3BwCmluZGV4IDI5MmYwNWI4Y2Q1MDZlMjI5YWU2YjhiZDg2MjljMDk1
NGQxODQ1OWIuLjdjZjdhZjhmZWEyZTFlNjdkNTIzN2M4NzFhMDE1YjNjNDkwMGEyN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29k
ZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVj
b2RlcigpCiB7CiAgICAgLy8gU3RhcnQgd29ya2VyIHRocmVhZC4KICAgICBMb2NrSG9sZGVyIGxv
Y2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsK
KyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRF
bnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKIH0KIAogQXN5bmNBdWRpb0RlY29kZXI6On5B
c3luY0F1ZGlvRGVjb2RlcigpCkBAIC00Nyw4ICs0Nyw4IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjp+
QXN5bmNBdWRpb0RlY29kZXIoKQogICAgIG1fcXVldWUua2lsbCgpOwogICAgIAogICAgIC8vIFN0
b3AgdGhyZWFkLgotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOwotICAg
IG1fdGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAg
IG1fdGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2Rl
QXN5bmMoUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVm
UHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEFz
eW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
IAogICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVhZElEIGVz
dGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgcnVuIGxvb3AuCisgICAgICAgIC8vIFdhaXQg
Zm9yIHVudGlsIHdlIGhhdmUgbV90aHJlYWQgZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRo
ZSBydW4gbG9vcC4KICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRl
eCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Fz
eW5jQXVkaW9EZWNvZGVyLmgKaW5kZXggYmI1YzVlMzM3YjVlY2YxZjhlNjE3NTNhMjlmOGQwZjk3
MTQxNTUzZC4uZjEyNTEwZDE5N2MzZGY5NmNjMDU2ODU0NmNiYzNmYjQ2ZWFhYThhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
aApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBBc3luY0F1ZGlvRGVjb2RlciB7CiAgICAgc3RhdGlj
IHZvaWQgdGhyZWFkRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBydW5Mb29wKCk7
CiAKLSAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3RocmVhZDsKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKICAgICBNZXNz
YWdlUXVldWU8RGVjb2RpbmdUYXNrPiBtX3F1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcAppbmRleCA1MDUyMzA0MTk3Y2RlZGRlNDdmZGNiYjkxMmVjNDc0MDU1Nzk3NDI4Li5l
N2Q1NjdkZmVhZDQ0MmMzOTZhZjBmNzA1MTA5NzNmZmUxNDhhYjBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwCkBAIC00MSw3ICs0MSw3IEBAIGNvbnN0IHNpemVfdCByZW5kZXJRdWFu
dHVtU2l6ZSA9IDEyODsKIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRl
clRhcmdldCkKICAgICA6IEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRhcmdl
dC0+c2FtcGxlUmF0ZSgpKQogICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotICAg
ICwgbV9yZW5kZXJUaHJlYWQoMCkKKyAgICAsIG1fcmVuZGVyVGhyZWFkKG51bGxwdHIpCiAgICAg
LCBtX3N0YXJ0ZWRSZW5kZXJpbmcoZmFsc2UpCiB7CiAgICAgbV9yZW5kZXJCdXMgPSBBdWRpb0J1
czo6Y3JlYXRlKHJlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVt
U2l6ZSk7CkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
Ojp1bmluaXRpYWxpemUoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9yZW5kZXJUaHJl
YWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOwot
ICAgICAgICBtX3JlbmRlclRocmVhZCA9IDA7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkLT53YWl0
Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IG51bGxwdHI7CiAgICAg
fQogCiAgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKICAgICBpZiAo
IW1fc3RhcnRlZFJlbmRlcmluZykgewogICAgICAgICBtX3N0YXJ0ZWRSZW5kZXJpbmcgPSB0cnVl
OwogICAgICAgICByZWYoKTsgLy8gU2VlIGNvcnJlc3BvbmRpbmcgZGVyZWYoKSBjYWxsIGluIG5v
dGlmeUNvbXBsZXRlRGlzcGF0Y2goKS4KLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBjcmVhdGVU
aHJlYWQoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRo
aXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnks
IHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlv
bk5vZGUuaAppbmRleCA3NTU2MDQ2NDcyMzJjNGJjNTEzY2M5ZTM5ZGQ0NDVmMzhiNjJjZWY0Li41
NjkwMTM4YjE2NTcwYjNmOWQyMzdmOWRkNGE4ZWEyM2Q3M2ZmYWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Ob2RlIHsKICAgICBSZWZQdHI8QXVkaW9C
dXM+IG1fcmVuZGVyQnVzOwogICAgIAogICAgIC8vIFJlbmRlcmluZyB0aHJlYWQuCi0gICAgdm9s
YXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX3JlbmRlclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFk
PiBtX3JlbmRlclRocmVhZDsKICAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsKICAgICBzdGF0
aWMgdm9pZCBvZmZsaW5lUmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBv
ZmZsaW5lUmVuZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCmluZGV4IDg4NjlmNmJmMjIzMjMyZTYzY2MzZmI1MmUxNmFlMWRiM2ViNDFi
ZTYuLjhjOTJkNmU1Mzk2YWRmMTJmYmRkNjhkN2FjOTdmOWVkMTlhZGMwMTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC03NzAsOCAr
NzcwLDcgQEAgU2VjdXJpdHlPcmlnaW5EYXRhIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpCiB7
CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCiAg
ICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0gICAgYXV0byYgdGhyZWFkID0gZGF0
YWJhc2VUaHJlYWQoKTsKLSAgICBpZiAoY3VycmVudFRocmVhZCgpID09IHRocmVhZC5nZXRUaHJl
YWRJRCgpKQorICAgIGlmIChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VUaHJlYWQoKS5nZXRU
aHJlYWRJRCgpKQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJp
dHlPcmlnaW4obV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAwZGRlNWY3MjY4ZWU2
NDJjMDA0MzA1Y2VmZTM2YjFjOWU0NGI4N2QzLi5kNzA4MTRmOWI1NWIyNDhmZDY0ZTFhZmY0M2Uz
NzY3NGYxNjkyZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wgRGF0YWJh
c2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlv
bk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNl
VGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsK
KyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRo
cmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKIAotICAgIHJldHVybiBtX3Ro
cmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBEYXRhYmFzZVRocmVhZDo6
cmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMp
CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQo
KQogICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBv
biB0aGlzIGRhdGFiYXNlIHRocmVhZAogICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+c2h1
dGRvd24oKTsKIAotICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAl
aSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5
IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKKyAgICBMT0co
U3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYg
dG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90
aHJlYWQtPmlkKCksIHRoaXMsIHJlZkNvdW50KCkpOwogCiAgICAgLy8gQ2xvc2UgdGhlIGRhdGFi
YXNlcyB0aGF0IHdlIHJhbiB0cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFu
eSB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3
ZSBkb24ndCBsZWF2ZSB0aGUgZGF0YWJhc2UgaW4gYW4KICAgICAvLyBpbmNvbnNpc3RlbnQgb3Ig
bG9ja2VkIHN0YXRlLgpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRh
dGFiYXNlVGhyZWFkKCkKICAgICAgICAgb3BlbkRhdGFiYXNlLT5wZXJmb3JtQ2xvc2UoKTsKIAog
ICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBv
ZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElE
KTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIqIGNsZWFudXBTeW5jID0gbV9jbGVhbnVwU3luYzsKIApAQCAtMTQyLDcgKzE0Miw3IEBAIHZv
aWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSYgZGF0YWJhc2Up
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdGhyZWFkLT5pZCgpKTsKICAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNl
U2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZCgmZGF0
YWJhc2UpOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29y
ZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9vcGVuRGF0YWJhc2VTZXRNdXRleCk7CiAKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgp
ID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQt
PmlkKCkpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0
LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJlbW92ZSgmZGF0
YWJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRocmVhZC5oCmluZGV4IGVjMDQxZTMxODE3MjQ5MmVjYTZiY2VmZThmMWRhMjVlYzky
ZWQyNmMuLmE1MjEyZGZiOGIxNzJjZTJmZjZhOTg4OGRlMGE5ZGI5NzdhZTJkMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgK
QEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIAogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VP
cGVuKERhdGFiYXNlJik7CiAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYp
OwotICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElE
OyB9CisgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFk
ID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
KiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmdldCgpOyB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKICAgICB2b2lkIGRh
dGFiYXNlVGhyZWFkKCk7CiAKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBU
aHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90
aHJlYWQgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX3NlbGZSZWY7
CiAKICAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNrPiBtX3F1ZXVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNmY5ZmNhNjdmM2M0N2FkZGM4
M2RlYzhjYjBkNWViOGNjYjQwZDc0My4uMTM5YWE5OTFhMTZlYWQyMmY2OGY1MDFiZTdiOTQ1OTYz
MjIxMzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3Bw
CkBAIC0xMDEsMTQgKzEwMSwxNCBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RO
b3dJZk5vdERvbmVSZWNlbnRseSgpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVj
dE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKIHsKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKGNvbGxlY3QsIDAsICJX
ZWJDb3JlOiBHQ0NvbnRyb2xsZXIiKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZShjb2xsZWN0LCAwLCAiV2ViQ29yZTogR0NDb250cm9sbGVyIik7CiAKICAgICBp
ZiAod2FpdFVudGlsRG9uZSkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJl
YWRJRCk7CisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJRCk7CisgICAgdGhyZWFkLT5k
ZXRhY2goKTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29s
bGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9B
c3luY0ZpbGVTdHJlYW0uY3BwCmluZGV4IDE2OGU0ZTI3Nzk1ZDQyNWY0MDRmMTc1YzliY2JhOTNm
NzM2ODA3NGMuLjU1YzdjYjAyMzk4NTk5Yzk3MWU2YTM3YTBmOWE3MjQ4NDg0MmU2YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKQEAgLTc0LDcgKzc0LDcg
QEAgc3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0
aW9uKQogCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwog
ICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0ZUZpbGVUaHJlYWRPbmNlLCBbXSB7Ci0gICAgICAgIGNy
ZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10geworICAgICAgICBUaHJl
YWQ6OmNyZWF0ZSgiV2ViQ29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10gewogICAgICAgICAgICAg
Zm9yICg7OykgewogICAgICAgICAgICAgICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCA0Y2RjZmFhZDZl
ODMyYTM5YTVjMzUyNjU4MDU4NTA4NmIzZDlmNzJmLi5hNDhiZmY2MDUxZjBmMTc0ZGExOGQyZmY5
ZDM3YWIzYmM2Njg0ZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRh
YmFzZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNkZWZpbmUgQVNTRVJUX05PVF9TWU5DX1RIUkVB
RCgpIEFTU0VSVCghbV9zeW5jVGhyZWFkUnVubmluZyB8fCAhSVNfSUNPTl9TWU5DX1RIUkVBRCgp
KQogCiAvLyBGb3IgbWV0aG9kcyB0aGF0IGFyZSBtZWFudCB0byBzdXBwb3J0IHRoZSBzeW5jIHRo
cmVhZCBPTkxZCi0jZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhyZWFkID09
IGN1cnJlbnRUaHJlYWQoKSkKKyNkZWZpbmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5bmNU
aHJlYWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgpKQogI2RlZmluZSBBU1NFUlRfSUNPTl9TWU5D
X1RIUkVBRCgpIEFTU0VSVChJU19JQ09OX1NZTkNfVEhSRUFEKCkpCiAKICNpZiBQTEFURk9STShH
VEspCkBAIC0xNDEsNyArMTQxLDcgQEAgYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiAgICAgLy8gTG9jayBoZXJl
IGFzIHdlbGwgYXMgZmlyc3QgdGhpbmcgaW4gdGhlIHRocmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNu
J3QgYWN0dWFsbHkgY29tbWVuY2UgdW50aWwgdGhlIGNyZWF0ZVRocmVhZCgpIGNhbGwgCiAgICAg
Ly8gY29tcGxldGVzIGFuZCBtX3N5bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAg
IG1fc3luY0xvY2subG9jaygpOwotICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29u
RGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IElj
b25EYXRhYmFzZSIpOworICAgIG1fc3luY1RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKEljb25EYXRh
YmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogSWNvbkRh
dGFiYXNlIik7CiAgICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IG1fc3luY1RocmVhZDsKICAgICBt
X3N5bmNMb2NrLnVubG9jaygpOwogICAgIGlmICghbV9zeW5jVGhyZWFkKQpAQCAtMTYxLDcgKzE2
MSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpjbG9zZSgpCiAgICAgICAgIHdha2VTeW5jVGhyZWFk
KCk7CiAgICAgICAgIAogICAgICAgICAvLyBXYWl0IGZvciB0aGUgc3luYyB0aHJlYWQgdG8gdGVy
bWluYXRlCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fc3luY1RocmVhZCk7Cisg
ICAgICAgIG1fc3luY1RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICBt
X3N5bmNUaHJlYWRSdW5uaW5nID0gZmFsc2U7ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2UuaAppbmRleCAwNjFhZjRhMTI1NTc3MWRlMTFhMzJmNTY4M2MwZWZkYTU5
MjkzYjlkLi44NjQwOTU1NDc1MzNmZDg5MGYwM2FmZTkyYmIwNmY2MDg3ZWU3MzYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaApAQCAtMTE5LDcgKzExOSw3IEBA
IGNsYXNzIEljb25EYXRhYmFzZSBmaW5hbCA6IHB1YmxpYyBJY29uRGF0YWJhc2VCYXNlIHsKICAg
ICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7CiAgICAgCiAgICAgVGltZXIgbV9zeW5jVGltZXI7Ci0g
ICAgVGhyZWFkSWRlbnRpZmllciBtX3N5bmNUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9z
eW5jVGhyZWFkOwogICAgIGJvb2wgbV9zeW5jVGhyZWFkUnVubmluZzsKICAgICAKICAgICBIYXNo
U2V0PFJlZlB0cjxEb2N1bWVudExvYWRlcj4+IG1fbG9hZGVyc1BlbmRpbmdEZWNpc2lvbjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCmluZGV4IDkxMjAwYzM0
NWY0NTVmOTZkNDk0YmZkMmFkNzAzZjI4YzVjNjI5ZDEuLmQ5YjZmNzJmYTM2ZmE3MDBjODI2ZjNj
OTdkNmJhYTAyZDQyZThiNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3Vy
Y2VVc2FnZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdl
VGhyZWFkLmNwcApAQCAtOTYsMTEgKzk2LDExIEBAIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6
bm90aWZ5T2JzZXJ2ZXJzKFJlc291cmNlVXNhZ2VEYXRhJiYgZGF0YSkKIAogdm9pZCBSZXNvdXJj
ZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFk
SWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
dm0gPSAmY29tbW9uVk0oKTsKLSAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQo
dGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNvdXJjZVVzYWdlIik7CisgICAgbV90
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJl
c291cmNlVXNhZ2UiKTsKIH0KIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRDYWxs
YmFjayh2b2lkKiByZXNvdXJjZVVzYWdlVGhyZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291
cmNlVXNhZ2VUaHJlYWQuaAppbmRleCAxOGExZTY3NTQzZDIyMDljMTc5NTc0NzM2NjIyYTc4YjM4
NGJiOGZjLi5lZmRlMjdlZmU2YjBhYzQ1NDY0ZGU4OTFjNjdjZTc5ZjljZjJlMTlmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaApAQCAtNjIsNyArNjIsNyBAQCBj
bGFzcyBSZXNvdXJjZVVzYWdlVGhyZWFkIHsKICAgICB2b2lkIHRocmVhZEJvZHkoKTsKICAgICB2
b2lkIHBsYXRmb3JtVGhyZWFkQm9keShKU0M6OlZNKiwgUmVzb3VyY2VVc2FnZURhdGEmKTsKIAot
ICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyIHsgMCB9OworICAgIFJlZlB0
cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2NrOwogICAgIENv
bmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBIYXNoTWFwPHZvaWQqLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJik+PiBtX29ic2VydmVyczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IDczMGMw
YTZiZDkzZjQ1NzhkMWVkYmY5YWNlMWNkODY1NjZlNmM5ODguLmQyMDc4NDA1NjBkZGY5MDU5MGEw
ZGFkZDI3MzA4NGM5MWM5ZmIxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtMzUsMTQgKzM1LDE0IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFNjcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKCkKLSAgICA6IG1f
dGhyZWFkSWRlbnRpZmllcigwKQorICAgIDogbV90aHJlYWQobnVsbHB0cikKIHsKIH0KIAogYm9v
bCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgYXV0byB0aHJlYWRJ
ZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZp
ZXI7Ci0gICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRocmVhZCgpID09IHRo
cmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gU2Nyb2xsaW5nVGhy
ZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZDsKKyAgICByZXR1cm4gdGhyZWFkICYmIHRocmVhZC0+
aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNw
YXRjaChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQpAQCAtNzQsMTQgKzc0LDE0IEBAIFNj
cm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKQogCiB2b2lkIFNjcm9s
bGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElk
ZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBX
YWl0IGZvciB0aGUgdGhyZWFkIHRvIGluaXRpYWxpemUgdGhlIHJ1biBsb29wLgogICAgIHsKICAg
ICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRl
eCk7CiAKLSAgICAgICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENh
bGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5nIik7CisgICAgICAgIG1fdGhyZWFkID0g
VGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmci
KTsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1
bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFk
UnVuTG9vcDsgfSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVh
dGVUaHJlYWRJZk5lZWRlZCgpCiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFj
ayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpCiB7Ci0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNV
c2VySW50ZXJhY3RpdmUoKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKCk7CiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVGhyZWFkKj4oc2Nyb2xs
aW5nVGhyZWFkKS0+dGhyZWFkQm9keSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmluZGV4IGRlMDYyZDc3YWMwMWRmOWQyYTA5ODYw
ZWJlNmI4ZTlmZDNjZmY1YzAuLmQ4ODkyZjA1YmU2NDM3ZDRhYWNjMGE3NTFhN2NhN2U5M2JlZTBk
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ro
cmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVh
ZC5oCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIFNjcm9sbGluZ1RocmVhZCB7CiAgICAgdm9pZCB0
aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2soKTsKICNlbmRpZgogCi0gICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAK
ICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlOwogICAg
IExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKaW5kZXggZjcxMzMzYzVhMzdh
OTk4OTY0ZjNhNzQxYzczMTUyZTk1MTQ2NmNmNi4uZGRiZTNiYTk4MGU0NTBhNDk0Y2QwNjQ4ZjQx
YjVlMzZhZmVlYjVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
SFJURkRhdGFiYXNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIFBhc3NSZWZQdHI8SFJU
RkRhdGFiYXNlTG9hZGVyPiBIUlRGRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hy
b25vdXNseUlmCiB9CiAKIEhSVEZEYXRhYmFzZUxvYWRlcjo6SFJURkRhdGFiYXNlTG9hZGVyKGZs
b2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKDApCisgICAgOiBt
X2RhdGFiYXNlTG9hZGVyVGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX2RhdGFiYXNlU2FtcGxlUmF0
ZShzYW1wbGVSYXRlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xMDYsNyAr
MTA2LDcgQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSgpCiAg
ICAgCiAgICAgaWYgKCFtX2hydGZEYXRhYmFzZS5nZXQoKSAmJiAhbV9kYXRhYmFzZUxvYWRlclRo
cmVhZCkgewogICAgICAgICAvLyBTdGFydCB0aGUgYXN5bmNocm9ub3VzIGRhdGFiYXNlIGxvYWRp
bmcgcHJvY2Vzcy4KLSAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IGNyZWF0ZVRocmVh
ZChkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKKyAg
ICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKGRhdGFiYXNlTG9h
ZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNlIGxvYWRlciIpOwogICAgIH0KIH0KIApAQCAt
MTIxLDggKzEyMSw4IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhy
ZWFkQ29tcGxldGlvbigpCiAgICAgCiAgICAgLy8gd2FpdEZvclRocmVhZENvbXBsZXRpb24oKSBz
aG91bGQgbm90IGJlIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgdGhyZWFkLgogICAgIGlmICht
X2RhdGFiYXNlTG9hZGVyVGhyZWFkKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKLSAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gMDsK
KyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAg
ICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRh
dGFiYXNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJh
c2VMb2FkZXIuaAppbmRleCBjODY5ZDEzN2ExZGIyZjUyNDk4ZDBlMWI2NWQ1ODdlNmM4MTliMzgx
Li4zYWQyNTFmMjE5OTA5ZjRiYzY0NTRkMDEzMjAxYjZhN2NhNzAyNjgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaApAQCAtNzcs
NyArNzcsNyBAQCBjbGFzcyBIUlRGRGF0YWJhc2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxI
UlRGRGF0YWJhc2VMb2FkZXI+IHsKIAogICAgIC8vIEhvbGRpbmcgYSBtX3RocmVhZExvY2sgaXMg
cmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgbV9kYXRhYmFzZUxvYWRlclRocmVhZC4KICAgICBMb2Nr
IG1fdGhyZWFkTG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fZGF0YWJhc2VMb2FkZXJUaHJl
YWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9kYXRhYmFzZUxvYWRlclRocmVhZDsKIAogICAgIGZs
b2F0IG1fZGF0YWJhc2VTYW1wbGVSYXRlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCmluZGV4IDk2ZjMzMDgyODA3OWE3OWFkNjQ4
MjBkMDcyMWM1OWM1ZWExNmZkYjEuLjIxYmU5OTZlZjM3ZTUzZGI3MDMxMDAxOTYyN2MwYzQwZDJi
MjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29u
dm9sdmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29u
dm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAg
ICAgLy8gU3RhcnQgdXAgYmFja2dyb3VuZCB0aHJlYWQKICAgICAvLyBGSVhNRTogd291bGQgYmUg
YmV0dGVyIHRvIHVwIHRoZSB0aHJlYWQgcHJpb3JpdHkgaGVyZS4gIEl0IGRvZXNuJ3QgbmVlZCB0
byBiZSByZWFsLXRpbWUsIGJ1dCBoaWdoZXIgdGhhbiB0aGUgZGVmYXVsdC4uLgogICAgIGlmICh0
aGlzLT51c2VCYWNrZ3JvdW5kVGhyZWFkcygpICYmIG1fYmFja2dyb3VuZFN0YWdlcy5zaXplKCkg
PiAwKQotICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQgPSBjcmVhdGVUaHJlYWQoV2ViQ29yZTo6
YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJl
YWQiKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV2ViQ29y
ZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0
aHJlYWQiKTsKIH0KIAogUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKQEAgLTE0
Niw3ICsxNDYsNyBAQCBSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIoKQogICAgICAg
ICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2JhY2tncm91bmRU
aHJlYWQpOworICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9S
ZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlci5oCmluZGV4IDZiYWViN2NjZTI5ODk2Yzk4OTYzNTEyZjQxYjQzYTJmMTI4ODU0MWMu
LjA1OTYzMzY3YWUyODM0OTQ4NzkwYmE3Y2NiNzIwNjBlYzU5ODEwNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCkBAIC04Niw3ICs4Niw3
IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlciB7CiAKICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBh
bmQgc3luY2hyb25pemF0aW9uCiAgICAgYm9vbCBtX3VzZUJhY2tncm91bmRUaHJlYWRzOwotICAg
IFRocmVhZElkZW50aWZpZXIgbV9iYWNrZ3JvdW5kVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+
IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBt
X21vcmVJbnB1dEJ1ZmZlcmVkOwogICAgIG11dGFibGUgTG9jayBtX2JhY2tncm91bmRUaHJlYWRN
dXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKaW5kZXggNmNkOGJk
N2Y4MWJmZjIyMjdmZTE0ZmJjYTBmYmZkMDU1ZDA5YzU3MS4uMWYyNWU4ZTU0ZTllZTg1ZmEwY2Nh
NmEzMWI5MmUxMTFlNmRmMGNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1l
ci5jcHAKQEAgLTM3MCwyMCArMzcwLDIwIEBAIFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmls
ZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiBQYXNz
UmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQ
YXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8QXVk
aW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1
ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBs
ZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJBdWRpb0ZpbGVSZWFk
ZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMo
c2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9KTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJv
bUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9v
bCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiBy
ZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVS
ZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVS
YXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVy
IiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0g
ewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSku
Y3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24o
KTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMWM1YzMwZjM3N2E0MmJlMDAxNzcxNjUxZTg3Zjcw
NDNhNWQ2NWM5MC4uMjY0NjZmNTNiNDgyMThkMzM3YTVhODk0ZjFkYjcyOGRmNGM0N2M4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTEwOCw3ICsx
MDgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNv
dXJjZUhhbmRsZUNsaWVudCwgcHVibGljIFN0cmVhbQogICAgICAgICB2b2lkIHdhc0Jsb2NrZWQo
UmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJl
c291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3Ro
cmVhZCB7IDAgfTsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07
CiAgICAgICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgICAg
ICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICAgICAgUnVuTG9v
cCogbV9ydW5Mb29wIHsgbnVsbHB0ciB9OwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktp
dFdlYlNyYyogc3JjLAogICAgIDogU3RyZWFtaW5nQ2xpZW50KHNyYykKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1fdGhy
ZWFkID0gY3JlYXRlVGhyZWFkKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlz
LCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KV0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoIlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBX
VEZNb3ZlKHJlcXVlc3QpXSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7CiAgICAgICAgICAgICBtX3J1
bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwpAQCAtMTExMyw4ICsxMTEzLDggQEAgUmVzb3Vy
Y2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdl
YktpdFdlYlNyYyogc3JjLAogUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJj
ZUhhbmRsZVN0cmVhbWluZ0NsaWVudCgpCiB7CiAgICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAg
IGRldGFjaFRocmVhZChtX3RocmVhZCk7Ci0gICAgICAgIG1fdGhyZWFkID0gMDsKKyAgICAgICAg
bV90aHJlYWQtPmRldGFjaCgpOworICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7CiAgICAgfQog
CiAgICAgaWYgKG1fcnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCmlu
ZGV4IDQ2Yjg5OTRhODQxZWY3MWVhMjc5Y2U3N2NiYzhmYjQzYzI5ZjBhNjIuLmZmYmZkYTliODkz
NDgzNTQ5MGM5YTQwYmExZjQ4MzM2ZTQ3NjBjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKQEAgLTc3LDcgKzc3
LDcgQEAgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxvb3AoKQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8
U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5Mb29wTXV0ZXgpOwogCiAgICAgaWYgKCFsb2FkZXJS
dW5Mb29wT2JqZWN0KSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZChydW5Mb2FkZXJUaHJlYWQsIDAs
ICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKHJ1
bkxvYWRlclRocmVhZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsKIAogICAgICAg
ICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBs
b2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IDQ0MDhjZDE5ODcw
NWJhODZjYzhjMTk4NmZiM2UyY2FkZTc5NmRjYzYuLmYxMDU3MTVlZDhkODc5MzczYjYzMzFjYjI2
ZTA4MmMzZTFhYjhiMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBAIC05NCwxMCArOTQsMTAgQEAgaW50IEN1cmxE
b3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdEb3dubG9hZENvdW50KCkgY29uc3QKIHZvaWQgQ3Vy
bERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFydW5U
aHJlYWQoKSkgewotICAgICAgICBpZiAobV90aHJlYWRJZCkKLSAgICAgICAgICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOworICAgICAgICBpZiAobV90aHJlYWQpCisgICAg
ICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgc2V0UnVuVGhy
ZWFkKHRydWUpOwotICAgICAgICBtX3RocmVhZElkID0gY3JlYXRlVGhyZWFkKGRvd25sb2FkVGhy
ZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQiKTsKKyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZShkb3dubG9hZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7CiAgICAgfQog
fQogCkBAIC0xMDUsOSArMTA1LDkgQEAgdm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhy
ZWFkKCkKIHsKICAgICBzZXRSdW5UaHJlYWQoZmFsc2UpOwogCi0gICAgaWYgKG1fdGhyZWFkSWQp
IHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7Ci0gICAgICAg
IG1fdGhyZWFkSWQgPSAwOworICAgIGlmIChtX3RocmVhZCkgeworICAgICAgICBtX3RocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5oCmluZGV4IDAyY2U3MzFiZDEwYTgwMTliN2ViZTFmYWM1MmI0NWU0MDkyNTYyMzEu
LmY2YmJjNzdmNGQzY2UwYjk2ODdkMWQ4ZmNhNjA5MTU4N2M5YWU0OWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTY5
LDcgKzY5LDcgQEAgY2xhc3MgQ3VybERvd25sb2FkTWFuYWdlciB7CiAKICAgICBzdGF0aWMgdm9p
ZCBkb3dubG9hZFRocmVhZCh2b2lkKiBkYXRhKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBDVVJMTSogbV9jdXJs
TXVsdGlIYW5kbGU7CiAgICAgVmVjdG9yPENVUkwqPiBtX3BlbmRpbmdIYW5kbGVMaXN0OwogICAg
IFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5kbGVMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
LmgKaW5kZXggNWY5ZTA5NTQwNDcxN2QzMGJkODk5NDFlNWYyNTJmMTdiMGE4NjdiOS4uNjhlMjFm
NDc0NDUxYWMzODc1MmI5YmM4OTQzYzM1ZDIzYjY5NjliYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBw
dWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsKICAgICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAg
ICAgfTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07CisgICAg
UmVmUHRyPFRocmVhZD4gbV93b3JrZXJUaHJlYWQgeyBudWxscHRyIH07CiAgICAgc3RkOjphdG9t
aWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fbXV0ZXhTZW5kOwog
ICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJs
LmNwcAppbmRleCAxZTM3OWQxYjAwZDA5NTVmYzJkYTAwYmUzZjk2Zjk5MmE5MWI5NDNmLi5lY2I5
ZjU0YjY1YTMzNTI0ZTNhMzU2YTNiYzEzZDBlMmY2ZjZhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsQ3VybC5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIAogICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkg
d2lsbCBjYWxsIGRlcmVmKCkuCiAKLSAgICBtX3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgi
V2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7CisgICAgbV93b3JrZXJUaHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7CiAKICAgICAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAKQEAgLTI0OSw4ICsyNDksOCBAQCB2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZUltcGw6OnN0b3BUaHJlYWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0b3BUaHJl
YWQgPSB0cnVlOwotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsK
LSAgICBtX3dvcmtlclRocmVhZCA9IDA7CisgICAgbV93b3JrZXJUaHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7CisgICAgbV93b3JrZXJUaHJlYWQgPSBudWxscHRyOwogICAgIGRlcmVmKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCA3YWQ1YjU3OTEz
YTE2NzJkZjkxOTZlOWViMDEzM2UyM2UyMzI5ODVkLi5kZWU2Y2U2ZDY3M2Q3NmI0MWYyNzQ1NDA0
ZmIwNzlmMjE5NjUzYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
clRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3Bw
CkBAIC05OSw3ICs5OSw3IEBAIFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRT
dGFydHVwRGF0YShjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyCiB9CiAKIFdvcmtlclRo
cmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNv
ZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSwgV29ya2VyUmVwb3J0aW5n
UHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRN
b2RlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRT
ZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycywgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRD
b250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIE1v
bm90b25pY1RpbWUgdGltZU9yaWdpbiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGNv
bm5lY3Rpb25Qcm94eSwgU29ja2V0UHJvdmlkZXIqIHNvY2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRp
bWVGbGFncyBydW50aW1lRmxhZ3MpCi0gICAgOiBtX3RocmVhZElEKDApCisgICAgOiBtX3RocmVh
ZChudWxscHRyKQogICAgICwgbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkK
ICAgICAsIG1fd29ya2VyUmVwb3J0aW5nUHJveHkod29ya2VyUmVwb3J0aW5nUHJveHkpCiAgICAg
LCBtX3J1bnRpbWVGbGFncyhydW50aW1lRmxhZ3MpCkBAIC0xMzMsMTUgKzEzMywxNSBAQCBXb3Jr
ZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQogCiBib29sIFdvcmtlclRocmVhZDo6c3RhcnQoKQog
ewotICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1f
dGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KKyAgICAvLyBN
dXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVhZCBpcyBp
bml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLgogICAgIExvY2tIb2xkZXIgbG9jayht
X3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1f
dGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdv
cmtlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV29ya2VyVGhyZWFkOjp3b3Jr
ZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOwogCi0gICAgcmV0dXJuIG1f
dGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6
d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhyZWFkKQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQg
V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIGdfbWFpbl9jb250ZXh0X3BvcF90aHJl
YWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQoKSk7CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQgPSBtX3RocmVhZElEOworICAgIFJlZlB0cjxUaHJlYWQ+IHByb3RlY3Rv
ciA9IG1fdGhyZWFkOwogCiAgICAgQVNTRVJUKG1fd29ya2VyR2xvYmFsU2NvcGUtPmhhc09uZVJl
ZigpKTsKIApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJl
YWQoKQogICAgIHRocmVhZEdsb2JhbERhdGEoKS5kZXN0cm95KCk7CiAKICAgICAvLyBUaGUgdGhy
ZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBkZXN0cm95ZWQgZnJvbSBub3RpZmljYXRpb24gbm93
LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlzIi4KLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQp
OworICAgIHByb3RlY3Rvci0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgV29ya2VyVGhyZWFkOjpzdGFy
dFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5o
CmluZGV4IDA3YWQzY2U3ODRmOTE5ZjcwYzQ1NjgxYjk1NGMwMDk5OTZmNTU3ZjIuLmY4MDllZTY2
NzI3ZWUxMzlkYzRmMTlkMmNiNjFiMjI2NWU0ZWE0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuaApAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJs
aWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBib29sIHN0YXJ0KCk7CiAgICAgdm9p
ZCBzdG9wKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWRJRDsgfQorICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7
IHJldHVybiBtX3RocmVhZCA/IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogICAgIFdvcmtlclJ1bkxv
b3AmIHJ1bkxvb3AoKSB7IHJldHVybiBtX3J1bkxvb3A7IH0KICAgICBXb3JrZXJMb2FkZXJQcm94
eSYgd29ya2VyTG9hZGVyUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlckxvYWRlclByb3h5
OyB9CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5KCkgY29u
c3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRpbmdQcm94eTsgfQpAQCAtOTgsNyArOTgsNyBAQCBj
bGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAg
ICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRTdGFydCh2b2lkKik7CiAgICAgdm9pZCB3b3JrZXJU
aHJlYWQoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8
VGhyZWFkPiBtX3RocmVhZDsKICAgICBXb3JrZXJSdW5Mb29wIG1fcnVuTG9vcDsKICAgICBXb3Jr
ZXJMb2FkZXJQcm94eSYgbV93b3JrZXJMb2FkZXJQcm94eTsKICAgICBXb3JrZXJSZXBvcnRpbmdQ
cm94eSYgbV93b3JrZXJSZXBvcnRpbmdQcm94eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
VGhyZWFkLmNwcAppbmRleCBiYjY2ZmNlYTdlNTI4YmMyN2Y2MzNhM2U1Mjg3OGI1MDFlZjBlMTg3
Li4zNTc2Nzk0NmFkZTM3MmE0Nzk0NWY4NWQzZjg5NThiNTI1NGFiZTQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBIYXNo
U2V0PFN0b3JhZ2VUaHJlYWQqPiYgYWN0aXZlU3RvcmFnZVRocmVhZHMoKQogfQogCiBTdG9yYWdl
VGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICA6IG1fdGhy
ZWFkKG51bGxwdHIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KQEAgLTQ4LDE2
ICs0OCwxNiBAQCBTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKIFN0b3JhZ2VUaHJlYWQ6
On5TdG9yYWdlVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFT
U0VSVCghbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3RocmVhZCk7CiB9CiAKIGJvb2wgU3Rv
cmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
aWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKFN0b3Jh
Z2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IExvY2Fs
U3RvcmFnZSIpOworICAgIGlmICghbV90aHJlYWQpCisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAi
V2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CiAgICAgYWN0aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQo
dGhpcyk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQog
CiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjayh2b2lkKiB0aHJl
YWQpCkBAIC03OCwyNSArNzgsMjUgQEAgdm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBv
aW50KCkKIHZvaWQgU3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBm
dW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9x
dWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVk
KCkgJiYgbV90aHJlYWQpOwogICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVu
Y3Rpb248dm9pZCAoKT4+KFdURk1vdmUoZnVuY3Rpb24pKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRo
cmVhZDo6dGVybWluYXRlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFT
U0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVl
dWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVt
b3ZlKHRoaXMpOwogICAgIC8vIEV2ZW4gaW4gd2VpcmQsIGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24n
dCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1f
dGhyZWFkSUQpCisgICAgaWYgKCFtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9x
dWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4oW3RoaXNdIHsK
ICAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwogICAgIH0pKTsKLSAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24o
KTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSk7Ci0gICAgbV90aHJlYWRJRCA9IDA7Cisg
ICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1U
ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJl
YWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKaW5kZXggOTU2NGI4
YWEwNmU1MjQzZTMwZTQ2N2M1ZmJmZTJjZGFkYjI0MGM1Ni4uOGNmMWIzZDRhZGM1YTMwNmE3N2Vj
NzdjOWMzMjY2NjE2ODdiZWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0
b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5o
CkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFN0b3JhZ2VUaHJlYWQgewogICAgIC8vIEJhY2tncm91
bmQgdGhyZWFkIHBhcnQgb2YgdGhlIHRlcm1pbmF0ZSBwcm9jZWR1cmUuCiAgICAgdm9pZCBwZXJm
b3JtVGVybWluYXRlKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAg
UmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTWVzc2FnZVF1ZXVlPEZ1bmN0aW9uPHZvaWQg
KCk+PiBtX3F1ZXVlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNiODVmMjJmZmFlMDFlMjhhYWI5OTgxNjY5OGFkYWQ3
YTM4NDNjNWYuLmIwNGFjYzhjMzFjNWVjYTgyYTUxNzQxNjY3ZGI3MGUwNTNmMWQyYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAg
LTIwNCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogewogICAgIHBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwogCi0gICAgV1RGOjpzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKIAogICAgIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhh
bmRsZXIgPSBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwog
ICAgIG1fbG9hZFRocm90dGxlTGF0ZW5jeSA9IHBhcmFtZXRlcnMubG9hZFRocm90dGxlTGF0ZW5j
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKaW5kZXggZWY3YmE4OTk4MjAyMzI1
ODllNzM5MWYyN2ZjZDNkNmUxNjlmNjg5NC4uZmEwMzBmYjNhMmEwZjgyZDZhMjQ1YmY4NTZiMzZh
YTI3MzIwMDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKQEAgLTE4Myw3
ICsxODMsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0
LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgcwogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogCiAgICAgUmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbCh0aGlzKTsKLSAgICBkZXRh
Y2hUaHJlYWQoY3JlYXRlVGhyZWFkKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNp
emUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgIFRocmVhZDo6Y3JlYXRlKCJJT0No
YW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxl
cl0gewogICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0
UmVhZEJ1ZmZlclNpemUpOwogICAgICAgICB1aW50OF90KiBidWZmZXJEYXRhID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZSkpOwogICAgICAgICBHUmVmUHRyPFNv
dXBCdWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3du
ZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwgYnVmZmVyRGF0YSwgZmFzdEZyZWUpKTsKQEAgLTIx
Nyw3ICsyMTcsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zm
c2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgcwogICAgICAgICAgICAgRGF0YSBk
YXRhID0geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGRhdGEsIDApOwogICAgICAgICB9LCBxdWV1ZSk7Ci0gICAgfSkpOworICAgIH0pLT5kZXRhY2go
KTsKIH0KIAogc3RydWN0IFdyaXRlQXN5bmNEYXRhIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBiYWY1MzA2NmJlMjAwOWUyNmRiZWI3YWM4ODhjNDA1
ZTNiZGJhNmZmLi5iMzg3YjZiNDQ1ZTM3ZDNkYTNlOGE3MmM3YzBiYTM1Yzg2M2YyNzEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC02NzUsNyArNjc1
LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVl
X3B0cjxEZWNvZGVyPiBtZXNzYWdlKQogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAo
bWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpICYmIG1fc2hvdWxkQm9vc3RNYWluVGhyZWFkT25TeW5j
TWVzc2FnZSkgewotICAgICAgICBwdGhyZWFkX292ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFk
X292ZXJyaWRlX3Fvc19jbGFzc19zdGFydF9ucChtX21haW5UaHJlYWQsIGFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAwKTsKKyAgICAgICAgcHRocmVhZF9vdmVy
cmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9vdmVycmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9t
YWluVGhyZWFkLCBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJB
Q1RJVkUpLCAwKTsKICAgICAgICAgbWVzc2FnZS0+c2V0UU9TQ2xhc3NPdmVycmlkZShvdmVycmlk
ZSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50
cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2Uv
WFBDU2VydmljZUVudHJ5UG9pbnQuaAppbmRleCAzYmI3YzZkNDdkNDNjNjk3NmIwM2NmZjc3MzY0
NGY0ODc4NDkzZDQxLi5mMjNkYjQzYzAyMzRkYzdjODEwNDk1M2YwNGVmODc5NTJmOWI4NzRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMv
WFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBv
aW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFhQQ1NlcnZpY2VJbml0aWFsaXplcihPU09i
amVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiBjb25uZWN0aW9uLCB4cGNfb2JqZWN0XwogCiAjaWYg
SEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAocGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9u
RGF0YS5jb250YWlucyhBU0NJSUxpdGVyYWwoImFsd2F5cy1ydW5zLWF0LWJhY2tncm91bmQtcHJp
b3JpdHkiKSkpCi0gICAgICAgIHNldEdsb2JhbE1heFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZ
KTsKKyAgICAgICAgVGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElU
WSk7CiAjZW5kaWYKIAogICAgIFhQQ1NlcnZpY2VUeXBlOjpzaW5nbGV0b24oKS5pbml0aWFsaXpl
KHBhcmFtZXRlcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4
L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGlu
dXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAppbmRleCAwNjA4YWI3MmY5OTI0OGVmMjRjZDJk
NTI0NWVlNTMzM2EwMGQ5ZDBkLi40OGQxMDY5Nzc2NWE5NWE4YjM1ODcyMzBlMTAyZDgwM2FkNThj
MGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJl
c3N1cmVNb25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVt
b3J5UHJlc3N1cmVNb25pdG9yLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIE1lbW9yeVByZXNzdXJl
TW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKCkKICAgICBpZiAobV9ldmVudEZEID09IC0x
KQogICAgICAgICByZXR1cm47CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZp
ZXIgPSBjcmVhdGVUaHJlYWQoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7CisgICAg
UmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIk1lbW9yeVByZXNzdXJlTW9u
aXRvciIsIFt0aGlzXSB7CiAgICAgICAgIGRvdWJsZSBwb2xsSW50ZXJ2YWwgPSBzX21heFBvbGxp
bmdJbnRlcnZhbEluU2Vjb25kczsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
IHNsZWVwKHBvbGxJbnRlcnZhbCk7CkBAIC0yNzEsNyArMjcxLDcgQEAgTWVtb3J5UHJlc3N1cmVN
b25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IoKQogICAgICAgICB9CiAgICAgICAgIGNsb3Nl
KG1fZXZlbnRGRCk7CiAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElkZW50aWZpZXIp
OworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIElQQzo6QXR0YWNobWVudCBNZW1vcnlQcmVz
c3VyZU1vbml0b3I6OmNyZWF0ZUhhbmRsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAppbmRleCAxZDUwMjE1YTIwMzExNGI0ZjIzZDVkNThmMmQyNTNmZjc5
MDU2ZDVlLi40Zjk2YWJiZjBkYzk3MmY4YjljMmM2Y2Y2ZTgyNjQ2OWUyNWZiZjViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTI1OCw3ICsyNTgsNyBAQCB2
b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3Mo
V1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAKICAgICAvLyBNYXRjaCB0aGUgUW9TIG9mIHRoZSBVSVBy
b2Nlc3MgYW5kIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGJ1dCB1c2UgYSBzbGlnaHRseSBsb3dlciBw
cmlvcml0eS4KLSAgICBXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7
CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7
CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gcGFyYW1ldGVycy5zaG91
bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcjsKICAgICBpZiAoIW1fc3VwcHJlc3NNZW1v
cnlQcmVzc3VyZUhhbmRsZXIpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCBkMzVhZWQ4NzE1MGRlZTQxMTk3MTQ2ZmVlZjBiMDlmZjQ2ZTg0MDYw
Li5lYTI3MDVjY2M0ZDFlYTM3NmUzY2I1ZWI0OWYxNDg1NTZiNGRiY2U1IDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAg
ICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFu
ZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRo
cmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAgICAgIChydW5K
YXZhU2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMpOgorICAg
ICAgICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgICh0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcDoKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Q
YXJraW5nTG90LmNwcDoKKwogMjAxNy0wNC0wNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4Zmll
bGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9udFdpdGhGZWF0dXJlcyB0ZXN0IGZvbnQg
cGFzcyBPVFMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJl
YWRpbmcuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAK
aW5kZXggZTJmOWJhZGU2Y2E3YzI2OTQ4NWE0Y2RjYmU2MDk5YzM2YmEwMjE5OC4uNzEwZDJhNTlk
YTkyOTAxNmU2MDhhNGNmN2Q5NDZmYTg3ZmFkOTMyYyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIExvY2sm
IGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKQogICAgIHJldHVybiBzdGF0aWNNdXRleDsKIH0KIAot
dHlwZWRlZiBIYXNoU2V0PFRocmVhZElkZW50aWZpZXI+IFRocmVhZFNldDsKK3R5cGVkZWYgSGFz
aFNldDxSZWZQdHI8VGhyZWFkPj4gVGhyZWFkU2V0Owogc3RhdGljIFRocmVhZFNldCYgamF2YVNj
cmlwdFRocmVhZHMoKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChUaHJl
YWRTZXQsIHN0YXRpY0phdmFTY3JpcHRUaHJlYWRzLCAoKSk7CkBAIC0xMDgsMTAgKzEwOCwxMCBA
QCB2b2lkIHJ1bkphdmFTY3JpcHRUaHJlYWQodm9pZCopCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwot
ICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSAgICAg
ICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7Ci0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkucmVt
b3ZlKHRocmVhZCk7Ci0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVh
ZCgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOworICAgICAgICBUaHJlYWQmIHRocmVhZCA9
IFRocmVhZDo6Y3VycmVudCgpOworICAgICAgICB0aHJlYWQuZGV0YWNoKCk7CisgICAgICAgIGph
dmFTY3JpcHRUaHJlYWRzKCkucmVtb3ZlKCZ0aHJlYWQpOworICAgICAgICBqYXZhU2NyaXB0VGhy
ZWFkcygpLmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIHN0YXJ0SmF2
YVNjcmlwdFRocmVhZHMoKQogICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRz
TXV0ZXgoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGphdmFTY3JpcHRUaHJlYWRz
Q291bnQ7ICsraSkKLSAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFk
KCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRz
KCkuYWRkKFRocmVhZDo6Y3JlYXRlKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CiB9CiAK
IHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIHN0
b3BKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzU2hvdWxkVGVy
bWluYXRlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllciwgamF2
YVNjcmlwdFRocmVhZHNDb3VudD4gdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4s
IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ+IHRocmVhZHM7CiAgICAgewogICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwogICAgICAgICBjb3B5VG9WZWN0
b3IoamF2YVNjcmlwdFRocmVhZHMoKSwgdGhyZWFkcyk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9p
ZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytpKQotICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbih0aHJlYWRzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRo
cmVhZHNNdXRleCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQppbmRleCBmYjRkMjZmY2NlYjcwYzRiNTMyMDEwZGE4NWZiOWNlNzg1NWMxMzg0Li4zY2VhYTZm
M2U2NTczNWQzMGVmMWE0Zjg5N2Q1ZTY5YzRmYTVmZjA2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0xMDcyLDggKzEwNzIsOCBAQCBzdGF0aWMgdm9p
ZCB0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCgpCiAgICAgcHRocmVhZF9qb2luKHB0aHJlYWQsIDAp
OwogCiAgICAgLy8gTm93IGNyZWF0ZSBhbm90aGVyIHRocmVhZCB1c2luZyBXVEYuIE9uIE9TWCwg
aXQgd2lsbCBoYXZlIHRoZSBzYW1lIHB0aHJlYWQgaGFuZGxlCi0gICAgLy8gYnV0IHNob3VsZCBn
ZXQgYSBkaWZmZXJlbnQgVGhyZWFkSWRlbnRpZmllci4KLSAgICBjcmVhdGVUaHJlYWQocnVuVGhy
ZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsKKyAgICAvLyBidXQgc2hvdWxkIGdldCBh
IGRpZmZlcmVudCBSZWZQdHI8VGhyZWFkPi4KKyAgICBUaHJlYWQ6OmNyZWF0ZShydW5UaHJlYWQs
IDAsICJEdW1wUmVuZGVyVHJlZTogdGVzdCIpOwogfQogCiBzdGF0aWMgdm9pZCBhbGxvY2F0ZUds
b2JhbENvbnRyb2xsZXJzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0NvbmRpdGlvbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRp
b24uY3BwCmluZGV4IDg0ODUyNzM1MWY2MDYzZmMyNjM2ODc4MDU2ZDljMjRkYmFiZTgzZGMuLjc3
MjE2MzZiNzc4MDdmMTM5NTFlYTExMmZiZDQxM2U4ZmFjNDYwYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcApAQCAtODksMTQgKzg5LDE0IEBAIHZvaWQg
cnVuVGVzdCgKICAgICBDb25kaXRpb24gZW1wdHlDb25kaXRpb247CiAgICAgQ29uZGl0aW9uIGZ1
bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJl
YWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAg
VmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0
cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2Vp
dmVkOwogICAgIExvY2sgcmVjZWl2ZWRMb2NrOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElk
ZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZElk
ZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0aHJlYWQi
LAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0x
MDgsNyArMTA4LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVtcHR5Q29uZGl0aW9uLCBsb2NrZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsm
XSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50
VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENv
bnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5z
aXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHBy
ZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVl
LnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICFzaG91bGRDb250aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGltZW91dCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBydW5UZXN0KAogICAgIHNsZWVw
KGRlbGF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2VyczsgaS0tOykgewot
ICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQo
CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0
ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXNQZXJQ
cm9kdWNlcjsgKytpKSB7CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2tlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRp
Y2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNp
emUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNr
aW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRD
b250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVl
dWVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xNTUsOCArMTU1LDggQEAgdm9pZCBydW5UZXN0KAog
ICAgICAgICBwcm9kdWNlclRocmVhZHMuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOwogICAgIH0K
IAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJU
aHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVy
KTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiBwcm9kdWNlclRo
cmVhZHMpCisgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAK
ICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobG9jayk7CkBAIC0x
NjQsOCArMTY0LDggQEAgdm9pZCBydW5UZXN0KAogICAgIH0KICAgICBlbXB0eUNvbmRpdGlvbi5u
b3RpZnlBbGwoKTsKIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
IDogY29uc3VtZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJl
YWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIg
OiBjb25zdW1lclRocmVhZHMpCisgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21w
bGV0aW9uKCk7CiAKICAgICBFWFBFQ1RfRVEobnVtUHJvZHVjZXJzICogbnVtTWVzc2FnZXNQZXJQ
cm9kdWNlciwgcmVjZWl2ZWQuc2l6ZSgpKTsKICAgICBzdGQ6OnNvcnQocmVjZWl2ZWQuYmVnaW4o
KSwgcmVjZWl2ZWQuZW5kKCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvTG9jay5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcApp
bmRleCA1NTc2MzAyZDY5MGRmY2EzNTk5MjkyOGIxYzg1M2M3NjIyZTQ1ZmI5Li42YTRlNTM4ZjU2
ZjQ2ZDE3N2EzZjYyZjFkZGViM2E0ZDBhZjJhZjA4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9Mb2NrLmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgcnVuTG9ja1Rlc3QodW5zaWdu
ZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1UaHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVk
CiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExvY2tUeXBlW10+IGxvY2tzID0gc3RkOjptYWtlX3Vu
aXF1ZTxMb2NrVHlwZVtdPihudW1UaHJlYWRHcm91cHMpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxk
b3VibGVbXT4gd29yZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1UaHJlYWRHcm91
cHMpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IHRocmVhZHMgPSBz
dGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFkR3JvdXBzICogbnVt
VGhyZWFkc1Blckdyb3VwKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVmUHRyPFRocmVhZD5bXT4g
dGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRyPFRocmVhZD5bXT4obnVtVGhyZWFkR3Jv
dXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKIAogICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3Jv
dXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykgewogICAgICAg
ICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAg
ICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRo
cmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3Jv
dXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IFRocmVhZDo6Y3Jl
YXRlKAogICAgICAgICAgICAgICAgICJMb2NrIHRlc3QgdGhyZWFkIiwKICAgICAgICAgICAgICAg
ICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsIG51bUl0ZXJhdGlvbnMsIHdvcmtQ
ZXJDcml0aWNhbFNlY3Rpb25dICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtSXRlcmF0aW9uczsgaS0tOykgewpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIHJ1bkxv
Y2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdy
b3VwLCB1bnNpZ25lZAogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBu
dW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAg
ICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgZG91
YmxlIGV4cGVjdGVkID0gMDsKICAgICBmb3IgKHVpbnQ2NF90IGkgPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obnVtSXRlcmF0aW9ucykgKiB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uICogbnVtVGhyZWFk
c1Blckdyb3VwOyBpLS07KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvUGFya2luZ0xvdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5n
TG90LmNwcAppbmRleCBjNjdlMWUwODE1YTgzYWZhOTMzM2UyYWM5YTJiZDc4YjY3YjE2NDViLi41
YWY5YzdjODI3YjIxZTIxZDhkZjkzMDUyNjBkNmZmZWU2OGZiZDFjIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcApAQCAtNDgsMTYgKzQ4LDE0IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtVGhyZWFkczsgaS0tOykgewogICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAg
ICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRl
KAogICAgICAgICAgICAgICAgICAgICAiUGFya2luZyBUZXN0IFRocmVhZCIsCiAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfTkUoMHUs
IGN1cnJlbnRUaHJlYWQoKSk7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oKTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tl
cihsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF3YWtlLmFkZChjdXJyZW50VGhyZWFk
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9IGN1cnJlbnRUaHJlYWQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3YWtlLmFkZChUaHJlYWQ6OmN1cnJlbnQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdva2VuID0gJlRocmVhZDo6Y3VycmVudCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKICAgICAg
ICAgICAgICAgICAgICAgfSkpOwogICAgICAgICB9CkBAIC02NSwxNiArNjMsMTYgQEAgc3RydWN0
IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICB2b2lkIHVucGFya09uZSh1bnNpZ25lZCBzaW5nbGVV
bnBhcmtJbmRleCkKICAgICB7Ci0gICAgICAgIEVYUEVDVF9FUSgwdSwgbGFzdEF3b2tlbik7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgPT0gbGFzdEF3b2tlbik7CiAgICAgICAgIAogICAg
ICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKLSAgICAgICAgVmVjdG9yPFRo
cmVhZElkZW50aWZpZXIsIDg+IHF1ZXVlOworICAgICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4s
IDg+IHF1ZXVlOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZd
IChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3Mp
IHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lk
KiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgcXVldWUuYXBw
ZW5kKHRocmVhZElkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZCgmdGhy
ZWFkSWRlbnRpZmllcik7CiAKICAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7
CiAgICAgICAgICAgICB9KTsKQEAgLTg3LDEyICs4NSwxMiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hU
ZXN0IHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKGxv
Y2spOwogICAgICAgICAgICAgd2hpbGUgKGF3YWtlLnNpemUoKSA8IHNpbmdsZVVucGFya0luZGV4
ICsgMSkKICAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwotICAgICAgICAg
ICAgRVhQRUNUX05FKDB1LCBsYXN0QXdva2VuKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG51
bGxwdHIgIT0gbGFzdEF3b2tlbik7CiAgICAgICAgICAgICBpZiAoIXF1ZXVlLmlzRW1wdHkoKSAm
JiBxdWV1ZVswXSAhPSBsYXN0QXdva2VuKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiV29r
ZSB1cCB3cm9uZyB0aHJlYWQ6IHF1ZXVlID0gIiwgbGlzdER1bXAocXVldWUpLCAiLCBsYXN0IGF3
b2tlbiA9ICIsIGxhc3RBd29rZW4sICJcbiIpOwogICAgICAgICAgICAgICAgIEVYUEVDVF9FUShx
dWV1ZVswXSwgbGFzdEF3b2tlbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsYXN0QXdv
a2VuID0gMDsKKyAgICAgICAgICAgIGxhc3RBd29rZW4gPSBudWxscHRyOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xMDAsNyArOTgsNyBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwogICAgICAgICBQYXJr
aW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25z
dCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYsIGNvbnN0IHZvaWQq
IGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCkBAIC0xMTQsNyAr
MTEyLDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICAgICAgbnVtV2FpdGluZ09u
QWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAgICAgICAgICBb
Jl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAg
IFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlm
IChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIApAQCAtMTI5LDggKzEyNyw4IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3Qgewog
ICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlcik7CiAgICAgICAgIH0KIAotICAg
ICAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMpCi0g
ICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAg
ICAgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogdGhyZWFkcykKKyAg
ICAgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQog
CiAgICAgLy8gU2VtYXBob3JlIG9wZXJhdGlvbnMuCkBAIC0xNzksOSArMTc3LDkgQEAgc3RydWN0
IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgQXRvbWljPGludD4gc2VtYXBob3JlOwogICAgIHN0ZDo6
bXV0ZXggbG9jazsKICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBjb25kaXRpb247Ci0gICAg
SGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBhd2FrZTsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRp
Zmllcj4gdGhyZWFkczsKLSAgICBUaHJlYWRJZGVudGlmaWVyIGxhc3RBd29rZW4geyAwIH07Cisg
ICAgSGFzaFNldDxSZWY8VGhyZWFkPj4gYXdha2U7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+
PiB0aHJlYWRzOworICAgIFJlZlB0cjxUaHJlYWQ+IGxhc3RBd29rZW4geyBudWxscHRyIH07CiB9
OwogCiB2b2lkIHJ1blBhcmtpbmdUZXN0KHVuc2lnbmVkIG51bUxhdGNoZXMsIHVuc2lnbmVkIGRl
bGF5LCB1bnNpZ25lZCBudW1UaHJlYWRzLCB1bnNpZ25lZCBudW1TaW5nbGVVbnBhcmtzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306496</attachid>
            <date>2017-04-07 06:45:28 -0700</date>
            <delta_ts>2017-04-07 07:14:39 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407224526.patch</filename>
            <type>text/plain</type>
            <size>218405</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5jMTBkYzA5MGMwMzI1Mzlj
NzM1MWJmNDEyMDFmYzg2MzhiM2Y0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Om93bmVyVGhyZWFkKToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6
c2VuZCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKwogMjAxNy0wNC0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA1YzBiYjUwZDg1MGNjZDVmZDRlYzUwZGM5NDQ4ODM0Y2ZjNmNjYzNkLi44Yjc4ZTgyYTM4
YTY1M2Y3MjgzNmM0ZWU0ZGI2MDg2YTIzMGJkMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAx
Ny0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5k
IGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhy
ZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0Nv
bmRpdGlvblNwZWVkVGVzdC5jcHA6CisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NU
ZXN0LmNwcDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAg
ICAqIHd0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJl
YWQ6OnN0YXJ0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3Rm
L01haW5UaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQpOgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisgICAgICAgICogd3RmL01l
bW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6
dHJ5TG9ja0Zvcik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFBy
aXZhdGU6OndvcmtlclRocmVhZCk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6VGhy
ZWFkUHJpdmF0ZSk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorICAgICAgICAoV1RG
OjpQYXJraW5nTG90Ojpmb3JFYWNoSW1wbCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoK
KyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9yRWFjaCk6CisgICAgICAgICogd3RmL1JlZlB0
ci5oOgorICAgICAgICAoV1RGOjpSZWZQdHI6OlJlZlB0cik6CisgICAgICAgICogd3RmL1RocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oOgorICAgICAgICAoV1RGOjpUaHJlYWRGdW5jdGlvbkludm9j
YXRpb246OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbik6CisgICAgICAgICogd3RmL1RocmVhZEdy
b3VwLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9y
bVRocmVhZC5oLgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAgICAgICAoV1RG
OjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAgICogd3RmL1Ro
cmVhZEhvbGRlclB0aHJlYWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAg
ICogd3RmL1RocmVhZEhvbGRlcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9U
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFs
aXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJXaW4uaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAg
ICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRI
b2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZHVtcCk6Cisg
ICAgICAgIChXVEY6Om5vcm1hbGl6ZVRocmVhZE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpjcmVhdGVUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW50ZXJhY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW5pdGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjphZGp1c3RlZFFPU0NsYXNzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6
aWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkZE9uRXhpdENhbGxiYWNrKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlk
Sm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6
Y3VycmVudFRocmVhZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZSk6CisgICAgICAg
IChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3Vy
cmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQpOgorICAgICAgICAoV1RGOjp3dGZUaHJlYWRF
bnRyeVBvaW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRpZEV4aXQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmVzdGFibGlzaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y2hh
bmdlUHJpb3JpdHkpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkZXRhY2gpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNy
ZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjdXJyZW50SUQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6cmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpn
ZXRSZWdpc3RlcnMpOgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpQdGhyZWFkU3RhdGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVh
ZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlI
ZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmRldGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6c2lnbmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5n
V2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChX
VEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUlu
dGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpjdXJyZW50SUQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OlRocmVhZCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkRXhp
dCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0YWJsaXNoKToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBs
ZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6cmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpnZXRSZWdpc3RlcnMpOgorICAg
ICAgICAoV1RGOjp0aHJlYWRNYXBNdXRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVh
ZE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlm
aWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNyZWF0ZVRocmVhZEludGVybmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRl
dGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpXb3JrUXVl
dWU6OmNvbmN1cnJlbnRBcHBseSk6CisgICAgICAgICogd3RmL1dvcmtRdWV1ZS5oOgorICAgICAg
ICAqIHd0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHA6CisgICAgICAgIChXVEY6OmRpc3BhdGNo
UU9TQ2xhc3MpOgorICAgICAgICAqIHd0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwOgor
ICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV29ya1F1
ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAqIHd0Zi9saW51eC9NZW1vcnlQcmVz
c3VyZUhhbmRsZXJMaW51eC5jcHA6CisgICAgICAgIChXVEY6Ok1lbW9yeVByZXNzdXJlSGFuZGxl
cjo6RXZlbnRGRFBvbGxlcjo6RXZlbnRGRFBvbGxlcik6CisgICAgICAgIChXVEY6Ok1lbW9yeVBy
ZXNzdXJlSGFuZGxlcjo6RXZlbnRGRFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIpOgorCiAyMDE3LTA0
LTA3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBVcGRhdGUgdGhlIHByaW9yaXRpZXMgdXNlZCBpbiBnbGliIG1haW4gbG9vcCBzb3Vy
Y2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggODczZDM3OTM0ODRkZGQ2MDhiY2M1OWEwMGE1YmVmNTkyY2FjMGI2
ZC4uYWVmY2Y0YWRkMmI0ZWVjMThhYTFiMGIzYmYzZGNiZjc5ZGM4MjlkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDgxIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVz
ZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRp
b24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0
UmVuZGVyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRo
cmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6
cmVjb3JkRGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpnZXRUaHJl
YWRJRCk6CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZv
ckRlYnVnZ2luZyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6b3Blbik6
CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKiBsb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJl
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhy
ZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0hSVEZEYXRh
YmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OkhS
VEZEYXRhYmFzZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6
OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2Fk
ZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZl
cmJDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJi
Q29udm9sdmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVh
bWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkZXJS
dW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVh
ZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJl
YWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJU
aHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRlIHRo
ZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAy
YjM5Yjk4Yzc0OTY5NjY0ZDI3MGRhYzU4MDk3N2YxMjk1ZDFmYmZlLi43ODUzODE0ODY0M2I1Njg2
MjM2YjEwYWVkMjc4NjY5YWZlYWVhZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3
LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAg
IFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQg
YWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJl
YWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhy
ZWFkOjpTdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6On5T
dG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAgICogU3RvcmFnZS9TdG9y
YWdlVGhyZWFkLmg6CisKIDIwMTctMDQtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBPbmx5IENhcHR1cmUgRXh0cmEgTmV0
d29yayBMb2FkIE1ldHJpY3Mgd2hlbiB0aGVyZSBpcyBhIFdlYiBJbnNwZWN0b3IgRnJvbnRlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhNTJjZDdhY2RkMTIyNjNlNjVhZjE5NmJhMDAzMzAyMTM4YjkxZTY2Li41
NDFlYzEyNGMwMTY0NGJmOWJiZGY2NjFiMGViY2YxYTYyZTI2NDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJl
ZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBz
ZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5j
SW5UaHJlYWQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKElQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6CisgICAgICAgICog
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5
UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRpYWxpemVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRl
IHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
CmluZGV4IGU3ODA4NmMzYTk2MTJhMmYwYjRkN2FhZjFhZGM3YmExYTEwMWM1NDcuLjQzYWVmMDc3
OTcwY2ZlZGIyY2FjMDQ2M2ZjZDllY2NhMjlkMTUyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKQEAgLTk2LDcg
Kzk2LDcgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAoKQogewogICAgIEJpdG1hcCBiaXRtYXA7
CiAgICAgY29uc3QgaW50IG51bVRocmVhZHMgPSA1OwotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSURzW251bVRocmVhZHNdOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZHNbbnVtVGhyZWFk
c107CiAgICAgRGF0YSBkYXRhW251bVRocmVhZHNdOwogCiAgICAgV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CkBAIC0xMDcsMTIgKzEwNywxMiBAQCB2b2lkIHRlc3RDb21wYXJlQW5kU3dhcCgp
CiAgICAgICAgIGRhdGFbaV0uaWQgPSBpOwogICAgICAgICBkYXRhW2ldLm51bVRocmVhZHMgPSBu
dW1UaHJlYWRzOwogICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gdGhyZWFkRnVuYyA9IHN0
ZDo6YmluZChzZXRCaXRUaHJlYWRGdW5jLCAmZGF0YVtpXSk7Ci0gICAgICAgIHRocmVhZElEc1tp
XSA9IGNyZWF0ZVRocmVhZCgic2V0Qml0VGhyZWFkRnVuYyIsIHRocmVhZEZ1bmMpOworICAgICAg
ICB0aHJlYWRzW2ldID0gVGhyZWFkOjpjcmVhdGUoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRG
dW5jKTsKICAgICB9CiAKICAgICBwcmludGYoIldhaXRpbmcgZm9yICVkIHRocmVhZHMgdG8gam9p
blxuIiwgbnVtVGhyZWFkcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBp
KyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEc1tpXSk7CisgICAg
ICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBwcmludGYoIlBBU1M6
IENvbXBhcmVBbmRTd2FwIHRlc3QgY29tcGxldGVkIHdpdGhvdXQgYSBoYW5nXG4iKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzIxN2I1Yzg1NTFhNThlNmNmZDAwYzViZDFm
MmRhYTEwMjVmNDA4ZS4uN2QyMDM2YmU4NjE2ZmY1Mzg2N2U1ZTA3OTU2NWZkYTVhNzg4NTFlOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0NjcsNyArMjQ2Nyw2IEBACiAJCUZF
RDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8q
IExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJCMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi87IH07CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkVFNDNGQ0UxRTY2NDE3MTAw
NzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJl
YWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjA0MDUwMUFBRTY2MkQw
MEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovOyB9OwogCQlGRUZENkZDNjFENUU3
OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJp
bmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwpAQCAtNTA5Myw3ICs1MDkyLDYgQEAK
IAkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoZG9nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBpbmdQb25nU3RhY2tP
dmVyZmxvd1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rl
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBNTBENTFCOTdGNEQ5MDA5
QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHBhdGggPSBBUEkvdGVz
dHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1UaHJlYWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRT
d2FwVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb21wYXJl
QW5kU3dhcFRlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUyMUFBRUM0RUQwMEJEMjhCMCAv
KiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q29tcGFyZUFuZFN3YXBUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYw
QiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTdHJpbmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODU0LDcg
KzY4NTIsNiBAQAogCQkJCUY2OTJBODc4MDI1NTU5N0QwMUZGNjBGNyAvKiBPcGVyYXRpb25zLmgg
Ki8sCiAJCQkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovLAogCQkJ
CTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8sCi0JCQkJRkVFNDNGQ0Qx
RTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8sCiAJCQkJODY4OTE2QTkxNTVG
Mjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggKi8sCiAJCQkJMTQ3MzQxREYxREMyQ0U5NjAw
QUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmNwcCAqLywKIAkJCQkxNDczNDFEMzFEQzAyRTZE
MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUuaCAqLywKQEAgLTkzMzQsNyArOTMzMSw2IEBA
CiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzA1QjQxQUMxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUU0M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZv
cm1UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzI3MUJEQTA4RUYwMDMzMUI4NCAv
KiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIwMUE2
RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0
MUIyMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKaW5kZXggODdiMzUzYWEzNzky
NWNhMWUyZmE4NDExOTk3NmFkZjBiMWUwN2JhYS4uYzkxNzcwNzk1ODhmODZkNDMxYTI4YmMwNzRk
NGZlMmUzZjEzZGM0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3Bw
CkBAIC0xOTEzLDEwICsxOTEzLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAog
ICAgIExvY2sgbG9jazsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAg
ICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAg
ICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAg
ICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpA
QCAtMTkzMyw4ICsxOTMzLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAg
ICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFk
IDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAg
ICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IDAxOTk2YWY3MWFiNGYwOWViNDliNzAxMWMxN2Ri
YzkzYzQwY2U4N2EuLjkwNDY1NjQ4ODdiNmIzYTRhZmFjMzU5ZGMxMGM1MDM4NGQ3NGRlZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0xNjg1MCwxMCArMTY4NTAsMTAgQEAg
dm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVj
dG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+
PiB0aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJl
ck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAg
ICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAg
ICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewog
ICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xNjg3MCw4ICsxNjg3MCw4IEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgfQog
Ci0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0
aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAppbmRleCBhNGUyMWY5ZmEzY2Q0NzIxZWEyNjc1ZTA2ZTRk
NTMwYzViYTk1YjM1Li5lOWIxZjVjMmYwYmMyN2IwMjkzMTBjNTU4MTUyMGIxYjU1MjI1OTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcApA
QCAtNDYsNyArNDYsNyBAQCB2b2lkIGluaXRpYWxpemVTdXBlclNhbXBsZXIoKQogICAgIGlmICgh
T3B0aW9uczo6dXNlU3VwZXJTYW1wbGVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNyZWF0
ZVRocmVhZCgKKyAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBTdXBlciBTYW1wbGVy
IiwKICAgICAgICAgW10gKCkgewogICAgICAgICAgICAgY29uc3QgaW50IHNsZWVwUXVhbnR1bSA9
IDEwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAppbmRleCBjZWY5
OTBjYjQ4MzNhNmJiOTQ3MWJkMDhhNTA0ZTU1ZmI0N2RmNDU4Li5hZDBlY2M2OWE3N2QxNzJjZjRi
YzFlZmFjOTNkZjkzMDI3YzAwOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xp
c3QsICI6IFRocmVhZCBzdGFydGVkXG4iKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3JlbGF0
aXZlUHJpb3JpdHkpCi0gICAgICAgICAgICBjaGFuZ2VUaHJlYWRQcmlvcml0eShjdXJyZW50VGhy
ZWFkKCksIG1fcmVsYXRpdmVQcmlvcml0eSk7CisgICAgICAgICAgICBUaHJlYWQ6OmN1cnJlbnQo
KS5jaGFuZ2VQcmlvcml0eShtX3JlbGF0aXZlUHJpb3JpdHkpOwogICAgICAgICAKICAgICAgICAg
bV9jb21waWxhdGlvblNjb3BlID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvblNjb3BlPigp
OwogICAgICAgICBtX2xvbmdMaXZlZFN0YXRlID0gc3RkOjptYWtlX3VuaXF1ZTxMb25nTGl2ZWRT
dGF0ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlz
YXNzZW1ibGVyLmNwcAppbmRleCA3ODhhNmMzNjIzNjljNThkYWQyOWE2MGEzODcxMDQ0ZTQ2NGVk
MzA1Li4yYjgyNGVjZmRlNTg5M2IyYzZiNzA2ZjQ3MDJlY2QyMjk1ZDIzNTU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIGNsYXNzIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciB7CiBwdWJsaWM6
CiAgICAgQXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkKICAgICB7Ci0gICAgICAgIGNyZWF0ZVRo
cmVhZCgiQXN5bmNocm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKKyAg
ICAgICAgVGhyZWFkOjpjcmVhdGUoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkg
eyBydW4oKTsgfSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZW5xdWV1ZShzdGQ6OnVuaXF1ZV9w
dHI8RGlzYXNzZW1ibHlUYXNrPiB0YXNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApp
bmRleCAzYWVlMzAxMDRmNTI5MWEyODc2NGE1Y2RlZTVhYThmMGNhNzJhZDMxLi43MjIzYjIwYzlk
ZmJhMTA0MzA5OGE3ODU3NGJhMjhhNjk0YzA0NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxp
emUoKQogICAgICAgICAgICAgbV9zaG91bGRTdG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSA9IHRy
dWU7CiAgICAgICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlDb25kaXRpb24ubm90aWZ5T25l
KCk7CiAgICAgICAgIH0KLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9jb2xsZWN0
Q29udGludW91c2x5VGhyZWFkKTsKKyAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFk
LT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIHZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xs
ZWN0KCkKICAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkgewotICAgICAgICBtX2NvbGxlY3RDb250aW51b3Vz
bHlUaHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRo
cmVhZCA9IFdURjo6VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiSlNDIERFQlVHIENvbnRp
bnVvdXMgR0MiLAogICAgICAgICAgICAgW3RoaXNdICgpIHsKICAgICAgICAgICAgICAgICBNb25v
dG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggZDA2NTcwMTZiZWVmOWE4OWQwNmRmMjc5NzE3ZTc3MGIxNjRh
NDcxNC4uZDY3ODM3YWZlZjEzMDFmOTY3MmY2MGVhMjljNDNmYzg1OTdkZWI5MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bh
cmFsbGVsSGVscGVyUG9vbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTY2Niw3ICs2NjcsNyBAQCBjbGFzcyBIZWFwIHsKICAgICBMb2NrIG1f
Y29sbGVjdENvbnRpbnVvdXNseUxvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29sbGVjdENvbnRpbnVv
dXNseUNvbmRpdGlvbjsKICAgICBib29sIG1fc2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3Vz
bHkgeyBmYWxzZSB9OwotICAgIFRocmVhZElkZW50aWZpZXIgbV9jb2xsZWN0Q29udGludW91c2x5
VGhyZWFkIHsgMCB9OworICAgIFJlZlB0cjxXVEY6OlRocmVhZD4gbV9jb2xsZWN0Q29udGludW91
c2x5VGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIAogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NT
dGFydFRpbWU7CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ0VuZFRpbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAppbmRleCBiODVi
NzY0OGUyZjVkMTlmYTIyZDc2M2Y3YmNkZWY4ZjQ0YzQyYzg4Li40ZmZkZjljYzRlM2MzNjA2YjFk
YTlhOTQwNzdmYzc0Yzg4NmVjMTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKQEAgLTY0LDYzICs2NCwxMyBAQAogI2luY2x1ZGUg
PHB0aHJlYWRfbnAuaD4KICNlbmRpZgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9X
UykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotLy8gV2UgdXNlIFNJR1VT
UjIgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBpbiBKYXZhU2NyaXB0Q29y
ZS4KLXN0YXRpYyBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7Ci1z
dGF0aWMgU3RhdGljTG9jayBnbG9iYWxTaWduYWxMb2NrOwotdGhyZWFkX2xvY2FsIHN0YXRpYyBz
dGQ6OmF0b21pYzxKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhKj4gdGhyZWFkTG9jYWxD
dXJyZW50VGhyZWFkIHsgbnVsbHB0ciB9OwotCi1zdGF0aWMgdm9pZCBwdGhyZWFkU2lnbmFsSGFu
ZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKLXsKLSAg
ICAvLyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRs
ZXJzIGlzIGFsbG93ZWQuCi0gICAgSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSogdGhy
ZWFkRGF0YSA9IHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5sb2FkKCk7Ci0KLSAgICBpZiAodGhy
ZWFkRGF0YS0+c3VzcGVuZGVkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpIHsKLSAg
ICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIHRoYXQgaXMgaW50ZW5k
ZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2lnc3VzcGVuZC4KLSAgICAgICAgLy8gU28gdGhpcyBo
YW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNob3VsZCBub3QgcHJvY2Vzcy4KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gV2hlbiBzaWduYWwgY29tZXMsIGZpcnN0LCB0aGUgc3lzdGVtIGNhbGxzIHNp
Z25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNpZ3N1c3BlbmQgd2lsbCBiZSByZXN1bWVkLiBTaWdu
YWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5cyBwcmVjZWRlcy4KLSAgICAgICAgLy8gU28sIHRo
ZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhhdCBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgLi4uKSB3
aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQuCi0gICAgICAgIC8v
IGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25z
L3NpZ3N1c3BlbmQuaHRtbAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWNvbnRleHRf
dCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpOwotI2lm
IENQVShQUEMpCi0gICAgdGhyZWFkRGF0YS0+c3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSAqdXNl
ckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7Ci0jZWxzZQotICAgIHRocmVhZERhdGEtPnN1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OwotI2VuZGlm
Ci0KLSAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBp
cyBzdXNwZW5kZWQuCi0gICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rp
b24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhhbmRsZXIu
Ci0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9m
dW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMwotICAgIC8vCi0gICAgLy8g
QW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0IHN1c3Bl
bmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KLSAgICAvLyBodHRwOi8vcHVi
cy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9jaGFwMDQu
aHRtbCN0YWdfMDRfMTEKLSAgICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+c2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7Ci0KLSAgICAvLyBSZWFjaGluZyBoZXJlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlzIGNvbmZpZ3VyZWQgYnkgc2ln
YWN0aW9uJ3Mgc2FfbWFzaykuCi0gICAgLy8gU28gYmVmb3JlIGNhbGxpbmcgc2lnc3VzcGVuZCwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBpcyBkZWZlcnJlZC4gVGhpcyBl
bnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJlY3Vyc2l2ZWx5LgotICAg
IHNpZ3NldF90IGJsb2NrZWRTaWduYWxTZXQ7Ci0gICAgc2lnZmlsbHNldCgmYmxvY2tlZFNpZ25h
bFNldCk7Ci0gICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0LCBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lKTsKLSAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0KTsKLQotICAgIC8vIEFs
bG93IHJlc3VtZSBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgcmVzdW1lZC4KLSAg
ICBzZW1fcG9zdCgmdGhyZWFkRGF0YS0+c2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci19Ci0j
ZW5kaWYgLy8gVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLQog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogCi11c2lu
ZyBUaHJlYWQgPSBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOwordXNpbmcgSlNUaHJlYWQgPSBNYWNo
aW5lVGhyZWFkczo6SlNUaHJlYWQ7CiAKIGNsYXNzIEFjdGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdl
cjsKIHN0YXRpYyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXImIGFjdGl2ZU1hY2hpbmVUaHJl
YWRzTWFuYWdlcigpOwpAQCAtMTk0LDQxICsxNDQsMTMgQEAgTWFjaGluZVRocmVhZHM6On5NYWNo
aW5lVGhyZWFkcygpCiAgICAgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUobV90aHJlYWRTcGVjaWZp
Y0Zvck1hY2hpbmVUaHJlYWRzKTsKIAogICAgIExvY2tIb2xkZXIgcmVnaXN0ZXJlZFRocmVhZHNM
b2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgZm9yIChUaHJlYWQqIHQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyB0OykgewotICAgICAgICBUaHJlYWQqIG5leHQgPSB0LT5uZXh0Owor
ICAgIGZvciAoSlNUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0OykgeworICAgICAg
ICBKU1RocmVhZCogbmV4dCA9IHQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0OwogICAgICAgICB0
ID0gbmV4dDsKICAgICB9CiB9CiAKLXN0YXRpYyBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSog
dGhyZWFkRGF0YSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZFNwZWNpZmlj
PE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhLCBDYW5CZUdDVGhyZWFkOjpUcnVlPj4gdGhyZWFk
RGF0YTsKLSAgICByZXR1cm4gdGhyZWFkRGF0YS5nZXQoKTsKLX0KLQotTWFjaGluZVRocmVhZHM6
OlRocmVhZDo6VGhyZWFkKFRocmVhZERhdGEqIHRocmVhZERhdGEpCi0gICAgOiBkYXRhKHRocmVh
ZERhdGEpCi17Ci0gICAgQVNTRVJUKHRocmVhZERhdGEpOwotfQotCi1UaHJlYWQqIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKQotewotICAgIHJldHVybiBu
ZXcgVGhyZWFkKHRocmVhZERhdGEoKSk7Ci19Ci0KLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVh
ZDo6b3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0Ci17Ci0jaWYg
T1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgIHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVh
ZCA9PSBvdGhlcjsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICByZXR1cm4gISFwdGhyZWFkX2Vx
dWFsKGRhdGEtPnBsYXRmb3JtVGhyZWFkLCBvdGhlcik7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3
YXkgdG8gY29tcGFyZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCiB2b2lk
IE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKIHsKICAgICBpZiAodGhyZWFkU3Bl
Y2lmaWNHZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKSkgewpAQCAtMjM5LDcg
KzE2MSw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZUZv
ckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkID0gbmV3IEpTVGhyZWFkKHRo
aXMpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhy
ZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011
dGV4KTsKQEAgLTI0OCwxMiArMTcwLDEyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJl
bnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVhZHMgPSB0aHJlYWQ7CiB9CiAKLVRocmVh
ZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKK0pTVGhy
ZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKQogewog
ICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIFBsYXRm
b3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAg
Zm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkID09IHBsYXRmb3JtVGhyZWFk
KQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgZm9yIChK
U1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSA9PSBpZCkKICAg
ICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQogCkBAIC0yODMsMjIgKzIwNSwyMSBAQCB2
b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWQodm9p
ZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgICAgIG1hY2hpbmVUaHJl
YWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpKTsKKyAgICAg
ICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElmRm91bmQoY3VycmVudFRocmVhZCgpKTsK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFkPgotdm9pZCBNYWNo
aW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRo
cmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoVGhyZWFkSWRl
bnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011
dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOwotICAgIGlmICgqdCA9
PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsKKyAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICBtX3JlZ2lzdGVyZWRU
aHJlYWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsKICAgICAgICAgZGVsZXRlIHQ7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsK
KyAgICAgICAgSlNUaHJlYWQqIGxhc3QgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgICAgICBm
b3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0OyB0OyB0ID0gdC0+bmV4dCkgewotICAg
ICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAgICAgICAgICBpZiAodC0+
dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAgICAgIGxhc3QtPm5leHQgPSB0LT5uZXh0
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzIwLDE4MiArMjQx
LDIyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNl
cnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRk
KGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3VycmVudFRocmVhZFN0YXRlLnN0YWNrT3Jp
Z2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKE1hY2hpbmVUaHJlYWRzKikKKyAgICA6IG5leHQobnVsbHB0cikKKyAgICAsIG1fdGhyZWFk
KFdURjo6VGhyZWFkOjpjdXJyZW50KCkpCiB7CiAgICAgYXV0byBzdGFja0JvdW5kcyA9IHd0ZlRo
cmVhZERhdGEoKS5zdGFjaygpOwotICAgIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3Jt
VGhyZWFkKCk7Ci0gICAgc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7Ci0gICAgc3Rh
Y2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgQVNTRVJU
KHBsYXRmb3JtVGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKLSAgICBib29sIGlzU3Vj
Y2Vzc2Z1bCA9Ci0gICAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBH
ZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksCi0gICAgICAgICAgICAmcGxh
dGZvcm1UaHJlYWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOwotICAg
IFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpICYmICFP
UyhEQVJXSU4pCi0gICAgdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkLnN0b3JlKHRoaXMpOwotCi0g
ICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25maWd1cmF0aW9uLgot
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplU2lnbmFsSGFuZGxlcjsKLSAgICBz
dGQ6OmNhbGxfb25jZShpbml0aWFsaXplU2lnbmFsSGFuZGxlciwgW10gewotICAgICAgICAvLyBJ
bnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIu
Ci0gICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRo
ZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9u
OwotICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBzaWdhZGRz
ZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLQotICAgICAgICBh
Y3Rpb24uc2Ffc2lnYWN0aW9uID0gcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lOwot
ICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKLSAgICAg
ICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDApOwotICAgIH0p
OwotCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgmbWFzayk7Ci0gICAgc2ln
YWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBwdGhyZWFkX3NpZ21h
c2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLQotICAgIHNlbV9pbml0KCZzZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MuICovIDAsIC8q
IEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwotI2VuZGlmCisgICAgbV9z
dGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKKyAgICBtX3N0YWNrRW5kID0gc3RhY2tC
b3VuZHMuZW5kKCk7CiB9CiAKLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0
YSgpCitzaXplX3QgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3RlcnMoSlNUaHJl
YWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0gICAgQ2xvc2VI
YW5kbGUocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1Mo
REFSV0lOKQotICAgIHNlbV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSNl
bmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsK
KyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdzKTsKIH0KIAotYm9vbCBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAg
IGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQocGxhdGZvcm1UaHJlYWQpOwot
ICAgIHJldHVybiByZXN1bHQgPT0gS0VSTl9TVUNDRVNTOwotI2VsaWYgT1MoV0lORE9XUykKLSAg
ICBib29sIHRocmVhZElzU3VzcGVuZGVkID0gKFN1c3BlbmRUaHJlYWQocGxhdGZvcm1UaHJlYWRI
YW5kbGUpICE9IChEV09SRCktMSk7Ci0gICAgQVNTRVJUKHRocmVhZElzU3VzcGVuZGVkKTsKLSAg
ICByZXR1cm4gdGhyZWFkSXNTdXNwZW5kZWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSAhPSBwbGF0Zm9ybVRocmVh
ZCwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJlbnQgdGhyZWFk
IGl0c2VsZi4iKTsKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9y
IHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0g
ICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4K
LSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFk
cyBBIGFuZCBCLgotICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBh
dHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFu
ZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCi0gICAgICAgIC8vIElu
IHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAgICAgTG9ja0hvbGRlciBs
b2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoIXN1c3BlbmRDb3VudCkgewotICAg
ICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9zaWdxdWV1
ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwgaGFuZGxl
ci4KLSAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0Zm9ybXMs
IGxpa2UgTGludXguCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBzdG9y
ZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNpZ25hbCBo
YW5kbGVyLgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwot
ICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlv
biBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRv
bmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1vcnlfb3JkZXJf
cmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytzdXNwZW5kQ291bnQ7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3BlbmQgdGhyZWFk
cyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6cmVzdW1lKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFkX3Jlc3VtZShw
bGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIFJlc3VtZVRocmVhZChwbGF0
Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgewotICAgICAgICAv
LyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVk
IGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxT
aWduYWxMb2NrKTsKLSAgICAgICAgaWYgKHN1c3BlbmRDb3VudCA9PSAxKSB7Ci0gICAgICAgICAg
ICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRo
ZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
IGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBp
dHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KLSAgICAgICAgICAgIC8vIFRoZXJlIGFy
ZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Ig
c3VzcGVuZCBhbmQgcmVzdW1lLgotICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWdu
YWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgot
ICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3Bl
bmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUg
dXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9j
YWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgot
ICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3Bl
bmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgICAgICBpZiAocHRo
cmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JD
SCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZW1fd2FpdCgmc2VtYXBo
b3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5z
dXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhl
IGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRlZC5zdG9yZShm
YWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLS1z
dXNwZW5kQ291bnQ7Ci0gICAgfQotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHJlc3VtZSB0
aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi1zaXplX3QgTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJlZ2lz
dGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzJiBy
ZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShYODYpCi0gICAg
dW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsKLSAgICB0aHJl
YWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUo
WDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09V
TlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2
NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQUENfVEhSRUFE
X1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhS
RUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQ
UENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZv
ciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5zaWduZWQgdXNl
cl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vsc2UKLSNlcnJv
ciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVybl90IHJlc3Vs
dCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVhZF9zdGF0
ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1Mp
IHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9Q
UkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKYXZhU2NyaXB0
IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVy
bmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5uaW5n
IGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7Ci0gICAg
ICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6ZW9mKHVpbnRw
dHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQotICAgIHJlZ3Mu
Q29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MOwotICAgIEdl
dFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAgICByZXR1cm4g
c2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNf
XykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsK
LSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMpOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJpYnV0ZSk7Ci0j
aWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BFTkJTRCkKLSAg
ICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAgcHRocmVhZF9h
dHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgotI2Vs
c2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVyIFBP
U0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwotICAgIHB0aHJl
YWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgot
ICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aHJlYWQgcmVn
aXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi12b2lkKiBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAordm9pZCogTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB7
CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoKE9TKEZSRUVCU0QpIHx8IGRlZmlu
ZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0
OjpzdGFja1BvaW50ZXIocmVncyk7CkBAIC01MTksNyArMjgwLDcgQEAgdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKIH0KIAog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhy
ZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBP
UyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJ
QkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBA
IC01MjgsNyArMjg5LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lz
dGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAor
dm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9p
bnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJF
RUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAtNTM3LDcgKzI5OCw3IEBAIHZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNv
bnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lz
dGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJl
Z2lzdGVyczo6bGxpbnRQQygpIGNvbnN0CiB7CiAgICAgLy8gTExJbnQgdXNlcyByZWdUNCBhcyBQ
Qy4KICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpCkBAIC01NDgsMTYgKzMwOSw2IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRz
OjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogfQogI2VuZGlmIC8vIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0
YTo6ZnJlZVJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAg
ICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0
ZXJzLnJlZ3M7Ci0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJ
TikgJiYgISgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklU
KSkKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmcmVncy5hdHRyaWJ1dGUpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0ocmVncyk7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSBpbnQgb3NS
ZWRab25lQWRqdXN0bWVudCgpCiB7CiAgICAgaW50IHJlZFpvbmVBZGp1c3RtZW50ID0gMDsKQEAg
LTU3MywxNyArMzI0LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQo
KQogICAgIHJldHVybiByZWRab25lQWRqdXN0bWVudDsKIH0KIAotc3RkOjpwYWlyPHZvaWQqLCBz
aXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpjYXB0dXJlU3RhY2sodm9pZCogc3Rh
Y2tUb3ApCitzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWlu
dGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tCYXNlKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrQmFzZSk7CiAgICAgY2hhciogZW5kID0g
Yml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQq
KT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrVG9wKSkpOwogICAgIEFTU0VSVChi
ZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5kV2l0aFJlZFpvbmUgPSBlbmQgKyBvc1JlZFpv
bmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXpl
b2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKSA9
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKTsKIAotICAgIGlm
IChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQotICAgICAgICBlbmRXaXRoUmVkWm9uZSA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0VuZCk7CisgICAgaWYgKGVuZFdpdGhSZWRa
b25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJldF9j
YXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVuZFdp
dGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhSZWRa
b25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzM2Nyw5IEBAIHN0YXRpYyB2b2lkIGNvcHlNZW1vcnko
dm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBzaXplKQogLy8gc2lnbmlmaWNhbnQg
cGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayBpcyBvbmx5IGNhbGxl
ZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAvLyBvcGVyYXRpb24uIEFzIHRoZSBoZWFwIGlz
IGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRoZSBzdGFjayB0aGUgcGVyZm9ybWFuY2UgaGl0
IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNr
KFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBz
aXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJl
YWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkK
IHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAgSlNUaHJlYWQ6OlJlZ2lz
dGVycyByZWdpc3RlcnM7CiAgICAgc2l6ZV90IHJlZ2lzdGVyc1NpemUgPSB0aHJlYWQtPmdldFJl
Z2lzdGVycyhyZWdpc3RlcnMpOwogICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBzdGFjayA9
IHRocmVhZC0+Y2FwdHVyZVN0YWNrKHJlZ2lzdGVycy5zdGFja1BvaW50ZXIoKSk7CiAKQEAgLTYz
MSw4ICszODIsNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
ayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplXwogICAgIGlmIChjYW5Db3B5KQog
ICAgICAgICBjb3B5TWVtb3J5KHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXIpICsgKnNpemUsIHN0
YWNrLmZpcnN0LCBzdGFjay5zZWNvbmQpOwogICAgICpzaXplICs9IHN0YWNrLnNlY29uZDsKLQot
ICAgIHRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogfQogCiBib29sIE1hY2hpbmVU
aHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2
b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQpAQCAtNjQ0LDM2ICsz
OTMsMzQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKIAogICAgICpzaXplID0gMDsKIAotICAg
IFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7
CisgICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IGN1cnJlbnRUaHJlYWQoKTsKICAgICBpbnQgbnVt
YmVyT2ZUaHJlYWRzID0gMDsgLy8gVXNpbmcgMCB0byBkZW5vdGUgdGhhdCB3ZSBoYXZlbid0IGNv
dW50ZWQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHlldC4KICAgICBpbnQgaW5kZXggPSAxOwotICAg
IFRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKKyAgICBKU1RocmVhZCogdGhy
ZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAotICAgIFRocmVhZCogcHJldmlvdXNUaHJlYWQg
PSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJl
YWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRocmVhZC0+c3VzcGVuZCgpOworICAg
IEpTVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51bGxwdHI7CisgICAgZm9yIChKU1RocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7CisgICAgICAg
IGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAjaWYgT1MoREFSV0lOKQotICAgICAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgIGlm
ICghbnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoVGhyZWFkKiBj
b3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRocmVhZDsgY291bnRl
ZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCisgICAgICAgICAgICAgICAgICAgIGZvciAo
SlNUaHJlYWQqIGNvdW50ZWRUaHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhy
ZWFkOyBjb3VudGVkVGhyZWFkID0gY291bnRlZFRocmVhZC0+bmV4dCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mVGhyZWFkcysrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBSZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQg
dGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3IgbG9nZ2luZy4KLSAgICAgICAgICAgICAgICBr
ZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVh
ZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKwor
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwog
CiAgICAgICAgICAgICAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLAotICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdl
IGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhy
ZWFkIFslZC8lZDogJXBdIHBsYXRmb3JtVGhyZWFkICVwLiIsCi0gICAgICAgICAgICAgICAgICAg
IGVycm9yLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSkpOworICAgICAgICAgICAgICAgICAgICAi
SmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJl
YWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIGlkICVwLiIsCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5lcnJvcigpLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+dGhyZWFkSUQoKSkpOwogCiAgICAgICAgICAg
ICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVhZCBvbiB0aGUgdGhyZWFkc1RvQmVEZWxldGVk
IGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBkZWxldGUgaXQgaGVyZSBi
ZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVyCiAgICAgICAgICAgICAgICAgLy8gdGhyZWFk
cywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRpbmcgdGhlIEMgaGVhcCBsb2NrIHdoaWNoCiAg
ICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3IgZGVsZXRpbmcgdGhlIGludmFsaWQgdGhyZWFk
LiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAgICAgICAgIC8vIGRlZmVyIHRoZSBkZWxldGlv
biB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBhbGwgdGhyZWFkcy4KLSAgICAgICAgICAgICAg
ICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CisgICAgICAgICAgICAgICAgSlNU
aHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgICAgICAgICAgdGhyZWFk
LT5uZXh0ID0gdGhyZWFkc1RvQmVEZWxldGVkOwogICAgICAgICAgICAgICAgIHRocmVhZHNUb0Jl
RGVsZXRlZCA9IHRocmVhZDsKIApAQCAtNjg3LDI1ICs0MzQsMjUgQEAgYm9vbCBNYWNoaW5lVGhy
ZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCogYnVmZmUKICNlbHNlCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZUaHJlYWRz
KTsKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShwcmV2aW91c1RocmVhZCk7Ci0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBwcmV2aW91
c1RocmVhZCA9IHRocmVhZDsKICAgICAgICAgdGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgIH0K
IAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7
IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCAhPSBwbGF0Zm9y
bVRocmVhZCkKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBpZiAodGhyZWFkLT50
aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2sodGhy
ZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5l
eHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChK
U1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAg
ICAgICAgICAgIHRocmVhZC0+cmVzdW1lKCk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRo
cmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKLSAgICAgICAgVGhyZWFkKiBu
ZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IHRo
cmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJl
YWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVh
ZCA9IG5leHRUaHJlYWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YWNoaW5lU3RhY2tNYXJrZXIuaAppbmRleCBkMTk2ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3
OTk0NDg3ZjIyLi45MTk3YzQ0MDhjZTJmZDRlZTZhYTNkMTRhN2M2OWU2ZjhjYTEwOTQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAt
MjIsMjUgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaHJlYWQuaCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNp
ZmljLmg+CiAKLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lO
KQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcg
c2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRfdCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUg
b24gRnJlZUJTRC4KLS8vIFRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1D
VVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2FuIGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVC
U0QgMTAueCBnb2VzIEVPTC4KLS8vIGh0dHBzOi8vYnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9z
aG93X2J1Zy5jZ2k/aWQ9MjA3MDc5Ci0jaWYgT1MoRlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4
dC5oPgotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9j
a1NldDsKQEAgLTY0LDEzICs1MSwxMCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEN1cnJlbnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0
byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11
bHRpcGxlIHRocmVhZHMuCiAKLSAgICBjbGFzcyBUaHJlYWREYXRhIHsKKyAgICBjbGFzcyBKU1Ro
cmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAg
ICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+VGhyZWFkRGF0YSgpOwotCi0gICAgICAgIHN0
YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIEpTVGhy
ZWFkKE1hY2hpbmVUaHJlYWRzKik7CiAKICAgICAgICAgc3RydWN0IFJlZ2lzdGVycyB7CiAgICAg
ICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXIoKSBjb25zdDsKQEAgLTc5LDg0ICs2Myw0MCBAQCBj
bGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgICAgICB2b2lkKiBpbnN0cnVjdGlvblBvaW50
ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25zdDsKICNlbmRpZiAv
LyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICAKLSNpZiBPUyhEQVJXSU4p
IHx8IE9TKFdJTkRPV1MpCi0gICAgICAgICAgICB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IE1h
Y2hpbmVDb250ZXh0OjpQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIChPUyhGUkVFQlNEKSB8fCBk
ZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICB1c2luZyBQbGF0
Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgICAg
ICAgICBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewotICAgICAgICAgICAgICAgIHB0aHJlYWRf
YXR0cl90IGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIH07Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB0
aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLQotICAgICAg
ICAgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKKyAgICAgICAgICAgIFdURjo6UGxhdGZvcm1S
ZWdpc3RlcnMgcmVnczsKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHN1c3BlbmQoKTsKLSAg
ICAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3Rl
cnMmKTsKLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYpOworICAgICAgICBF
eHBlY3RlZDx2b2lkLCBUaHJlYWQ6OlBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCkgeyBy
ZXR1cm4gbV90aHJlYWQtPnN1c3BlbmQoKTsgfQorICAgICAgICB2b2lkIHJlc3VtZSgpIHsgbV90
aHJlYWQtPnJlc3VtZSgpOyB9CisgICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJz
JiByZWdzKTsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2
b2lkKiBzdGFja1RvcCk7CiAKLSAgICAgICAgUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQ7
Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogc3RhY2tFbmQ7Ci0jaWYg
T1MoV0lORE9XUykKLSAgICAgICAgSEFORExFIHBsYXRmb3JtVGhyZWFkSGFuZGxlOwotI2VsaWYg
VVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgICAgICBzZW1fdCBzZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lOwotICAgICAgICBtY29udGV4dF90IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0
OwotICAgICAgICBpbnQgc3VzcGVuZENvdW50IHsgMCB9OwotICAgICAgICBzdGQ6OmF0b21pYzxi
b29sPiBzdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsKLQotICAgIGNsYXNzIFRo
cmVhZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgICAgICBUaHJlYWQo
VGhyZWFkRGF0YSopOwotCi0gICAgcHVibGljOgotICAgICAgICB1c2luZyBSZWdpc3RlcnMgPSBU
aHJlYWREYXRhOjpSZWdpc3RlcnM7Ci0KLSAgICAgICAgc3RhdGljIFRocmVhZCogY3JlYXRlRm9y
Q3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQbGF0Zm9y
bVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUGxh
dGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQot
Ci0gICAgICAgIGJvb2wgc3VzcGVuZCgpIHsgcmV0dXJuIGRhdGEtPnN1c3BlbmQoKTsgfQotICAg
ICAgICB2b2lkIHJlc3VtZSgpIHsgZGF0YS0+cmVzdW1lKCk7IH0KLSAgICAgICAgc2l6ZV90IGdl
dFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgcmV0dXJuIGRhdGEtPmdldFJlZ2lzdGVycyhy
ZWdzKTsgfQotICAgICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IGRh
dGEtPmZyZWVSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXpl
X3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkgeyByZXR1cm4gZGF0YS0+Y2FwdHVyZVN0
YWNrKHN0YWNrVG9wKTsgfQotCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBwbGF0Zm9y
bVRocmVhZCgpIHsgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkOyB9Ci0gICAgICAgIHZvaWQq
IHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrQmFzZTsgfQotICAgICAgICB2
b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrRW5kOyB9CisgICAgICAg
IFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFk
LT5pZCgpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
Y2tCYXNlOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyByZXR1cm4gbV9zdGFj
a0VuZDsgfQogCi0gICAgICAgIFRocmVhZCogbmV4dDsKLSAgICAgICAgVGhyZWFkRGF0YSogZGF0
YTsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQ7CisgICAgICAgIFJlZjxXVEY6OlRocmVhZD4gbV90
aHJlYWQ7CisgICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOworICAgICAgICB2b2lkKiBtX3N0YWNr
RW5kOwogICAgIH07CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9yZWdpc3RlcmVk
VGhyZWFkc011dGV4OyB9Ci0gICAgVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXguaXNMb2Nr
ZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhyZWFkKiBtYWNoaW5l
VGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9CisgICAgSlNU
aHJlYWQqIG1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCk7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJS
b3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRlJik7CiAKLSAgICB2
b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCosIHZvaWQqLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCopOworICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJlYWQq
LCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29sIHRyeUNvcHlPdGhl
clRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBzaXplX3QgY2FwYWNp
dHksIHNpemVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgcmVt
b3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFk
PgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCk7CisgICAgdm9p
ZCByZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAgICAgTG9jayBtX3Jl
Z2lzdGVyZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwor
ICAgIEpTVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdURjo6VGhyZWFkU3BlY2lm
aWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgzM2QyZDIzMmI4YTljZDZm
M2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDljZTcyMTMzYzQxY2RkMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01OCw3ICs1OCw3IEBAIEF0
b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNTdGF0czo6SUNTdGF0cygp
CiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAgW3RoaXNdICgpIHsKICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04NCw3ICs4NCw3IEBAIElD
U3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CiAgICAg
fQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkKTsKKyAgICBtX3Ro
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0YXRzOjphZGQoY29uc3Qg
SUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lD
U3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCmluZGV4IGU3NWNm
ZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2UxZTkyY2U5N2RkMWQ5NTA4
OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCkBA
IC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRlOgogCiAgICAgU3BlY3Ry
dW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBt
X3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBMb2NrIG1fbG9jazsK
ICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0b3AgeyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA1OWI2MjczZGVhYjFkZDU5ZmQ3NTk0MWNkNmU2
MTE0OTI4NzkyNDcwLi43NWFjNjBkOWIzNDYwODFjYjY3MDY5ZWRlZDM1Mjg1NDNmYmQzZDg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRlKiBleGVjKQog
ICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29sIGRpZFN0YXJ0ID0gZmFs
c2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisg
ICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0Mg
QWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9jaywgJmRpZFN0YXJ0Q29u
ZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1hbmRMaW5lIGNvbW1hbmRM
aW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhyZWFkLT5kZXRhY2go
KTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZGlkU3RhcnRM
b2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0YXJ0VGltZW91dFRocmVh
ZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IHRpbWVvdXQgc3RyaW5n
IGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgIiBi
dXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQuXG4iKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRocmVhZE1haW4sIDAsICJq
c2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKHRpbWVvdXRU
aHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIxZmUxMjdlOGI3MzFmYjUz
YjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUyNTRhOGUxZWYxM2RhNWM0
MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTEw
OSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBsb2NrQ291bnQpCiAgICAg
ICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRocmVhZCA9IGN1cnJlbnRU
aHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3VycmVudCgpOwogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVhZCA9IHRydWU7CiAgICAg
QVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5o
CmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5ZGJlNzQuLjFhY2E0Yjlh
N2JiNGRjYWYwNGRmMTIxNzEwOTcyMGVjOGUyZDY4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3MgSlNMb2NrIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0qIHZtKCkgeyByZXR1cm4g
bV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVh
ZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFkPj4gb3duZXJUaHJlYWQo
KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJlYWQpCiAgICAgICAgICAg
ICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsgcmV0dXJuIG1faGFz
T3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7IH0KKyAgICBi
b29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9oYXNPd25lclRocmVh
ZCAmJiBtX293bmVyVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsgfQogCiAgICAgdm9p
ZCB3aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBjbGFzcyBKU0xvY2sg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAgLy8gZGlmZmVyZW50
IHRocmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8gcmFjZXMuCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkwNDIjYzYKICAg
ICBib29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRocmVhZElkZW50aWZpZXIg
bV9vd25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVyVGhyZWFkOwogICAgIGlu
dHB0cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKICAgICBi
b29sIG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTQxOTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRp
ZgotCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNp
bmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPG1h
Y2gvdGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJXSU4pCi10eXBlZGVmIG1h
Y2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykKLXR5cGVkZWYgRFdP
UkQgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10eXBlZGVmIHB0aHJlYWRf
dCBQbGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0gICAgCi1pbmxpbmUgUGxh
dGZvcm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0g
ICAgcmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9zZWxmKCkpOwotI2VsaWYg
T1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7Ci0jZWxpZiBVU0Uo
UFRIUkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2VuZGlmCi19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4NDkzYjMzYmM4OWZlM2Zh
ZDk4YTlkLi42N2YyMGQ5MmNlY2RmMGFiM2JmZjdmNmZkMTI2NjAwYWExNWJmMWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcApA
QCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAgICBib29sIGlzVmFsaWRG
cmFtZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVpbnQ4X3QqIGZwQ2FzdCA9
IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZvciAoTWFjaGluZVRocmVh
ZHM6OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xp
c3RIZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+
bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0g
bV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVh
ZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewogICAgICAgICAgICAg
dWludDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRocmVhZC0+c3RhY2tC
YXNlKCkpOwogICAgICAgICAgICAgdWludDhfdCogc3RhY2tMaW1pdCA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPih0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3RhY2tCYXNlKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGlu
Z1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpCiAgICAgLCBt
X3dlYWtSYW5kb20oKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9wd2F0Y2gpKQogICAg
ICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKE9wdGlvbnM6OnNh
bXBsZUludGVydmFsKCkpKQotICAgICwgbV90aHJlYWRJZGVudGlmaWVyKDApCisgICAgLCBtX3Ro
cmVhZChudWxscHRyKQogICAgICwgbV9qc2NFeGVjdXRpb25UaHJlYWQobnVsbHB0cikKICAgICAs
IG1faXNQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2lzU2h1dERvd24oZmFsc2UpCkBAIC0zMDAsMTEg
KzMwMCwxMSBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkp
OwogCi0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBwcm9maWxlciA9IHRo
aXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJqc2Muc2FtcGxpbmct
cHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0gewogICAgICAg
ICBwcm9maWxlci0+dGltZXJMb29wKCk7CiAgICAgfSk7CiB9CkBAIC0zNDQsNyArMzQ0LDcgQEAg
dm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgTG9ja0hvbGRlciBjb2RlQmxvY2tTZXRM
b2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tI
b2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5n
bGV0b24oKS5nZXRMb2NrKCkpOwogCi0gICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhl
Y3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGF1dG8gZGlkU3VzcGVuZCA9IG1fanNj
RXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CiAg
ICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdlIGNhbid0
IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCiAgICAgICAgICAg
ICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQsMTMgKzM1NCwxMiBA
QCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJ
bnQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVy
czsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVycyBy
ZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdldFJlZ2lz
dGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFtZSA9IHJlZ2lzdGVy
cy5mcmFtZVBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0aWNfY2Fz
dDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9
IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBsbGludFBD
ID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRo
cmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdyZSBwYXJz
aW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgKaW5kZXggYjQ0YTNiYTQ3ZjllNjc2OGFkNDM3YmIxOGUwYThhYmM3OTVi
ZDZjZi4uMDQzZGFkYmE0MDcwYjZmOTE4MDdiZDRjYTEzMjY5NGMzY2ViYWM0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaApAQCAtMTk1
LDggKzE5NSw4IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
ZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsKICAgICBMb2NrIG1f
bG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllcjsKLSAgICBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3RocmVhZDsKKyAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIG1fanNjRXhlY3V0
aW9uVGhyZWFkOwogICAgIGJvb2wgbV9pc1BhdXNlZDsKICAgICBib29sIG1faXNTaHV0RG93bjsK
ICAgICBib29sIG1fbmVlZHNSZXBvcnRBdEV4aXQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKaW5kZXggOTlhMjZmY2ExYzIxZjNkMDQ0MDQ3M2I0NDJlODlkYzlhNDk1ZjQ2
ZS4uZTk3YzMxODVmYzZmMmM2Mjg0YWU3MWJlYjkwNWMwMmUzNDlhNzRmYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCkBAIC02NTksNyArNjU5LDcgQEAgY2xhc3MgVk0gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+
IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgbG9nRXZlbnQoQ29kZUJs
b2NrKiwgY29uc3QgY2hhciogc3VtbWFyeSwgY29uc3QgRnVuYyYgZnVuYyk7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4g
bV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhy
ZWFkPj4gb3duZXJUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2stPm93bmVyVGhyZWFk
KCk7IH0KIAogICAgIFZNVHJhcHMmIHRyYXBzKCkgeyByZXR1cm4gbV90cmFwczsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDUyNzYzZjg1M2Q0NjNi
NzJmMzNlNDY0YjdiNWE1OWQwMTE5MzhmNjkuLjI3MmM0ZGVmYTg1NWZjMzliMGNkNDEwMWU1ZTdl
NGIyYmRjMGRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
CkBAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGljIEV4cGVjdGVkPHN0ZDo6cGFpcjxWTSosIFN0YWNr
Qm91bmRzPiwgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWMKICAgICAgICAgICAg
IHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3RvclN0YXR1czo6Q29udGludWU7IC8vIFRyeSBuZXh0
IFZNLgogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiB0
aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNMb2Nr
ZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hp
bmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RI
ZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQp
IHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tCYXNlKCkpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAg
IGlmIChzdGFja1BvaW50ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBzdGFja1BvaW50ZXIg
Pj0gdGhyZWFkLT5zdGFja0VuZCgpKSB7CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBWTVRyYXBz
OjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0gKm1fdm07CiAgICAg
ICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOwogICAg
ICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzaWdu
YWxUaHJlYWQob3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLCBTSUdVU1IxKTsKKyAgICAgICAg
ICAgICAgICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChTSUdVU1IxKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDkzLDcgKzQ5Myw3IEBA
IHZvaWQgVk1UcmFwczo6ZmlyZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKICAg
ICAgICAgLy8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KICAgICAgICAgUmVmUHRyPFNpZ25h
bFNlbmRlcj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2bSgpLCBldmVudFR5
cGUpKTsKICAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7Ci0gICAgICAgIGNy
ZWF0ZVRocmVhZCgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBbc2VuZGVyXSB7Cisg
ICAgICAgIFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5nLnRocmVhZCIsIFtz
ZW5kZXJdIHsKICAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwogICAgICAgICB9KTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNThmMTliNTZk
MzNjYjg4YTZmYjQ5ZDZlNWYzYjYwOTc4NmJjMGNjLi43NDE0OGE4MDE0YjJlZTBjZTUxMTI2NmNi
YTRhOGE3NGVlZDI2ODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTMyNSw4ICszMjUsOCBAQAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovOyB9OwogCQlBOEE0
NzQ0NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
U3RyaW5nLmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaCAqLzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZEhvbGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhy
ZWFkcy5jcHAgKi87IH07CisJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi87
IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzIxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLzsgfTsKIAkJ
QThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzM1MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi87IH07CkBAIC03MjgsOCArNzI4LDgg
QEAKIAkJQThBNDczMkQxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdURlN0cmluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0
NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzExNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJl
YWRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzMzE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRocmVhZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzNTE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQcmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMTY0LDggKzExNjQsOCBAQAogCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMy
MSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAw
N0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8sCi0JCQkJQThBNDczMzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovLAotCQkJCUE4
QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgg
Ki8sCisJCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRz
LmNwcCAqLywKKwkJCQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRo
cmVhZHMuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNw
cCAqLywKIAkJCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8sCiAJ
CQkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLywK
QEAgLTE2MTgsNyArMTYxOCw3IEBACiAJCQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRl
eHRCcmVha0l0ZXJhdG9ySUNVLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVC
MDA0MTIzRkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0QjE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0RDE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLywKQEAgLTE4NDMsNyArMTg0Myw3IEBACiAJCQkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzdG
MUQzMDc4REEwMEY1RkExNiAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQzE4MUM5NjFEMzA4MDBBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5h
bElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4
QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQ
dGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0Yg
LyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAgYi9Tb3VyY2Uv
V1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcAppbmRleCBjYjFkMTAxZTg1NjUy
OWU4YWFlYTZhYmY2MGVjMzhlYTBiOGRkZTcyLi40YzNiZDU0ZTM5Mjg3NWM2NTU3NjYyNzIwZGI4
YzBiOTlhYmMzYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9u
U3BlZWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRU
ZXN0LmNwcApAQCAtNzksMTQgKzc5LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAgICBDb25kaXRpb25U
eXBlIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlvblR5cGUgZnVsbENvbmRpdGlvbjsKIAot
ICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1lclRocmVhZHM7Ci0gICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRo
cmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1
Y2VyVGhyZWFkczsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7CiAgICAgTG9ja1R5
cGUgcmVjZWl2ZWRMb2NrOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVy
czsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBj
cmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3Jl
YXRlKAogICAgICAgICAgICAgIkNvbnN1bWVyIHRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkg
ewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBydW5U
ZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1
bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUs
ICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50
KCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVl
ID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCks
ICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRD
b250aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSAmJiBxdWV1
ZS5pc0VtcHR5KCkpCkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgY29u
c3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQpOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQg
aSA9IG51bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIlByb2R1Y2VyIFRocmVhZCIsCiAgICAg
ICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lk
IHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENvbmRpdGlvbiwgbG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBw
cm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGlu
dWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJy
ZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGlu
dWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUo
KSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUu
c2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgbXVzdE5vdGlmeSA9IHF1ZXVlLmlzRW1wdHkoKTsKQEAg
LTEzOCwxMSArMTM4LDExIEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgbm90
aWZ5KGVtcHR5Q29uZGl0aW9uLCBtdXN0Tm90aWZ5KTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlm
aWVyKTsKKyAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQpOwogICAgIH0KIAot
ICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJl
YWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsK
KyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+JiB0aHJlYWQgOiBwcm9kdWNlclRocmVhZHMpCisgICAg
ICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPExvY2tUeXBlPiBsb2NrZXIobG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3Mv
TG9ja0ZhaXJuZXNzVGVzdC5jcHAKaW5kZXggZjA4MzIxYzBmNjg4MzY1MzVkODNjYjZiYzc1MTE4
NDhiYjUyZDk0Zi4uNjhjZTg0YzQ4YTNmZDRjOGY4MzViYTA5YWE2MWE1MDcyMzc2Nzk3MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCisrKyBi
L1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcApAQCAtNjIsNyArNjIs
NyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAgICAgIExvY2tUeXBlIGxvY2s7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZFtdPiBjb3VudHMgPSBzdGQ6Om1ha2VfdW5p
cXVlPHVuc2lnbmVkW10+KG51bVRocmVhZHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhy
ZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlm
aWVyW10+KG51bVRocmVhZHMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVmUHRyPFRocmVh
ZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRyPFRocmVhZD5bXT4obnVtVGhy
ZWFkcyk7CiAgICAgCiAgICAgICAgIHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKICAg
ICAKQEAgLTcwLDcgKzcwLDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzOyB0aHJlYWRJbmRleC0tOykgewog
ICAgICAgICAgICAgY291bnRzW3RocmVhZEluZGV4XSA9IDA7Ci0gICAgICAgICAgICB0aHJlYWRz
W3RocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFk
SW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgIkJlbmNobWFyayBUaHJl
YWQiLAogICAgICAgICAgICAgICAgIFsmLCB0aHJlYWRJbmRleF0gKCkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1pY3Jvc2Vjb25kc0luQ3JpdGljYWxTZWN0aW9uKSB7CkBAIC0xMDcsNyAr
MTA3LDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgCiAgICAgICAgIGxvY2sudW5sb2NrKCk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzOyB0aHJlYWRJ
bmRleC0tOykKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhy
ZWFkSW5kZXhdKTsKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0Rm9yQ29t
cGxldGlvbigpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJr
cy9Mb2NrU3BlZWRUZXN0LmNwcCBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0
LmNwcAppbmRleCA1NDVkMmUwYjA0ODhmMzM4OTRhNTk2ODhmZDkxYjBkM2EzODdjY2EyLi44MmQz
OWY4N2M2YzcwNmMxOWNlNGYyOTRjOWI2MWIyYWJiOGE1OThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tTcGVlZFRlc3QuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsg
ewogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdpdGhQYWRkaW5nPExvY2tUeXBlPltd
PiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8TG9ja1R5cGU+W10+KG51bVRo
cmVhZEdyb3Vwcyk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxkb3VibGU+
W10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxXaXRoUGFkZGluZzxkb3VibGU+W10+KG51bVRo
cmVhZEdyb3Vwcyk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+
IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFk
R3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJl
ZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZnB0cjxUaHJlYWQ+
W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAKICAgICAgICAgdm9s
YXRpbGUgYm9vbCBrZWVwR29pbmcgPSB0cnVlOwogCkBAIC05MCw3ICs5MCw3IEBAIHN0cnVjdCBC
ZW5jaG1hcmsgewogICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0udmFsdWUgPSAw
OwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Bl
ckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIHRocmVhZHNbdGhyZWFk
R3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRo
cmVhZCgKKyAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJl
YWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAg
ICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAogICAgICAgICAgICAgICAgICAgICBbdGhyZWFk
R3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsICZrZWVwR29pbmcsICZudW1JdGVyYXRpb25zTG9j
aywgJm51bUl0ZXJhdGlvbnNdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBs
b2NhbFdvcmQgPSAwOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAg
ICAgICBrZWVwR29pbmcgPSBmYWxzZTsKICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJl
YWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5k
ZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVh
ZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKIAogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVh
ZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCmluZGV4IDM4N2M2ZTI1
ZDcwNjI5YTgzYWE2MWNkNmE2YTg3NDllYTA3YzdmMDAuLjQxMGJmYjU3NDQyNWE1N2M1YmRmYmQw
ZTc5ZmI5MTliMTdkYWQyODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcApAQCAtMTU1
LDcgKzE1NSw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBBYnN0cmFjdExv
Y2tlciYpCiAgICAgCiAgICAgbV9oYXNVbmRlcmx5aW5nVGhyZWFkID0gdHJ1ZTsKICAgICAKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICBSZWZQdHI8VGhy
ZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIldURjo6QXV0b21hdGljVGhy
ZWFkIiwKICAgICAgICAgWz1dICgpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMjIw
LDcgKzIyMCw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25zdCBBYnN0cmFjdExv
Y2tlciYpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IFdvcmtSZXN1
bHQ6OkNvbnRpbnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhy
ZWFkKHRocmVhZCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBBdXRvbWF0aWNU
aHJlYWQ6OnRocmVhZERpZFN0YXJ0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggYTM0MTkxMTlj
YTcxZWRkZjk1NTNjYjMwYTc2YTJhODU1ZmViYTJjNy4uYjUwYmJiYzNiZjNhZDJiMWZkZDEzNDUz
NDg2NTRhYjFkNDE4Y2JjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEyOCw3ICsxMjgsNiBA
QCBzZXQoV1RGX0hFQURFUlMKICAgICBTdHJpbmdFeHRyYXMuaAogICAgIFN0cmluZ1ByaW50U3Ry
ZWFtLmgKICAgICBTeXN0ZW1UcmFjaW5nLmgKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmgKICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZC5oCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCkBAIC0zMjksMTYgKzMyOCwxNCBAQCBsaXN0KEFQUEVORCBXVEZfTElC
UkFSSUVTCiBpZiAoV0lOMzIpCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAg
T1NBbGxvY2F0b3JXaW4uY3BwCisgICAgICAgIFRocmVhZEhvbGRlcldpbi5jcHAKICAgICAgICAg
VGhyZWFkU3BlY2lmaWNXaW4uY3BwCiAgICAgICAgIFRocmVhZGluZ1dpbi5jcHAKICAgICApCiBl
bHNlICgpCi0gICAgbGlzdChBUFBFTkQgV1RGX0hFQURFUlMKLSAgICAgICAgVGhyZWFkSWRlbnRp
ZmllckRhdGFQdGhyZWFkcy5oCi0gICAgKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAg
ICAgICAgIE9TQWxsb2NhdG9yUG9zaXguY3BwCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwCisgICAgICAgIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcAogICAgICAgICBU
aHJlYWRpbmdQdGhyZWFkcy5jcHAKICAgICApCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApp
bmRleCAwMjQ5NTQ0YzUxOGU4MmFmZjE3MDVkZTE5ZWM5NjVhYjk4YjFkMTA2Li4zNGI5NDI1NTVh
YjU2MTgzMjEwMThiNGYwNzkwZjI4MjUwYTdkY2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAt
MTg2LDkgKzE4Niw5IEBAIGJvb2wgaXNNYWluVGhyZWFkKCkKICNlbmRpZgogCiAjaWYgIVVTRShX
RUJfVEhSRUFEKQotYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JUaHJlYWQoVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJZCkKK2Jvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhy
ZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkKQogewotICAgIHJldHVybiB0aHJlYWRJZCA9PSBj
dXJyZW50VGhyZWFkKCk7CisgICAgcmV0dXJuIHRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CiB9
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oIGIvU291
cmNlL1dURi93dGYvTWFpblRocmVhZC5oCmluZGV4IDI1ZDhmNzY2ZGNmYjg3OWExZDc2ODNjZTU1
MDhkZDhkN2YxZDc3YWYuLjBlNzhlOGU1MWFiZThkOTU1NDcyYzc5ZGQzNDY5MmYxNTQ2ZGIxYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9NYWluVGhyZWFkLmgKQEAgLTM0LDEzICszNCwxMiBAQAogI2luY2x1ZGUgPHN0ZGludC5o
PgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFBy
aW50U3RyZWFtOwogCi10eXBlZGVmIHVpbnQzMl90IFRocmVhZElkZW50aWZpZXI7Ci0KIC8vIE11
c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhh
bmRsZXIuaAppbmRleCBkZmRkZjBhOTU1NTJkYjNlMmFlY2ZlZjRlYzE2ZWZiNWM2ZTZjN2JkLi40
MTI4ZjVjZDcxYTdkYjJmNGZkNzAzMjk1M2YwYzNmMWY1MDBkMTMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXIuaApAQCAtMTczLDcgKzE3Myw3IEBAIGNsYXNzIE1lbW9yeVBy
ZXNzdXJlSGFuZGxlciB7CiAjaWYgVVNFKEdMSUIpCiAgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4g
bV9zb3VyY2U7CiAjZWxzZQotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Cisg
ICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogI2VuZGlmCiAgICAgfTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcAppbmRleCA0MDIzZjQzZTZmMjBhMzhl
MTAzZTdjOWEyZTRmMGY3ZTA2MTA1NzE0Li5jY2UxMTA2ZDQ2N2I3MjA4M2MxZWRiMjEzYWQ1OWM0
NDAzMTdhNGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcApAQCAtOTMs
MTQgKzkzLDE0IEBAIGJvb2wgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6dHJ5
TG9ja0ZvcihQYXJhbGxlbEVudmlyb25tZW50KiBwYXJlbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBj
cmVhdGVUaHJlYWQoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRo
cmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOworICAgIGlmICghbV90aHJlYWQpCisgICAg
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoJlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVh
ZFByaXZhdGU6OndvcmtlclRocmVhZCwgdGhpcywgIlBhcmFsbGVsIHdvcmtlciIpOwogCi0gICAg
aWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICBtX3BhcmVudCA9IHBh
cmVudDsKIAogICAgIG1fbXV0ZXgudW5sb2NrKCk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cisg
ICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVh
ZFByaXZhdGU6OmV4ZWN1dGUoVGhyZWFkRnVuY3Rpb24gdGhyZWFkRnVuY3Rpb24sIHZvaWQqIHBh
cmFtZXRlcnMpCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpU
aHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQodm9pZCogdGhyZWFkRGF0YSkKICAgICBUaHJlYWRQ
cml2YXRlKiBzaGFyZWRUaHJlYWQgPSByZWludGVycHJldF9jYXN0PFRocmVhZFByaXZhdGUqPih0
aHJlYWREYXRhKTsKICAgICBMb2NrSG9sZGVyIGxvY2soc2hhcmVkVGhyZWFkLT5tX211dGV4KTsK
IAotICAgIHdoaWxlIChzaGFyZWRUaHJlYWQtPm1fdGhyZWFkSUQpIHsKKyAgICB3aGlsZSAoc2hh
cmVkVGhyZWFkLT5tX3RocmVhZCkgewogICAgICAgICBpZiAoc2hhcmVkVGhyZWFkLT5tX3J1bm5p
bmcpIHsKICAgICAgICAgICAgICgqc2hhcmVkVGhyZWFkLT5tX3RocmVhZEZ1bmN0aW9uKShzaGFy
ZWRUaHJlYWQtPm1fcGFyYW1ldGVycyk7CiAgICAgICAgICAgICBzaGFyZWRUaHJlYWQtPm1fcnVu
bmluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2Vu
ZXJpYy5oIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCmluZGV4IDQ1ODQw
N2M0Y2I0YTNmOTk1YzkwYzU1NTYyN2MxY2JkMjJiNDFiNWMuLjdkNjhlZjA3MGY2N2E2NTMzYzBi
ODc1ODNkMmE1N2ExMThkMDU2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVs
Sm9ic0dlbmVyaWMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgK
QEAgLTU0LDcgKzU0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgY2xhc3Mg
VGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRocmVhZFByaXZhdGU+IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFRocmVhZFByaXZhdGUoKQotICAgICAgICAgICAgOiBtX3RocmVhZElE
KDApCisgICAgICAgICAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiAgICAgICAgICAgICAsIG1fcnVu
bmluZyhmYWxzZSkKICAgICAgICAgICAgICwgbV9wYXJlbnQoMCkKICAgICAgICAgewpAQCAtNzQs
NyArNzQsNyBAQCBjbGFzcyBQYXJhbGxlbEVudmlyb25tZW50IHsKICAgICAgICAgc3RhdGljIHZv
aWQgd29ya2VyVGhyZWFkKHZvaWQqKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFRocmVhZElk
ZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAg
ICAgICAgIGJvb2wgbV9ydW5uaW5nOwogICAgICAgICBQYXJhbGxlbEVudmlyb25tZW50KiBtX3Bh
cmVudDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAppbmRleCBlNmM2NzhiZWZjMGYxOTBhMjIzZTlhZGRi
MmNjNTgxMGI1NmUxYzE0Li5jYzFhMjFiOWVhNWNjY2M2ZjFhY2U0Yzk3NDk4OTliYmRhNWQ3ZTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9QYXJraW5nTG90LmNwcApAQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3QgVGhyZWFkRGF0
YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWREYXRhPiB7CiAgICAgVGhyZWFk
RGF0YSgpOwogICAgIH5UaHJlYWREYXRhKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXI7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkOwogICAgIAogICAgIE11dGV4IHBh
cmtpbmdMb2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBwYXJraW5nQ29uZGl0aW9uOwpAQCAtNDIz
LDcgKzQyMyw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRz
KQogfQogCiBUaHJlYWREYXRhOjpUaHJlYWREYXRhKCkKLSAgICA6IHRocmVhZElkZW50aWZpZXIo
Y3VycmVudFRocmVhZCgpKQorICAgIDogdGhyZWFkKFRocmVhZDo6Y3VycmVudCgpKQogewogICAg
IHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOwogICAgIGZvciAoOzspIHsKQEAgLTc5Myw3ICs3
OTMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwoY29uc3Qgdm9p
ZCogYWRkcmVzcykKICAgICB1bnBhcmtDb3VudChhZGRyZXNzLCBVSU5UX01BWCk7CiB9CiAKLU5F
VkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQorTkVWRVJf
SU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZv
aWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCiB7CiAgICAgVmVjdG9yPEJ1Y2tl
dCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKIApAQCAtODAzLDcgKzgwMyw3
IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3Bl
ZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpCiAgICAgICAgIGlmICghYnVja2V0KQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoVGhyZWFkRGF0YSogY3VycmVudFRocmVhZERh
dGEgPSBidWNrZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERhdGE7IGN1cnJlbnRUaHJlYWRE
YXRhID0gY3VycmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQotICAgICAgICAgICAgY2FsbGJh
Y2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIsIGN1cnJlbnRUaHJlYWREYXRh
LT5hZGRyZXNzKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJl
YWQuZ2V0KCksIGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICB9CiAgICAgCiAgICAg
dW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QYXJraW5nTG90LmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKaW5kZXggN2Q1
ZmIxN2VmYTAyYWI3NmIxMjhlYWY1OTk4MTM4MDEwMGJhYmQ5Ni4uYjZkODgzMGQxOWM3YjdmZDRj
YzZhY2FlMzYyYWVhM2I5NDNhOWQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaApAQCAtMTU4LDcgKzE1OCw3
IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAg
c3RhdGljIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAgIHsKLSAgICAgICAgZm9y
RWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9p
ZCopPihmdW5jKSk7CisgICAgICAgIGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRo
cmVhZCYsIGNvbnN0IHZvaWQqKT4oZnVuYykpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE3MSw3
ICsxNzEsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywgY29u
c3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+JiBjYWxsYmFjayk7CiAKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVk
TGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8
dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVm
UHRyLmgKaW5kZXggZmUxNjMwYzk3MzViNWZmNTM1M2NiMmM1NThlMzEwNTgxMjQ3ODdkOC4uMjc3
ZTY3NWRiM2M1NTVkNWU0YzZjZTA0OTQ2ODg3NGQzNjc2OTU5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUmVmUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQyLDcg
KzQyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc1JlZlB0ciA9IHRydWU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJl
ZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIg
UmVmUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihU
KiBwdHIpIDogbV9wdHIocHRyKSB7IHJlZklmTm90TnVsbChwdHIpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBSZWZQdHIoY29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3RO
dWxsKG1fcHRyKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQ
dHI8VT4mIG8pIDogbV9wdHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCmluZGV4IDk0M2ZkNmQ3OWQwOTQ0
MjU1MDNhYzg5NzMxYjBhMDZhNmFjNDBmZmQuLmNiMjc1ZjcwMTJjZmU1NjYxZTQ5ZTBiNGZmMGQ5
YzYyMWIwZTQ5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5o
CkBAIC0yOSw2ICsyOSw4IEBACiAjaWZuZGVmIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAj
ZGVmaW5lIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAKKyNpbmNsdWRlICJUaHJlYWRpbmcu
aCIKKwogbmFtZXNwYWNlIFdURiB7CiAKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2
b2lkKiBhcmd1bWVudCk7CkBAIC0zNiwxMyArMzgsMTUgQEAgdHlwZWRlZiB2b2lkICgqVGhyZWFk
RnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAg
ICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIFJlZlB0
cjxUaHJlYWQ+JiYgdGhyZWFkLCB2b2lkKiBkYXRhKQogICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0
aW9uKQorICAgICAgICAsIHRocmVhZChXVEZNb3ZlKHRocmVhZCkpCiAgICAgICAgICwgZGF0YShk
YXRhKQogICAgIHsKICAgICB9CiAKICAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBS
ZWZQdHI8VGhyZWFkPiB0aHJlYWQ7CiAgICAgdm9pZCogZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZEdyb3VwLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91
cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJkNzUwN2NlNDc3MWRkYzJjOTFlMjMwYzQ4YTNmOGY5ZjNhNjVhMDUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oCkBAIC0wLDAg
KzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBUaHJlYWRHcm91
cCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkR3JvdXApOworcHVibGljOgorcHJp
dmF0ZToKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0
aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43YWMyM2IwYWZlOTYxMjRkMmZkMGM1NjExN2YwMGYzMDk0YjBlYjVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9s
ZGVyUHRocmVhZHMuaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCisjaWYgVVNFKFBUSFJF
QURTKQorCisjaWYgT1MoSFVSRCkKKy8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQg
aW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgorI2Rl
ZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKKyNlbHNlCisjaW5jbHVkZSA8bGltaXRzLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKK3B0aHJlYWRfa2V5X3QgVGhyZWFkSG9sZGVyOjpt
X2tleSA9IFBUSFJFQURfS0VZU19NQVg7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQpOwor
CitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRFeGl0
KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAgaW50
IGVycm9yID0gcHRocmVhZF9rZXlfY3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOworICAgIGlmIChl
cnJvcikKKyAgICAgICAgQ1JBU0goKTsKK30KKworVGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6
OmN1cnJlbnQoKQoreworICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4ocHRocmVhZF9nZXRzcGVjaWZpYyht
X2tleSkpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRocmVh
ZCkKK3sKKyAgICBpZiAoIWN1cnJlbnQoKSkgeworICAgICAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2
ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVy
dCBwZXJmb3JtYW5lLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJl
IG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKKyAgICAg
ICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgbmV3IFRocmVhZEhvbGRlcih0aHJlYWQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQorewor
ICAgIFRocmVhZEhvbGRlciogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJl
YWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmllckRhdGEpOworCisg
ICAgaWYgKHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSkgeworICAgICAg
ICBkZWxldGUgdGhyZWFkSWRlbnRpZmllckRhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworICAg
IC8vIFJlLXNldHRpbmcgdGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3Qo
KSBjYWxsIGFmdGVyIGFsbCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBj
YWxsZWQuCisgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgdGhyZWFkSWRlbnRpZmllckRh
dGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhM2NlZGYxNTgw
MzVmY2M2NDNkMzJmNWUyZWQyMjU2N2U3MGVjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorI2RlZmluZSBUaHJlYWRIb2xkZXJQdGhyZWFkc19o
CisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBI
b2xkcyBUaHJlYWQgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0
aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8v
IFRocmVhZCBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmlj
IHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFk
SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGlj
OgorICAgIH5UaHJlYWRIb2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9u
IGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRz
IGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdl
LgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5z
IDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBz
dGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRo
cmVhZCYgdGhyZWFkKQorICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lz
RGVzdHJveWVkT25jZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5h
dGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ry
b3llZCBvbmNlJworICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3Bl
Y2lmaWMgc2xvdCB0byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisgICAg
Ly8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBp
bnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQor
ICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAu
CisgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFk
PiBtX3RocmVhZDsKKyAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBwdGhy
ZWFkX2tleV90IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBU
aHJlYWRIb2xkZXJQdGhyZWFkc19oCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkSG9sZGVyV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTdjNWYxZTRhOGQ2YTNlODA0ZGU0NDVhMWY1MjBhOTg5MDc0YzRmYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJX
aW4uaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworRFdP
UkQgVGhyZWFkSG9sZGVyOjptX2tleSA9IDA7CisKK3ZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWQp
OworCitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRF
eGl0KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAg
RFdPUkQgbV9rZXkgPSBGbHNBbGxvYyhkZXN0cnVjdG9yKTsKKyAgICBpZiAobV9rZXkgPT0gRkxT
X09VVF9PRl9JTkRFWEVTKQorICAgICAgICBDUkFTSCgpOworfQorCitUaHJlYWRIb2xkZXIqIFRo
cmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhv
bGRlcio+KEZsc0dldFZhbHVlKG1fa2V5KSk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0
aWFsaXplKFRocmVhZCYgdGhyZWFkKQoreworICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAg
IC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJl
LCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZvcm1hbmUuCisgICAgICAgIC8vIEhhdmluZyB0aGlz
IHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2Fs
bAorICAgICAgICAvLyBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKSBzb29uIGVub3VnaCIgYnVn
cyBpbiByZWxlYXNlIG1vZGUuCisgICAgICAgIEZsc1NldFZhbHVlKG1fa2V5LCBuZXcgVGhyZWFk
SG9sZGVyKHRocmVhZCkpOworICAgIH0KK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0
KHZvaWQqIGRhdGEpCit7CisgICAgVGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9
IHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVu
dGlmaWVyRGF0YSk7CisKKyAgICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95
ZWRPbmNlKSB7CisgICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVk
T25jZSA9IHRydWU7CisgICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMg
YW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBk
ZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KKyAgICBGbHNTZXRWYWx1ZShtX2tleSwgdGhyZWFkSWRl
bnRpZmllckRhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjljYmJhOTk3OWI2ZWY5NzhiODEwN2MxNzJiMzFmNDgwNWJmMzU0
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5oCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkSG9sZGVyV2luX2gKKyNkZWZpbmUgVGhy
ZWFkSG9sZGVyV2luX2gKKworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIEhvbGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ug
YW5kIGVtcGxveXMgRkxTIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKKy8v
IFRocmVhZCBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmlj
IHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFk
SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGlj
OgorICAgIH5UaHJlYWRIb2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9u
IGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRz
IGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdl
LgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5z
IDAgaWYgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBz
dGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRo
cmVhZCYgdGhyZWFkKQorICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lz
RGVzdHJveWVkT25jZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5h
dGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ry
b3llZCBvbmNlJworICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3Bl
Y2lmaWMgc2xvdCB0byBtYWtlIFdpbiB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0g
c2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tl
ZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAv
LyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAg
IHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90
aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgRFdPUkQgbV9r
ZXk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFRocmVhZEhvbGRlcldp
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2
NTcyMWRkMTY5YmZmMTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShQVEhSRUFEUykKLQotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuaCIKLQotI2luY2x1ZGUgIlRocmVhZGluZy5oIgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJF
QURfS0VZU19NQVggaXMgbm90IGRlZmluZWQgaW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBs
aWNpdGx5IGRlZmluZSBpdCBoZXJlLgotI2RlZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNl
bHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0
aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRpZmllckRhdGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01B
WDsKLQotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVu
dGlmaWVyRGF0YTo6flRocmVhZElkZW50aWZpZXJEYXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0
KG1faWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxp
emVPbmNlKCkKLXsKLSAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBk
ZXN0cnVjdCk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJ
ZGVudGlmaWVyIFRocmVhZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NF
UlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEq
IHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEq
PihwdGhyZWFkX2dldHNwZWNpZmljKG1fa2V5KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRp
ZmllckRhdGEgPyB0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQot
dm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlk
KQotewotICAgIEFTU0VSVCghaWRlbnRpZmllcigpKTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2
ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVy
dCBwZXJmb3JtYW5lLgotICAgIC8vIEhhdmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVh
bnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6
ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxF
QVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNw
ZWNpZmljKG1fa2V5LCBuZXcgVGhyZWFkSWRlbnRpZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJ
ZGVudGlmaWVyRGF0YSo+KGRhdGEpOwotICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7
Ci0KLSAgICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0g
ICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7
Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0
cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3
ZXJlIGNhbGxlZC4KLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlm
aWVyRGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJF
QURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcy
NWJkMjc1ZTcyZWJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHNfaAotI2RlZmluZSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElk
ZW50aWZpZXIgaW4gdGhlIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJl
YWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKLS8vIFRo
cmVhZElkZW50aWZpZXIgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRT
cGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNz
IFRocmVhZElkZW50aWZpZXJEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJ
ZGVudGlmaWVyRGF0YSk7Ci1wdWJsaWM6Ci0gICAgflRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0K
LSAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xl
LgotICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkg
YW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25j
ZSgpOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVu
dGlmaWVyRGF0YSBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemUoVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVy
bnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAg
IHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YShUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAg
IDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2Uo
ZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3Ry
dWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAt
IGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFy
ZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAg
ICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8g
bWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBh
ZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0
cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJ
ZGVudGlmaWVyIGZyb20gdGhlIHRocmVhZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lkKiBkYXRhKTsKLQotICAgIFRocmVhZElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwotICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGlj
IHB0aHJlYWRfa2V5X3QgbV9rZXk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlm
IC8vIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmlu
ZGV4IGMxZGMzNTAxOTAzYWI3NmIzNzA0NmQ5MzMzZjkzMmEzZWYwYzZjNmUuLmYxMDQ1OTQ4ZDI1
ZTQ0ZmQ4ODU3N2E5OTIyMzkwOWU2ZjU2MjlhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtNDUs
NyArNDUsNyBAQCBzdHJ1Y3QgTmV3VGhyZWFkQ29udGV4dCB7CiAgICAgTXV0ZXggY3JlYXRpb25N
dXRleDsKIH07CiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciog
dGhyZWFkTmFtZSkKK2NvbnN0IGNoYXIqIFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25z
dCBjaGFyKiB0aHJlYWROYW1lKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQogICAg
IHJldHVybiB0aHJlYWROYW1lOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRF
bnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
Y29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKICAgICBhdXRvIGVudHJ5UG9pbnQg
PSBXVEZNb3ZlKGNvbnRleHQtPmVudHJ5UG9pbnQpOwogCkBAIC05MiwyNCArOTIsMjQgQEAgc3Rh
dGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICBlbnRyeVBv
aW50KCk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQorUmVmUHRyPFRocmVhZD4gVGhy
ZWFkOjpjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3Qg
Y2hhciogbmFtZSkKK3sKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUobmFtZSwgW2VudHJ5UG9p
bnQsIGRhdGFdIHsKKyAgICAgICAgZW50cnlQb2ludChkYXRhKTsKKyAgICB9KTsKK30KKworUmVm
UHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGVudHJ5UG9pbnQpCiB7CiAgICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9
IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFtZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgeyB9IH07
CiAKICAgICAvLyBQcmV2ZW50IHRoZSB0aHJlYWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1bnRpbCB3
ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgdGhyZWFkIGlkZW50aWZpZXIuCiAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVh
ZEludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOworICAgIHJldHVybiBU
aHJlYWQ6OmNyZWF0ZUludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOwog
fQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBv
aW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIHJldHVybiBjcmVhdGVU
aHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKLSAgICAgICAgZW50cnlQb2ludChkYXRh
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
aW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNT
RVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcg
QEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCiAjZW5kaWYKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVk
KGludCByZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1Vz
ZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NF
UykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEz
IEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlv
cml0eSkKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1h
eFFPU2NsYXNzIHsgUU9TX0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4
UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRT
Y2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3Mg
PSBtYXhDbGFzczsKIH0KIAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3Nf
dCBvcmlnaW5hbENsYXNzKQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFv
c19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9
IFFPU19DTEFTU19VTlNQRUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFs
Q2xhc3MsIGdsb2JhbE1heFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3Nf
dCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYK
IAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQobV9pZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2
YjU1OGIzZTFkNTE3ZTgxMGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi41OTk1NmM2NTY1N2E3ODlh
NTU0NGJmODM1MmM2ZmJjMDI3ZWVhMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29k
IChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5
Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zOCw3MiArMzksMjI4IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMpCisjaWYgT1Mo
REFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxz
ZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5nIHNpZ25hbC5oIGRpZG4n
dCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCisv
LyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhp
cyB3b3JrYXJvdW5kIGNhbiBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBF
T0wuCisvLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lk
PTIwNzA3OQorI2lmIE9TKEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgor
CisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKyNlbmRpZgor
CisjaWYgIUNPTVBJTEVSKE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2No
ZWQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5kaWYKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKKyNpZiBPUyhEQVJX
SU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
UmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0
X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFk
X3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBw
Y190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5
cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFS
TTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5E
T1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZv
cm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdp
c3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit1c2luZyBU
aHJlYWRJZGVudGlmaWVyID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlv
bikodm9pZCogYXJndW1lbnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZy
b20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8v
IERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0
IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBj
YWxscyBhcmUgbm90IHJlZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxp
emVUaHJlYWRpbmcoKTsKK2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50U3RyZWFtOwor
CitjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7Citw
dWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0dXJucyAwIGlm
IHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxp
dGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVh
ZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25z
dCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSB+VGhyZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJl
cXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1
ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBs
b3dlciBwcmlvcml0eS4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJ
c1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQ
cmlvcml0eSA9IDApOworICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQgY3JlYXRpb24g
ZmFpbGVkLgorICAgIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBv
biBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0IGNoYXIqIHRo
cmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBUaHJl
YWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNo
YW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOwotV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAg
IC8vIFJldHVybnMgVGhyZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNhbiBiZSAoYSBiaXQpIGNv
c3RseSBpbiBXaW5kb3dzLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBj
dXJyZW50KCk7CiAKLS8vIERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQg
Y3JlYXRpb24uCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICAv
LyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUg
dXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFkcyBhbmQgZW5z
dXJlIHRoZSB0aHJlYWQgbGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBU
aHJlYWRJZGVudGlmaWVyIGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVj
aWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0
ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFk
TmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHkoaW50KTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFk
IGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0
aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQg
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsK
KyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBrZXJuX3Jl
dHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVy
cm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRF
cnJvciA9IERXT1JEOworI2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUo
Y29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVk
PHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcmVzdW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnZXRS
ZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLWJvb2wg
c2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNlbmRpZgog
CisgICAgLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3BvbnNp
dmVuZXNzLgorICAgIC8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ug
Wy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4K
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJl
bGF0aXZlUHJpb3JpdHkgPSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFv
c19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFk
anVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdU
RgorICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxl
bWVudGF0aW9uLgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRlcm5hbChUaHJl
YWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11c2luZyBXVEY6
OlRocmVhZElkZW50aWZpZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVzaW5nIFdURjo6
Y3VycmVudFRocmVhZDsKLXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7Ci11c2luZyBX
VEY6OmRldGFjaFRocmVhZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247Cisg
ICAgLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgIC8v
IEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQg
ZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCiAj
aWYgVVNFKFBUSFJFQURTKQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgdm9pZCBlc3Rh
Ymxpc2gocHRocmVhZF90KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJl
YWRJZGVudGlmaWVyKTsKICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdU
Rjo6c2V0R2xvYmFsTWF4UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisjaWYgVVNFKFBUSFJFQURT
KSAmJiAhT1MoREFSV0lOKQorICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhhbmRsZXJTdXNwZW5kUmVz
dW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpOwogI2VuZGlmCiAKKyAgICBUaHJl
YWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgdm9pZCBhZGRP
bkV4aXRDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+IGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgbV9vbkV4aXRDYWxsYmFjay5hcHBlbmQoY2FsbGJhY2spOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBpZCgpID09IHRocmVhZC5pZCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpZCgpICE9IHRo
cmVhZC5pZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQoKTsKKworICAgIGVudW0g
Sm9pbmFibGVTdGF0ZSB7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhl
IHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgorICAgICAgICBKb2luYWJsZSwKKworICAgICAgICAv
LyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0aHJlYWQg
ZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBh
CisgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0aGUgdGhyZWFkIGV4aXRz
ICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQgdGhlIHJlbWFpbmRlciBv
ZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAgLy8gYW5kIHdoZW4gdGhy
ZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJn
ZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdzCisgICAgICAgIC8vIG5v
Ym9keSBlbHNlIHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9u
VGhyZWFkQ29tcGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisgICAgICAgIEpvaW5lZCwK
KworICAgICAgICAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBjYW4gbm8gbG9u
Z2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0IHRha2UgY2Fy
ZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERldGFjaGVkLAorICAgIH07
CisKKyAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxl
U3RhdGU7IH0KKyAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3RhdGUg
PSBEZXRhY2hlZDsgfQorICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZvaWQgZGlkSm9pbigpIHsg
bV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNFeGl0ZWQoKSB7IHJldHVy
biBtX2RpZEV4aXQ7IH0KKworICAgIFdvcmRMb2NrIG1fbXV0ZXg7CisgICAgVGhyZWFkSWRlbnRp
ZmllciBtX2lkIHsgMCB9OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlIHsgSm9p
bmFibGUgfTsKKyAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZChUaHJlYWQmKT4+IG1fb25FeGl0Q2FsbGJhY2s7CisjaWYgVVNFKFBUSFJF
QURTKQorICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9w
b3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3QgbV9zZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lOworICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsK
KyAgICB1bnNpZ25lZCBtX3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBzdGQ6OmF0b21pYzxib29s
PiBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CisjZW5kaWYKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAg
SEFORExFIG1faGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5c3RlbQorI2VuZGlmCit9
OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFk
LiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERhcndpbiBpcyBhbiBleGNl
cHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwg
dGhlIG9ubHkKKy8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRy
YW50LgorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOworCitp
bmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gVGhy
ZWFkOjpjdXJyZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
VGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNpbmcgV1RGOjpjdXJyZW50
VGhyZWFkOworCiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcAppbmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZjYTFkYTVhNjkyZDBmLi4y
ZmJiODhhY2JkYzMxZGY3MmIwZjkxMzc2ZDIwY2QxMjI1YzMzODdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICog
Q29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFrdGl4LmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDE2MiArNDIsMTE3IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgogI2luY2x1ZGUg
IlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgot
I2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLSNpbmNsdWRlICJUaHJl
YWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJlYWRzLmgiCisjaW5jbHVk
ZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgIUNPTVBJTEVSKE1T
VkMpCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2NoZWQuaD4KLSNpbmNsdWRlIDxz
eXMvdGltZS5oPgotI2VuZGlmCi0KLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRlIDxzeXMvcHJjdGwu
aD4KLSNlbmRpZgotCi0jaWYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRp
ZgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3Mg
UHRocmVhZFN0YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBlbnVtIEpvaW5hYmxlU3RhdGUgewotICAgICAgICBKb2luYWJsZSwgLy8gVGhlIGRlZmF1bHQg
dGhyZWFkIHN0YXRlLiBUaGUgdGhyZWFkIGNhbiBiZSBqb2luZWQgb24uCi0KLSAgICAgICAgSm9p
bmVkLCAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0
aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNh
biBiZSBhIAotICAgICAgICAgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0
aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQg
dGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikgCi0gICAgICAg
ICAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhy
ZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5j
ZSB0aGVyZSdzIAotICAgICAgICAgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhl
IHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxy
ZWFkeSByZXR1cm5lZCkuCi0KLSAgICAgICAgRGV0YWNoZWQgLy8gVGhlIHRocmVhZCBoYXMgYmVl
biBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQs
IHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgot
ICAgIH07Ci0KLSAgICAvLyBDdXJyZW50bHkgYWxsIHRocmVhZHMgY3JlYXRlZCBieSBXVEYgc3Rh
cnQgb3V0IGFzIGpvaW5hYmxlLiAKLSAgICBQdGhyZWFkU3RhdGUocHRocmVhZF90IGhhbmRsZSkK
LSAgICAgICAgOiBtX2pvaW5hYmxlU3RhdGUoSm9pbmFibGUpCi0gICAgICAgICwgbV9kaWRFeGl0
KGZhbHNlKQotICAgICAgICAsIG1fcHRocmVhZEhhbmRsZShoYW5kbGUpCi0gICAgewotICAgIH0K
LQotICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0dXJuIG1fam9pbmFibGVT
dGF0ZTsgfQotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlKCkgeyByZXR1cm4gbV9wdGhyZWFk
SGFuZGxlOyB9Ci0gICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRl
ID0gRGV0YWNoZWQ7IH0KLSAgICB2b2lkIGRpZEV4aXQoKSB7IG1fZGlkRXhpdCA9IHRydWU7IH0K
LSAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQotICAgIGJv
b2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9Ci0KLXByaXZhdGU6Ci0gICAgSm9p
bmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGU7Ci0gICAgYm9vbCBtX2RpZEV4aXQ7Ci0gICAgcHRo
cmVhZF90IG1fcHRocmVhZEhhbmRsZTsKLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxUaHJlYWRJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UHRocmVhZFN0YXRlPj4gVGhyZWFkTWFwOworI2lmICFP
UyhEQVJXSU4pCiAKLXZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQoVGhyZWFkSWRlbnRpZmll
cik7Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci12b2lkIHRocmVhZFdh
c0pvaW5lZChUaHJlYWRJZGVudGlmaWVyKTsKKy8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQg
YW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCitzdGF0aWMgY29u
c3RleHByIGNvbnN0IGludCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lID0gU0lHVVNSMjsKK3N0YXRp
YyBzdGQ6OmF0b21pYzxUaHJlYWQqPiB0YXJnZXRUaHJlYWQgeyBudWxscHRyIH07CitzdGF0aWMg
U3RhdGljV29yZExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFk
TWFwTXV0ZXgoKQordm9pZCBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwg
c2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCi17Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZDsKLQotICAgIGlmIChp
c0luaXRpYWxpemVkKQorICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2NhbCBhdG9taWMgdHlwZXMg
ZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJlYWQqIHRocmVhZCA9IHRh
cmdldFRocmVhZC5sb2FkKCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1c3BlbmRlZC5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhh
bmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNp
Z3N1c3BlbmQuCisgICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBz
aG91bGQgbm90IHByb2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gc2lnbmFsIGNv
bWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBz
aWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdh
eXMgcHJlY2VkZXMuCisgICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRo
YXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhl
IGhhbmRsZXIgaXMgY2FsbGVkLgorICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3Jn
L29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKICAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5
KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBm
YXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhl
cmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAg
IGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6aW5pdGlhbGl6ZU9uY2UoKTsKLSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlh
bGl6ZURhdGVzKCk7Ci19CisgICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2Fz
dDx1Y29udGV4dF90Kj4odWNvbnRleHQpOworI2lmIENQVShQUEMpCisgICAgdGhyZWFkLT5tX3N1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdz
OworI2Vsc2UKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSB1c2VyQ29u
dGV4dC0+dWNfbWNvbnRleHQ7CisjZW5kaWYKIAotc3RhdGljIFRocmVhZE1hcCYgdGhyZWFkTWFw
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTWFwPiBtYXA7Ci0gICAgcmV0
dXJuIG1hcDsKKyAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRo
cmVhZCBpcyBzdXNwZW5kZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUg
ZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhh
bmRsZXIuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5
NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMworICAgIC8vCisg
ICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0
IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KKyAgICAvLyBodHRw
Oi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9j
aGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFkLT5tX3NlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5
IHNpZ2FjdGlvbidzIHNhX21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3Bl
bmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRo
aXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4K
KyAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRT
aWduYWxTZXQpOworICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSk7CisgICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7CisKKyAgICAv
LyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQu
CisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKIH0K
IAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjb25z
dCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRo
cmVhZE1hcE11dGV4KCkpOwotCi0gICAgVGhyZWFkTWFwOjppdGVyYXRvciBpID0gdGhyZWFkTWFw
KCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5wdGhyZWFkSGFuZGxlKCksIHB0aHJl
YWRIYW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgICAgICByZXR1cm4g
aS0+a2V5OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQorI2VuZGlmIC8vICFPUyhEQVJXSU4p
CiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFk
SGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKK3ZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCiB7Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJl
YWRIYW5kbGUpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0g
ICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckNvdW50ID0gMTsKLSAgICB0aHJl
YWRNYXAoKS5hZGQoaWRlbnRpZmllckNvdW50LCBzdGQ6Om1ha2VfdW5pcXVlPFB0aHJlYWRTdGF0
ZT4ocHRocmVhZEhhbmRsZSkpOwotICAgIHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShp
bml0aWFsaXplS2V5LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKKyAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpOworICAgICAg
ICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0
cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8gc28gZW5zdXJlIGl0IGhh
cyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHko
KTsKKyAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOworICAgICAgICB3
dGZUaHJlYWREYXRhKCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygpOworCisjaWYgIU9TKERB
UldJTikKKyAgICAgICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25m
aWd1cmF0aW9uLgorICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3Bl
bmRSZXN1bWUgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCisgICAgICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNh
X21hc2spOworICAgICAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lKTsKKworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gVGhyZWFkOjpzaWdu
YWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVT
VEFSVCB8IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lLCAmYWN0aW9uLCAwKTsKKyNlbmRpZgorICAgIH0pOwogfQogCi1zdGF0aWMgcHRocmVhZF90
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZChUaHJlYWRJZGVu
dGlmaWVyIGlkKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKCkKIHsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKS0+cHRocmVhZEhh
bmRsZSgpOworI2lmICFPUyhEQVJXSU4pCisgICAgc2lnc2V0X3QgbWFzazsKKyAgICBzaWdlbXB0
eXNldCgmbWFzayk7CisgICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKKyNlbmRpZgog
fQogCiBzdGF0aWMgdm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAg
ICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIGNyZWF0ZVRocmVhZEludGVybmFsLgorICAg
IC8vIEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbC4KICAg
ICBhdXRvIGludm9jYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uPihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwotICAg
IGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQotewotICAgIGF1dG8g
aW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihl
bnRyeVBvaW50LCBkYXRhKTsKLSAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOwotICAgIHB0aHJl
YWRfYXR0cl90IGF0dHI7Ci0gICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotI2lmIEhBVkUo
UU9TX0NMQVNTRVMpCi0gICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xhc3NfbnAoJmF0dHIsIGFk
anVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKSwgMCk7Ci0jZW5kaWYKLSAg
ICBpbnQgZXJyb3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAmYXR0ciwgd3RmVGhy
ZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0gICAgcHRocmVhZF9hdHRyX2Rlc3Ry
b3koJmF0dHIpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgcHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCB3dGZUaHJl
YWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQogCi0gICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0
ZlRocmVhZEVudHJ5UG9pbnQuCi0gICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJ
bnZvY2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlYWtl
ZEludm9jYXRpb24pOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+
dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRyOwogCi0gICAgcmV0dXJu
IGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAg
aW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFy
KiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9O
UCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFkTmFtZSh0aHJlYWROYW1l
KSk7CkBAIC0yMDUsMTIzICsxNjEsNyBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRo
cmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gaWRlbnRpZmll
ckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgQVNTRVJUKGlkKTsKLSAgICBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Ci19Ci0gICAgCi12b2lkIGNoYW5n
ZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKLXsK
LSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
ICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxy
ZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0gICAg
fQotCi0gICAgaW50IHBvbGljeTsKLSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0KLSAg
ICBpZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsICZwb2xpY3ksICZwYXJh
bSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRh
OwotCi0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBh
cmFtKTsKLX0KLQotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRo
cmVhZElEKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBsb2NrIGFjcm9z
cyB0aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBvdXIgdGhyZWFkIGFuZCBj
YXVzZSBkZWFkbG9jay4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJX
aXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5k
bGUpOwotICAgIH0KLQotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKHB0aHJlYWRI
YW5kbGUsIDApOwotCi0gICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKLSAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRy
eWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCi0gICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5l
ZC5cbiIsIHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElE
KTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+am9pbmFibGVTdGF0ZSgp
ID09IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOwotCi0gICAgLy8gVGhlIHRocmVhZCBoYXMgYWxy
ZWFkeSBleGl0ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgotICAgIGlmIChzdGF0ZS0+aGFzRXhp
dGVkKCkpCi0gICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgLy8gVGhl
IHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1
c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxs
IGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KLSAgICBlbHNlCi0gICAgICAgIHN0YXRlLT5kaWRKb2lu
KCk7Ci0KLSAgICByZXR1cm4gam9pblJlc3VsdDsKLX0KLQotdm9pZCBkZXRhY2hUaHJlYWQoVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHB0aHJlYWRfdCBwdGhy
ZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxk
KHRocmVhZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0KLSAgICBpbnQgZGV0YWNo
UmVzdWx0ID0gcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7Ci0gICAgaWYgKGRldGFjaFJl
c3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUg
dG8gYmUgZGV0YWNoZWRcbiIsIHRocmVhZElEKTsKLQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUg
PSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYg
KHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElE
KTsKLSAgICBlbHNlCi0gICAgICAgIHRocmVhZE1hcCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29t
ZURldGFjaGVkKCk7Ci19Ci0KLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAg
ICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBB
U1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7Ci0KLSAgICBpZiAoc3Rh
dGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKQotICAgICAgICB0
aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKQotewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJuIGlkOwotCi0g
ICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBl
c3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhh
bmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxp
emUoaWQpOwotICAgIHJldHVybiBpZDsKLX0KLQotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJRCwgaW50IHNpZ25hbE51bWJlcikKLXsKLSAgICBwdGhyZWFkX3QgcHRo
cmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0g
cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsK
LSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotICAgIH0KLSAgICBpbnQgZXJyTm8gPSBw
dGhyZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVyKTsKLSAgICByZXR1cm4gIWVy
ck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KKyAgICBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0KIAogTXV0ZXg6Ok11dGV4KCkKQEAgLTQxNSw2
ICsyNTUsMjcyIEBAIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQogICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKIH0KIAorVGhyZWFkOjpUaHJlYWQoKQoreworI2lm
ICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwg
LyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVl
IGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgorfQorCitUaHJlYWQ6On5UaHJlYWQo
KQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAg
IHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX2Rp
ZEV4aXQgPSB0cnVlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRD
YWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0
YWJsaXNoKHB0aHJlYWRfdCBoYW5kbGUpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIGlmICghbV9pZCkgeworICAgICAg
ICBzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkSWRlbnRpZmllcj4gcHJvdmlkZXIgeyAwIH07Cisg
ICAgICAgIG1faWQgPSArK3Byb3ZpZGVyOworI2lmIE9TKERBUldJTikKKyAgICAgICAgbV9wbGF0
Zm9ybVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxlKTsKKyNlbmRpZgorICAg
IH0KK30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpbnQgcG9saWN5OworICAgIHN0
cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworICAgIGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0o
bV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCisgICAgICAgIHJldHVybjsKKworICAgIHBhcmFt
LnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOworCisgICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKG1f
aGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7Cit9CisKK2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0
aW9uKCkKK3sKKyAgICBwdGhyZWFkX3QgaGFuZGxlOworICAgIHsKKyAgICAgICAgV29yZExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9
CisKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRfam9pbihoYW5kbGUsIDApOworCisgICAg
aWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVu
dGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9p
ZCk7CisgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJ
ZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwgbV9pZCk7CisKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUo
KSA9PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwg
ZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24n
dCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5l
ZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICgh
aGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0
OworfQorCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKG1faGFu
ZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIlRocmVhZElk
ZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwgbV9pZCk7CisKKyAgICBp
ZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOworfQorCitSZWZQ
dHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQoreworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIHRocmVhZC5n
ZXQoKSwgZGF0YSk7CisgICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsKKyAgICBwdGhyZWFkX2F0
dHJfdCBhdHRyOworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyNpZiBIQVZFKFFPU19D
TEFTU0VTKQorICAgIHB0aHJlYWRfYXR0cl9zZXRfcW9zX2NsYXNzX25wKCZhdHRyLCBhZGp1c3Rl
ZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCksIDApOworI2VuZGlmCisgICAgaW50
IGVycm9yID0gcHRocmVhZF9jcmVhdGUoJnRocmVhZEhhbmRsZSwgJmF0dHIsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZh
dHRyKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50
cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVlX3B0ciBjb25zdHJ1Y3RvciBpbiB3
dGZUaHJlYWRFbnRyeVBvaW50LgorICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiogbGVha2Vk
SW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOworICAgIFVOVVNFRF9QQVJBTShsZWFr
ZWRJbnZvY2F0aW9uKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSk7Cisg
ICAgcmV0dXJuIHRocmVhZDsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQoreworICAg
IFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChk
YXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAgICAvLyBOb3QgYSBXVEYt
Y3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4K
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOworICAg
IHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBUaHJlYWRIb2xkZXI6Omlu
aXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7Cit9CisKK1RocmVhZElkZW50aWZpZXIg
VGhyZWFkOjpjdXJyZW50SUQoKQoreworICAgIHJldHVybiBjdXJyZW50KCkuaWQoKTsKK30KKwor
Ym9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQoreworICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5k
bGUsIHNpZ25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5z
IHN1Y2Nlc3MuCit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwg
UGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0aGlzICE9
ICZjdXJyZW50KCksICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJy
ZW50IHRocmVhZCBpdHNlbGYuIik7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworI2lmIE9TKERBUldJTikKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNw
ZW5kKG1fcGxhdGZvcm1UaHJlYWQpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAgICByZXR1cm4geyB9Owor
I2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9yIHJlc3Vt
ZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAgICAg
IC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4KKyAgICAg
ICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFkcyBBIGFu
ZCBCLgorICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBhdHRlbXB0
IHRvIHN1c3BlbmQgQS4KKyAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFuZCBsYXRl
ciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCisgICAgICAgIC8vIEluIHRoYXQg
Y2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9j
a2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRDb3VudCkgewor
ICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9zaWdx
dWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwgaGFu
ZGxlci4KKyAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0Zm9y
bXMsIGxpa2UgTGludXguCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFkKiBz
dG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNpZ25h
bCBoYW5kbGVyLgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAg
ICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgICAgICAgICAgc2VtX3dhaXQoJm1fc2VtYXBo
b3JlRm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5z
dXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhl
IGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVkLnN0b3Jl
KHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAgICAgICsr
bV9zdXNwZW5kQ291bnQ7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCit9CisK
K3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211
dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZShtX3BsYXRmb3JtVGhyZWFk
KTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJl
c3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAg
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlm
IChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBz
aWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwK
KyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQg
b25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlz
dGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgor
ICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNr
IHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAgICAgICAgLy8gMi4gVXNl
IHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUg
aGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhp
cy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21p
YyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgLy8gSW4gdGhp
cyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8g
ZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7Cisg
ICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZW1f
d2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVh
c2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVk
IGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9z
dXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAg
ICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2VuZGlmCit9CisKK3NpemVf
dCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQorewor
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisjaWYg
Q1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJzKSAvIHNp
emVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVB
RF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2
X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoUFBDKQorICAgIHVuc2lnbmVkIHVzZXJD
b3VudCA9IFBQQ19USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoUFBDNjQpCisgICAgdW5zaWdu
ZWQgdXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0
ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQor
ICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUo
QVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5U
OworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7
CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIGtlcm5f
cmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX2dldF9zdGF0ZShtX3BsYXRmb3JtVGhyZWFkLCBmbGF2
b3IsICh0aHJlYWRfc3RhdGVfdCkmcmVnaXN0ZXJzLCAmdXNlckNvdW50KTsKKyAgICBpZiAocmVz
dWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgIkphdmFTY3JpcHQgZ2FyYmFnZSBj
b2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRocmVhZF9nZXRfc3RhdGUgcmV0dXJuZWQgYW4gZXJy
b3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgaW5zaWRlIFJv
c2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgcmVzdWx0KTsKKyAgICAgICAgQ1JBU0go
KTsKKyAgICB9CisgICAgcmV0dXJuIHVzZXJDb3VudCAqIHNpemVvZih1aW50cHRyX3QpOworI2Vs
aWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShYODYpIHx8IENQ
VShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKQorICAgIHJl
Z2lzdGVycyA9IG1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7CisgICAgcmV0dXJuIHNpemVvZihQ
bGF0Zm9ybVJlZ2lzdGVycyk7CisjZWxzZQorICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsK
KyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlKTsKKyNpZiBIQVZFKFBUSFJFQURfTlBf
SCkgfHwgT1MoTkVUQlNEKQorI2lmICFPUyhPUEVOQlNEKQorICAgIC8vIGUuZy4gb24gRnJlZUJT
RCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKG1faGFuZGxl
LCAmYXR0cmlidXRlKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlv
biBpcyBub24tcG9ydGFibGU7IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50
IG5wIGFsdGVybmF0aXZlcworICAgIHB0aHJlYWRfZ2V0YXR0cl9ucChtX2hhbmRsZSwgJmF0dHJp
YnV0ZSk7CisjZW5kaWYKKworICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90IHN0
YWNrU2l6ZSA9IDA7CisgICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZhdHRyaWJ1
dGUsICZzdGFja0Jhc2UsICZzdGFja1NpemUpOworICAgIEFTU0VSVF9VTlVTRUQocmMsICFyYyk7
CisgICAgQVNTRVJUKHN0YWNrQmFzZSk7CisgICAgcmVnaXN0ZXJzLnN0YWNrUG9pbnRlciA9IHN0
YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXplOworCisgICAgcHRocmVhZF9h
dHRyX2Rlc3Ryb3koJmF0dHJpYnV0ZSk7CisKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdXaW4uY3BwCmluZGV4IDU0YjQzZWZlZjM1Y2Q2NjMyYTcwMDgxNTA3YTViMzc5OWRlZmI2ZmIu
LjAxODdlN2QwMzgwNjVlOGU2NTA3YzU2ZDg4MTgxYzFjNGFhZTU1YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nV2luLmNwcApAQCAtMTQwLDcwICsxNDAsMzkgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbmRpZgogfQogCi1zdGF0
aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhy
ZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkOwotICAgIAotICAgIGlm
IChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpc0luaXRpYWxpemVkID0g
dHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKLSAgICAv
LyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmlu
ZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4g
aW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgdGhy
ZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7Ci0g
ICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQotCi1zdGF0aWMg
SGFzaE1hcDxEV09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxEV09SRCwgSEFORExFPj4gbWFwOwotICAgIHJldHVybiBtYXA7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29u
Y2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpp
bml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAg
ICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRp
YyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBp
dCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVt
cHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAg
ICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICB9KTsK
IH0KIAotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIoRFdPUkQgdGhy
ZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0
ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFwKCkuY29udGFpbnModGhy
ZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRocmVhZEhhbmRsZSk7Ci19
CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFs
LgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7
CiAKLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlm
aWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAg
ICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0gbnVs
bHB0cjsKIAotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVh
ZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotICAgIHRocmVhZE1h
cCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFk
RW50cnlQb2ludCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+
ZGF0YSk7Ci0KICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBj
aGFyKiB0aHJlYWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChU
aHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKQogeworICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkp
OwogICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKKyAgICBhdXRvIGlu
dm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50
cnlQb2ludCwgdGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0g
cmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVyKSk7CiAgICAg
aWYgKCF0aHJlYWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpAQCAtMjE5LDUxICsxODgs
MzAgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlv
biBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURfUEFSQU0obGVha2VkSW52
b2NhdGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+
KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKHRo
cmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1cm4gdGhyZWFkSUQ7Cisg
ICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsKKyAg
ICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK1RocmVhZCYgVGhyZWFkOjpjdXJyZW50KCkK
IHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVh
ZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+
dGhyZWFkKCk7CiAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxlRm9ySWRl
bnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAgICAgIExPR19F
UlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2
ZSB0aHJlYWQiLCB0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBU
aHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmPFRocmVhZD4g
dGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAKLSAgICBTZXRUaHJlYWRQcmlvcml0
eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7Ci19CisgICAg
SEFORExFIGhhbmRsZTsKKyAgICBib29sIGlzU3VjY2Vzc2Z1bCA9IER1cGxpY2F0ZUhhbmRsZShH
ZXRDdXJyZW50UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNz
KCksICZoYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOworICAgIFJFTEVB
U0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0gICAg
Ci0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhy
ZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBMT0dfRVJST1IoIlRocmVh
ZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQgd2hl
biB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09SRCBqb2luUmVzdWx0ID0g
V2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRFKTsKLSAgICBpZiAoam9p
blJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlm
aWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFk
SUQpOwotCi0gICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAgICBjbGVhclRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotCi0gICAgcmV0dXJuIGpvaW5SZXN1bHQ7Cisg
ICAgdGhyZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7CisgICAgVGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJuIHRocmVhZC5nZXQoKTsK
IH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAg
ICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJlYWRIYW5kbGUpCi0gICAg
ICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKHRocmVhZElEKTsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFk
KCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQogewogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJyZW50VGhyZWFkSWQoKSk7CiB9CkBA
IC00OTIsNiArNDQwLDk5IEBAIERXT1JEIGFic29sdXRlVGltZVRvV2FpdFRpbWVvdXRJbnRlcnZh
bChkb3VibGUgYWJzb2x1dGVUaW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxEV09SRD4oKGFi
c29sdXRlVGltZSAtIGN1cnJlbnRUaW1lKSAqIDEwMDAuMCk7CiB9CiAKK1RocmVhZDo6VGhyZWFk
KCkKK3sKK30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4
aXQoKQoreworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgICAgICAvLyBJdCBpcyBPSyBiZWNhdXNlIEZM
U0FsbG9jJ3MgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlcmUgYXJlIHNv
bWUgb3BlbiBoYW5kbGVzLgorICAgICAgICAvLyBUaGlzIGVhc2lseSBlbnN1cmVzIHRoYXQgYWxs
IHRoZSB0aHJlYWQgcmVzb3VyY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KKyAgICAgICAg
aWYgKG1faGFuZGxlKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUobV9oYW5kbGUpOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9vbkV4aXRDYWxsYmFjaykKKyAgICAgICAgY2Fs
bGJhY2soKnRoaXMpOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNoKEhBTkRMRSBoYW5kbGUs
IFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1faWQgPSB0aHJlYWRJRDsK
K30KKwordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0VGhyZWFkUHJpb3JpdHkobV9oYW5k
bGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7Cit9CisKK2ludCBUaHJlYWQ6Ondh
aXRGb3JDb21wbGV0aW9uKCkKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIHsKKyAgICAgICAg
V29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRs
ZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCho
YW5kbGUsIElORklOSVRFKTsKKyAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKKyAg
ICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFk
bG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CisKKyAgICBXb3JkTG9ja0hvbGRlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CisK
KyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8gbm90aGluZy4KKyAgICAv
LyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1
cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0
IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAg
ICAgIGRpZEpvaW4oKTsKKworICAgIHJldHVybiBqb2luUmVzdWx0OworfQorCit2b2lkIFRocmVh
ZDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBXZSBmb2xsb3cgdGhlIHB0aHJlYWQgc2VtYW50aWNzOiBl
dmVuIGFmdGVyIHRoZSBkZXRhY2ggaXMgY2FsbGVkLAorICAgIC8vIHdlIHN0aWxsIGNhbiBwZXJm
b3JtIG9wZXJhdGlvbiBvbnRvIHRoZSB0aHJlYWQuIFRvIGRvIHNvLCB3ZSBkbworICAgIC8vIG5v
dGhpbmcgaGVyZSBpbiBXaW5kb3dzLiBDbG9zZUhhbmRsZSB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0
aWNhbGx5CisgICAgLy8gYnkgdGhlIEZMUyBkZXN0cnVjdG9yIG9uIHRocmVhZCB0ZXJtaW5hdGlv
bi4KKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaWYgKCFoYXNFeGl0
ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KKworYXV0byBUaHJlYWQ6OnN1
c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJvcj4KK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgRFdPUkQgcmVzdWx0ID0gU3VzcGVu
ZFRocmVhZChtX2hhbmRsZSk7CisgICAgaWYgKHJlc3VsdCAhPSAoRFdPUkQpLTEpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7Cit9CisKKy8v
IER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQg
ZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdv
cmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBSZXN1bWVUaHJlYWQobV9oYW5kbGUp
OworfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgcmVn
aXN0ZXJzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsK
KyAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxlLCAmcmVnaXN0ZXJzKTsK
KyAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
I2VuZGlmIC8vIE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRleCBiMmEwYTc5ZjRhYjVh
YWMyODliMTY5ZjkyYmJjMWE4MDU4NTJjYTMyLi45NzMwZmNmMGYwOTIxZmRlZDkwZjg5ZjEyOTBl
Nzc0OTBiNTM5NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBX
b3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9ucywgY29uc3Qgc3RkOjpm
dW5jdGlvbjx2b2lkIChzaXoKIAogICAgICAgICAgICAgbV93b3JrZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkodGhyZWFkQ291bnQpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmtlcnMuYXBwZW5k
KGNyZWF0ZVRocmVhZChTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBpKS51
dGY4KCkuZGF0YSgpLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQo
VGhyZWFkOjpjcmVhdGUoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wgV29ya2VyICV1IiwgaSku
dXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgp
OwogICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb247
CiAgICAgICAgIERlcXVlPGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4qPiBtX3F1ZXVlOwog
Ci0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3dvcmtlcnM7CisgICAgICAgIFZl
Y3RvcjxSZWZQdHI8VGhyZWFkPj4gbV93b3JrZXJzOwogICAgIH07CiAKICAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPFRocmVhZFBvb2w+IHRocmVhZFBvb2w7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCmluZGV4
IGE0N2YyMWUyMGQzMWJjOGJmNzMxOGY0MWI5NTdhYjM2NmMxOTE1MDMuLjc2MzQ1YzA2OTMxNjRm
NjhjYTRiMWM2NjQ0ODRhMjczY2M2ZThiZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0xMDMsNyArMTAz
LDcgQEAgY2xhc3MgV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uRGlzcGF0Y2hlciB7
CiAKICAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwogI2VsaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkg
fHwgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1
ZXVlVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya1F1ZXVlVGhyZWFkOwogICAgIExv
Y2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgIENvbmRpdGlvbiBtX2lu
aXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgIFJ1bkxvb3AqIG1fcnVuTG9vcDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCAxYTcyMTlhZDI1OWVkNzU5NzJh
NWE0NThjNWM0ODQ5N2EzODhlNGQzLi41OWVlMWY4NWI0MzVjZTFhNzJmNTA1MGY0ZGY2MmVmY2Zi
YmM4MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCkBAIC00OSwx
NSArNDksMTUgQEAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFzc190IGRpc3BhdGNoUU9TQ2xhc3Mo
V29ya1F1ZXVlOjpRT1MgcW9zKQogewogICAgIHN3aXRjaCAocW9zKSB7CiAgICAgY2FzZSBXb3Jr
UXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlOgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1ND
bGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOwogICAgIGNhc2Ug
V29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKTsKICAgICBjYXNlIFdv
cmtRdWV1ZTo6UU9TOjpEZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhR
T1NfQ0xBU1NfREVGQVVMVCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX0RFRkFVTFQpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlV0aWxpdHk6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAg
ICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7
CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3VuZDoKLSAgICAgICAgcmV0dXJuIGFk
anVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgICAgICByZXR1cm4gVGhy
ZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsKICAgICB9CiB9CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmlj
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKaW5kZXgg
OTM0YTM4Y2JiZTY0YmJmZmFlYjRkMzdkZjFiOGQ5OTUyYjg4NTM0NC4uZGE4NzVkMWZhMDRjZWY1
MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0NDYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2Vu
ZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dv
cmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zNSw3ICszNSw3IEBACiB2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1f
d29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKG5hbWUsIFt0aGlzXSB7CisgICAgbV93b3Jr
UXVldWVUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbdGhpc10gewogICAgICAgICB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAg
LTUxLDggKzUxLDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAg
aWYgKG1fcnVuTG9vcCkKICAgICAgICAgbV9ydW5Mb29wLT5zdG9wKCk7CiAgICAgaWYgKG1fd29y
a1F1ZXVlVGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVhZCk7
Ci0gICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICAgICAgbV93b3JrUXVldWVUaHJl
YWQtPmRldGFjaCgpOworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IG51bGxwdHI7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhh
bmRsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXJMaW51eC5jcHAKaW5kZXggYjI5NDE5NDQ0ZTc0MjczNmE2N2RjMGMxYWE4NTFkZWMzYWU1ODdl
NC4uZmZkNDAwODU1YjgyOTNhOGI1YTNjM2FlYjIzYWI3N2FhZjVhN2VlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcApAQCAt
MTE5LDcgKzExOSwxMCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2
ZW50RkRQb2xsZXIoaW50IGZkLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKAogICAgIH0sIHRoaXMsIG51
bGxwdHIpOwogICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgbnVsbHB0cik7CiAj
ZWxzZQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIldURjogTWVtb3J5UHJlc3N1cmVI
YW5kbGVyIiwgW3RoaXNdIHsgcmVhZEFuZE5vdGlmeSgpOyB9CisgICAgbV90aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZSgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLAorICAgICAgICBbdGhpc10g
eworICAgICAgICAgICAgcmVhZEFuZE5vdGlmeSgpOworICAgICAgICB9KTsKICNlbmRpZgogfQog
CkBAIC0xMjksNyArMTMyLDcgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9sbGVy
Ojp+RXZlbnRGRFBvbGxlcigpCiAjaWYgVVNFKEdMSUIpCiAgICAgZ19zb3VyY2VfZGVzdHJveSht
X3NvdXJjZS5nZXQoKSk7CiAjZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAg
ICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA4NzQ3NjQz
OGNhZTY1YTYzODdkOTAxYTc1Mjg4MTVlYzk1NDdmMjMyLi45Y2QzZGI0ZDFiYzE0YTM2MTczMjFh
YjAwNWEwMTk2MjA1Mjc4Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBJREJTZXJ2
ZXI6OklEQlNlcnZlcihJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhh
bmRsZXIpCiAgICAgOiBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyKGZpbGVIYW5k
bGVyKQogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRocmVhZENyZWF0aW9u
TG9jayk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNl
VGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CisgICAgbV90aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMs
ICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9CiAKIElEQlNlcnZlcjo6SURCU2VydmVyKGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3Jh
cnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCkBAIC02Niw3ICs2Niw3IEBAIElEQlNlcnZlcjo6
SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5n
U3RvcmVUZW1wb3JhCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlciBjcmVhdGVkIGF0IHBh
dGggJXMiLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7CiAKICAgICBMb2Nr
ZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhy
ZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlz
LCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNl
IFNlcnZlciIpOwogfQogCiB2b2lkIElEQlNlcnZlcjo6cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNv
bm5lY3Rpb25Ub0NsaWVudCYgY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAyNTZjZDUwN2U2ZTZkN2Y2
NTZlZWNlMGMxMTk4OTQ4ZmQ5MjNkYTFkLi45MzRhMWQxNzQ1MjkwODQyOGEzYWU2ZTBlZDdlNTEw
YTlhOWNhNmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgY2xhc3MgSURCU2VydmVyIDog
cHVibGljIFJlZkNvdW50ZWQ8SURCU2VydmVyPiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVm
UHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFw
PElEQkRhdGFiYXNlSWRlbnRpZmllciwgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlx
dWVJREJEYXRhYmFzZU1hcDsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAg
fTsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1f
ZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2s7CiAgICAgTG9jayBtX21haW5UaHJlYWRSZXBseUxv
Y2s7CiAgICAgYm9vbCBtX21haW5UaHJlYWRSZXBseVNjaGVkdWxlZCB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
Y3BwCmluZGV4IDI5MmYwNWI4Y2Q1MDZlMjI5YWU2YjhiZDg2MjljMDk1NGQxODQ1OWIuLjdjZjdh
ZjhmZWEyZTFlNjdkNTIzN2M4NzFhMDE1YjNjNDkwMGEyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCkBAIC0zOSw3
ICszOSw3IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2RlcigpCiB7CiAgICAg
Ly8gU3RhcnQgd29ya2VyIHRocmVhZC4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVh
dGlvbk11dGV4KTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNv
ZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKKyAgICBtX3RocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1
ZGlvIERlY29kZXIiKTsKIH0KIAogQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2Rl
cigpCkBAIC00Nyw4ICs0Nyw4IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29k
ZXIoKQogICAgIG1fcXVldWUua2lsbCgpOwogICAgIAogICAgIC8vIFN0b3AgdGhyZWFkLgotICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOwotICAgIG1fdGhyZWFkSUQgPSAw
OworICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIG1fdGhyZWFkID0gbnVs
bHB0cjsKIH0KIAogdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoUmVmPEFycmF5
QnVmZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4m
JiBlcnJvckNhbGxiYWNrKQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEFzeW5jQXVkaW9EZWNvZGVy
OjpydW5Mb29wKCkKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAgIHsKLSAgICAg
ICAgLy8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVhZElEIGVzdGFibGlzaGVkIGJlZm9y
ZSBzdGFydGluZyB0aGUgcnVuIGxvb3AuCisgICAgICAgIC8vIFdhaXQgZm9yIHVudGlsIHdlIGhh
dmUgbV90aHJlYWQgZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4gbG9vcC4KICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNv
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmgKaW5kZXggYmI1YzVlMzM3YjVlY2YxZjhlNjE3NTNhMjlmOGQwZjk3MTQxNTUzZC4uZjEyNTEw
ZDE5N2MzZGY5NmNjMDU2ODU0NmNiYzNmYjQ2ZWFhYThhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaApAQCAtNzcsNyArNzcs
NyBAQCBjbGFzcyBBc3luY0F1ZGlvRGVjb2RlciB7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkRW50
cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBydW5Mb29wKCk7CiAKLSAgICBXVEY6OlRo
cmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsK
ICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKICAgICBNZXNzYWdlUXVldWU8RGVjb2Rp
bmdUYXNrPiBtX3F1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA1
MDUyMzA0MTk3Y2RlZGRlNDdmZGNiYjkxMmVjNDc0MDU1Nzk3NDI4Li5lN2Q1NjdkZmVhZDQ0MmMz
OTZhZjBmNzA1MTA5NzNmZmUxNDhhYjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3Bw
CkBAIC00MSw3ICs0MSw3IEBAIGNvbnN0IHNpemVfdCByZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsK
IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
KEF1ZGlvQ29udGV4dCYgY29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKICAgICA6
IEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgp
KQogICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotICAgICwgbV9yZW5kZXJUaHJl
YWQoMCkKKyAgICAsIG1fcmVuZGVyVGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX3N0YXJ0ZWRSZW5k
ZXJpbmcoZmFsc2UpCiB7CiAgICAgbV9yZW5kZXJCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKHJlbmRl
clRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSk7CkBAIC02Niw4
ICs2Niw4IEBAIHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUo
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKLSAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAgICBtX3JlbmRl
clRocmVhZCA9IDA7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OworICAgICAgICBtX3JlbmRlclRocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgQXVkaW9O
b2RlOjp1bmluaXRpYWxpemUoKTsKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKICAgICBpZiAoIW1fc3RhcnRlZFJlbmRl
cmluZykgewogICAgICAgICBtX3N0YXJ0ZWRSZW5kZXJpbmcgPSB0cnVlOwogICAgICAgICByZWYo
KTsgLy8gU2VlIGNvcnJlc3BvbmRpbmcgZGVyZWYoKSBjYWxsIGluIG5vdGlmeUNvbXBsZXRlRGlz
cGF0Y2goKS4KLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJl
bmRlcmVyIik7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5l
IHJlbmRlcmVyIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRleCA3
NTU2MDQ2NDcyMzJjNGJjNTEzY2M5ZTM5ZGQ0NDVmMzhiNjJjZWY0Li41NjkwMTM4YjE2NTcwYjNm
OWQyMzdmOWRkNGE4ZWEyM2Q3M2ZmYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAg
LTYzLDcgKzYzLDcgQEAgY2xhc3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGlj
IEF1ZGlvRGVzdGluYXRpb25Ob2RlIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVz
OwogICAgIAogICAgIC8vIFJlbmRlcmluZyB0aHJlYWQuCi0gICAgdm9sYXRpbGUgVGhyZWFkSWRl
bnRpZmllciBtX3JlbmRlclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3JlbmRlclRocmVh
ZDsKICAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsKICAgICBzdGF0aWMgdm9pZCBvZmZsaW5l
UmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBvZmZsaW5lUmVuZGVyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmlu
ZGV4IDg4NjlmNmJmMjIzMjMyZTYzY2MzZmI1MmUxNmFlMWRiM2ViNDFiZTYuLjhjOTJkNmU1Mzk2
YWRmMTJmYmRkNjhkN2FjOTdmOWVkMTlhZGMwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC03NzAsOCArNzcwLDcgQEAgU2VjdXJp
dHlPcmlnaW5EYXRhIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpCiB7CiAgICAgaWYgKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBT
ZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX2NvbnRleHRUaHJlYWRTZWN1
cml0eU9yaWdpbi5nZXQoKSk7Ci0gICAgYXV0byYgdGhyZWFkID0gZGF0YWJhc2VUaHJlYWQoKTsK
LSAgICBpZiAoY3VycmVudFRocmVhZCgpID09IHRocmVhZC5nZXRUaHJlYWRJRCgpKQorICAgIGlm
IChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VUaHJlYWQoKS5nZXRUaHJlYWRJRCgpKQogICAg
ICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9kYXRh
YmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAwZGRlNWY3MjY4ZWU2NDJjMDA0MzA1Y2VmZTM2
YjFjOWU0NGI4N2QzLi5kNzA4MTRmOWI1NWIyNDhmZDY0ZTFhZmY0M2UzNzY3NGYxNjkyZDRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhy
ZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VGhyZWFkLmNwcApAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wgRGF0YWJhc2VUaHJlYWQ6OnN0YXJ0
KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAg
IGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFz
ZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKKyAgICBtX3RocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlz
LCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKIAotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJl
dHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0
aW9uKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMpCkBAIC0xMTAsNyArMTEw
LDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgIC8vIENsZWFu
IHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGRhdGFiYXNl
IHRocmVhZAogICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+c2h1dGRvd24oKTsKIAotICAg
IExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhl
IHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocyki
LCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIkFi
b3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJl
YWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWQtPmlkKCksIHRo
aXMsIHJlZkNvdW50KCkpOwogCiAgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlcyB0aGF0IHdlIHJh
biB0cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFueSB0cmFuc2FjdGlvbnMg
YXJlIHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3ZSBkb24ndCBsZWF2ZSB0
aGUgZGF0YWJhc2UgaW4gYW4KICAgICAvLyBpbmNvbnNpc3RlbnQgb3IgbG9ja2VkIHN0YXRlLgpA
QCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkK
ICAgICAgICAgb3BlbkRhdGFiYXNlLT5wZXJmb3JtQ2xvc2UoKTsKIAogICAgIC8vIERldGFjaCB0
aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0
byBhbnlvbmUgZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAgICBtX3RocmVh
ZC0+ZGV0YWNoKCk7CiAKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5j
ID0gbV9jbGVhbnVwU3luYzsKIApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hv
bGRlciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1f
dGhyZWFkLT5pZCgpKTsKICAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZk
YXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZCgmZGF0YWJhc2UpOwogfQpAQCAt
MTUxLDcgKzE1MSw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2Vk
KERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0YWJh
c2VTZXRNdXRleCk7CiAKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQp
OworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPmlkKCkpOwogICAgIEFT
U0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRh
YmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJlbW92ZSgmZGF0YWJhc2UpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5o
CmluZGV4IGVjMDQxZTMxODE3MjQ5MmVjYTZiY2VmZThmMWRhMjVlYzkyZWQyNmMuLmE1MjEyZGZi
OGIxNzJjZTJmZjZhOTg4OGRlMGE5ZGI5NzdhZTJkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKQEAgLTU4LDcgKzU4LDcg
QEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0
YWJhc2VUaHJlYWQ+IHsKIAogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlJik7
CiAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYpOwotICAgIFRocmVhZElk
ZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFk
SWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlk
KCkgOiAwOyB9CiAKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAK
QEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKICAgICB2b2lkIGRhdGFiYXNlVGhyZWFkKCk7
CiAKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRy
IH07CiAgICAgUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX3NlbGZSZWY7CiAKICAgICBNZXNzYWdl
UXVldWU8RGF0YWJhc2VUYXNrPiBtX3F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0dDQ29udHJvbGxlci5jcHAKaW5kZXggNmY5ZmNhNjdmM2M0N2FkZGM4M2RlYzhjYjBkNWViOGNj
YjQwZDc0My4uMTM5YWE5OTFhMTZlYWQyMmY2OGY1MDFiZTdiOTQ1OTYzMjIxMzVkOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xMDEsMTQgKzEw
MSwxNCBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNl
bnRseSgpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhy
ZWFkRm9yRGVidWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKIHsKLSAgICBUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRy
b2xsZXIiKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShjb2xs
ZWN0LCAwLCAiV2ViQ29yZTogR0NDb250cm9sbGVyIik7CiAKICAgICBpZiAod2FpdFVudGlsRG9u
ZSkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgICAg
IHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGRldGFjaFRocmVhZCh0aHJlYWRJRCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAog
dm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFi
bGVkKGJvb2wgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3lu
Y0ZpbGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwCmluZGV4IDE2OGU0ZTI3Nzk1ZDQyNWY0MDRmMTc1YzliY2JhOTNmNzM2ODA3NGMuLjU1Yzdj
YjAyMzk4NTk5Yzk3MWU2YTM3YTBmOWE3MjQ4NDg0MmU2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQg
Y2FsbE9uRmlsZVRocmVhZChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogCiAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwogICAgIHN0ZDo6Y2FsbF9v
bmNlKGNyZWF0ZUZpbGVUaHJlYWRPbmNlLCBbXSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgiV2Vi
Q29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiV2Vi
Q29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10gewogICAgICAgICAgICAgZm9yICg7OykgewogICAg
ICAgICAgICAgICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCA0Y2RjZmFhZDZlODMyYTM5YTVjMzUyNjU4
MDU4NTA4NmIzZDlmNzJmLi5hNDhiZmY2MDUxZjBmMTc0ZGExOGQyZmY5ZDM3YWIzYmM2Njg0ZmEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTQ3
LDcgKzQ3LDcgQEAKICNkZWZpbmUgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpIEFTU0VSVCghbV9z
eW5jVGhyZWFkUnVubmluZyB8fCAhSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAvLyBGb3IgbWV0
aG9kcyB0aGF0IGFyZSBtZWFudCB0byBzdXBwb3J0IHRoZSBzeW5jIHRocmVhZCBPTkxZCi0jZGVm
aW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhyZWFkID09IGN1cnJlbnRUaHJlYWQo
KSkKKyNkZWZpbmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5bmNUaHJlYWQtPmlkKCkgPT0g
Y3VycmVudFRocmVhZCgpKQogI2RlZmluZSBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpIEFTU0VS
VChJU19JQ09OX1NZTkNfVEhSRUFEKCkpCiAKICNpZiBQTEFURk9STShHVEspCkBAIC0xNDEsNyAr
MTQxLDcgQEAgYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBkaXJlY3Rvcnks
IGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiAgICAgLy8gTG9jayBoZXJlIGFzIHdlbGwgYXMgZmly
c3QgdGhpbmcgaW4gdGhlIHRocmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNuJ3QgYWN0dWFsbHkgY29t
bWVuY2UgdW50aWwgdGhlIGNyZWF0ZVRocmVhZCgpIGNhbGwgCiAgICAgLy8gY29tcGxldGVzIGFu
ZCBtX3N5bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3luY0xvY2subG9j
aygpOwotICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJhc2U6Omljb25E
YXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIpOwor
ICAgIG1fc3luY1RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKEljb25EYXRhYmFzZTo6aWNvbkRhdGFi
YXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogSWNvbkRhdGFiYXNlIik7CiAgICAg
bV9zeW5jVGhyZWFkUnVubmluZyA9IG1fc3luY1RocmVhZDsKICAgICBtX3N5bmNMb2NrLnVubG9j
aygpOwogICAgIGlmICghbV9zeW5jVGhyZWFkKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSWNv
bkRhdGFiYXNlOjpjbG9zZSgpCiAgICAgICAgIHdha2VTeW5jVGhyZWFkKCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBXYWl0IGZvciB0aGUgc3luYyB0aHJlYWQgdG8gdGVybWluYXRlCi0gICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fc3luY1RocmVhZCk7CisgICAgICAgIG1fc3luY1Ro
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICBtX3N5bmNUaHJlYWRSdW5u
aW5nID0gZmFsc2U7ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2Uu
aAppbmRleCAwNjFhZjRhMTI1NTc3MWRlMTFhMzJmNTY4M2MwZWZkYTU5MjkzYjlkLi44NjQwOTU1
NDc1MzNmZDg5MGYwM2FmZTkyYmIwNmY2MDg3ZWU3MzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIEljb25EYXRh
YmFzZSBmaW5hbCA6IHB1YmxpYyBJY29uRGF0YWJhc2VCYXNlIHsKICAgICB2b2lkIHN5bmNUaW1l
ckZpcmVkKCk7CiAgICAgCiAgICAgVGltZXIgbV9zeW5jVGltZXI7Ci0gICAgVGhyZWFkSWRlbnRp
ZmllciBtX3N5bmNUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9zeW5jVGhyZWFkOwogICAg
IGJvb2wgbV9zeW5jVGhyZWFkUnVubmluZzsKICAgICAKICAgICBIYXNoU2V0PFJlZlB0cjxEb2N1
bWVudExvYWRlcj4+IG1fbG9hZGVyc1BlbmRpbmdEZWNpc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCmluZGV4IDkxMjAwYzM0NWY0NTVmOTZkNDk0YmZk
MmFkNzAzZjI4YzVjNjI5ZDEuLmQ5YjZmNzJmYTM2ZmE3MDBjODI2ZjNjOTdkNmJhYTAyZDQyZThi
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcApAQCAt
OTYsMTEgKzk2LDExIEBAIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6bm90aWZ5T2JzZXJ2ZXJz
KFJlc291cmNlVXNhZ2VEYXRhJiYgZGF0YSkKIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpj
cmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAg
ICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdm0gPSAmY29tbW9uVk0o
KTsKLSAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ss
IHRoaXMsICJXZWJDb3JlOiBSZXNvdXJjZVVzYWdlIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsK
IH0KIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiByZXNv
dXJjZVVzYWdlVGhyZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQu
aAppbmRleCAxOGExZTY3NTQzZDIyMDljMTc5NTc0NzM2NjIyYTc4YjM4NGJiOGZjLi5lZmRlMjdl
ZmU2YjBhYzQ1NDY0ZGU4OTFjNjdjZTc5ZjljZjJlMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1Jlc291cmNlVXNhZ2VUaHJlYWQuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBSZXNvdXJjZVVz
YWdlVGhyZWFkIHsKICAgICB2b2lkIHRocmVhZEJvZHkoKTsKICAgICB2b2lkIHBsYXRmb3JtVGhy
ZWFkQm9keShKU0M6OlZNKiwgUmVzb3VyY2VVc2FnZURhdGEmKTsKIAotICAgIFRocmVhZElkZW50
aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhy
ZWFkIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbmRp
dGlvbjsKICAgICBIYXNoTWFwPHZvaWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291
cmNlVXNhZ2VEYXRhJik+PiBtX29ic2VydmVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IDczMGMwYTZiZDkzZjQ1NzhkMWVk
YmY5YWNlMWNkODY1NjZlNmM5ODguLmQyMDc4NDA1NjBkZGY5MDU5MGEwZGFkZDI3MzA4NGM5MWM5
ZmIxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmNwcApAQCAtMzUsMTQgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNj
cm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSWRlbnRpZmll
cigwKQorICAgIDogbV90aHJlYWQobnVsbHB0cikKIHsKIH0KIAogYm9vbCBTY3JvbGxpbmdUaHJl
YWQ6OmlzQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgYXV0byB0aHJlYWRJZGVudGlmaWVyID0gU2Ny
b2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZpZXI7Ci0gICAgcmV0dXJu
IHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRocmVhZCgpID09IHRocmVhZElkZW50aWZpZXI7
CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24o
KS5tX3RocmVhZDsKKyAgICByZXR1cm4gdGhyZWFkICYmIHRocmVhZC0+aWQoKSA9PSBjdXJyZW50
VGhyZWFkKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2
b2lkICgpPiYmIGZ1bmN0aW9uKQpAQCAtNzQsMTQgKzc0LDE0IEBAIFNjcm9sbGluZ1RocmVhZCYg
U2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3Jl
YXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAg
aWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXYWl0IGZvciB0aGUgdGhy
ZWFkIHRvIGluaXRpYWxpemUgdGhlIHJ1biBsb29wLgogICAgIHsKICAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKLSAgICAgICAg
bV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAi
V2ViQ29yZTogU2Nyb2xsaW5nIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
dGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKICAgICAgICAgCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25W
YXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFkUnVuTG9vcDsgfSk7CkBA
IC05MSw3ICs5MSw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRl
ZCgpCiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxp
bmdUaHJlYWQpCiB7Ci0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
KTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCk7
CiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVGhyZWFkKj4oc2Nyb2xsaW5nVGhyZWFkKS0+dGhy
ZWFkQm9keSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RocmVhZC5oCmluZGV4IGRlMDYyZDc3YWMwMWRmOWQyYTA5ODYwZWJlNmI4ZTlmZDNjZmY1
YzAuLmQ4ODkyZjA1YmU2NDM3ZDRhYWNjMGE3NTFhN2NhN2U5M2JlZTBkZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC03Myw3ICs3
Myw3IEBAIGNsYXNzIFNjcm9sbGluZ1RocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29wU291
cmNlQ2FsbGJhY2soKTsKICNlbmRpZgogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElk
ZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAKICAgICBDb25kaXRpb24g
bV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlOwogICAgIExvY2sgbV9pbml0aWFs
aXplUnVuTG9vcE11dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKaW5kZXggZjcxMzMzYzVhMzdhOTk4OTY0ZjNhNzQxYzcz
MTUyZTk1MTQ2NmNmNi4uZGRiZTNiYTk4MGU0NTBhNDk0Y2QwNjQ4ZjQxYjVlMzZhZmVlYjVmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VM
b2FkZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIFBhc3NSZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVy
PiBIUlRGRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hyb25vdXNseUlmCiB9CiAK
IEhSVEZEYXRhYmFzZUxvYWRlcjo6SFJURkRhdGFiYXNlTG9hZGVyKGZsb2F0IHNhbXBsZVJhdGUp
Ci0gICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKDApCisgICAgOiBtX2RhdGFiYXNlTG9hZGVy
VGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX2RhdGFiYXNlU2FtcGxlUmF0ZShzYW1wbGVSYXRlKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBI
UlRGRGF0YWJhc2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSgpCiAgICAgCiAgICAgaWYgKCFt
X2hydGZEYXRhYmFzZS5nZXQoKSAmJiAhbV9kYXRhYmFzZUxvYWRlclRocmVhZCkgewogICAgICAg
ICAvLyBTdGFydCB0aGUgYXN5bmNocm9ub3VzIGRhdGFiYXNlIGxvYWRpbmcgcHJvY2Vzcy4KLSAg
ICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IGNyZWF0ZVRocmVhZChkYXRhYmFzZUxvYWRl
ckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKKyAgICAgICAgbV9kYXRhYmFz
ZUxvYWRlclRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMs
ICJIUlRGIGRhdGFiYXNlIGxvYWRlciIpOwogICAgIH0KIH0KIApAQCAtMTIxLDggKzEyMSw4IEBA
IHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbigp
CiAgICAgCiAgICAgLy8gd2FpdEZvclRocmVhZENvbXBsZXRpb24oKSBzaG91bGQgbm90IGJlIGNh
bGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgdGhyZWFkLgogICAgIGlmIChtX2RhdGFiYXNlTG9hZGVy
VGhyZWFkKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2RhdGFiYXNlTG9hZGVy
VGhyZWFkKTsKLSAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9kYXRh
YmFzZUxvYWRlclRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX2RhdGFiYXNlTG9h
ZGVyVGhyZWFkID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAppbmRl
eCBjODY5ZDEzN2ExZGIyZjUyNDk4ZDBlMWI2NWQ1ODdlNmM4MTliMzgxLi4zYWQyNTFmMjE5OTA5
ZjRiYzY0NTRkMDEzMjAxYjZhN2NhNzAyNjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFz
cyBIUlRGRGF0YWJhc2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxIUlRGRGF0YWJhc2VMb2Fk
ZXI+IHsKIAogICAgIC8vIEhvbGRpbmcgYSBtX3RocmVhZExvY2sgaXMgcmVxdWlyZWQgd2hlbiBh
Y2Nlc3NpbmcgbV9kYXRhYmFzZUxvYWRlclRocmVhZC4KICAgICBMb2NrIG1fdGhyZWFkTG9jazsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CisgICAgUmVmUHRy
PFRocmVhZD4gbV9kYXRhYmFzZUxvYWRlclRocmVhZDsKIAogICAgIGZsb2F0IG1fZGF0YWJhc2VT
YW1wbGVSYXRlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuY3BwCmluZGV4IDk2ZjMzMDgyODA3OWE3OWFkNjQ4MjBkMDcyMWM1OWM1ZWEx
NmZkYjEuLjIxYmU5OTZlZjM3ZTUzZGI3MDMxMDAxOTYyN2MwYzQwZDJiMjEwZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAt
MTMwLDcgKzEzMCw3IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hh
bm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgLy8gU3RhcnQgdXAg
YmFja2dyb3VuZCB0aHJlYWQKICAgICAvLyBGSVhNRTogd291bGQgYmUgYmV0dGVyIHRvIHVwIHRo
ZSB0aHJlYWQgcHJpb3JpdHkgaGVyZS4gIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZWFsLXRpbWUs
IGJ1dCBoaWdoZXIgdGhhbiB0aGUgZGVmYXVsdC4uLgogICAgIGlmICh0aGlzLT51c2VCYWNrZ3Jv
dW5kVGhyZWFkcygpICYmIG1fYmFja2dyb3VuZFN0YWdlcy5zaXplKCkgPiAwKQotICAgICAgICBt
X2JhY2tncm91bmRUaHJlYWQgPSBjcmVhdGVUaHJlYWQoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVh
ZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKKyAgICAgICAg
bV9iYWNrZ3JvdW5kVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV2ViQ29yZTo6YmFja2dyb3VuZFRo
cmVhZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKIH0KIAog
UmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKQEAgLTE0Niw3ICsxNDYsNyBAQCBS
ZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIoKQogICAgICAgICAgICAgbV9iYWNrZ3Jv
dW5kVGhyZWFkQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2JhY2tncm91bmRUaHJlYWQpOworICAgICAg
ICBtX2JhY2tncm91bmRUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4
IDZiYWViN2NjZTI5ODk2Yzk4OTYzNTEyZjQxYjQzYTJmMTI4ODU0MWMuLjA1OTYzMzY3YWUyODM0
OTQ4NzkwYmE3Y2NiNzIwNjBlYzU5ODEwNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFJldmVy
YkNvbnZvbHZlciB7CiAKICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBhbmQgc3luY2hyb25pemF0
aW9uCiAgICAgYm9vbCBtX3VzZUJhY2tncm91bmRUaHJlYWRzOwotICAgIFRocmVhZElkZW50aWZp
ZXIgbV9iYWNrZ3JvdW5kVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fYmFja2dyb3VuZFRo
cmVhZDsKICAgICBib29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBtX21vcmVJbnB1dEJ1ZmZl
cmVkOwogICAgIG11dGFibGUgTG9jayBtX2JhY2tncm91bmRUaHJlYWRNdXRleDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFk
ZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKaW5kZXggNmNkOGJkN2Y4MWJmZjIyMjdmZTE0
ZmJjYTBmYmZkMDU1ZDA5YzU3MS4uMWYyNWU4ZTU0ZTllZTg1ZmEwY2NhNmEzMWI5MmUxMTFlNmRm
MGNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKQEAgLTM3MCwy
MCArMzcwLDIwIEBAIFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRl
QnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiBQYXNzUmVmUHRyPEF1ZGlvQnVz
PiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRv
TW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IHJldHVyblZh
bHVlOwotICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1ZGlvRmlsZVJlYWRlciIs
IFsmcmV0dXJuVmFsdWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsKKyAgICBh
dXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZh
bHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CiAgICAgICAgIHJldHVyblZh
bHVlID0gQXVkaW9GaWxlUmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4
VG9Nb25vKTsKICAgICB9KTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7
CisgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKIH0KIAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9G
aWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZs
b2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAg
ICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVy
blZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgYXV0
byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1
ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAgICAgICByZXR1
cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBs
ZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1l
ci5jcHAKaW5kZXggMWM1YzMwZjM3N2E0MmJlMDAxNzcxNjUxZTg3ZjcwNDNhNWQ2NWM5MC4uMjY0
NjZmNTNiNDgyMThkMzM3YTVhODk0ZjFkYjcyOGRmNGM0N2M4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBS
ZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVu
dCwgcHVibGljIFN0cmVhbQogICAgICAgICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUq
KSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikg
b3ZlcnJpZGU7CiAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZCB7IDAgfTsKKyAg
ICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgICAgIExvY2sg
bV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgICAgICBDb25kaXRpb24gbV9p
bml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICAgICAgUnVuTG9vcCogbV9ydW5Mb29wIHsg
bnVsbHB0ciB9OwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAog
ICAgIDogU3RyZWFtaW5nQ2xpZW50KHNyYykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2lu
aXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhy
ZWFkKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RG
TW92ZShyZXF1ZXN0KV0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIlJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3Qp
XSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6
ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9v
cDo6Y3VycmVudCgpOwpAQCAtMTExMyw4ICsxMTEzLDggQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3Jj
LAogUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudCgpCiB7CiAgICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZCht
X3RocmVhZCk7Ci0gICAgICAgIG1fdGhyZWFkID0gMDsKKyAgICAgICAgbV90aHJlYWQtPmRldGFj
aCgpOworICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKG1fcnVu
TG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCmluZGV4IDQ2Yjg5OTRhODQx
ZWY3MWVhMjc5Y2U3N2NiYzhmYjQzYzI5ZjBhNjIuLmZmYmZkYTliODkzNDgzNTQ5MGM5YTQwYmEx
ZjQ4MzM2ZTQ3NjBjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQ0ZSdW5Mb29w
UmVmIGxvYWRlclJ1bkxvb3AoKQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTG9jaz4gbG9j
ayhsb2FkZXJSdW5Mb29wTXV0ZXgpOwogCiAgICAgaWYgKCFsb2FkZXJSdW5Mb29wT2JqZWN0KSB7
Ci0gICAgICAgIGNyZWF0ZVRocmVhZChydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5l
dHdvcmsgTG9hZGVyIik7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKHJ1bkxvYWRlclRocmVhZCwg
MCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsKIAogICAgICAgICBsb2FkZXJSdW5Mb29w
Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29wT2Jq
ZWN0OyB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IDQ0MDhjZDE5ODcwNWJhODZjYzhjMTk4NmZi
M2UyY2FkZTc5NmRjYzYuLmYxMDU3MTVlZDhkODc5MzczYjYzMzFjYjI2ZTA4MmMzZTFhYjhiMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuY3BwCkBAIC05NCwxMCArOTQsMTAgQEAgaW50IEN1cmxEb3dubG9hZE1hbmFnZXI6
OmdldFBlbmRpbmdEb3dubG9hZENvdW50KCkgY29uc3QKIHZvaWQgQ3VybERvd25sb2FkTWFuYWdl
cjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFydW5UaHJlYWQoKSkgewotICAg
ICAgICBpZiAobV90aHJlYWRJZCkKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KG1fdGhyZWFkSWQpOworICAgICAgICBpZiAobV90aHJlYWQpCisgICAgICAgICAgICBtX3RocmVh
ZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgc2V0UnVuVGhyZWFkKHRydWUpOwotICAg
ICAgICBtX3RocmVhZElkID0gY3JlYXRlVGhyZWFkKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93
bmxvYWRUaHJlYWQiKTsKKyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3dubG9h
ZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7CiAgICAgfQogfQogCkBAIC0xMDUsOSAr
MTA1LDkgQEAgdm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKIHsKICAgICBz
ZXRSdW5UaHJlYWQoZmFsc2UpOwogCi0gICAgaWYgKG1fdGhyZWFkSWQpIHsKLSAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSAw
OworICAgIGlmIChtX3RocmVhZCkgeworICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRp
b24oKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCmluZGV4
IDAyY2U3MzFiZDEwYTgwMTliN2ViZTFmYWM1MmI0NWU0MDkyNTYyMzEuLmY2YmJjNzdmNGQzY2Uw
Yjk2ODdkMWQ4ZmNhNjA5MTU4N2M5YWU0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTY5LDcgKzY5LDcgQEAgY2xh
c3MgQ3VybERvd25sb2FkTWFuYWdlciB7CiAKICAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVh
ZCh2b2lkKiBkYXRhKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAgICBS
ZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7CiAg
ICAgVmVjdG9yPENVUkwqPiBtX3BlbmRpbmdIYW5kbGVMaXN0OwogICAgIFZlY3RvcjxDVVJMKj4g
bV9hY3RpdmVIYW5kbGVMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKaW5kZXggNWY5ZTA5
NTQwNDcxN2QzMGJkODk5NDFlNWYyNTJmMTdiMGE4NjdiOS4uNjhlMjFmNDc0NDUxYWMzODc1MmI5
YmM4OTQzYzM1ZDIzYjY5NjliYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCkBAIC05Miw3
ICs5Miw3IEBAIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3Ry
ZWFtSGFuZGxlIHsKICAgICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgfTsKIAotICAgIFRo
cmVhZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4g
bV93b3JrZXJUaHJlYWQgeyBudWxscHRyIH07CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9w
VGhyZWFkIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fbXV0ZXhTZW5kOwogICAgIExvY2sgbV9tdXRl
eFJlY2VpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAppbmRleCAxZTM3
OWQxYjAwZDA5NTVmYzJkYTAwYmUzZjk2Zjk5MmE5MWI5NDNmLi5lY2I5ZjU0YjY1YTMzNTI0ZTNh
MzU2YTNiYzEzZDBlMmY2ZjZhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3Vy
bC5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0
YXJ0VGhyZWFkKCkKIAogICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVm
KCkuCiAKLSAgICBtX3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRocmVh
ZCIsIFt0aGlzXSB7CisgICAgbV93b3JrZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV2ViU29j
a2V0IHRocmVhZCIsIFt0aGlzXSB7CiAKICAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAKQEAgLTI0OSw4ICsyNDksOCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BU
aHJlYWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOwotICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKLSAgICBtX3dvcmtlclRo
cmVhZCA9IDA7CisgICAgbV93b3JrZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAg
bV93b3JrZXJUaHJlYWQgPSBudWxscHRyOwogICAgIGRlcmVmKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCA3YWQ1YjU3OTEzYTE2NzJkZjkxOTZlOWVi
MDEzM2UyM2UyMzI5ODVkLi5kZWU2Y2U2ZDY3M2Q3NmI0MWYyNzQ1NDA0ZmIwNzlmMjE5NjUzYjYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC05OSw3ICs5OSw3
IEBAIFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25z
dCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyCiB9CiAKIFdvcmtlclRocmVhZDo6V29ya2VyVGhy
ZWFkKGNvbnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRl
clByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSwgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJl
cG9ydGluZ1Byb3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBDb250
ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycywgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQ
b2xpY3ksIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIE1vbm90b25pY1RpbWUgdGlt
ZU9yaWdpbiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGNvbm5lY3Rpb25Qcm94eSwg
U29ja2V0UHJvdmlkZXIqIHNvY2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRpbWVGbGFncyBydW50aW1l
RmxhZ3MpCi0gICAgOiBtX3RocmVhZElEKDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQogICAg
ICwgbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAsIG1fd29ya2Vy
UmVwb3J0aW5nUHJveHkod29ya2VyUmVwb3J0aW5nUHJveHkpCiAgICAgLCBtX3J1bnRpbWVGbGFn
cyhydW50aW1lRmxhZ3MpCkBAIC0xMzMsMTUgKzEzMywxNSBAQCBXb3JrZXJUaHJlYWQ6On5Xb3Jr
ZXJUaHJlYWQoKQogCiBib29sIFdvcmtlclRocmVhZDo6c3RhcnQoKQogewotICAgIC8vIE11dGV4
IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5p
dGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KKyAgICAvLyBNdXRleCBwcm90ZWN0aW9u
IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVhZCBpcyBpbml0aWFsaXplZCB3aGVu
IHRoZSB0aHJlYWQgc3RhcnRzLgogICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9u
TXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhy
ZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOworICAgIG1f
dGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwg
dGhpcywgIldlYkNvcmU6IFdvcmtlciIpOwogCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAg
cmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3Rh
cnQodm9pZCogdGhyZWFkKQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3
b3JrZXJUaHJlYWQoKQogICAgIGdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdChtYWlu
Q29udGV4dC5nZXQoKSk7CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQg
PSBtX3RocmVhZElEOworICAgIFJlZlB0cjxUaHJlYWQ+IHByb3RlY3RvciA9IG1fdGhyZWFkOwog
CiAgICAgQVNTRVJUKG1fd29ya2VyR2xvYmFsU2NvcGUtPmhhc09uZVJlZigpKTsKIApAQCAtMjA1
LDcgKzIwNSw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIHRocmVh
ZEdsb2JhbERhdGEoKS5kZXN0cm95KCk7CiAKICAgICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkg
YmUgYWxyZWFkeSBkZXN0cm95ZWQgZnJvbSBub3RpZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8g
YWNjZXNzICJ0aGlzIi4KLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHByb3RlY3Rv
ci0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgV29ya2VyVGhyZWFkOjpzdGFydFJ1bm5pbmdEZWJ1Z2dl
clRhc2tzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCmluZGV4IDA3YWQzY2U3
ODRmOTE5ZjcwYzQ1NjgxYjk1NGMwMDk5OTZmNTU3ZjIuLmY4MDllZTY2NzI3ZWUxMzlkYzRmMTlk
MmNiNjFiMjI2NWU0ZWE0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApA
QCAtNjAsNyArNjAsNyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxX
b3JrZXJUaHJlYWQ+IHsKICAgICBib29sIHN0YXJ0KCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJRDsg
fQorICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVh
ZCA/IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AoKSB7
IHJldHVybiBtX3J1bkxvb3A7IH0KICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVy
UHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlckxvYWRlclByb3h5OyB9CiAgICAgV29ya2Vy
UmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5KCkgY29uc3QgeyByZXR1cm4gbV93
b3JrZXJSZXBvcnRpbmdQcm94eTsgfQpAQCAtOTgsNyArOTgsNyBAQCBjbGFzcyBXb3JrZXJUaHJl
YWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBzdGF0aWMgdm9pZCB3
b3JrZXJUaHJlYWRTdGFydCh2b2lkKik7CiAgICAgdm9pZCB3b3JrZXJUaHJlYWQoKTsKIAotICAg
IFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVh
ZDsKICAgICBXb3JrZXJSdW5Mb29wIG1fcnVuTG9vcDsKICAgICBXb3JrZXJMb2FkZXJQcm94eSYg
bV93b3JrZXJMb2FkZXJQcm94eTsKICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgbV93b3JrZXJS
ZXBvcnRpbmdQcm94eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAppbmRl
eCBiYjY2ZmNlYTdlNTI4YmMyN2Y2MzNhM2U1Mjg3OGI1MDFlZjBlMTg3Li4zNTc2Nzk0NmFkZTM3
MmE0Nzk0NWY4NWQzZjg5NThiNTI1NGFiZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0
b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3Jh
Z2VUaHJlYWQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBIYXNoU2V0PFN0b3JhZ2VUaHJl
YWQqPiYgYWN0aXZlU3RvcmFnZVRocmVhZHMoKQogfQogCiBTdG9yYWdlVGhyZWFkOjpTdG9yYWdl
VGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KQEAgLTQ4LDE2ICs0OCwxNiBAQCBTdG9y
YWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKIFN0b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFk
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV90aHJlYWRJ
RCk7CisgICAgQVNTRVJUKCFtX3RocmVhZCk7CiB9CiAKIGJvb2wgU3RvcmFnZVRocmVhZDo6c3Rh
cnQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3RocmVhZElE
KQotICAgICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKFN0b3JhZ2VUaHJlYWQ6OnRocmVh
ZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOworICAg
IGlmICghbV90aHJlYWQpCisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoU3RvcmFn
ZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9jYWxT
dG9yYWdlIik7CiAgICAgYWN0aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0
dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFN0b3JhZ2VU
aHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjayh2b2lkKiB0aHJlYWQpCkBAIC03OCwyNSAr
NzgsMjUgQEAgdm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKIHZvaWQgU3Rv
cmFnZVRocmVhZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAm
JiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQp
OwogICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+
KFdURk1vdmUoZnVuY3Rpb24pKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRl
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5r
aWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYg
bV90aHJlYWQpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwogICAg
IC8vIEV2ZW4gaW4gd2VpcmQsIGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9u
ZXhpc3RlbnQgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAg
aWYgKCFtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9xdWV1ZS5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4oW3RoaXNdIHsKICAgICAgICAgcGVyZm9y
bVRlcm1pbmF0ZSgpOwogICAgIH0pKTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3Ro
cmVhZElEKTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBBU1NFUlQo
bV9xdWV1ZS5raWxsZWQoKSk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQgPSBu
dWxscHRyOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9X
ZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKaW5kZXggOTU2NGI4YWEwNmU1MjQzZTMwZTQ2
N2M1ZmJmZTJjZGFkYjI0MGM1Ni4uOGNmMWIzZDRhZGM1YTMwNmE3N2VjNzdjOWMzMjY2NjE2ODdi
ZWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC01Niw3ICs1Niw3
IEBAIGNsYXNzIFN0b3JhZ2VUaHJlYWQgewogICAgIC8vIEJhY2tncm91bmQgdGhyZWFkIHBhcnQg
b2YgdGhlIHRlcm1pbmF0ZSBwcm9jZWR1cmUuCiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7
CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4g
bV90aHJlYWQ7CiAgICAgTWVzc2FnZVF1ZXVlPEZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVlOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCmluZGV4IDNiODVmMjJmZmFlMDFlMjhhYWI5OTgxNjY5OGFkYWQ3YTM4NDNjNWYuLmIwNGFj
YzhjMzFjNWVjYTgyYTUxNzQxNjY3ZGI3MGUwNTNmMWQyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIwNCw3ICsyMDQsNyBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogewogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKHBhcmFtZXRlcnMpOwogCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2Vy
SW5pdGlhdGVkKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0
aWF0ZWQoKTsKIAogICAgIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0
ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIG1fbG9hZFRocm90
dGxlTGF0ZW5jeSA9IHBhcmFtZXRlcnMubG9hZFRocm90dGxlTGF0ZW5jeTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bFNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlSU9DaGFubmVsU291cC5jcHAKaW5kZXggZWY3YmE4OTk4MjAyMzI1ODllNzM5MWYyN2ZjZDNk
NmUxNjlmNjg5NC4uZmEwMzBmYjNhMmEwZjgyZDZhMjQ1YmY4NTZiMzZhYTI3MzIwMDcxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
SU9DaGFubmVsU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lk
IElPQ2hhbm5lbDo6cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwg
V29ya1F1ZXVlKiBxdWV1ZSwgcwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAg
UmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbCh0aGlzKTsKLSAgICBkZXRhY2hUaHJlYWQoY3JlYXRl
VGhyZWFkKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21w
bGV0aW9uSGFuZGxlcl0geworICAgIFRocmVhZDo6Y3JlYXRlKCJJT0NoYW5uZWw6OnJlYWRTeW5j
IiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0gewogICAgICAgICBz
aXplX3QgYnVmZmVyU2l6ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUp
OwogICAgICAgICB1aW50OF90KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZh
c3RNYWxsb2MoYnVmZmVyU2l6ZSkpOwogICAgICAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHJlYWRC
dWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwg
YnVmZmVyU2l6ZSwgYnVmZmVyRGF0YSwgZmFzdEZyZWUpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2
b2lkIElPQ2hhbm5lbDo6cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6
ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgcwogICAgICAgICAgICAgRGF0YSBkYXRhID0geyBXVEZNb3Zl
KGJ1ZmZlcikgfTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEsIDApOwogICAg
ICAgICB9LCBxdWV1ZSk7Ci0gICAgfSkpOworICAgIH0pLT5kZXRhY2goKTsKIH0KIAogc3RydWN0
IFdyaXRlQXN5bmNEYXRhIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQ
Qy9Db25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9u
LmNwcAppbmRleCBiYWY1MzA2NmJlMjAwOWUyNmRiZWI3YWM4ODhjNDA1ZTNiZGJhNmZmLi5iMzg3
YjZiNDQ1ZTM3ZDNkYTNlOGE3MmM3YzBiYTM1Yzg2M2YyNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBDb25u
ZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBt
ZXNzYWdlKQogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAobWVzc2FnZS0+aXNTeW5j
TWVzc2FnZSgpICYmIG1fc2hvdWxkQm9vc3RNYWluVGhyZWFkT25TeW5jTWVzc2FnZSkgewotICAg
ICAgICBwdGhyZWFkX292ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19j
bGFzc19zdGFydF9ucChtX21haW5UaHJlYWQsIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VT
RVJfSU5URVJBQ1RJVkUpLCAwKTsKKyAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRl
ID0gcHRocmVhZF9vdmVycmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBUaHJl
YWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAwKTsKICAg
ICAgICAgbWVzc2FnZS0+c2V0UU9TQ2xhc3NPdmVycmlkZShvdmVycmlkZSk7CiAgICAgfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGll
cy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5
UG9pbnQuaAppbmRleCAzYmI3YzZkNDdkNDNjNjk3NmIwM2NmZjc3MzY0NGY0ODc4NDkzZDQxLi5m
MjNkYjQzYzAyMzRkYzdjODEwNDk1M2YwNGVmODc5NTJmOWI4NzRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENT
ZXJ2aWNlRW50cnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50
VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKQEAgLTEwMyw3
ICsxMDMsNyBAQCB2b2lkIFhQQ1NlcnZpY2VJbml0aWFsaXplcihPU09iamVjdFB0cjx4cGNfY29u
bmVjdGlvbl90PiBjb25uZWN0aW9uLCB4cGNfb2JqZWN0XwogCiAjaWYgSEFWRShRT1NfQ0xBU1NF
UykKICAgICBpZiAocGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5jb250YWlucyhB
U0NJSUxpdGVyYWwoImFsd2F5cy1ydW5zLWF0LWJhY2tncm91bmQtcHJpb3JpdHkiKSkpCi0gICAg
ICAgIHNldEdsb2JhbE1heFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAgICAgICAgVGhy
ZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7CiAjZW5kaWYKIAog
ICAgIFhQQ1NlcnZpY2VUeXBlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJl
TW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1
cmVNb25pdG9yLmNwcAppbmRleCAwNjA4YWI3MmY5OTI0OGVmMjRjZDJkNTI0NWVlNTMzM2EwMGQ5
ZDBkLi40OGQxMDY5Nzc2NWE5NWE4YjM1ODcyMzBlMTAyZDgwM2FkNThjMGFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25p
dG9yLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5
UHJlc3N1cmVNb25pdG9yKCkKICAgICBpZiAobV9ldmVudEZEID09IC0xKQogICAgICAgICByZXR1
cm47CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJl
YWQoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7CisgICAgUmVmUHRyPFRocmVhZD4g
dGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7
CiAgICAgICAgIGRvdWJsZSBwb2xsSW50ZXJ2YWwgPSBzX21heFBvbGxpbmdJbnRlcnZhbEluU2Vj
b25kczsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIHNsZWVwKHBvbGxJbnRl
cnZhbCk7CkBAIC0yNzEsNyArMjcxLDcgQEAgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQ
cmVzc3VyZU1vbml0b3IoKQogICAgICAgICB9CiAgICAgICAgIGNsb3NlKG1fZXZlbnRGRCk7CiAg
ICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElkZW50aWZpZXIpOworICAgIHRocmVhZC0+
ZGV0YWNoKCk7CiB9CiAKIElQQzo6QXR0YWNobWVudCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6OmNy
ZWF0ZUhhbmRsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cAppbmRleCAxZDUwMjE1YTIwMzExNGI0ZjIzZDVkNThmMmQyNTNmZjc5MDU2ZDVlLi40Zjk2YWJi
ZjBkYzk3MmY4YjljMmM2Y2Y2ZTgyNjQ2OWUyNWZiZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6
OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJh
bWV0ZXJzKQogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV1RGTW92ZShwYXJhbWV0
ZXJzKSk7CiAKICAgICAvLyBNYXRjaCB0aGUgUW9TIG9mIHRoZSBVSVByb2Nlc3MgYW5kIHRoZSBz
Y3JvbGxpbmcgdGhyZWFkIGJ1dCB1c2UgYSBzbGlnaHRseSBsb3dlciBwcmlvcml0eS4KLSAgICBX
VEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CisgICAgV1RGOjpUaHJl
YWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CiAKICAgICBtX3N1cHBy
ZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlcjsKICAgICBpZiAoIW1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRs
ZXIpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBkMzVhZWQ4NzE1MGRlZTQxMTk3MTQ2ZmVlZjBiMDlmZjQ2ZTg0MDYwLi5lYTI3MDVjY2M0ZDFl
YTM3NmUzY2I1ZWI0OWYxNDg1NTZiNGRiY2U1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTctMDQtMDcgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9k
dWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dz
IFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAgICAgIChydW5KYXZhU2NyaXB0VGhyZWFk
KToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAgICAoc3RvcEphdmFT
Y3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW06CisgICAgICAgICh0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1bkxvY2tU
ZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcDoK
KwogMjAxNy0wNC0wNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgRm9udFdpdGhGZWF0dXJlcyB0ZXN0IGZvbnQgcGFzcyBPVFMKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKaW5kZXggZTJmOWJhZGU2
Y2E3YzI2OTQ4NWE0Y2RjYmU2MDk5YzM2YmEwMjE5OC4uNzEwZDJhNTlkYTkyOTAxNmU2MDhhNGNm
N2Q5NDZmYTg3ZmFkOTMyYyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNj
cmlwdFRocmVhZGluZy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRo
cmVhZGluZy5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIExvY2smIGphdmFTY3JpcHRUaHJl
YWRzTXV0ZXgoKQogICAgIHJldHVybiBzdGF0aWNNdXRleDsKIH0KIAotdHlwZWRlZiBIYXNoU2V0
PFRocmVhZElkZW50aWZpZXI+IFRocmVhZFNldDsKK3R5cGVkZWYgSGFzaFNldDxSZWZQdHI8VGhy
ZWFkPj4gVGhyZWFkU2V0Owogc3RhdGljIFRocmVhZFNldCYgamF2YVNjcmlwdFRocmVhZHMoKQog
ewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChUaHJlYWRTZXQsIHN0YXRpY0ph
dmFTY3JpcHRUaHJlYWRzLCAoKSk7CkBAIC0xMDgsMTAgKzEwOCwxMCBAQCB2b2lkIHJ1bkphdmFT
Y3JpcHRUaHJlYWQodm9pZCopCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwotICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSAgICAgICAgZGV0YWNoVGhyZWFk
KHRocmVhZCk7Ci0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkucmVtb3ZlKHRocmVhZCk7Ci0g
ICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgmcnVuSmF2YVNjcmlw
dFRocmVhZCwgMCwgMCkpOworICAgICAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVu
dCgpOworICAgICAgICB0aHJlYWQuZGV0YWNoKCk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRz
KCkucmVtb3ZlKCZ0aHJlYWQpOworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChUaHJl
YWQ6OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMo
KQogICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ7ICsraSkKLSAg
ICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0
VGhyZWFkLCAwLCAwKSk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6
Y3JlYXRlKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CiB9CiAKIHZvaWQgc3RvcEphdmFT
Y3JpcHRUaHJlYWRzKCkKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhy
ZWFkcygpCiAgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzU2hvdWxkVGVybWluYXRlID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllciwgamF2YVNjcmlwdFRocmVhZHND
b3VudD4gdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4sIGphdmFTY3JpcHRUaHJl
YWRzQ291bnQ+IHRocmVhZHM7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZh
U2NyaXB0VGhyZWFkc011dGV4KCkpOwogICAgICAgICBjb3B5VG9WZWN0b3IoamF2YVNjcmlwdFRo
cmVhZHMoKSwgdGhyZWFkcyk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlw
dFRocmVhZHMoKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamF2YVNjcmlw
dFRocmVhZHNDb3VudDsgKytpKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJl
YWRzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAg
IHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBmYjRkMjZm
Y2NlYjcwYzRiNTMyMDEwZGE4NWZiOWNlNzg1NWMxMzg0Li4zY2VhYTZmM2U2NTczNWQzMGVmMWE0
Zjg5N2Q1ZTY5YzRmYTVmZjA2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCkBAIC0xMDcyLDggKzEwNzIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0VGhyZWFkSWRl
bnRpZmllck1hcCgpCiAgICAgcHRocmVhZF9qb2luKHB0aHJlYWQsIDApOwogCiAgICAgLy8gTm93
IGNyZWF0ZSBhbm90aGVyIHRocmVhZCB1c2luZyBXVEYuIE9uIE9TWCwgaXQgd2lsbCBoYXZlIHRo
ZSBzYW1lIHB0aHJlYWQgaGFuZGxlCi0gICAgLy8gYnV0IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQg
VGhyZWFkSWRlbnRpZmllci4KLSAgICBjcmVhdGVUaHJlYWQocnVuVGhyZWFkLCAwLCAiRHVtcFJl
bmRlclRyZWU6IHRlc3QiKTsKKyAgICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBSZWZQ
dHI8VGhyZWFkPi4KKyAgICBUaHJlYWQ6OmNyZWF0ZShydW5UaHJlYWQsIDAsICJEdW1wUmVuZGVy
VHJlZTogdGVzdCIpOwogfQogCiBzdGF0aWMgdm9pZCBhbGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJz
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCmluZGV4IDg0
ODUyNzM1MWY2MDYzZmMyNjM2ODc4MDU2ZDljMjRkYmFiZTgzZGMuLjc3MjE2MzZiNzc4MDdmMTM5
NTFlYTExMmZiZDQxM2U4ZmFjNDYwYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvQ29uZGl0aW9uLmNwcApAQCAtODksMTQgKzg5LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAgICBD
b25kaXRpb24gZW1wdHlDb25kaXRpb247CiAgICAgQ29uZGl0aW9uIGZ1bGxDb25kaXRpb247CiAK
LSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxU
aHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9k
dWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2sg
cmVjZWl2ZWRMb2NrOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVyczsg
aS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVh
dGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgPSBUaHJl
YWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAg
WyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAg
dm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9u
LCBsb2NrZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENo
ZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhy
ZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNo
b3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBx
dWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICFzaG91bGRDb250aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBA
IC0xMzEsNyArMTMxLDcgQEAgdm9pZCBydW5UZXN0KAogICAgIHNsZWVwKGRlbGF5KTsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0
cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAg
ICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7
CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2tlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3Vs
ZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1
ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24g
cHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVl
dWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZW91dCk7CkBAIC0xNTUsOCArMTU1LDggQEAgdm9pZCBydW5UZXN0KAogICAgICAgICBwcm9kdWNl
clRocmVhZHMuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOwogICAgIH0KIAotICAgIGZvciAoVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQotICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJl
ZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCisgICAgICAg
IHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobG9jayk7CkBAIC0xNjQsOCArMTY0LDggQEAg
dm9pZCBydW5UZXN0KAogICAgIH0KICAgICBlbXB0eUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKIAot
ICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogY29uc3VtZXJUaHJl
YWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsK
KyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVh
ZHMpCisgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAg
ICBFWFBFQ1RfRVEobnVtUHJvZHVjZXJzICogbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwgcmVjZWl2
ZWQuc2l6ZSgpKTsKICAgICBzdGQ6OnNvcnQocmVjZWl2ZWQuYmVnaW4oKSwgcmVjZWl2ZWQuZW5k
KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAppbmRleCA1NTc2MzAyZDY5
MGRmY2EzNTk5MjkyOGIxYzg1M2M3NjIyZTQ1ZmI5Li42YTRlNTM4ZjU2ZjQ2ZDE3N2EzZjYyZjFk
ZGViM2E0ZDBhZjJhZjA4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Mb2NrLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcApA
QCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgcnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhyZWFkR3Jv
dXBzLCB1bnNpZ25lZCBudW1UaHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVkCiB7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPExvY2tUeXBlW10+IGxvY2tzID0gc3RkOjptYWtlX3VuaXF1ZTxMb2NrVHlwZVtd
PihudW1UaHJlYWRHcm91cHMpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gd29yZHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1UaHJlYWRHcm91cHMpOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3Vw
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6
bWFrZV91bmlxdWU8UmVmUHRyPFRocmVhZD5bXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFk
c1Blckdyb3VwKTsKIAogICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRo
cmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykgewogICAgICAgICB3b3Jkc1t0aHJlYWRH
cm91cEluZGV4XSA9IDA7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51
bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgIHRocmVhZHNb
dGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNy
ZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRo
cmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAg
ICAgICAgICJMb2NrIHRlc3QgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJ
bmRleCwgJmxvY2tzLCAmd29yZHMsIG51bUl0ZXJhdGlvbnMsIHdvcmtQZXJDcml0aWNhbFNlY3Rp
b25dICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSXRlcmF0
aW9uczsgaS0tOykgewpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVk
IG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAog
ICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMg
KiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAgICAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgIHRocmVhZHNbdGhy
ZWFkSW5kZXhdLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgZG91YmxlIGV4cGVjdGVkID0g
MDsKICAgICBmb3IgKHVpbnQ2NF90IGkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obnVtSXRlcmF0
aW9ucykgKiB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uICogbnVtVGhyZWFkc1Blckdyb3VwOyBpLS07
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAppbmRleCBj
NjdlMWUwODE1YTgzYWZhOTMzM2UyYWM5YTJiZDc4YjY3YjE2NDViLi41YWY5YzdjODI3YjIxZTIx
ZDhkZjkzMDUyNjBkNmZmZWU2OGZiZDFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9QYXJraW5nTG90LmNwcApAQCAtNDgsMTYgKzQ4LDE0IEBAIHN0cnVjdCBTaW5nbGVMYXRj
aFRlc3QgewogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtVGhyZWFkczsg
aS0tOykgewogICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgY3Jl
YXRlVGhyZWFkKAorICAgICAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAg
ICAgICAgICAiUGFya2luZyBUZXN0IFRocmVhZCIsCiAgICAgICAgICAgICAgICAgICAgIFsmXSAo
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGN1cnJlbnRUaHJlYWQo
KSk7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGF3YWtlLmFkZChjdXJyZW50VGhyZWFkKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF3YWtlLmFkZChUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsYXN0QXdva2VuID0gJlRocmVhZDo6Y3VycmVudCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKICAgICAgICAgICAgICAgICAgICAg
fSkpOwogICAgICAgICB9CkBAIC02NSwxNiArNjMsMTYgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVz
dCB7CiAKICAgICB2b2lkIHVucGFya09uZSh1bnNpZ25lZCBzaW5nbGVVbnBhcmtJbmRleCkKICAg
ICB7Ci0gICAgICAgIEVYUEVDVF9FUSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgIEVYUEVDVF9U
UlVFKG51bGxwdHIgPT0gbGFzdEF3b2tlbik7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBu
dW1XYWl0aW5nT25BZGRyZXNzID0gMDsKLSAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIs
IDg+IHF1ZXVlOworICAgICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4sIDg+IHF1ZXVlOwogICAg
ICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAg
IFsmXSAoVGhyZWFkJiB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKHRocmVhZElkZW50
aWZpZXIpOworICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZCgmdGhyZWFkSWRlbnRpZmllcik7
CiAKICAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7CiAgICAgICAgICAgICB9
KTsKQEAgLTg3LDEyICs4NSwxMiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwogICAgICAgICAg
ICAgd2hpbGUgKGF3YWtlLnNpemUoKSA8IHNpbmdsZVVucGFya0luZGV4ICsgMSkKICAgICAgICAg
ICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwotICAgICAgICAgICAgRVhQRUNUX05FKDB1
LCBsYXN0QXdva2VuKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgIT0gbGFzdEF3
b2tlbik7CiAgICAgICAgICAgICBpZiAoIXF1ZXVlLmlzRW1wdHkoKSAmJiBxdWV1ZVswXSAhPSBs
YXN0QXdva2VuKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiV29rZSB1cCB3cm9uZyB0aHJl
YWQ6IHF1ZXVlID0gIiwgbGlzdER1bXAocXVldWUpLCAiLCBsYXN0IGF3b2tlbiA9ICIsIGxhc3RB
d29rZW4sICJcbiIpOwogICAgICAgICAgICAgICAgIEVYUEVDVF9FUShxdWV1ZVswXSwgbGFzdEF3
b2tlbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsYXN0QXdva2VuID0gMDsKKyAgICAg
ICAgICAgIGxhc3RBd29rZW4gPSBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDAs
NyArOTgsNyBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICB7CiAgICAgICAgIHVuc2ln
bmVkIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNo
KAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNz
KSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAg
ICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCkBAIC0xMTQsNyArMTEyLDcgQEAgc3RydWN0
IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CiAg
ICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50
aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiwg
Y29uc3Qgdm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZz
ZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIApAQCAt
MTI5LDggKzEyNyw4IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAgICAgICAg
IGNvbmRpdGlvbi53YWl0KGxvY2tlcik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMpCi0gICAgICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChSZWZQ
dHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogdGhyZWFkcykKKyAgICAgICAgICAgIHRocmVh
ZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgLy8gU2VtYXBo
b3JlIG9wZXJhdGlvbnMuCkBAIC0xNzksOSArMTc3LDkgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVz
dCB7CiAgICAgQXRvbWljPGludD4gc2VtYXBob3JlOwogICAgIHN0ZDo6bXV0ZXggbG9jazsKICAg
ICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBjb25kaXRpb247Ci0gICAgSGFzaFNldDxUaHJlYWRJ
ZGVudGlmaWVyPiBhd2FrZTsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIGxhc3RBd29rZW4geyAwIH07CisgICAgSGFzaFNldDxSZWY8
VGhyZWFkPj4gYXdha2U7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOworICAg
IFJlZlB0cjxUaHJlYWQ+IGxhc3RBd29rZW4geyBudWxscHRyIH07CiB9OwogCiB2b2lkIHJ1blBh
cmtpbmdUZXN0KHVuc2lnbmVkIG51bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBu
dW1UaHJlYWRzLCB1bnNpZ25lZCBudW1TaW5nbGVVbnBhcmtzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306499</attachid>
            <date>2017-04-07 07:14:41 -0700</date>
            <delta_ts>2017-04-07 07:33:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407231440.patch</filename>
            <type>text/plain</type>
            <size>219216</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5jMTBkYzA5MGMwMzI1Mzlj
NzM1MWJmNDEyMDFmYzg2MzhiM2Y0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Om93bmVyVGhyZWFkKToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6
c2VuZCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKwogMjAxNy0wNC0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA1YzBiYjUwZDg1MGNjZDVmZDRlYzUwZGM5NDQ4ODM0Y2ZjNmNjYzNkLi41NTk2NmEyN2Ey
MzcxYzlmZWY5OGM1NmE2ZTY3M2RmOTA1MWMyMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAx
Ny0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5k
IGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhy
ZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0Nv
bmRpdGlvblNwZWVkVGVzdC5jcHA6CisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NU
ZXN0LmNwcDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAg
ICAqIHd0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJl
YWQ6OnN0YXJ0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3Rm
L01haW5UaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQpOgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisgICAgICAgICogd3RmL01l
bW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6
dHJ5TG9ja0Zvcik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFBy
aXZhdGU6OndvcmtlclRocmVhZCk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6VGhy
ZWFkUHJpdmF0ZSk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorICAgICAgICAoV1RG
OjpQYXJraW5nTG90Ojpmb3JFYWNoSW1wbCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoK
KyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9yRWFjaCk6CisgICAgICAgICogd3RmL1JlZlB0
ci5oOgorICAgICAgICAoV1RGOjpSZWZQdHI6OlJlZlB0cik6CisgICAgICAgICogd3RmL1RocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oOgorICAgICAgICAoV1RGOjpUaHJlYWRGdW5jdGlvbkludm9j
YXRpb246OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbik6CisgICAgICAgICogd3RmL1RocmVhZEdy
b3VwLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9y
bVRocmVhZC5oLgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAgICAgICAoV1RG
OjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAgICogd3RmL1Ro
cmVhZEhvbGRlclB0aHJlYWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAg
ICogd3RmL1RocmVhZEhvbGRlcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9U
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFs
aXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJXaW4uaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAg
ICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRI
b2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZHVtcCk6Cisg
ICAgICAgIChXVEY6Om5vcm1hbGl6ZVRocmVhZE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpjcmVhdGVUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW50ZXJhY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW5pdGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjphZGp1c3RlZFFPU0NsYXNzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6
aWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkZE9uRXhpdENhbGxiYWNrKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlk
Sm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6
Y3VycmVudFRocmVhZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZSk6CisgICAgICAg
IChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3Vy
cmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQpOgorICAgICAgICAoV1RGOjp3dGZUaHJlYWRF
bnRyeVBvaW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRpZEV4aXQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmVzdGFibGlzaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y2hh
bmdlUHJpb3JpdHkpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkZXRhY2gpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNy
ZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjdXJyZW50SUQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6cmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpn
ZXRSZWdpc3RlcnMpOgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpQdGhyZWFkU3RhdGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVh
ZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlI
ZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmRldGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6c2lnbmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5n
V2luLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZElu
dGVybmFsKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChX
VEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUlu
dGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpjdXJyZW50SUQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OlRocmVhZCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkRXhp
dCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0YWJsaXNoKToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBs
ZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6cmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpnZXRSZWdpc3RlcnMpOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJl
YWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRp
Zmllcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpk
ZXRhY2hUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1
ZXVlOjpjb25jdXJyZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAg
ICAgKiB3dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAoV1RGOjpkaXNwYXRj
aFFPU0NsYXNzKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcDoK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGludXgvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyTGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAoV1RGOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKToKKwogMjAxNy0w
NC0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291
cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDg3M2QzNzkzNDg0ZGRkNjA4YmNjNTlhMDBhNWJlZjU5MmNhYzBi
NmQuLmFlZmNmNGFkZDJiNGVlYzE4YWExYjBiM2JmM2RjYmY3OWRjODI5ZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw4MSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1
c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0
aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpJREJTZXJ2ZXIp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFy
dFJlbmRlcmluZyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFk
OjpyZWNvcmREYXRhYmFzZU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6Z2V0VGhy
ZWFkSUQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRG
b3JEZWJ1Z2dpbmcpOgorICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGxPbkZpbGVUaHJlYWQpOgorICAgICAgICAqIGxvYWRlci9pY29u
L0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Om9wZW4p
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAgICogbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmg6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRo
cmVhZElmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaDoKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUaHJlYWQ6OnRocmVhZENhbGxiYWNrKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRGF0
YWJhc2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjpI
UlRGRGF0YWJhc2VMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVy
Ojpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9h
ZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbik6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6UmV2
ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6flJldmVy
YkNvbnZvbHZlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJl
YW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5j
cHA6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGll
bnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVy
UnVuTG9vcCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BUaHJl
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3Vy
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdGFydFRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdG9wVGhy
ZWFkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2Vy
VGhyZWFkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkOjp0aHJlYWRJRCk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0
aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
MmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1ODA5NzdmMTI5NWQxZmJmZS4uNzg1MzgxNDg2NDNiNTY4
NjIzNmIxMGFlZDI3ODY2OWFmZWFlYWRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAx
Ny0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5k
IGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhy
ZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRo
cmVhZDo6U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp+
U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUpOgorICAgICAgICAqIFN0b3JhZ2UvU3Rv
cmFnZVRocmVhZC5oOgorCiAyMDE3LTA0LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogT25seSBDYXB0dXJlIEV4dHJhIE5l
dHdvcmsgTG9hZCBNZXRyaWNzIHdoZW4gdGhlcmUgaXMgYSBXZWIgSW5zcGVjdG9yIEZyb250ZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggYTUyY2Q3YWNkZDEyMjYzZTY1YWYxOTZiYTAwMzMwMjEzOGI5MWU2Ni4u
NTQxZWMxMjRjMDE2NDRiZjliYmRmNjYxYjBlYmNmMWE2MmUyNjQ0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIzIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBS
ZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24g
c2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFkU3lu
Y0luVGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAg
ICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAq
IFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRy
eVBvaW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0aWFsaXplcik6CisgICAg
ICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0
ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNw
cAppbmRleCBlNzgwODZjM2E5NjEyYTJmMGI0ZDdhYWYxYWRjN2JhMWExMDFjNTQ3Li40M2FlZjA3
Nzk3MGNmZWRiMmNhYzA0NjNmY2Q5ZWNjYTI5ZDE1MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwCkBAIC05Niw3
ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkKIHsKICAgICBCaXRtYXAgYml0bWFw
OwogICAgIGNvbnN0IGludCBudW1UaHJlYWRzID0gNTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEc1tudW1UaHJlYWRzXTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRzW251bVRocmVh
ZHNdOwogICAgIERhdGEgZGF0YVtudW1UaHJlYWRzXTsKIAogICAgIFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwpAQCAtMTA3LDEyICsxMDcsMTIgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAo
KQogICAgICAgICBkYXRhW2ldLmlkID0gaTsKICAgICAgICAgZGF0YVtpXS5udW1UaHJlYWRzID0g
bnVtVGhyZWFkczsKICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRocmVhZEZ1bmMgPSBz
dGQ6OmJpbmQoc2V0Qml0VGhyZWFkRnVuYywgJmRhdGFbaV0pOwotICAgICAgICB0aHJlYWRJRHNb
aV0gPSBjcmVhdGVUaHJlYWQoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRGdW5jKTsKKyAgICAg
ICAgdGhyZWFkc1tpXSA9IFRocmVhZDo6Y3JlYXRlKCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhyZWFk
RnVuYyk7CiAgICAgfQogCiAgICAgcHJpbnRmKCJXYWl0aW5nIGZvciAlZCB0aHJlYWRzIHRvIGpv
aW5cbiIsIG51bVRocmVhZHMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsg
aSsrKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRHNbaV0pOworICAg
ICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgcHJpbnRmKCJQQVNT
OiBDb21wYXJlQW5kU3dhcCB0ZXN0IGNvbXBsZXRlZCB3aXRob3V0IGEgaGFuZ1xuIik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyMTdiNWM4NTUxYTU4ZTZjZmQwMGM1YmQx
ZjJkYWExMDI1ZjQwOGUuLjdkMjAzNmJlODYxNmZmNTM4NjdlNWUwNzk1NjVmZGE1YTc4ODUxZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDY3LDcgKzI0NjcsNiBAQAogCQlG
RUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAv
KiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZFRTQzRkNFMUU2NjQxNzEw
MDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhy
ZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2NjJE
MDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYxRDVF
Nzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3Ry
aW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KQEAgLTUwOTMsNyArNTA5Miw2IEBA
CiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQaW5nUG9uZ1N0YWNr
T3ZlcmZsb3dUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dU
ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDUxQjk3RjREOTAw
OUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVGhyZWFkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5k
U3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29tcGFy
ZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAg
LyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZENkZDNTFENUU3OTcwMDA4RjJG
MEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg1NCw3
ICs2ODUyLDYgQEAKIAkJCQlGNjkyQTg3ODAyNTU1OTdEMDFGRjYwRjcgLyogT3BlcmF0aW9ucy5o
ICovLAogCQkJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLywKIAkJ
CQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovLAotCQkJCUZFRTQzRkNE
MUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oICovLAogCQkJCTg2ODkxNkE5MTU1
RjI4NTQwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oICovLAogCQkJCTE0NzM0MURGMURDMkNFOTYw
MEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJMTQ3MzQxRDMxREMwMkU2
RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmggKi8sCkBAIC05MzM0LDcgKzkzMzEsNiBA
QAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwNUI0MUFFMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVFNDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBsYXRm
b3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQg
LyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMDFB
NkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVC
NDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCmluZGV4IDg3YjM1M2FhMzc5
MjVjYTFlMmZhODQxMTk5NzZhZGYwYjFlMDdiYWEuLmM5MTc3MDc5NTg4Zjg2ZDQzMWEyOGJjMDc0
ZDRmZTJlM2YxM2RjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
dGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNw
cApAQCAtMTkxMywxMCArMTkxMywxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAK
ICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsK
KyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CiAg
ICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAg
ICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAog
ICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsK
QEAgLTE5MzMsOCArMTkzMyw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAg
ICAgICAgICAgICB9KSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZCA6IHRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7Cisg
ICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAwMTk5NmFmNzFhYjRmMDllYjQ5YjcwMTFjMTdk
YmM5M2M0MGNlODdhLi45MDQ2NTY0ODg3YjZiM2E0YWZhYzM1OWRjMTBjNTAzODRkNzRkZWZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAtMTY4NTAsMTAgKzE2ODUwLDEwIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAgIExvY2sgbG9jazsKIAotICAgIFZl
Y3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFk
Pj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1i
ZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0g
ICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAg
ICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAgICAgICAgICAgICAgICAgWyZdICgpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTY4NzAsOCArMTY4NzAsOCBAQCB2
b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0K
IAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4g
dGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
ICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKaW5kZXggYTRlMjFmOWZhM2NkNDcyMWVhMjY3NWUwNmU0
ZDUzMGM1YmE5NWIzNS4uZTliMWY1YzJmMGJjMjdiMDI5MzEwYzU1ODE1MjBiMWI1NTIyNTk3OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAK
QEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbml0aWFsaXplU3VwZXJTYW1wbGVyKCkKICAgICBpZiAo
IU9wdGlvbnM6OnVzZVN1cGVyU2FtcGxlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjcmVh
dGVUaHJlYWQoCisgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgU3VwZXIgU2FtcGxl
ciIsCiAgICAgICAgIFtdICgpIHsKICAgICAgICAgICAgIGNvbnN0IGludCBzbGVlcFF1YW50dW0g
PSAxMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKaW5kZXggY2Vm
OTkwY2I0ODMzYTZiYjk0NzFiZDA4YTUwNGU1NWZiNDdkZjQ1OC4uYWQwZWNjNjlhNzdkMTcyY2Y0
YmMxZWZhYzkzZGY5MzAyN2MwMDllNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9k
eSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmts
aXN0LCAiOiBUaHJlYWQgc3RhcnRlZFxuIik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9yZWxh
dGl2ZVByaW9yaXR5KQotICAgICAgICAgICAgY2hhbmdlVGhyZWFkUHJpb3JpdHkoY3VycmVudFRo
cmVhZCgpLCBtX3JlbGF0aXZlUHJpb3JpdHkpOworICAgICAgICAgICAgVGhyZWFkOjpjdXJyZW50
KCkuY2hhbmdlUHJpb3JpdHkobV9yZWxhdGl2ZVByaW9yaXR5KTsKICAgICAgICAgCiAgICAgICAg
IG1fY29tcGlsYXRpb25TY29wZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb25TY29wZT4o
KTsKICAgICAgICAgbV9sb25nTGl2ZWRTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TG9uZ0xpdmVk
U3RhdGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5jcHAKaW5kZXggNzg4YTZjMzYyMzY5YzU4ZGFkMjlhNjBhMzg3MTA0NGU0NjRl
ZDMwNS4uMmI4MjRlY2ZkZTU4OTNiMmM2YjcwNmY0NzAyZWNkMjI5NWQyMzU1NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcApA
QCAtNzMsNyArNzMsNyBAQCBjbGFzcyBBc3luY2hyb25vdXNEaXNhc3NlbWJsZXIgewogcHVibGlj
OgogICAgIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpCiAgICAgewotICAgICAgICBjcmVhdGVU
aHJlYWQoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7Cisg
ICAgICAgIFRocmVhZDo6Y3JlYXRlKCJBc3luY2hyb25vdXMgRGlzYXNzZW1ibGVyIiwgWyZdICgp
IHsgcnVuKCk7IH0pOwogICAgIH0KICAgICAKICAgICB2b2lkIGVucXVldWUoc3RkOjp1bmlxdWVf
cHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
aW5kZXggM2FlZTMwMTA0ZjUyOTFhMjg3NjRhNWNkZWU1YWE4ZjBjYTcyYWQzMS4uNzIyM2IyMGM5
ZGZiYTEwNDMwOThhNzg1NzRiYTI4YTY5NGMwNDViZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFs
aXplKCkKICAgICAgICAgICAgIG1fc2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3VzbHkgPSB0
cnVlOwogICAgICAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uLm5vdGlmeU9u
ZSgpOwogICAgICAgICB9Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fY29sbGVj
dENvbnRpbnVvdXNseVRocmVhZCk7CisgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVh
ZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQCB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29s
bGVjdCgpCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOwogICAgIAogICAgIGlmIChPcHRp
b25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKLSAgICAgICAgbV9jb2xsZWN0Q29udGludW91
c2x5VGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlU
aHJlYWQgPSBXVEY6OlRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkpTQyBERUJVRyBDb250
aW51b3VzIEdDIiwKICAgICAgICAgICAgIFt0aGlzXSAoKSB7CiAgICAgICAgICAgICAgICAgTW9u
b3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDE2YmVlZjlhODlkMDZkZjI3OTcxN2U3NzBiMTY0
YTQ3MTQuLmQ2NzgzN2FmZWYxMzAxZjk2NzJmNjBlYTI5YzQzZmM4NTk3ZGViOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXJhbGxlbEhlbHBlclBvb2wuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC02NjYsNyArNjY3LDcgQEAgY2xhc3MgSGVhcCB7CiAgICAgTG9jayBt
X2NvbGxlY3RDb250aW51b3VzbHlMb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbGxlY3RDb250aW51
b3VzbHlDb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29udGludW91
c2x5IHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fY29sbGVjdENvbnRpbnVvdXNs
eVRocmVhZCB7IDAgfTsKKyAgICBSZWZQdHI8V1RGOjpUaHJlYWQ+IG1fY29sbGVjdENvbnRpbnVv
dXNseVRocmVhZCB7IG51bGxwdHIgfTsKICAgICAKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEdD
U3RhcnRUaW1lOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NFbmRUaW1lOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggYjg1
Yjc2NDhlMmY1ZDE5ZmEyMmQ3NjNmN2JjZGVmOGY0NGM0MmM4OC4uNGZmZGY5Y2M0ZTNjMzYwNmIx
ZGE5YTk0MDc3ZmM3NGM4ODZlYzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBAIC02NCw2MyArNjQsMTMgQEAKICNpbmNsdWRl
IDxwdGhyZWFkX25wLmg+CiAjZW5kaWYKIAotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRP
V1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdV
U1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENv
cmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwot
c3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFsTG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMg
c3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2Fs
Q3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQotc3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhh
bmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0g
ICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5k
bGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRo
cmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRo
cmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0g
ICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVu
ZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMg
aGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBz
aWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2ln
bmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0
aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikg
d2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAv
LyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9u
cy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0
X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNp
ZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVz
ZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5z
dXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRp
ZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQg
aXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0
aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVy
LgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkv
ZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8v
IEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNw
ZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1
YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0
Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1
c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNp
Z2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQs
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMg
ZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAg
ICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OwotICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWdu
YWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBB
bGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0g
ICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQot
I2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0K
ICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNp
bmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRocmVhZDsKK3VzaW5nIEpTVGhyZWFkID0gTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFzcyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFn
ZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5lVGhy
ZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTQ0LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFj
aGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lm
aWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBMb2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRz
TG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9y
ZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsK
KyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAg
ICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0OwogICAgICAgICBkZWxldGUgdDsKICAgICAgICAg
dCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEq
IHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVjaWZp
YzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRocmVh
ZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEuZ2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJlYWRz
OjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0aHJlYWREYXRhKQotICAgIDogZGF0YSh0aHJl
YWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWREYXRhKTsKLX0KLQotVGhyZWFkKiBNYWNoaW5l
VGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4g
bmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQotCi1ib29sIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdAotewotI2lm
IE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAgICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJl
YWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9l
cXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3RoZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEg
d2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQogdm9p
ZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiB7CiAgICAgaWYgKHRocmVhZFNw
ZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcykpIHsKQEAgLTIzOSw3
ICsxNjEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVG
b3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJlYWQqIHRocmVhZCA9IG5ldyBKU1RocmVhZCh0
aGlzKTsKICAgICB0aHJlYWRTcGVjaWZpY1NldChtX3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRo
cmVhZHMsIHRoaXMpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNN
dXRleCk7CkBAIC0yNDgsMTIgKzE3MCwxMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJy
ZW50VGhyZWFkKCkKICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gdGhyZWFkOwogfQogCi1UaHJl
YWQqIE1hY2hpbmVUaHJlYWRzOjptYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpCitKU1Ro
cmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKIHsK
ICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBQbGF0
Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwotICAg
IGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCA9PSBwbGF0Zm9ybVRocmVh
ZCkKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gY3VycmVudFRocmVhZCgpOworICAgIGZvciAo
SlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0g
dGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgPT0gaWQpCiAg
ICAgICAgICAgICByZXR1cm4gdGhyZWFkOwogICAgIH0KIApAQCAtMjgzLDIyICsyMDUsMjEgQEAg
dm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKHZv
aWQqIHApCiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgICAgICBtYWNoaW5lVGhy
ZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSk7CisgICAg
ICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRUaHJlYWQoKSk7
CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLXZvaWQgTWFj
aGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1U
aHJlYWQpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElk
ZW50aWZpZXIgaWQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNN
dXRleCk7Ci0gICAgVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKLSAgICBpZiAoKnQg
PT0gcGxhdGZvcm1UaHJlYWQpIHsKKyAgICBKU1RocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgbV9yZWdpc3RlcmVk
VGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0Owog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7
CisgICAgICAgIEpTVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICAgICAg
Zm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsKLSAg
ICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgICAgICAgICAgaWYgKHQt
PnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgICAgICAgICBsYXN0LT5uZXh0ID0gdC0+bmV4
dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMyMCwxODIgKzI0
MSwyMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdAogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFk
ZChjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tUb3AsIGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja09y
aWdpbiwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKIH0KIAotTWFjaGluZVRocmVhZHM6
OlRocmVhZERhdGE6OlRocmVhZERhdGEoKQorTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpKU1Ro
cmVhZChNYWNoaW5lVGhyZWFkcyopCisgICAgOiBuZXh0KG51bGxwdHIpCisgICAgLCBtX3RocmVh
ZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3dGZU
aHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9y
bVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAgIHN0
YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEFTU0VS
VChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAgYm9vbCBpc1N1
Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwg
R2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLAotICAgICAgICAgICAgJnBs
YXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAh
T1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5zdG9yZSh0aGlzKTsKLQot
ICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4K
LSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXI7Ci0gICAg
c3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXIsIFtdIHsKLSAgICAgICAgLy8g
SW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVy
LgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0
aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlv
bjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgc2lnYWRk
c2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAgICAg
YWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsK
LSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87Ci0gICAg
ICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAwKTsKLSAgICB9
KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAgc2lnZW1wdHlzZXQoJm1hc2spOwotICAgIHNp
Z2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgcHRocmVhZF9zaWdt
YXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0KLSAgICBzZW1faW5pdCgmc2VtYXBob3JlRm9y
U3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAv
KiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKLSNlbmRpZgorICAgIG1f
c3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7CisgICAgbV9zdGFja0VuZCA9IHN0YWNr
Qm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVhZERh
dGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Z2V0UmVnaXN0ZXJzKEpTVGhy
ZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgIENsb3Nl
SGFuZGxlKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9T
KERBUldJTikKLSAgICBzZW1fZGVzdHJveSgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0j
ZW5kaWYKKyAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7
CisgICAgcmV0dXJuIG1fdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVncyk7CiB9CiAKLWJvb2wgTWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGE6OnN1c3BlbmQoKQotewotI2lmIE9TKERBUldJTikKLSAg
ICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFkKTsK
LSAgICByZXR1cm4gcmVzdWx0ID09IEtFUk5fU1VDQ0VTUzsKLSNlbGlmIE9TKFdJTkRPV1MpCi0g
ICAgYm9vbCB0aHJlYWRJc1N1c3BlbmRlZCA9IChTdXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhyZWFk
SGFuZGxlKSAhPSAoRFdPUkQpLTEpOwotICAgIEFTU0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7Ci0g
ICAgcmV0dXJuIHRocmVhZElzU3VzcGVuZGVkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoY3VycmVudFBsYXRmb3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1UaHJl
YWQsICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVh
ZCBpdHNlbGYuIik7Ci0gICAgewotICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBv
ciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgot
ICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2su
Ci0gICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVh
ZHMgQSBhbmQgQi4KLSAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIg
YXR0ZW1wdCB0byBzdXNwZW5kIEEuCi0gICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBB
bmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgotICAgICAgICAvLyBJ
biB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCi0gICAgICAgIExvY2tIb2xkZXIg
bG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKCFzdXNwZW5kQ291bnQpIHsKLSAg
ICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVl
dWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRs
ZXIuCi0gICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1z
LCBsaWtlIExpbnV4LgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3Rv
cmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwg
aGFuZGxlci4KLSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsK
LSAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRp
b24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBk
b25lLgotICAgICAgICAgICAgc3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgICsrc3VzcGVuZENvdW50OwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBzdXNwZW5kIHRocmVh
ZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KLXZvaWQgTWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGE6OnJlc3VtZSgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHRocmVhZF9yZXN1bWUo
cGxhdGZvcm1UaHJlYWQpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBSZXN1bWVUaHJlYWQocGxh
dGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHsKLSAgICAgICAg
Ly8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRl
ZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICBMb2NrSG9sZGVyIGxvY2soZ2xvYmFs
U2lnbmFsTG9jayk7Ci0gICAgICAgIGlmIChzdXNwZW5kQ291bnQgPT0gMSkgewotICAgICAgICAg
ICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSBpcyBhY3R1YWxseSBpc3N1ZWQsCi0gICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIg
aXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCi0gICAgICAgICAgICAvLyBUaGVyZSBh
cmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9y
IHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAgICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2ln
bmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4K
LSAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNw
ZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJl
IHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCi0gICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxv
Y2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4K
LSAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNw
ZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgotICAgICAgICAgICAgaWYgKHB0
aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNS
Q0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVu
c3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRo
ZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUo
ZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgIC0t
c3VzcGVuZENvdW50OwotICAgIH0KLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byByZXN1bWUg
dGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotc2l6ZV90IE1hY2hpbmVUaHJl
YWRzOjpUaHJlYWREYXRhOjpnZXRSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdp
c3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIE9TKERBUldJTikKLSNpZiBDUFUoWDg2KQotICAg
IHVuc2lnbmVkIHVzZXJfY291bnQgPSBzaXplb2YocmVncykvc2l6ZW9mKGludCk7Ci0gICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BV
KFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NP
VU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRF
NjQ7Ci0jZWxpZiBDUFUoUFBDKSAKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RIUkVB
RF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RI
UkVBRF9TVEFURTsKLSNlbGlmIENQVShQUEM2NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0g
UFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2
b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUoQVJNKQotICAgIHVuc2lnbmVkIHVz
ZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2
b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIHVu
c2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKLSNlbHNlCi0jZXJy
b3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgotCi0gICAga2Vybl9yZXR1cm5fdCByZXN1
bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKHBsYXRmb3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3Rh
dGVfdCkmcmVncywgJnVzZXJfY291bnQpOwotICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNT
KSB7Ci0gICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlw
dCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1
cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmlu
ZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOwotICAg
ICAgICBDUkFTSCgpOwotICAgIH0KLSAgICByZXR1cm4gdXNlcl9jb3VudCAqIHNpemVvZih1aW50
cHRyX3QpOwotLy8gZW5kIE9TKERBUldJTikKLQotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZWdz
LkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsKLSAgICBH
ZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxlLCAmcmVncyk7Ci0gICAgcmV0dXJu
IHNpemVvZihDT05URVhUKTsKLSNlbGlmICgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJD
X18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICByZWdzID0gc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7
Ci0gICAgcmV0dXJuIHNpemVvZihSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzKTsKLSNlbGlm
IFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmcmVncy5hdHRyaWJ1dGUpOwot
I2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhORVRCU0QpCi0jaWYgIU9TKE9QRU5CU0QpCi0g
ICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZwotICAgIHB0aHJlYWRf
YXR0cl9nZXRfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYKLSNl
bHNlCi0gICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQ
T1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICBwdGhy
ZWFkX2dldGF0dHJfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gMDsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhyZWFkIHJl
Z2lzdGVycyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCogTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAog
ewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4
dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwpAQCAtNTE5LDcgKzI4MCw3IEBAIHZvaWQqIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB9CiAK
ICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRo
cmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYg
T1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dM
SUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ3MpOwpA
QCAtNTI4LDcgKzI4OSw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdp
c3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3QK
K3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBv
aW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKE9TKEZS
RUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkKICAgICByZXR1cm4gTWFjaGluZUNvbnRleHQ6
Omluc3RydWN0aW9uUG9pbnRlcihyZWdzKTsKQEAgLTUzNyw3ICsyOTgsNyBAQCB2b2lkKiBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBj
b25zdAogI2VuZGlmCiB9CiAKLXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdp
c3RlcnM6OmxsaW50UEMoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewogICAgIC8vIExMSW50IHVzZXMgcmVnVDQgYXMg
UEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVm
aW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICszMDksNiBAQCB2b2lkKiBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKIH0KICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERh
dGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0g
ICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lz
dGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJX
SU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJ
VCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9z
UmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGludCByZWRab25lQWRqdXN0bWVudCA9IDA7CkBA
IC01NzMsMTcgKzMyNCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50
KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1lbnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0
YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQogewotICAgIGNoYXIqIGJlZ2luID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSk7CisgICAgY2hhciogYmVnaW4gPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jhc2UpOwogICAgIGNoYXIqIGVuZCA9
IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lk
Kik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFja1RvcCkpKTsKICAgICBBU1NFUlQo
YmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVuZFdpdGhSZWRab25lID0gZW5kICsgb3NSZWRa
b25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSkg
PT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSk7CiAKLSAgICBp
ZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFja0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQpOworICAgIGlmIChlbmRXaXRoUmVk
Wm9uZSA8IG1fc3RhY2tFbmQpCisgICAgICAgIGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tFbmQpOwogCiAgICAgc3RkOjpzd2FwKGJlZ2luLCBlbmRX
aXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJlZ2luLCBlbmRXaXRoUmVk
Wm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5ICszNjcsOSBAQCBzdGF0aWMgdm9pZCBjb3B5TWVtb3J5
KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKIC8vIHNpZ25pZmljYW50
IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2sgaXMgb25seSBjYWxs
ZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBzaXplKQogLy8gb3BlcmF0aW9uLiBBcyB0aGUgaGVhcCBp
cyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIgdGhhbiB0aGUgc3RhY2sgdGhlIHBlcmZvcm1hbmNlIGhp
dCBpcyBtaW5pbWFsLgogLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
ayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCog
c2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhy
ZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUp
CiB7Ci0gICAgVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIEpTVGhyZWFkOjpSZWdp
c3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCByZWdpc3RlcnNTaXplID0gdGhyZWFkLT5nZXRS
ZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gc3RhY2sg
PSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3RlcnMuc3RhY2tQb2ludGVyKCkpOwogCkBAIC02
MzEsOCArMzgyLDYgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3Rh
Y2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV8KICAgICBpZiAoY2FuQ29weSkK
ICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyKSArICpzaXplLCBz
dGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAgICAqc2l6ZSArPSBzdGFjay5zZWNvbmQ7Ci0K
LSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKIH0KIAogYm9vbCBNYWNoaW5l
VGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
dm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKQEAgLTY0NCwzNiAr
MzkzLDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAKICAgICAqc2l6ZSA9IDA7CiAKLSAg
ICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgp
OworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CiAgICAgaW50IG51
bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAgdG8gZGVub3RlIHRoYXQgd2UgaGF2ZW4ndCBj
b3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5ZXQuCiAgICAgaW50IGluZGV4ID0gMTsKLSAg
ICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CisgICAgSlNUaHJlYWQqIHRo
cmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CiAKLSAgICBUaHJlYWQqIHByZXZpb3VzVGhyZWFk
ID0gbnVsbHB0cjsKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsgdGhyZWFkOyBpbmRleCsrKSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhy
ZWFkKSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aHJlYWQtPnN1c3BlbmQoKTsKKyAg
ICBKU1RocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOworICAgIGZvciAoSlNUaHJlYWQq
IHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgaW5kZXgrKykgeworICAgICAg
ICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKSB7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lmIE9TKERBUldJTikKLSAgICAgICAgICAgIGlmICgh
c3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIW51bWJlck9mVGhyZWFkcykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKFRocmVhZCog
Y291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNvdW50
ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5uZXh0KQorICAgICAgICAgICAgICAgICAgICBmb3Ig
KEpTVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRo
cmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZlRocmVhZHMrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gUmUtZG8gdGhlIHN1c3BlbnNpb24gdG8gZ2V0
IHRoZSBhY3R1YWwgZmFpbHVyZSByZXN1bHQgZm9yIGxvZ2dpbmcuCi0gICAgICAgICAgICAgICAg
a2Vybl9yZXR1cm5fdCBlcnJvciA9IHRocmVhZF9zdXNwZW5kKHRocmVhZC0+cGxhdGZvcm1UaHJl
YWQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVycm9yICE9IEtFUk5fU1VDQ0VTUyk7CisK
KyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmVycm9yKCkgIT0gS0VSTl9TVUNDRVNTKTsK
IAogICAgICAgICAgICAgICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwKLSAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFn
ZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRo
cmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVhZCAlcC4iLAotICAgICAgICAgICAgICAgICAg
ICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0
PHZvaWQqPih0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
IkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhy
ZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBpZCAlcC4iLAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZXJyb3IoKSwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnRocmVhZElEKCkpKTsKIAogICAgICAgICAg
ICAgICAgIC8vIFB1dCB0aGUgaW52YWxpZCB0aHJlYWQgb24gdGhlIHRocmVhZHNUb0JlRGVsZXRl
ZCBsaXN0LgogICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgZGVsZXRlIGl0IGhlcmUg
YmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRlZCBvdGhlcgogICAgICAgICAgICAgICAgIC8vIHRocmVh
ZHMsIGFuZCB0aGV5IG1heSBzdGlsbCBiZSBob2xkaW5nIHRoZSBDIGhlYXAgbG9jayB3aGljaAog
ICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgZm9yIGRlbGV0aW5nIHRoZSBpbnZhbGlkIHRocmVh
ZC4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAvLyBkZWZlciB0aGUgZGVsZXRp
b24gdGlsbCBhZnRlciB3ZSBoYXZlIHJlc3VtZWQgYWxsIHRocmVhZHMuCi0gICAgICAgICAgICAg
ICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgICAgICAgICAgICAgIEpT
VGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICAgICAgICAgIHRocmVh
ZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsKICAgICAgICAgICAgICAgICB0aHJlYWRzVG9C
ZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4NywyNSArNDM0LDI1IEBAIGJvb2wgTWFjaGluZVRo
cmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mVGhyZWFk
cyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJldmlvdXNUaHJlYWQpOwotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcHJldmlv
dXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IHRocmVhZC0+bmV4dDsKICAgICB9
CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZv
cm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+
dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKHRo
cmVhZCwgYnVmZmVyLCBjYXBhY2l0eSwgc2l6ZSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQq
IHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5u
ZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKQorICAgIGZvciAo
SlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0g
dGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpCiAg
ICAgICAgICAgICB0aHJlYWQtPnJlc3VtZSgpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0
aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7Ci0gICAgICAgIFRocmVhZCog
bmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSB0
aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0VGhy
ZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICBkZWxldGUgdGhyZWFkOwogICAgICAgICB0aHJl
YWQgPSBuZXh0VGhyZWFkOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggZDE5NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNkODdm
Nzk5NDQ4N2YyMi4uOTE5N2M0NDA4Y2UyZmQ0ZWU2YWEzZDE0YTdjNjllNmY4Y2ExMDk0NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKQEAg
LTIyLDI1ICsyMiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4
dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTdGF0
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVj
aWZpYy5oPgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJ
TikKLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLS8vIFVzaW5n
IHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxl
IG9uIEZyZWVCU0QuCi0vLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAt
Q1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQotLy8gcmVtb3ZlZCBhZnRlciBGcmVl
QlNEIDEwLnggZ29lcyBFT0wuCi0vLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEv
c2hvd19idWcuY2dpP2lkPTIwNzA3OQotI2lmIE9TKEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNvbnRl
eHQuaD4KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxv
Y2tTZXQ7CkBAIC02NCwxMyArNTEsMTAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCk7IC8vIE9ubHkgbmVlZHMg
dG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJvbSBt
dWx0aXBsZSB0aHJlYWRzLgogCi0gICAgY2xhc3MgVGhyZWFkRGF0YSB7CisgICAgY2xhc3MgSlNU
aHJlYWQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFRocmVhZERhdGEoKTsKLSAgICAgICAgflRocmVhZERhdGEoKTsKLQotICAgICAgICBz
dGF0aWMgVGhyZWFkRGF0YSogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICBKU1Ro
cmVhZChNYWNoaW5lVGhyZWFkcyopOwogCiAgICAgICAgIHN0cnVjdCBSZWdpc3RlcnMgewogICAg
ICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVyKCkgY29uc3Q7CkBAIC03OSw4NCArNjMsNDAgQEAg
Y2xhc3MgTWFjaGluZVRocmVhZHMgewogICAgICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2lu
dGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYg
Ly8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICAgICAgCi0jaWYgT1MoREFSV0lO
KSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBN
YWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdpc3RlcnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkgfHwg
ZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKQotICAgICAgICAgICAgdXNpbmcgUGxh
dGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgICAg
ICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKLSAgICAgICAgICAgICAgICBwdGhyZWFk
X2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAgICAgICB9OwotI2Vsc2UKLSNlcnJvciBOZWVkIGEg
dGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3IgdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAgICAg
ICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CisgICAgICAgICAgICBXVEY6OlBsYXRmb3Jt
UmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBzdXNwZW5kKCk7Ci0g
ICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0
ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJlZ2lzdGVycyhSZWdpc3RlcnMmKTsKKyAgICAgICAg
RXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7IH0KKyAgICAgICAgdm9pZCByZXN1bWUoKSB7IG1f
dGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVy
cyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2so
dm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFk
OwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kOwotI2lm
IE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRMRSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNlbGlm
IFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3JlRm9y
U3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNvbnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4
dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3VudCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9taWM8
Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFzcyBU
aHJlYWQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgVGhyZWFk
KFRocmVhZERhdGEqKTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgUmVnaXN0ZXJzID0g
VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0ZUZv
ckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZv
cm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBs
YXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
LQotICAgICAgICBib29sIHN1c3BlbmQoKSB7IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0KLSAg
ICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEtPnJlc3VtZSgpOyB9Ci0gICAgICAgIHNpemVfdCBn
ZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3RlcnMo
cmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykgeyBk
YXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9Ci0gICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6
ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1cmVT
dGFjayhzdGFja1RvcCk7IH0KLQotICAgICAgICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZv
cm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVhZDsgfQotICAgICAgICB2b2lk
KiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0Jhc2U7IH0KLSAgICAgICAg
dm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0VuZDsgfQorICAgICAg
ICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVh
ZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
Y2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQqIG5leHQ7Ci0gICAgICAgIFRocmVhZERhdGEqIGRh
dGE7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0OworICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1f
dGhyZWFkOworICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKKyAgICAgICAgdm9pZCogbV9zdGFj
a0VuZDsKICAgICB9OwogCiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJl
ZFRocmVhZHNNdXRleDsgfQotICAgIFRocmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9j
a2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQotICAgIFRocmVhZCogbWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkc0xpc3RIZWFk
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFk
c011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQorICAgIEpT
VGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOwogCiBwcml2YXRlOgogICAg
IHZvaWQgZ2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHVi
Um91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0gICAg
dm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QqKTsKKyAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhyZWFk
Kiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7CiAgICAgYm9vbCB0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIHJl
bW92ZVRocmVhZCh2b2lkKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVh
ZD4KLSAgICB2b2lkIHJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQpOworICAgIHZv
aWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJlYWRJZGVudGlmaWVyKTsKIAogICAgIExvY2sgbV9y
ZWdpc3RlcmVkVGhyZWFkc011dGV4OwotICAgIFRocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsK
KyAgICBKU1RocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNwZWNp
ZmljS2V5IG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkczsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCmluZGV4IDIwODBjZDkzNDU4MzNkMmQyMzJiOGE5Y2Q2
ZjNkYmZlYmUwNWNiMjMuLmUwYWJmMjk4YmZiZTJlZWVjMzQyNWI2NjA5Y2U3MjEzM2M0MWNkZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcApAQCAtNTgsNyArNTgsNyBAQCBB
dG9taWM8SUNTdGF0cyo+IElDU3RhdHM6OnNfaW5zdGFuY2U7CiAKIElDU3RhdHM6OklDU3RhdHMo
KQogewotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgIG1fdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoCiAgICAgICAgICJKU0MgSUNTdGF0cyIsCiAgICAgICAgIFt0aGlzXSAoKSB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwpAQCAtODQsNyArODQsNyBAQCBJ
Q1N0YXRzOjp+SUNTdGF0cygpCiAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwogICAg
IH0KICAgICAKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZCk7CisgICAgbV90
aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiB9CiAKIHZvaWQgSUNTdGF0czo6YWRkKGNvbnN0
IElDRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9J
Q1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAppbmRleCBlNzVj
ZmRmNGQ0ZDlkN2RjYmYxYTMxYTk4Mjk0MTkyZTU1YjljZmIwLi5lYjdlMWU5MmNlOTdkZDFkOTUw
ODk3MjdjODRhOWM1ZWM3ZjU3YzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaApA
QCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIElDU3RhdHMgewogcHJpdmF0ZToKIAogICAgIFNwZWN0
cnVtPElDRXZlbnQsIHVpbnQ2NF90PiBtX3NwZWN0cnVtOwotICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX2xvY2s7
CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIGJvb2wgbV9zaG91bGRTdG9wIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTliNjI3M2RlYWIxZGQ1OWZkNzU5NDFjZDZl
NjExNDkyODc5MjQ3MC4uNzVhYzYwZDliMzQ2MDgxY2I2NzA2OWVkZWQzNTI4NTQzZmJkM2Q4NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI1NDQsNyArMjU0NCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBDb25kaXRpb24gZGlkU3RhcnRDb25kaXRpb247CiAgICAgYm9vbCBkaWRTdGFydCA9IGZh
bHNlOwogICAgIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkID0gY3JlYXRlVGhyZWFkKAor
ICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAiSlND
IEFnZW50IiwKICAgICAgICAgW3NvdXJjZUNvZGUsICZkaWRTdGFydExvY2ssICZkaWRTdGFydENv
bmRpdGlvbiwgJmRpZFN0YXJ0XSAoKSB7CiAgICAgICAgICAgICBDb21tYW5kTGluZSBjb21tYW5k
TGluZSgwLCBudWxscHRyKTsKQEAgLTI1NzEsNyArMjU3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNo
KCk7CiAgICAgCiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpZFN0YXJ0
TG9jayk7CkBAIC0zMzExLDcgKzMzMTEsNyBAQCBzdGF0aWMgdm9pZCBzdGFydFRpbWVvdXRUaHJl
YWRJZk5lZWRlZCgpCiAgICAgICAgICAgICBkYXRhTG9nKCJXQVJOSU5HOiB0aW1lb3V0IHN0cmlu
ZyBpcyBtYWxmb3JtZWQsIGdvdCAiLCB0aW1lb3V0U3RyaW5nLAogICAgICAgICAgICAgICAgICIg
YnV0IGV4cGVjdGVkIGEgbnVtYmVyLiBOb3QgdXNpbmcgYSB0aW1lb3V0LlxuIik7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAi
anNjIFRpbWVvdXQgVGhyZWFkIik7CisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSh0aW1lb3V0
VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggMDFiMWZlMTI3ZThiNzMxZmI1
M2I3YzJjZGI5OWVlMTlkZDVhZGE2OC4uNjMyMmU3MzMyMjkyMTE0ZjBlMjU0YThlMWVmMTNkYTVj
NDE5NTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0x
MDksNyArMTA5LDcgQEAgdm9pZCBKU0xvY2s6OmxvY2soaW50cHRyX3QgbG9ja0NvdW50KQogICAg
ICAgICBtX2xvY2subG9jaygpOwogICAgIH0KIAotICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50
VGhyZWFkKCk7CisgICAgbV9vd25lclRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1faGFzT3duZXJUaHJlYWQgPSB0cnVlOwogICAg
IEFTU0VSVCghbV9sb2NrQ291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
aAppbmRleCAwYzM1ODQ3ZTQyM2U2NGJjNzA1MDNkNWUxZDg1ZDQ4MDUwOWRiZTc0Li4xYWNhNGI5
YTdiYjRkY2FmMDRkZjEyMTcxMDk3MjBlYzhlMmQ2OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suaApAQCAtOTIsMTMgKzkyLDEzIEBAIGNsYXNzIEpTTG9jayA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKIAogICAgIFZNKiB2bSgpIHsgcmV0dXJu
IG1fdm07IH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8VGhyZWFkSWRlbnRpZmllcj4gb3duZXJUaHJl
YWQoKSBjb25zdAorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVyVGhyZWFk
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2hhc093bmVyVGhyZWFkKQogICAgICAgICAg
ICAgcmV0dXJuIG1fb3duZXJUaHJlYWQ7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAg
ICAgfQotICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB7IHJldHVybiBtX2hh
c093bmVyVGhyZWFkICYmIG1fb3duZXJUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpOyB9CisgICAg
Ym9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsgcmV0dXJuIG1faGFzT3duZXJUaHJl
YWQgJiYgbV9vd25lclRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7IH0KIAogICAgIHZv
aWQgd2lsbERlc3Ryb3lWTShWTSopOwogCkBAIC0xMzUsNyArMTM1LDcgQEAgY2xhc3MgSlNMb2Nr
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogICAgIC8vIGRpZmZlcmVu
dCB0aHJlYWQsIGFuZCBhbiBvcHRpb25hbCBpcyB2dWxuZXJhYmxlIHRvIHJhY2VzLgogICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MDQyI2M2CiAg
ICAgYm9vbCBtX2hhc093bmVyVGhyZWFkIHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fb3duZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9vd25lclRocmVhZDsKICAgICBp
bnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX2xvY2tEcm9wRGVwdGg7CiAgICAg
Ym9vbCBtX3Nob3VsZFJlbGVhc2VIZWFwQWNjZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU0MTk3ZTczYzg0MTJhODBmMzYxNDBjN2FkODZlYzc2NGZhYzI5MzcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUGxhdGZvcm1UaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIE9TKERBUldJTikgfHwgT1MoVU5JWCkKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0j
aW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDxt
YWNoL3RocmVhZF9hY3QuaD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8d2luZG93cy5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgT1MoREFSV0lOKQotdHlwZWRlZiBt
YWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIE9TKFdJTkRPV1MpCi10eXBlZGVmIERX
T1JEIFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhyZWFk
X3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZW5kaWYgLy8gT1MoREFSV0lOKQotICAgIAotaW5saW5lIFBs
YXRmb3JtVGhyZWFkIGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpCi17Ci0jaWYgT1MoREFSV0lOKQot
ICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhyZWFkX25wKHB0aHJlYWRfc2VsZigpKTsKLSNlbGlm
IE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOwotI2VsaWYgVVNF
KFBUSFJFQURTKQotICAgIHJldHVybiBwdGhyZWFkX3NlbGYoKTsKLSNlbmRpZgotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAKaW5kZXggN2QzN2E2NzRhYmEwOTQ3MjMxODQ5M2IzM2JjODlmZTNm
YWQ5OGE5ZC4uNjdmMjBkOTJjZWNkZjBhYjNiZmY3ZjZmZDEyNjYwMGFhMTViZjFhZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAK
QEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBGcmFtZVdhbGtlciB7CiAgICAgYm9vbCBpc1ZhbGlk
RnJhbWVQb2ludGVyKHZvaWQqIGV4ZWMpCiAgICAgewogICAgICAgICB1aW50OF90KiBmcENhc3Qg
PSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGV4ZWMpOwotICAgICAgICBmb3IgKE1hY2hpbmVUaHJl
YWRzOjpUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNM
aXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQt
Pm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9
IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVUaHJl
YWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAg
IHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNr
QmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrTGltaXQgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0YWNrQmFzZSk7CkBAIC0yNzksNyArMjc5LDcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxp
bmdQcm9maWxlcihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAgICwg
bV93ZWFrUmFuZG9tKCkKICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkKICAg
ICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhPcHRpb25zOjpz
YW1wbGVJbnRlcnZhbCgpKSkKLSAgICAsIG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgICwgbV90
aHJlYWQobnVsbHB0cikKICAgICAsIG1fanNjRXhlY3V0aW9uVGhyZWFkKG51bGxwdHIpCiAgICAg
LCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pc1NodXREb3duKGZhbHNlKQpAQCAtMzAwLDEx
ICszMDAsMTEgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2Fy
eShjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgp
KTsKIAotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8U2FtcGxpbmdQcm9maWxlcj4gcHJvZmlsZXIgPSB0
aGlzOwotICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgianNjLnNhbXBsaW5n
LXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci50aHJlYWQiLCBbcHJvZmlsZXJdIHsKICAgICAg
ICAgcHJvZmlsZXItPnRpbWVyTG9vcCgpOwogICAgIH0pOwogfQpAQCAtMzQ0LDcgKzM0NCw3IEBA
IHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYs
IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAgICAgIExvY2tIb2xkZXIgY29kZUJsb2NrU2V0
TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwogICAgICAgICBMb2Nr
SG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2lu
Z2xldG9uKCkuZ2V0TG9jaygpKTsKIAotICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4
ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOworICAgICAgICBhdXRvIGRpZFN1c3BlbmQgPSBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewog
ICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBjYW4n
dCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVzZSB0aGUgSlNDIHRocmVhZAogICAgICAgICAg
ICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgpAQCAtMzU0LDEzICszNTQsMTIg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xM
SW50ID0gZmFsc2U7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3Rl
cnM7CisgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnMg
cmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdp
c3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICBtYWNoaW5lRnJhbWUgPSByZWdpc3Rl
cnMuZnJhbWVQb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGljX2Nh
c3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAgICAgICAgICAgICAgICBtYWNoaW5lUEMg
PSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgbGxpbnRQ
QyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25U
aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFy
c2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0N2Y5ZTY3NjhhZDQzN2JiMThlMGE4YWJjNzk1
YmQ2Y2YuLjA0M2RhZGJhNDA3MGI2ZjkxODA3YmQ0Y2ExMzI2OTRjM2NlYmFjNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAgLTE5
NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1fbGFzdFRpbWU7CiAgICAgTG9jayBt
X2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7Ci0gICAgTWFj
aGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVjdXRpb25UaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV90aHJlYWQ7CisgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkKiBtX2pzY0V4ZWN1
dGlvblRocmVhZDsKICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lzU2h1dERvd247
CiAgICAgYm9vbCBtX25lZWRzUmVwb3J0QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5NWY0
NmUuLmU5N2MzMTg1ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZN
PiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENvZGVC
bG9jayosIGNvbnN0IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAgc3Rk
OjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRo
cmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVh
ZCgpOyB9CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNkNDYz
YjcyZjMzZTQ2NGI3YjVhNTlkMDExOTM4ZjY5Li4yNzJjNGRlZmE4NTVmYzM5YjBjZDQxMDFlNWU3
ZTRiMmJkYzBkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cApAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8Vk0qLCBTdGFj
a0JvdW5kcz4sIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAgICAgICAgICAg
ICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBUcnkgbmV4
dCBWTS4KICAgICAgICAgfQogCi0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OlRocmVhZCog
dGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9j
a2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNo
aW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1hY2hpbmVUaHJlYWRzLnRocmVhZHNMaXN0
SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPnN0YWNrQmFzZSgpKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tFbmQoKSk7CiAgICAgICAgICAg
ICBpZiAoc3RhY2tQb2ludGVyIDw9IHRocmVhZC0+c3RhY2tCYXNlKCkgJiYgc3RhY2tQb2ludGVy
ID49IHRocmVhZC0+c3RhY2tFbmQoKSkgewpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgVk1UcmFw
czo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAg
ICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAg
ICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2ln
bmFsVGhyZWFkKG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKSwgU0lHVVNSMSk7CisgICAgICAg
ICAgICAgICAgb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLT5zaWduYWwoU0lHVVNSMSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQ5Myw3ICs0OTMsNyBA
QCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6OkV2ZW50VHlwZSBldmVudFR5cGUpCiAg
ICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3QgYmxvY2suCiAgICAgICAgIFJlZlB0cjxTaWdu
YWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5ldyBTaWduYWxTZW5kZXIodm0oKSwgZXZlbnRU
eXBlKSk7CiAgICAgICAgIGFkZFNpZ25hbFNlbmRlcihzZW5kZXIuZ2V0KCkpOwotICAgICAgICBj
cmVhdGVUaHJlYWQoImpzYy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0gewor
ICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBb
c2VuZGVyXSB7CiAgICAgICAgICAgICBzZW5kZXItPnNlbmQoKTsKICAgICAgICAgfSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU4ZjE5YjU2
ZDMzY2I4OGE2ZmI0OWQ2ZTVmM2I2MDk3ODZiYzBjYy4uNzQxNDhhODAxNGIyZWUwY2U1MTEyNjZj
YmE0YThhNzRlZWQyNjg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zMjUsOCArMzI1LDggQEAKIAkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEE0NzMyRDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJQThB
NDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlN0cmluZy5oICovOyB9OwogCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uLmggKi87IH07Ci0JCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmNwcCAqLzsgfTsKLQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmggKi87IH07CisJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRo
cmVhZHMuY3BwICovOyB9OworCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9s
ZGVyUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oICov
OyB9OwogCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMyMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi87IH07CiAJ
CUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovOyB9OwpAQCAtNzI4LDggKzcyOCw4
IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThB
NDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhy
ZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTE2NCw4ICsxMTY0LDggQEAKIAkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJD
MjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgwMDEw
MDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovLAotCQkJCUE4QTQ3MzMwMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywKLQkJCQlB
OEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5o
ICovLAorCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFk
cy5jcHAgKi8sCisJCQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0
aHJlYWRzLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAog
CQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8s
CkBAIC0xNjE4LDcgKzE2MTgsNyBAQAogCQkJCTFDQ0RCMTRGMUU1NjY4OTgwMDZDNzNDMCAvKiBU
ZXh0QnJlYWtJdGVyYXRvcklDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1
QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xODQzLDcgKzE4NDMsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMw
MEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3
RjFEMzA3OERBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUMxODFDOTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
OEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNG
IC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNl
L1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1
MjllOGFhZWE2YWJmNjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRi
OGMwYjk5YWJjM2I3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlv
blNwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVk
VGVzdC5jcHAKQEAgLTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9u
VHlwZSBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAK
LSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxU
aHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9k
dWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tU
eXBlIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1l
cnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgp
IHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVu
VGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25z
dW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVl
LCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVu
dCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51
ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgp
LCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxk
Q29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVl
dWUuaXNFbXB0eSgpKQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNv
bnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAg
ICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9p
ZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxv
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcg
cHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRp
bnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRp
bnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXpl
KCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVl
LnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBA
IC0xMzgsMTEgKzEzOCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5v
dGlmeShlbXB0eUNvbmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRp
Zmllcik7CisgICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAK
LSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhy
ZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7
CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAg
ICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtz
L0xvY2tGYWlybmVzc1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTEx
ODQ4YmI1MmQ5NGYuLjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYy
LDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3Vu
aXF1ZTx1bnNpZ25lZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRo
cmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRp
ZmllcltdPihudW1UaHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJl
YWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRo
cmVhZHMpOwogICAgIAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAg
ICAgCkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsK
ICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFk
c1t0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhy
ZWFkIiwKICAgICAgICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcg
KzEwNyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFk
SW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3Ro
cmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFy
a3MvTG9ja1NwZWVkVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVz
dC5jcHAKaW5kZXggNTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJk
MzlmODdjNmM3MDZjMTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2ht
YXJrcy9Mb2NrU3BlZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJr
IHsKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5b
XT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1U
aHJlYWRHcm91cHMpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91Ymxl
PltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1U
aHJlYWRHcm91cHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltd
PiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVh
ZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFk
PltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZv
bGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3Qg
QmVuY2htYXJrIHsKICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0g
MDsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQ
ZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVU
aHJlYWQoCisgICAgICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhy
ZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAg
ICAgICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVh
ZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xv
Y2ssICZudW1JdGVyYXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
bG9jYWxXb3JkID0gMDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAg
ICAgICAga2VlcEdvaW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhy
ZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZElu
ZGV4LS07KQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJl
YWRJbmRleF0pOworICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21w
bGV0aW9uKCk7CiAKICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJl
YWQuY3BwIGIvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUy
NWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJk
MGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNU
aHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1
NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQogICAgIAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0g
ICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRo
cmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1Ro
cmVhZCIsCiAgICAgICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVz
dWx0OjpDb250aW51ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRo
cmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGlj
VGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5
Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1NWZlYmEyYzcuLmI1MGJiYmMzYmYzYWQyYjFmZGQxMzQ1
MzQ4NjU0YWIxZDQxOGNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xMjgsNyArMTI4LDYg
QEAgc2V0KFdURl9IRUFERVJTCiAgICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0
cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5oCiAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmljLmgK
ICAgICBUaHJlYWRpbmcuaApAQCAtMzI5LDE2ICszMjgsMTQgQEAgbGlzdChBUFBFTkQgV1RGX0xJ
QlJBUklFUwogaWYgKFdJTjMyKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAg
IE9TQWxsb2NhdG9yV2luLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAgICAg
IFRocmVhZFNwZWNpZmljV2luLmNwcAogICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAgKQog
ZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9IRUFERVJTCi0gICAgICAgIFRocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHMuaAotICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwog
ICAgICAgICBPU0FsbG9jYXRvclBvc2l4LmNwcAotICAgICAgICBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAgICAg
VGhyZWFkaW5nUHRocmVhZHMuY3BwCiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAK
aW5kZXggMDI0OTU0NGM1MThlODJhZmYxNzA1ZGUxOWVjOTY1YWI5OGIxZDEwNi4uMzRiOTQyNTU1
YWI1NjE4MzIxMDE4YjRmMDc5MGYyODI1MGE3ZGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKQEAg
LTE4Niw5ICsxODYsOSBAQCBib29sIGlzTWFpblRocmVhZCgpCiAjZW5kaWYKIAogI2lmICFVU0Uo
V0VCX1RIUkVBRCkKLWJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWQpCitib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRo
cmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCkKIHsKLSAgICByZXR1cm4gdGhyZWFkSWQgPT0g
Y3VycmVudFRocmVhZCgpOworICAgIHJldHVybiB0aHJlYWQgPT0gY3VycmVudFRocmVhZCgpOwog
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBiL1Nv
dXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3NjgzY2U1
NTA4ZGQ4ZDdmMWQ3N2FmLi4wZTc4ZThlNTFhYmU4ZDk1NTQ3MmM3OWRkMzQ2OTJmMTU0NmRiMWE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvTWFpblRocmVhZC5oCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlIDxzdGRpbnQu
aD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQ
cmludFN0cmVhbTsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotCiAvLyBN
dXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmgKaW5kZXggZGZkZGYwYTk1NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2YzdiZC4u
NDEyOGY1Y2Q3MWE3ZGIyZjRmZDcwMzI5NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93dGYv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIgewogI2lmIFVTRShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fc291cmNlOwogI2Vsc2UKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwor
ICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIvU291
cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIwYTM4
ZTEwM2U3YzlhMmU0ZjBmN2UwNjEwNTcxNC4uY2NlMTEwNmQ0NjdiNzIwODNjMWVkYjIxM2FkNTlj
NDQwMzE3YTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJp
Yy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTkz
LDE0ICs5MywxNCBAQCBib29sIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRy
eUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCogcGFyZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElEID0g
Y3JlYXRlVGhyZWFkKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJU
aHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAg
ICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJl
YWRQcml2YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKIAotICAg
IGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgbV9wYXJlbnQgPSBw
YXJlbnQ7CiAKICAgICBtX211dGV4LnVubG9jaygpOwotICAgIHJldHVybiBtX3RocmVhZElEOwor
ICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJl
YWRQcml2YXRlOjpleGVjdXRlKFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lkKiBw
YXJhbWV0ZXJzKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6
VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEpCiAgICAgVGhyZWFk
UHJpdmF0ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWRQcml2YXRlKj4o
dGhyZWFkRGF0YSk7CiAgICAgTG9ja0hvbGRlciBsb2NrKHNoYXJlZFRocmVhZC0+bV9tdXRleCk7
CiAKLSAgICB3aGlsZSAoc2hhcmVkVGhyZWFkLT5tX3RocmVhZElEKSB7CisgICAgd2hpbGUgKHNo
YXJlZFRocmVhZC0+bV90aHJlYWQpIHsKICAgICAgICAgaWYgKHNoYXJlZFRocmVhZC0+bV9ydW5u
aW5nKSB7CiAgICAgICAgICAgICAoKnNoYXJlZFRocmVhZC0+bV90aHJlYWRGdW5jdGlvbikoc2hh
cmVkVGhyZWFkLT5tX3BhcmFtZXRlcnMpOwogICAgICAgICAgICAgc2hhcmVkVGhyZWFkLT5tX3J1
bm5pbmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dl
bmVyaWMuaCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCA0NTg0
MDdjNGNiNGEzZjk5NWM5MGM1NTU2MjdjMWNiZDIyYjQxYjVjLi43ZDY4ZWYwNzBmNjdhNjUzM2Mw
Yjg3NTgzZDJhNTdhMTE4ZDA1NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxl
bEpvYnNHZW5lcmljLmgKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5o
CkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgIGNsYXNz
IFRocmVhZFByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7CiAgICAg
cHVibGljOgogICAgICAgICBUaHJlYWRQcml2YXRlKCkKLSAgICAgICAgICAgIDogbV90aHJlYWRJ
RCgwKQorICAgICAgICAgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICAgICAgICAgLCBtX3J1
bm5pbmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGFyZW50KDApCiAgICAgICAgIHsKQEAgLTc0
LDcgKzc0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgICAgIHN0YXRpYyB2
b2lkIHdvcmtlclRocmVhZCh2b2lkKik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwog
ICAgICAgICBib29sIG1fcnVubmluZzsKICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCogbV9w
YXJlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5YWRk
YjJjYzU4MTBiNTZlMWMxNC4uY2MxYTIxYjllYTVjY2NjNmYxYWNlNGM5NzQ5ODk5YmJkYTVkN2Ux
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVhZERh
dGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRocmVh
ZERhdGEoKTsKICAgICB+VGhyZWFkRGF0YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyOworICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKICAgICAKICAgICBNdXRleCBw
YXJraW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKQEAgLTQy
Myw3ICs0MjMsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFk
cykKIH0KIAogVGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCi0gICAgOiB0aHJlYWRJZGVudGlmaWVy
KGN1cnJlbnRUaHJlYWQoKSkKKyAgICA6IHRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAg
ICB1bnNpZ25lZCBjdXJyZW50TnVtVGhyZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC03OTMsNyAr
NzkzLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZv
aWQqIGFkZHJlc3MpCiAgICAgdW5wYXJrQ291bnQoYWRkcmVzcywgVUlOVF9NQVgpOwogfQogCi1O
RVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1i
ZGE8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKK05FVkVS
X0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2
b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQogewogICAgIFZlY3RvcjxCdWNr
ZXQqPiBidWNrZXRzVG9VbmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CiAKQEAgLTgwMyw3ICs4MDMs
NyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaQogICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJlYWRE
YXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhyZWFk
RGF0YSA9IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKLSAgICAgICAgICAgIGNhbGxi
YWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLCBjdXJyZW50VGhyZWFkRGF0
YS0+YWRkcmVzcyk7CisgICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhy
ZWFkLmdldCgpLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAgIAogICAg
IHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmluZGV4IDdk
NWZiMTdlZmEwMmFiNzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTljN2I3ZmQ0
Y2M2YWNhZTM2MmFlYTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3ICsxNTgs
NyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAgIGZv
ckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZv
aWQqKT4oZnVuYykpOworICAgICAgICBmb3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChU
aHJlYWQmLCBjb25zdCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNzEs
NyArMTcxLDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNv
bnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwogCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3Bl
ZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRh
PHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1Jl
ZlB0ci5oCmluZGV4IGZlMTYzMGM5NzM1YjVmZjUzNTNjYjJjNTU4ZTMxMDU4MTI0Nzg3ZDguLjI3
N2U2NzVkYjNjNTU1ZDVlNGM2Y2UwNDk0Njg4NzRkMzY3Njk1OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC00Miw3
ICs0Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0ciB7CiAKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNSZWZQdHIgPSB0cnVlOwogCi0gICAgQUxXQVlTX0lOTElORSBS
ZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3RleHBy
IFJlZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQdHIo
VCogcHRyKSA6IG1fcHRyKHB0cikgeyByZWZJZk5vdE51bGwocHRyKTsgfQogICAgIEFMV0FZU19J
TkxJTkUgUmVmUHRyKGNvbnN0IFJlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IHJlZklmTm90
TnVsbChtX3B0cik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29uc3QgUmVm
UHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0KCkpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAppbmRleCA5NDNmZDZkNzlkMDk0
NDI1NTAzYWM4OTczMWIwYTA2YTZhYzQwZmZkLi5jYjI3NWY3MDEyY2ZlNTY2MWU0OWUwYjRmZjBk
OWM2MjFiMGU0OTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24u
aApAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAog
I2RlZmluZSBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAogCisjaW5jbHVkZSAiVGhyZWFkaW5n
LmgiCisKIG5hbWVzcGFjZSBXVEYgewogCiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbiko
dm9pZCogYXJndW1lbnQpOwpAQCAtMzYsMTMgKzM4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKlRocmVh
ZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEpCisg
ICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCBSZWZQ
dHI8VGhyZWFkPiYmIHRocmVhZCwgdm9pZCogZGF0YSkKICAgICAgICAgOiBmdW5jdGlvbihmdW5j
dGlvbikKKyAgICAgICAgLCB0aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQogICAgICAgICAsIGRhdGEo
ZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb247CisgICAg
UmVmUHRyPFRocmVhZD4gdGhyZWFkOwogICAgIHZvaWQqIGRhdGE7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkR3Jv
dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZDc1MDdjZTQ3NzFkZGMyYzkxZTIzMGM0OGEzZjhmOWYzYTY1YTA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkR3JvdXAuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgVGhyZWFkR3Jv
dXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEdyb3VwKTsKK3B1YmxpYzoKK3By
aXZhdGU6Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQ
dGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2FjMjNiMGFmZTk2MTI0ZDJmZDBjNTYxMTdmMDBmMzA5NGIwZWI1ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApAQCAt
MCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhv
bGRlclB0aHJlYWRzLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworI2lmIFVTRShQVEhS
RUFEUykKKworI2lmIE9TKEhVUkQpCisvLyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVk
IGluIGJpb25pYyBub3IgaW4gSHVyZCwgc28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVyZS4KKyNk
ZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAxMDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0cy5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitwdGhyZWFkX2tleV90IFRocmVhZEhvbGRlcjo6
bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkKTsK
KworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlkRXhp
dCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIGlu
dCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKKyAgICBpZiAo
ZXJyb3IpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVy
OjpjdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHB0aHJlYWRfZ2V0c3BlY2lmaWMo
bV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFkJiB0aHJl
YWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3ZSdkIGhh
dmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1
cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVy
ZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8vIFdURjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAg
ICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7
CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sK
KyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhy
ZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKKwor
ICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAg
ICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAg
ICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0
KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUg
Y2FsbGVkLgorICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJE
YXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTNjZWRmMTU4
MDM1ZmNjNjQzZDMyZjVlMmVkMjI1NjdlNzBlYzNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApAQCAtMCwwICsxLDgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFRocmVhZEhvbGRlclB0aHJlYWRzX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyUHRocmVhZHNf
aAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
SG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBw
dGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlCisv
LyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZp
YyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KK2NsYXNzIFRocmVh
ZEhvbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkSG9sZGVyKTsKK3B1Ymxp
YzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7CisKKyAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlv
biBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgorICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUg
Y2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOworCisgICAgLy8gQ3JlYXRlcyBhbmQgcHV0
cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRIb2xkZXIgaW50byB0aHJlYWQtc3BlY2lmaWMgc3RvcmFn
ZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFRocmVhZCYpOworCisgICAgLy8gUmV0dXJu
cyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisgICAg
c3RhdGljIFRocmVhZEhvbGRlciogY3VycmVudCgpOworCisgICAgVGhyZWFkJiB0aHJlYWQoKSB7
IHJldHVybiBtX3RocmVhZC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFRocmVhZEhvbGRlcihU
aHJlYWQmIHRocmVhZCkKKyAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAgICwgbV9p
c0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIC8vIFRoaXMgdGhyZWFk
LXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWlu
YXRlczoKKyAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmlj
IGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0
cm95ZWQgb25jZScKKyAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNw
ZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAg
IC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUg
aW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUK
KyAgICAvLyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVw
LgorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVh
ZD4gbV90aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgcHRo
cmVhZF9rZXlfdCBtX2tleTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
VGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY5YzA5NTkzYjk1ZDc2MGU4MjEwODU0MzIyYmNjYTI5NjY4MjU4N2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVy
V2luLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK0RX
T1JEIFRocmVhZEhvbGRlcjo6bV9rZXkgPSAwOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFk
KTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlk
RXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAg
IERXT1JEIG1fa2V5ID0gRmxzQWxsb2MoZGVzdHJ1Y3QpOworICAgIGlmIChtX2tleSA9PSBGTFNf
T1VUX09GX0lOREVYRVMpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhy
ZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9s
ZGVyKj4oRmxzR2V0VmFsdWUobV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemUoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAg
Ly8gSWRlYWxseSB3ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUs
IGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMg
cmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxs
CisgICAgICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdz
IGluIHJlbGVhc2UgbW9kZS4KKyAgICAgICAgRmxzU2V0VmFsdWUobV9rZXksIG5ldyBUaHJlYWRI
b2xkZXIodGhyZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qo
dm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0g
c3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50
aWZpZXJEYXRhKTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3ll
ZE9uY2UpIHsKKyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRP
bmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBh
bm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRl
c3RydWN0b3JzIHdlcmUgY2FsbGVkLgorICAgIEZsc1NldFZhbHVlKG1fa2V5LCB0aHJlYWRJZGVu
dGlmaWVyRGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJX
aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNmQ3MDM1YWQwOGRkNzE4NTFlZTNiOGU0YWQ3ZTkxNmRjZDEyMjYz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmgKQEAg
LTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRIb2xkZXJXaW5faAorI2RlZmluZSBUaHJl
YWRIb2xkZXJXaW5faAorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFk
IGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBGTFMgMi1wYXNzIGRl
c3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQorLy8gVGhyZWFkIGZyb20gdGhyZWFkTWFwLiBJ
dCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMgdHlwZXMgZG9uJ3QgdXNlIG11bHRpcGxl
LXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFzcyBUaHJlYWRIb2xkZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFRocmVhZEhvbGRlcik7CitwdWJsaWM6CisgICAgflRocmVhZEhvbGRlcigpOwor
CisgICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9s
ZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgp
IGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9u
Y2UoKTsKKworICAgIC8vIENyZWF0ZXMgYW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkSG9s
ZGVyIGludG8gdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuCisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZShUaHJlYWQmKTsKKworICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3Rv
cmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgorICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIqIGN1cnJl
bnQoKTsKKworICAgIFRocmVhZCYgdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7IH0K
KworcHJpdmF0ZToKKyAgICBUaHJlYWRIb2xkZXIoVGhyZWFkJiB0aHJlYWQpCisgICAgICAgIDog
bV90aHJlYWQodGhyZWFkKQorICAgICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNh
bGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFkIHRlcm1pbmF0ZXM6CisgICAgLy8gLSBmaXJzdCwgd2hl
biBhbGwgdGhlIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBp
dCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdhcyAnZGVzdHJveWVkIG9uY2UnCisgICAgLy8gYW5kIHJl
LXNldHMgaXRzZWxmIGludG8gdGhlIHRocmVhZC1zcGVjaWZpYyBzbG90IHRvIG1ha2UgV2luIHRv
IGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAt
IHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRN
YXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJ
RklDX0NBTEwgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVh
ZDsKKyAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBEV09SRCBtX2tleTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyV2luX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
Y3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZWJmZTkzYmE1YzcwYTliNGY0YjVmMjY1NzIx
ZGQxNjliZmYxNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
VVNFKFBUSFJFQURTKQotCi0jaW5jbHVkZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5o
IgotCi0jaW5jbHVkZSAiVGhyZWFkaW5nLmgiCi0KLSNpZiBPUyhIVVJEKQotLy8gUFRIUkVBRF9L
RVlTX01BWCBpcyBub3QgZGVmaW5lZCBpbiBiaW9uaWMgbm9yIGluIEh1cmQsIHNvIGV4cGxpY2l0
bHkgZGVmaW5lIGl0IGhlcmUuCi0jZGVmaW5lIFBUSFJFQURfS0VZU19NQVggMTAyNAotI2Vsc2UK
LSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotcHRocmVh
ZF9rZXlfdCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOwot
Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci0KLVRocmVhZElkZW50aWZp
ZXJEYXRhOjp+VGhyZWFkSWRlbnRpZmllckRhdGEoKQotewotICAgIHRocmVhZERpZEV4aXQobV9p
ZGVudGlmaWVyKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9u
Y2UoKQotewotICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3Ry
dWN0KTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIENSQVNIKCk7Ci19Ci0KLVRocmVhZElkZW50
aWZpZXIgVGhyZWFkSWRlbnRpZmllckRhdGE6OmlkZW50aWZpZXIoKQotewotICAgIEFTU0VSVCht
X2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhy
ZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KHB0
aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkpKTsKLQotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVy
RGF0YSA/IHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lkZW50aWZpZXIgOiAwOwotfQotCi12b2lk
IFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKFRocmVhZElkZW50aWZpZXIgaWQpCi17
Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyKCkpOwotICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRo
aXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBl
cmZvcm1hbmUuCi0gICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0
aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCi0gICAgLy8gV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fa2V5ICE9IFBUSFJFQURfS0VZU19NQVgpOwotICAgIHB0aHJlYWRfc2V0c3BlY2lm
aWMobV9rZXksIG5ldyBUaHJlYWRJZGVudGlmaWVyRGF0YShpZCkpOwotfQotCi12b2lkIFRocmVh
ZElkZW50aWZpZXJEYXRhOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQotewotICAgIFRocmVhZElkZW50
aWZpZXJEYXRhKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50
aWZpZXJEYXRhKj4oZGF0YSk7Ci0gICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKLQot
ICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKLSAgICAg
ICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKLSAg
ICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0
KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUg
Y2FsbGVkLgotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJE
YXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoUFRIUkVBRFMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzQ5YTBjZGRhYWVjODYwYmNiZTRiYzBhNzI1YmQy
NzVlNzJlYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19o
Ci0jZGVmaW5lIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotCi0jaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gSG9sZHMgVGhyZWFkSWRlbnRp
ZmllciBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgcHRocmVhZHMt
c3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQotLy8gVGhyZWFk
SWRlbnRpZmllciBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNp
ZmljIHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhy
ZWFkSWRlbnRpZmllckRhdGEgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZElkZW50
aWZpZXJEYXRhKTsKLXB1YmxpYzoKLSAgICB+VGhyZWFkSWRlbnRpZmllckRhdGEoKTsKLQotICAg
IC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCi0g
ICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQg
aXQgaXMgbm90IHRocmVhZC1zYWZlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7
Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZElkZW50aWZp
ZXJEYXRhIGludG8gdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuCi0gICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0dXJucyAw
IGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAgc3Rh
dGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllcigpOwotCi1wcml2YXRlOgotICAgIFRocmVh
ZElkZW50aWZpZXJEYXRhKFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAgICAgOiBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxz
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3Rv
ciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8vIC0gZmly
c3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNh
bGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwotICAgIC8v
IGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBtYWtl
IFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQsIGFmdGVy
IGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNh
bGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVhZElkZW50
aWZpZXIgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgotICAgIHN0
YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBt
X2lkZW50aWZpZXI7Ci0gICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKLSAgICBzdGF0aWMgcHRo
cmVhZF9rZXlfdCBtX2tleTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8g
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXgg
YzFkYzM1MDE5MDNhYjc2YjM3MDQ2ZDkzMzNmOTMyYTNlZjBjNmM2ZS4uZjEwNDU5NDhkMjVlNDRm
ZDg4NTc3YTk5MjIzOTA5ZTZmNTYyOWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00NSw3ICs0
NSw3IEBAIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsKICAgICBNdXRleCBjcmVhdGlvbk11dGV4
OwogfTsKIAotY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJl
YWROYW1lKQorY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcmV0
dXJuIHRocmVhZE5hbWU7CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5
UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250
ZXh0LT5jcmVhdGlvbk11dGV4KTsKICAgICB9CiAKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKGNvbnRleHQtPm5hbWUpOworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKIAogICAgIGF1dG8gZW50cnlQb2ludCA9IFdU
Rk1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7CiAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMg
dm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAgIGVudHJ5UG9pbnQo
KTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6
OmNyZWF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFy
KiBuYW1lKQoreworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbZW50cnlQb2ludCwg
ZGF0YV0geworICAgICAgICBlbnRyeVBvaW50KGRhdGEpOworICAgIH0pOworfQorCitSZWZQdHI8
VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gZW50cnlQb2ludCkKIHsKICAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3
IE5ld1RocmVhZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5UG9pbnQpLCB7IH0gfTsKIAog
ICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhlY3V0aW5nIHVudGlsIHdlJ3Zl
IGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAgICBNdXRleExvY2tlciBsb2Nr
ZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAKLSAgICByZXR1cm4gY3JlYXRlVGhyZWFkSW50
ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CisgICAgcmV0dXJuIFRocmVh
ZDo6Y3JlYXRlSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CiB9CiAK
LVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQs
IHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVRocmVh
ZChuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0gewotICAgICAgICBlbnRyeVBvaW50KGRhdGEpOwot
ICAgIH0pOwotfQotCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQg
cmVsYXRpdmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50
ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykK
ICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0
eSkKICNlbmRpZgogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50
IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
aXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFPU19DTEFTU0VTKQog
ICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTM0LDEzICsxMzQsMTMgQEAg
dm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5
KQogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiBzdGF0aWMgcW9zX2NsYXNzX3QgZ2xvYmFsTWF4UU9T
Y2xhc3MgeyBRT1NfQ0xBU1NfVU5TUEVDSUZJRUQgfTsKIAotdm9pZCBzZXRHbG9iYWxNYXhRT1ND
bGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKK3ZvaWQgVGhyZWFkOjpzZXRHbG9iYWxNYXhRT1ND
bGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKIHsKICAgICBibWFsbG9jOjphcGk6OnNldFNjYXZl
bmdlclRocmVhZFFPU0NsYXNzKG1heENsYXNzKTsKICAgICBnbG9iYWxNYXhRT1NjbGFzcyA9IG1h
eENsYXNzOwogfQogCi1xb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9y
aWdpbmFsQ2xhc3MpCitxb3NfY2xhc3NfdCBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MocW9zX2Ns
YXNzX3Qgb3JpZ2luYWxDbGFzcykKIHsKICAgICBpZiAoZ2xvYmFsTWF4UU9TY2xhc3MgIT0gUU9T
X0NMQVNTX1VOU1BFQ0lGSUVEKQogICAgICAgICByZXR1cm4gc3RkOjptaW4ob3JpZ2luYWxDbGFz
cywgZ2xvYmFsTWF4UU9TY2xhc3MpOwpAQCAtMTQ4LDQgKzE0OCw5IEBAIHFvc19jbGFzc190IGFk
anVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3JpZ2luYWxDbGFzcykKIH0KICNlbmRpZgogCit2
b2lkIFRocmVhZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX2lkKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDZiNTU4
YjNlMWQ1MTdlODEwYzVlYThmNmIyY2E0NDA1YWNmMDEyZDIuLjU5OTU2YzY1NjU3YTc4OWE1NTQ0
YmY4MzUyYzZmYmMwMjdlZWExZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpo
YXlnb29kQHJlYWt0aXguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29k
IDxqaGF5Z29vZEByZWFrdGl4LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM4LDcyICszOSwyMjggQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworI2lmIFVTRShQVEhSRUFEUykKKyNpZiBPUyhEQVJX
SU4pCisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZWxzZQorI2luY2x1ZGUgPHNlbWFw
aG9yZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1h
a2UgbWNvbnRleHRfdCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KKy8vIFRo
aXMgYnVnIGhhcyBiZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdv
cmthcm91bmQgY2FuIGJlCisvLyByZW1vdmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4K
Ky8vIGh0dHBzOi8vYnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3
MDc5CisjaWYgT1MoRlJFRUJTRCkKKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorI2VuZGlmCisKKyNp
ZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbmRpZgorI2VuZGlmCisKKyNp
ZiAhQ09NUElMRVIoTVNWQykKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzY2hlZC5o
PgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNlbmRpZgogCiBuYW1lc3BhY2UgV1RG
IHsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOworI2lmIE9TKERBUldJTikK
KworI2lmIENQVShYODYpCit0eXBlZGVmIGkzODZfdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdp
c3RlcnM7CisjZWxpZiBDUFUoWDg2XzY0KQordHlwZWRlZiB4ODZfdGhyZWFkX3N0YXRlNjRfdCBQ
bGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShQUEMpCit0eXBlZGVmIHBwY190aHJlYWRfc3Rh
dGVfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShQUEM2NCkKK3R5cGVkZWYgcHBjX3Ro
cmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNKQordHlwZWRl
ZiBhcm1fdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNNjQp
Cit0eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vsc2UK
KyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbGlmIE9TKFdJTkRPV1Mp
CisKK3VzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0gQ09OVEVYVDsKKworI2VsaWYgKE9TKEZSRUVC
U0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8
IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKQorCit1c2luZyBQbGF0Zm9ybVJl
Z2lzdGVycyA9IG1jb250ZXh0X3Q7CisKKyNlbHNlCisKK3N0cnVjdCBQbGF0Zm9ybVJlZ2lzdGVy
cyB7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworfTsKKworI2VuZGlmCisKK3VzaW5nIFRocmVh
ZElkZW50aWZpZXIgPSB1aW50MzJfdDsKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2
b2lkKiBhcmd1bWVudCk7CiAKLS8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5LgotLy8gRGFy
d2luIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNhbGwgaXQgZnJv
bSBhbnkgdGhyZWFkLCB0aGUgb25seSAKLS8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxz
IGFyZSBub3QgcmVlbnRyYW50LgotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpOworY2xhc3MgVGhyZWFkSG9sZGVyOworY2xhc3MgUHJpbnRTdHJlYW07CisKK2Ns
YXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKK3B1Ymxp
YzoKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkSG9sZGVyOwogCi0vLyBSZXR1cm5zIDAgaWYgdGhy
ZWFkIGNyZWF0aW9uIGZhaWxlZC4KLS8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJh
bCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgot
V1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIH5UaHJlYWQoKTsKIAotLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWly
aW5nIFVJIHJlc3BvbnNpdmVuZXNzLgotLy8gcmVsYXRpdmVQcmlvcml0eSBpcyBhIHZhbHVlIGlu
IHRoZSByYW5nZSBbLTE1LCAwXSB3aGVyZSBhIGxvd2VyIHZhbHVlIGluZGljYXRlcyBhIGxvd2Vy
IHByaW9yaXR5LgotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7Ci1XVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9y
aXR5ID0gMCk7CisgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRocmVhZCBjcmVhdGlvbiBmYWls
ZWQuCisgICAgLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNv
bWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoY29uc3QgY2hhciogdGhyZWFk
TmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lk
KiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElk
ZW50aWZpZXIgY3VycmVudFRocmVhZCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdl
VGhyZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciwgaW50KTsKLVdURl9FWFBPUlRfUFJJVkFU
RSBpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7CisgICAgLy8g
UmV0dXJucyBUaHJlYWQgb2JqZWN0LiBOb3RlIHRoYXQgaXQgY2FuIGJlIChhIGJpdCkgY29zdGx5
IGluIFdpbmRvd3MuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJl
bnQoKTsKIAotLy8gRGVwcmVjYXRlZCBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIHRocmVhZCBjcmVh
dGlvbi4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChU
aHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIC8vIFJl
dHVybnMgVGhyZWFkSWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2Vy
IG9ubHkgY2FyZXMgYWJvdXQgaWRlbnRpdHkKKyAgICAvLyBvZiB0aHJlYWRzIGFuZCBlbnN1cmUg
dGhlIHRocmVhZCBsaWZldGltZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVh
ZElkZW50aWZpZXIgY3VycmVudElEKCk7CiAKLS8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmlj
IGNyZWF0ZVRocmVhZCBpbXBsZW1lbnRhdGlvbi4KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhy
ZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1l
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VQcmlvcml0eShpbnQpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBpbnQgd2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkZXRhY2goKTsKIAotLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVy
aW5nIGluaXRpYWxpemF0aW9uLgotLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0
aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgotdm9pZCBpbml0
aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworI2lm
IE9TKERBUldJTikKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IGtlcm5fcmV0dXJu
X3Q7CisjZWxpZiBVU0UoUFRIUkVBRFMpCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3Ig
PSBpbnQ7CisjZWxpZiBPUyhXSU5ET1dTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9y
ID0gRFdPUkQ7CisjZW5kaWYKIAotY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25z
dCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRXhwZWN0ZWQ8dm9p
ZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+IHN1c3BlbmQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCByZXN1bWUoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGdldFJlZ2lz
dGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYpOwogCiAjaWYgVVNFKFBUSFJFQURTKQotYm9vbCBzaWdu
YWxUaHJlYWQoVGhyZWFkSWRlbnRpZmllciwgaW50IHNpZ25hbE51bWJlcik7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgc2lnbmFsKGludCBzaWduYWxOdW1iZXIpOwogI2VuZGlmCiAKKyAg
ICAvLyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9uc2l2ZW5l
c3MuCisgICAgLy8gcmVsYXRpdmVQcmlvcml0eSBpcyBhIHZhbHVlIGluIHRoZSByYW5nZSBbLTE1
LCAwXSB3aGVyZSBhIGxvd2VyIHZhbHVlIGluZGljYXRlcyBhIGxvd2VyIHByaW9yaXR5LgorICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50
ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRp
dmVQcmlvcml0eSA9IDApOworCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKLVdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKLVdURl9FWFBPUlRf
UFJJVkFURSBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgcW9zX2NsYXNzX3QgYWRqdXN0
ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CiAjZW5kaWYKIAotfSAvLyBuYW1lc3BhY2UgV1RGCisg
ICAgLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgVGhyZWFkOjpjcmVhdGUgaW1wbGVtZW50
YXRpb24uCisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZUludGVybmFsKFRocmVhZEZ1
bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CiAKLXVzaW5nIFdURjo6VGhy
ZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6Y3JlYXRlVGhyZWFkOwotdXNpbmcgV1RGOjpjdXJy
ZW50VGhyZWFkOwotdXNpbmcgV1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eTsKLXVzaW5nIFdURjo6
ZGV0YWNoVGhyZWFkOwotdXNpbmcgV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbjsKKyAgICAv
LyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgLy8gSGVs
cGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9t
IHdpdGhpbiB0aGUgdGhyZWFkLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhy
ZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CiAKICNpZiBV
U0UoUFRIUkVBRFMpCi11c2luZyBXVEY6OnNpZ25hbFRocmVhZDsKKyAgICB2b2lkIGVzdGFibGlz
aChwdGhyZWFkX3QpOworI2Vsc2UKKyAgICB2b2lkIGVzdGFibGlzaChIQU5ETEUsIFRocmVhZElk
ZW50aWZpZXIpOwogI2VuZGlmCiAKLSNpZiBIQVZFKFFPU19DTEFTU0VTKQotdXNpbmcgV1RGOjpz
ZXRHbG9iYWxNYXhRT1NDbGFzczsKLXVzaW5nIFdURjo6YWRqdXN0ZWRRT1NDbGFzczsKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKKyNpZiBVU0UoUFRIUkVBRFMpICYm
ICFPUyhEQVJXSU4pCisgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUo
aW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CiAjZW5kaWYKIAorICAgIFRocmVhZElk
ZW50aWZpZXIgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKKyAgICB2b2lkIGFkZE9uRXhp
dENhbGxiYWNrKHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWQmKT4gY2FsbGJhY2spCisgICAgewor
ICAgICAgICBtX29uRXhpdENhbGxiYWNrLmFwcGVuZChjYWxsYmFjayk7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFRocmVhZCYgdGhyZWFkKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlkKCkgPT0gdGhyZWFkLmlkKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRocmVhZCYgdGhyZWFkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkKCkgIT0gdGhyZWFk
LmlkKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFRocmVhZCgpOworCisgICAgZW51bSBKb2lu
YWJsZVN0YXRlIHsKKyAgICAgICAgLy8gVGhlIGRlZmF1bHQgdGhyZWFkIHN0YXRlLiBUaGUgdGhy
ZWFkIGNhbiBiZSBqb2luZWQgb24uCisgICAgICAgIEpvaW5hYmxlLAorCisgICAgICAgIC8vIFNv
bWVib2R5IHdhaXRlZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlzIHRocmVhZCBmaW5h
bGx5IGV4aXRlZC4gVGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJlIGEKKyAg
ICAgICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0aHJlYWQgZXhpdHMgKHdo
aWNoIGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aGUgcmVtYWluZGVyIG9mIHdh
aXRPblRocmVhZENvbXBsZXRpb24gdG8gcnVuKQorICAgICAgICAvLyBhbmQgd2hlbiB0aHJlYWRE
aWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0aHJlYWREaWRFeGl0IHRvIHRha2UgY2hhcmdlIGFu
ZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNpbmNlIHRoZXJlJ3MKKyAgICAgICAgLy8gbm9ib2R5
IGVsc2UgdG8gcGljayB1cCB0aGUgc2xhY2sgaW4gdGhpcyBjYXNlIChzaW5jZSB3YWl0T25UaHJl
YWRDb21wbGV0aW9uIGhhcyBhbHJlYWR5IHJldHVybmVkKS4KKyAgICAgICAgSm9pbmVkLAorCisg
ICAgICAgIC8vIFRoZSB0aHJlYWQgaGFzIGJlZW4gZGV0YWNoZWQgYW5kIGNhbiBubyBsb25nZXIg
YmUgam9pbmVkIG9uLiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkIG11c3QgdGFrZSBjYXJlIG9m
IGNsZWFuaW5nIHVwIGFmdGVyIGl0c2VsZi4KKyAgICAgICAgRGV0YWNoZWQsCisgICAgfTsKKwor
ICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0dXJuIG1fam9pbmFibGVTdGF0
ZTsgfQorICAgIHZvaWQgZGlkQmVjb21lRGV0YWNoZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERl
dGFjaGVkOyB9CisgICAgdm9pZCBkaWRFeGl0KCk7CisgICAgdm9pZCBkaWRKb2luKCkgeyBtX2pv
aW5hYmxlU3RhdGUgPSBKb2luZWQ7IH0KKyAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1f
ZGlkRXhpdDsgfQorCisgICAgV29yZExvY2sgbV9tdXRleDsKKyAgICBUaHJlYWRJZGVudGlmaWVy
IG1faWQgeyAwIH07CisgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJs
ZSB9OworICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8c3RkOjpmdW5j
dGlvbjx2b2lkKFRocmVhZCYpPj4gbV9vbkV4aXRDYWxsYmFjazsKKyNpZiBVU0UoUFRIUkVBRFMp
CisgICAgcHRocmVhZF90IG1faGFuZGxlOworI2lmIE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRf
dCBtX3BsYXRmb3JtVGhyZWFkOworI2Vsc2UKKyAgICBzZW1fdCBtX3NlbWFwaG9yZUZvclN1c3Bl
bmRSZXN1bWU7CisgICAgbWNvbnRleHRfdCBtX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0OworICAg
IHVuc2lnbmVkIG1fc3VzcGVuZENvdW50IHsgMCB9OworICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1f
c3VzcGVuZGVkIHsgZmFsc2UgfTsKKyNlbmRpZgorI2VsaWYgT1MoV0lORE9XUykKKyAgICBIQU5E
TEUgbV9oYW5kbGU7CisjZWxzZQorI2Vycm9yIFVua25vd24gU3lzdGVtCisjZW5kaWYKK307CisK
Ky8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0
IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5LgorLy8gRGFyd2luIGlzIGFuIGV4Y2VwdGlv
biB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNhbGwgaXQgZnJvbSBhbnkgdGhyZWFkLCB0aGUg
b25seQorLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQu
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CisKK2lubGlu
ZSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQoreworICAgIHJldHVybiBUaHJlYWQ6
OmN1cnJlbnRJRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaHJl
YWRJZGVudGlmaWVyOwordXNpbmcgV1RGOjpUaHJlYWQ7Cit1c2luZyBXVEY6OmN1cnJlbnRUaHJl
YWQ7CisKICNlbmRpZiAvLyBUaHJlYWRpbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwCmluZGV4IGY1Y2VlM2MxNzc4MmY2NmFmOWIwNGNjN2Q1NmNhMWRhNWE2OTJkMGYuLjJmYmI4
OGFjYmRjMzFkZjcyYjBmOTEzNzZkMjBjZDEyMjVjMzM4N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKQEAgLTEsNyArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgPGpoYXlnb29kQHJlYWt0aXguY29tPgogICog
Q29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTYy
ICs0MiwxMTcgQEAKICNpbmNsdWRlICJSYW5kb21OdW1iZXJTZWVkLmgiCiAjaW5jbHVkZSAiU3Rk
TGliRXh0cmFzLmgiCiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCi0jaW5j
bHVkZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIgotI2luY2x1ZGUgIlRocmVhZFNw
ZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyUHRocmVhZHMuaCIKKyNpbmNsdWRlIDxl
cnJuby5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvV1RG
VGhyZWFkRGF0YS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiAhQ09NUElMRVIoTVNWQykK
LSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzY2hlZC5oPgotI2luY2x1ZGUgPHN5cy90
aW1lLmg+Ci0jZW5kaWYKLQotI2lmIE9TKExJTlVYKQotI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgot
I2VuZGlmCi0KLSNpZiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCisj
aW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1jbGFzcyBQdGhy
ZWFkU3RhdGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVu
dW0gSm9pbmFibGVTdGF0ZSB7Ci0gICAgICAgIEpvaW5hYmxlLCAvLyBUaGUgZGVmYXVsdCB0aHJl
YWQgc3RhdGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KLQotICAgICAgICBKb2luZWQs
IC8vIFNvbWVib2R5IHdhaXRlZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlzIHRocmVh
ZCBmaW5hbGx5IGV4aXRlZC4gVGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJl
IGEgCi0gICAgICAgICAgICAgICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0
aHJlYWQgZXhpdHMgKHdoaWNoIGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aGUg
cmVtYWluZGVyIG9mIHdhaXRPblRocmVhZENvbXBsZXRpb24gdG8gcnVuKSAKLSAgICAgICAgICAg
ICAgICAvLyBhbmQgd2hlbiB0aHJlYWREaWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0aHJlYWRE
aWRFeGl0IHRvIHRha2UgY2hhcmdlIGFuZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNpbmNlIHRo
ZXJlJ3MgCi0gICAgICAgICAgICAgICAgLy8gbm9ib2R5IGVsc2UgdG8gcGljayB1cCB0aGUgc2xh
Y2sgaW4gdGhpcyBjYXNlIChzaW5jZSB3YWl0T25UaHJlYWRDb21wbGV0aW9uIGhhcyBhbHJlYWR5
IHJldHVybmVkKS4KLQotICAgICAgICBEZXRhY2hlZCAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRl
dGFjaGVkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhl
IHRocmVhZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCi0gICAg
fTsKLQotICAgIC8vIEN1cnJlbnRseSBhbGwgdGhyZWFkcyBjcmVhdGVkIGJ5IFdURiBzdGFydCBv
dXQgYXMgam9pbmFibGUuIAotICAgIFB0aHJlYWRTdGF0ZShwdGhyZWFkX3QgaGFuZGxlKQotICAg
ICAgICA6IG1fam9pbmFibGVTdGF0ZShKb2luYWJsZSkKLSAgICAgICAgLCBtX2RpZEV4aXQoZmFs
c2UpCi0gICAgICAgICwgbV9wdGhyZWFkSGFuZGxlKGhhbmRsZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRl
OyB9Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUoKSB7IHJldHVybiBtX3B0aHJlYWRIYW5k
bGU7IH0KLSAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBE
ZXRhY2hlZDsgfQotICAgIHZvaWQgZGlkRXhpdCgpIHsgbV9kaWRFeGl0ID0gdHJ1ZTsgfQotICAg
IHZvaWQgZGlkSm9pbigpIHsgbV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9Ci0gICAgYm9vbCBo
YXNFeGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4aXQ7IH0KLQotcHJpdmF0ZToKLSAgICBKb2luYWJs
ZVN0YXRlIG1fam9pbmFibGVTdGF0ZTsKLSAgICBib29sIG1fZGlkRXhpdDsKLSAgICBwdGhyZWFk
X3QgbV9wdGhyZWFkSGFuZGxlOwotfTsKLQotdHlwZWRlZiBIYXNoTWFwPFRocmVhZElkZW50aWZp
ZXIsIHN0ZDo6dW5pcXVlX3B0cjxQdGhyZWFkU3RhdGU+PiBUaHJlYWRNYXA7CisjaWYgIU9TKERB
UldJTikKIAotdm9pZCB1bnNhZmVUaHJlYWRXYXNEZXRhY2hlZChUaHJlYWRJZGVudGlmaWVyKTsK
LXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyKTsKLXZvaWQgdGhyZWFkV2FzSm9p
bmVkKFRocmVhZElkZW50aWZpZXIpOworLy8gV2UgdXNlIFNJR1VTUjIgdG8gc3VzcGVuZCBhbmQg
cmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBpbiBKYXZhU2NyaXB0Q29yZS4KK3N0YXRpYyBjb25zdGV4
cHIgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOworc3RhdGljIHN0
ZDo6YXRvbWljPFRocmVhZCo+IHRhcmdldFRocmVhZCB7IG51bGxwdHIgfTsKK3N0YXRpYyBTdGF0
aWNXb3JkTG9jayBnbG9iYWxTdXNwZW5kTG9jazsKIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBN
dXRleCgpCit2b2lkIFRocmVhZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdp
bmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0
ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQotdm9pZCBpbml0aWFsaXplVGhyZWFk
aW5nKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkOwotCi0gICAgaWYgKGlzSW5p
dGlhbGl6ZWQpCisgICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9t
IHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgorICAgIFRocmVhZCogdGhyZWFkID0gdGFyZ2V0
VGhyZWFkLmxvYWQoKTsKKworICAgIGlmICh0aHJlYWQtPm1fc3VzcGVuZGVkLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxdWlyZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFuZGxl
ciBpbnZvY2F0aW9uIHRoYXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2lnc3Vz
cGVuZC4KKyAgICAgICAgLy8gU28gdGhpcyBoYW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNob3Vs
ZCBub3QgcHJvY2Vzcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hlbiBzaWduYWwgY29tZXMs
IGZpcnN0LCB0aGUgc3lzdGVtIGNhbGxzIHNpZ25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNpZ3N1
c3BlbmQgd2lsbCBiZSByZXN1bWVkLiBTaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5cyBw
cmVjZWRlcy4KKyAgICAgICAgLy8gU28sIHRoZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhhdCBz
dXNwZW5kZWQuc3RvcmUodHJ1ZSwgLi4uKSB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgaGFu
ZGxlciBpcyBjYWxsZWQuCisgICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25s
aW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3NpZ3N1c3BlbmQuaHRtbAogICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBXVEY6OmRvdWJs
ZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7Ci0gICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBk
b2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hp
b24sCi0gICAgLy8gc28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4K
LSAgICBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIHRocmVhZE1hcE11dGV4KCk7Ci0gICAgaW5p
dGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRh
Ojppbml0aWFsaXplT25jZSgpOwotICAgIHd0ZlRocmVhZERhdGEoKTsKLSAgICBpbml0aWFsaXpl
RGF0ZXMoKTsKLX0KKyAgICB1Y29udGV4dF90KiB1c2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PHVj
b250ZXh0X3QqPih1Y29udGV4dCk7CisjaWYgQ1BVKFBQQykKKyAgICB0aHJlYWQtPm1fc3VzcGVu
ZGVkTWFjaGluZUNvbnRleHQgPSAqdXNlckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7Cisj
ZWxzZQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0
LT51Y19tY29udGV4dDsKKyNlbmRpZgogCi1zdGF0aWMgVGhyZWFkTWFwJiB0aHJlYWRNYXAoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaHJlYWRNYXA+IG1hcDsKLSAgICByZXR1cm4g
bWFwOworICAgIC8vIEFsbG93IHN1c3BlbmQgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFk
IGlzIHN1c3BlbmRlZC4KKyAgICAvLyBzZW1fcG9zdCBpcyBhc3luYy1zaWduYWwtc2FmZSBmdW5j
dGlvbi4gSXQgbWVhbnMgdGhhdCB3ZSBjYW4gY2FsbCB0aGlzIGZyb20gYSBzaWduYWwgaGFuZGxl
ci4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5
L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0XzAzCisgICAgLy8KKyAgICAv
LyBBbmQgc2VtX3Bvc3QgZW1pdHMgbWVtb3J5IGJhcnJpZXIgdGhhdCBlbnN1cmVzIHRoYXQgc3Vz
cGVuZGVkTWFjaGluZUNvbnRleHQgaXMgY29ycmVjdGx5IHNhdmVkLgorICAgIC8vIGh0dHA6Ly9w
dWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL1YxX2NoYXAw
NC5odG1sI3RhZ18wNF8xMQorICAgIHNlbV9wb3N0KCZ0aHJlYWQtPm1fc2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7CisKKyAgICAvLyBSZWFjaGluZyBoZXJlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlzIGNvbmZpZ3VyZWQgYnkgc2ln
YWN0aW9uJ3Mgc2FfbWFzaykuCisgICAgLy8gU28gYmVmb3JlIGNhbGxpbmcgc2lnc3VzcGVuZCwg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBpcyBkZWZlcnJlZC4gVGhpcyBl
bnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJlY3Vyc2l2ZWx5LgorICAg
IHNpZ3NldF90IGJsb2NrZWRTaWduYWxTZXQ7CisgICAgc2lnZmlsbHNldCgmYmxvY2tlZFNpZ25h
bFNldCk7CisgICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0LCBTaWdUaHJlYWRTdXNwZW5k
UmVzdW1lKTsKKyAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0KTsKKworICAgIC8vIEFs
bG93IHJlc3VtZSBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgcmVzdW1lZC4KKyAg
ICBzZW1fcG9zdCgmdGhyZWFkLT5tX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwogfQogCi1z
dGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNvbnN0IHB0
aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
TWFwTXV0ZXgoKSk7Ci0KLSAgICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5i
ZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+dmFsdWUtPnB0aHJlYWRIYW5kbGUoKSwgcHRocmVhZEhh
bmRsZSkgJiYgIWktPnZhbHVlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5r
ZXk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19CisjZW5kaWYgLy8gIU9TKERBUldJTikKIAot
c3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5k
bGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQordm9pZCBpbml0aWFsaXplVGhyZWFk
aW5nKCkKIHsKLSAgICBBU1NFUlQoIWlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUocHRocmVhZEhh
bmRsZSkpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBz
dGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotICAgIHRocmVhZE1h
cCgpLmFkZChpZGVudGlmaWVyQ291bnQsIHN0ZDo6bWFrZV91bmlxdWU8UHRocmVhZFN0YXRlPihw
dGhyZWFkSGFuZGxlKSk7Ci0gICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVLZXksIFtdIHsKKyAgICAgICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6
ZSgpOworICAgICAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAgIC8v
IFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5n
IGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAorICAgICAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJl
ZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgorICAgICAgICBTdHJpbmdJbXBsOjplbXB0eSgpOwor
ICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CisgICAgICAgIHd0ZlRo
cmVhZERhdGEoKTsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CisKKyNpZiAhT1MoREFSV0lO
KQorICAgICAgICAvLyBTaWduYWwgaGFuZGxlcnMgYXJlIHByb2Nlc3MgZ2xvYmFsIGNvbmZpZ3Vy
YXRpb24uCisgICAgICAgIC8vIEludGVudGlvbmFsbHkgYmxvY2sgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSBpbiB0aGUgaGFuZGxlci4KKyAgICAgICAgLy8gU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB3
aWxsIGJlIGFsbG93ZWQgaW4gdGhlIGhhbmRsZXIgYnkgc2lnc3VzcGVuZC4KKyAgICAgICAgc3Ry
dWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgICAgIHNpZ2VtcHR5c2V0KCZhY3Rpb24uc2FfbWFz
ayk7CisgICAgICAgIHNpZ2FkZHNldCgmYWN0aW9uLnNhX21hc2ssIFNpZ1RocmVhZFN1c3BlbmRS
ZXN1bWUpOworCisgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBUaHJlYWQ6OnNpZ25hbEhh
bmRsZXJTdXNwZW5kUmVzdW1lOworICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJU
IHwgU0FfU0lHSU5GTzsKKyAgICAgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUs
ICZhY3Rpb24sIDApOworI2VuZGlmCisgICAgfSk7CiB9CiAKLXN0YXRpYyBwdGhyZWFkX3QgcHRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKFRocmVhZElkZW50aWZp
ZXIgaWQpCitzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNy
ZWF0ZWQoKQogewotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpLT5wdGhyZWFkSGFuZGxl
KCk7CisjaWYgIU9TKERBUldJTikKKyAgICBzaWdzZXRfdCBtYXNrOworICAgIHNpZ2VtcHR5c2V0
KCZtYXNrKTsKKyAgICBzaWdhZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOwor
ICAgIHB0aHJlYWRfc2lnbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOworI2VuZGlmCiB9CiAK
IHN0YXRpYyB2b2lkKiB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewotICAgIC8v
IEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4gY3JlYXRlVGhyZWFkSW50ZXJuYWwuCisgICAgLy8g
QmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgogICAgIGF1
dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+
KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7Ci0gICAgaW52
b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rp
b24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciopCi17Ci0gICAgYXV0byBpbnZv
Y2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5
UG9pbnQsIGRhdGEpOwotICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7Ci0gICAgcHRocmVhZF9h
dHRyX3QgYXR0cjsKLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7Ci0jaWYgSEFWRShRT1Nf
Q0xBU1NFUykKLSAgICBwdGhyZWFkX2F0dHJfc2V0X3Fvc19jbGFzc19ucCgmYXR0ciwgYWRqdXN0
ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpLCAwKTsKLSNlbmRpZgotICAgIGlu
dCBlcnJvciA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRIYW5kbGUsICZhdHRyLCB3dGZUaHJlYWRF
bnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpKTsKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgm
YXR0cik7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcCIsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAK
LSAgICAvLyBCYWxhbmNlZCBieSBzdGQ6OnVuaXF1ZV9wdHIgY29uc3RydWN0b3IgaW4gd3RmVGhy
ZWFkRW50cnlQb2ludC4KLSAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGxlYWtlZEludm9j
YXRpb24gPSBpbnZvY2F0aW9uLnJlbGVhc2UoKTsKLSAgICBVTlVTRURfUEFSQU0obGVha2VkSW52
b2NhdGlvbik7CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCppbnZvY2F0aW9uLT50aHJl
YWQpOworICAgIGludm9jYXRpb24tPnRocmVhZCA9IG51bGxwdHI7CiAKLSAgICByZXR1cm4gZXN0
YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUodGhyZWFkSGFuZGxlKTsKKyAgICBpbnZv
Y2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5kYXRhKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRo
cmVhZE5hbWUpCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChj
b25zdCBjaGFyKiB0aHJlYWROYW1lKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQog
ICAgIHB0aHJlYWRfc2V0bmFtZV9ucChub3JtYWxpemVUaHJlYWROYW1lKHRocmVhZE5hbWUpKTsK
QEAgLTIwNSwxMjMgKzE2MSw3IEBAIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5h
bChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odGhyZWFk
TmFtZSk7CiAjZW5kaWYKLQotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBpZGVudGlmaWVyQnlQ
dGhyZWFkSGFuZGxlKHB0aHJlYWRfc2VsZigpKTsKLSAgICBBU1NFUlQoaWQpOwotICAgIFRocmVh
ZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKGlkKTsKLX0KLSAgICAKLXZvaWQgY2hhbmdlVGhy
ZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgaW50IGRlbHRhKQotewotICAg
IHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICAgICAg
cHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5
SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKLSAgICB9Ci0K
LSAgICBpbnQgcG9saWN5OwotICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKLQotICAgIGlm
IChwdGhyZWFkX2dldHNjaGVkcGFyYW0ocHRocmVhZEhhbmRsZSwgJnBvbGljeSwgJnBhcmFtKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgKz0gZGVsdGE7Ci0K
LSAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZEhhbmRsZSwgcG9saWN5LCAmcGFyYW0p
OwotfQotCi1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCkKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFk
SUQpOwotCi0gICAgewotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGxvY2sgYWNyb3NzIHRo
ZSBjYWxsIHRvIGpvaW4sIHNpbmNlIHRoYXQgY2FuIGJsb2NrIG91ciB0aHJlYWQgYW5kIGNhdXNl
IGRlYWRsb2NrLgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7
Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhM
b2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7
Ci0gICAgfQotCi0gICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pvaW4ocHRocmVhZEhhbmRs
ZSwgMCk7Ci0KLSAgICBpZiAoam9pblJlc3VsdCA9PSBFREVBRExLKQotICAgICAgICBMT0dfRVJS
T1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5n
IHRvIHF1aXQiLCB0aHJlYWRJRCk7Ci0gICAgZWxzZSBpZiAoam9pblJlc3VsdCkKLSAgICAgICAg
TE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxu
IiwgdGhyZWFkSUQpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkp
OwotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwot
ICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgQVNTRVJUKHN0YXRlLT5qb2luYWJsZVN0YXRlKCkgPT0g
UHRocmVhZFN0YXRlOjpKb2luYWJsZSk7Ci0KLSAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5
IGV4aXRlZCwgc28gY2xlYW4gdXAgYWZ0ZXIgaXQuCi0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQo
KSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLSAgICAvLyBUaGUgdGhy
ZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBz
aWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xl
YW4gdXAgYWZ0ZXIgaXRzZWxmLgotICAgIGVsc2UKLSAgICAgICAgc3RhdGUtPmRpZEpvaW4oKTsK
LQotICAgIHJldHVybiBqb2luUmVzdWx0OwotfQotCi12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICBNdXRl
eExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRI
YW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhy
ZWFkSUQpOwotICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKLQotICAgIGludCBkZXRhY2hSZXN1
bHQgPSBwdGhyZWFkX2RldGFjaChwdGhyZWFkSGFuZGxlKTsKLSAgICBpZiAoZGV0YWNoUmVzdWx0
KQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBi
ZSBkZXRhY2hlZFxuIiwgdGhyZWFkSUQpOwotCi0gICAgUHRocmVhZFN0YXRlKiBzdGF0ZSA9IHRo
cmVhZE1hcCgpLmdldCh0aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICBpZiAoc3Rh
dGUtPmhhc0V4aXRlZCgpKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwot
ICAgIGVsc2UKLSAgICAgICAgdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKS0+ZGlkQmVjb21lRGV0
YWNoZWQoKTsKLX0KLQotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIFB0
aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VS
VChzdGF0ZSk7Ci0gICAgCi0gICAgc3RhdGUtPmRpZEV4aXQoKTsKLQotICAgIGlmIChzdGF0ZS0+
am9pbmFibGVTdGF0ZSgpICE9IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpCi0gICAgICAgIHRocmVh
ZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgY3VycmVudFRo
cmVhZCgpCi17Ci0gICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IFRocmVhZElkZW50aWZpZXJEYXRh
OjppZGVudGlmaWVyKCk7Ci0gICAgaWYgKGlkKQotICAgICAgICByZXR1cm4gaWQ7Ci0KLSAgICAv
LyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFi
bGlzaGVkIHlldC4KLSAgICBpZCA9IGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxl
KHB0aHJlYWRfc2VsZigpKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShp
ZCk7Ci0gICAgcmV0dXJuIGlkOwotfQotCi1ib29sIHNpZ25hbFRocmVhZChUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElELCBpbnQgc2lnbmFsTnVtYmVyKQotewotICAgIHB0aHJlYWRfdCBwdGhyZWFk
SGFuZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0gICAgewotICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhy
ZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAg
ICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0gICAgfQotICAgIGludCBlcnJObyA9IHB0aHJl
YWRfa2lsbChwdGhyZWFkSGFuZGxlLCBzaWduYWxOdW1iZXIpOwotICAgIHJldHVybiAhZXJyTm87
IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNzLgorICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCgpOwogfQogCiBNdXRleDo6TXV0ZXgoKQpAQCAtNDE1LDYgKzI1
NSwyNzIgQEAgdm9pZCBUaHJlYWRDb25kaXRpb246OmJyb2FkY2FzdCgpCiAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsICFyZXN1bHQpOwogfQogCitUaHJlYWQ6OlRocmVhZCgpCit7CisjaWYgIU9T
KERBUldJTikKKyAgICBzZW1faW5pdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAvKiBP
bmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MuICovIDAsIC8qIEluaXRpYWwgdmFsdWUgZm9y
IHRoZSBzZW1hcGhvcmUuICovIDApOworI2VuZGlmCit9CisKK1RocmVhZDo6flRocmVhZCgpCit7
CisjaWYgIU9TKERBUldJTikKKyAgICBzZW1fZGVzdHJveSgmbV9zZW1hcGhvcmVGb3JTdXNwZW5k
UmVzdW1lKTsKKyNlbmRpZgorfQorCit2b2lkIFRocmVhZDo6ZGlkRXhpdCgpCit7CisgICAgewor
ICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIG1fZGlkRXhp
dCA9IHRydWU7CisgICAgfQorICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX29uRXhpdENhbGxi
YWNrKQorICAgICAgICBjYWxsYmFjaygqdGhpcyk7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxp
c2gocHRocmVhZF90IGhhbmRsZSkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAgaWYgKCFtX2lkKSB7CisgICAgICAgIHN0
YXRpYyBzdGQ6OmF0b21pYzxUaHJlYWRJZGVudGlmaWVyPiBwcm92aWRlciB7IDAgfTsKKyAgICAg
ICAgbV9pZCA9ICsrcHJvdmlkZXI7CisjaWYgT1MoREFSV0lOKQorICAgICAgICBtX3BsYXRmb3Jt
VGhyZWFkID0gcHRocmVhZF9tYWNoX3RocmVhZF9ucChoYW5kbGUpOworI2VuZGlmCisgICAgfQor
fQorCit2b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRlbHRhKQoreworICAgIFdvcmRM
b2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKworICAgIGludCBwb2xpY3k7CisgICAgc3RydWN0
IHNjaGVkX3BhcmFtIHBhcmFtOworCisgICAgaWYgKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShtX2hh
bmRsZSwgJnBvbGljeSwgJnBhcmFtKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFyYW0uc2No
ZWRfcHJpb3JpdHkgKz0gZGVsdGE7CisKKyAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0obV9oYW5k
bGUsIHBvbGljeSwgJnBhcmFtKTsKK30KKworaW50IFRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24o
KQoreworICAgIHB0aHJlYWRfdCBoYW5kbGU7CisgICAgeworICAgICAgICBXb3JkTG9ja0hvbGRl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOworICAgIH0KKwor
ICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKGhhbmRsZSwgMCk7CisKKyAgICBpZiAo
am9pblJlc3VsdCA9PSBFREVBRExLKQorICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZp
ZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCBtX2lkKTsK
KyAgICBlbHNlIGlmIChqb2luUmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50
aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBqb2luZWQuXG4iLCBtX2lkKTsKKworICAgIFdvcmRM
b2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgpID09
IEpvaW5hYmxlKTsKKworICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBkbyBu
b3RoaW5nLgorICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQsIHNvIGRvbid0IGNs
ZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9u
IGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBhZnRlciBpdHNlbGYuCisgICAgaWYgKCFoYXNF
eGl0ZWQoKSkKKyAgICAgICAgZGlkSm9pbigpOworCisgICAgcmV0dXJuIGpvaW5SZXN1bHQ7Cit9
CisKK3ZvaWQgVGhyZWFkOjpkZXRhY2goKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlciht
X211dGV4KTsKKyAgICBpbnQgZGV0YWNoUmVzdWx0ID0gcHRocmVhZF9kZXRhY2gobV9oYW5kbGUp
OworICAgIGlmIChkZXRhY2hSZXN1bHQpCisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRp
ZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4iLCBtX2lkKTsKKworICAgIGlmICgh
aGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFjaGVkKCk7Cit9CisKK1JlZlB0cjxU
aHJlYWQ+IFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uc3QgY2hhciopCit7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0g
YWRvcHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLmdldCgp
LCBkYXRhKTsKKyAgICBwdGhyZWFkX3QgdGhyZWFkSGFuZGxlOworICAgIHB0aHJlYWRfYXR0cl90
IGF0dHI7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOworI2lmIEhBVkUoUU9TX0NMQVNT
RVMpCisgICAgcHRocmVhZF9hdHRyX3NldF9xb3NfY2xhc3NfbnAoJmF0dHIsIGFkanVzdGVkUU9T
Q2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKSwgMCk7CisjZW5kaWYKKyAgICBpbnQgZXJy
b3IgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkSGFuZGxlLCAmYXR0ciwgd3RmVGhyZWFkRW50cnlQ
b2ludCwgaW52b2NhdGlvbi5nZXQoKSk7CisgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHIp
OworICAgIGlmIChlcnJvcikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
cHRocmVhZCBhdCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCB3dGZUaHJlYWRFbnRyeVBv
aW50LCBpbnZvY2F0aW9uLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0ZlRo
cmVhZEVudHJ5UG9pbnQuCisgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJbnZv
Y2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7CisgICAgVU5VU0VEX1BBUkFNKGxlYWtlZElu
dm9jYXRpb24pOworCisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlKTsKKyAgICBy
ZXR1cm4gdGhyZWFkOworfQorCitUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCit7CisgICAgVGhy
ZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7CisgICAgaWYgKGRhdGEp
CisgICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKKworICAgIC8vIE5vdCBhIFdURi1jcmVh
dGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgorICAg
IFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgdGhy
ZWFkLT5lc3RhYmxpc2gocHRocmVhZF9zZWxmKCkpOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlh
bGl6ZSgqdGhyZWFkKTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNy
ZWF0ZWQoKTsKKyAgICByZXR1cm4gKnRocmVhZDsKK30KKworVGhyZWFkSWRlbnRpZmllciBUaHJl
YWQ6OmN1cnJlbnRJRCgpCit7CisgICAgcmV0dXJuIGN1cnJlbnQoKS5pZCgpOworfQorCitib29s
IFRocmVhZDo6c2lnbmFsKGludCBzaWduYWxOdW1iZXIpCit7CisgICAgV29yZExvY2tIb2xkZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBlcnJObyA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwg
c2lnbmFsTnVtYmVyKTsKKyAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3Vj
Y2Vzcy4KK30KKworYXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0
Zm9ybVN1c3BlbmRFcnJvcj4KK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRoaXMgIT0gJmN1
cnJlbnQoKSwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJlbnQg
dGhyZWFkIGl0c2VsZi4iKTsKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Cisj
aWYgT1MoREFSV0lOKQorICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQo
bV9wbGF0Zm9ybVRocmVhZCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgIHJldHVybiB7IH07CisjZWxz
ZQorICAgIHsKKyAgICAgICAgLy8gRHVyaW5nIHN1c3BlbmQsIHN1c3BlbmQgb3IgcmVzdW1lIHNo
b3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgLy8g
V2UgdXNlIGdsb2JhbCBsb2NrIGluc3RlYWQgb2YgcGVyIHRocmVhZCBsb2NrLgorICAgICAgICAv
LyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhc2UsIHRoZXJlIGFyZSB0aHJlYWRzIEEgYW5kIEIu
CisgICAgICAgIC8vIEFuZCBBIGF0dGVtcHQgdG8gc3VzcGVuZCBCIGFuZCBCIGF0dGVtcHQgdG8g
c3VzcGVuZCBBLgorICAgICAgICAvLyBBIGFuZCBCIHNlbmQgc2lnbmFscy4gQW5kIGxhdGVyLCBz
aWduYWxzIGFyZSBkZWxpdmVyZWQgdG8gQSBhbmQgQi4KKyAgICAgICAgLy8gSW4gdGhhdCBjYXNl
LCBib3RoIHdpbGwgYmUgc3VzcGVuZGVkLgorICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIo
Z2xvYmFsU3VzcGVuZExvY2spOworICAgICAgICBpZiAoIW1fc3VzcGVuZENvdW50KSB7CisgICAg
ICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSBwdGhyZWFkX3NpZ3F1ZXVl
LiBJdCBhbGxvd3MgdXMgdG8gcGFzcyB0aGUgYXJndW1lbnQgdG8gdGhlIHNpZ25hbCBoYW5kbGVy
LgorICAgICAgICAgICAgLy8gQnV0IGl0IGNhbiBiZSB1c2VkIGluIGEgZmV3IHBsYXRmb3Jtcywg
bGlrZSBMaW51eC4KKyAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIHVzZSBUaHJlYWQqIHN0b3Jl
ZCBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdG8gcGFzcyBpdCB0byB0aGUgc2lnbmFsIGhh
bmRsZXIuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7CisgICAgICAgICAg
ICBpbnQgcmVzdWx0ID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKHJlc3VsdCk7CisgICAgICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVG
b3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVz
IHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJv
dmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9zdXNwZW5kZWQuc3RvcmUodHJ1
ZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIH0KKyAgICAgICAgKyttX3N1
c3BlbmRDb3VudDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5kaWYKK30KKwordm9p
ZCBUaHJlYWQ6OnJlc3VtZSgpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworI2lmIE9TKERBUldJTikKKyAgICB0aHJlYWRfcmVzdW1lKG1fcGxhdGZvcm1UaHJlYWQpOwor
I2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1l
IHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KKyAgICAgICAg
V29yZExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKG1f
c3VzcGVuZENvdW50ID09IDEpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gYWxsb3dpbmcgU2lnVGhy
ZWFkU3VzcGVuZFJlc3VtZSBpbnRlcnJ1cHQgaW4gdGhlIHNpZ25hbCBoYW5kbGVyIGJ5IHNpZ3N1
c3BlbmQgYW5kIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYWN0dWFsbHkgaXNzdWVkLAorICAg
ICAgICAgICAgLy8gdGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNhbGxlZCBvbmNl
IGFnYWluLgorICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkaXN0aW5n
dWlzaCB0aGUgaGFuZGxlciBpbnZvY2F0aW9uIGZvciBzdXNwZW5kIGFuZCByZXN1bWUuCisgICAg
ICAgICAgICAvLyAxLiBVc2UgZGlmZmVyZW50IHNpZ25hbCBudW1iZXJzLiBBbmQgY2hlY2sgdGhl
IHNpZ25hbCBudW1iZXIgaW4gdGhlIGhhbmRsZXIuCisgICAgICAgICAgICAvLyAyLiBVc2Ugc29t
ZSBhcmd1bWVudHMgdG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBhbmQgcmVzdW1lIGluIHRoZSBoYW5k
bGVyLiBJZiBwdGhyZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2VkLCB3ZSBjYW4gdGFrZSB0aGlzLgor
ICAgICAgICAgICAgLy8gMy4gVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpdGggYXRvbWljIHZh
cmlhYmxlcyBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICAvLyBJbiB0aGlzIGlt
cGxlbWVudGFpdG9uLCB3ZSB0YWtlICgzKS4gc3VzcGVuZGVkIGZsYWcgaXMgdXNlZCB0byBkaXN0
aW5ndWlzaCBpdC4KKyAgICAgICAgICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKyAgICAg
ICAgICAgIGlmIChwdGhyZWFkX2tpbGwobV9oYW5kbGUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUp
ID09IEVTUkNIKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNlbV93YWl0
KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgLy8gUmVsZWFzZSBi
YXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0
ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCisgICAgICAgICAgICBtX3N1c3Bl
bmRlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIH0K
KyAgICAgICAgLS1tX3N1c3BlbmRDb3VudDsKKyAgICB9CisjZW5kaWYKK30KKworc2l6ZV90IFRo
cmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7CisgICAg
V29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyNpZiBDUFUo
WDg2KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHNpemVvZihyZWdpc3RlcnMpIC8gc2l6ZW9m
KGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NU
QVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhS
RUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4
Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShQUEMpCisgICAgdW5zaWduZWQgdXNlckNvdW50
ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxh
dm9yID0gUFBDX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShQUEM2NCkKKyAgICB1bnNpZ25lZCB1
c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2Zs
YXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAg
dW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02
NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Cisg
ICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAga2Vybl9yZXR1
cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKG1fcGxhdGZvcm1UaHJlYWQsIGZsYXZvciwg
KHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsICZ1c2VyQ291bnQpOworICAgIGlmIChyZXN1bHQg
IT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18s
IF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxl
Y3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAo
JWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0
YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOworICAgICAgICBDUkFTSCgpOwor
ICAgIH0KKyAgICByZXR1cm4gdXNlckNvdW50ICogc2l6ZW9mKHVpbnRwdHJfdCk7CisjZWxpZiAo
T1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiAoQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkgfHwgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykpCisgICAgcmVnaXN0
ZXJzID0gbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKKyAgICByZXR1cm4gc2l6ZW9mKFBsYXRm
b3JtUmVnaXN0ZXJzKTsKKyNlbHNlCisgICAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRlOworICAg
IHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGUpOworI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8
fCBPUyhORVRCU0QpCisjaWYgIU9TKE9QRU5CU0QpCisgICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUu
NCwgbmV1bmRvcmZAa2RlLm9yZworICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAobV9oYW5kbGUsICZh
dHRyaWJ1dGUpOworI2VuZGlmCisjZWxzZQorICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlz
IG5vbi1wb3J0YWJsZTsgb3RoZXIgUE9TSVggc3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAg
YWx0ZXJuYXRpdmVzCisgICAgcHRocmVhZF9nZXRhdHRyX25wKG1faGFuZGxlLCAmYXR0cmlidXRl
KTsKKyNlbmRpZgorCisgICAgdm9pZCogc3RhY2tCYXNlID0gMDsKKyAgICBzaXplX3Qgc3RhY2tT
aXplID0gMDsKKyAgICBpbnQgcmMgPSBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soJmF0dHJpYnV0ZSwg
JnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7CisgICAgQVNTRVJUX1VOVVNFRChyYywgIXJjKTsKKyAg
ICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICByZWdpc3RlcnMuc3RhY2tQb2ludGVyID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7CisKKyAgICBwdGhyZWFkX2F0dHJf
ZGVzdHJveSgmYXR0cmlidXRlKTsKKworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKIH0gLy8g
bmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dp
bi5jcHAKaW5kZXggNTRiNDNlZmVmMzVjZDY2MzJhNzAwODE1MDdhNWIzNzk5ZGVmYjZmYi4uYTNi
MjYzMGIyMzM5ZDliZmM0Njg5ZjgxZGVmZTNlYWExYmJmYWUwYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdX
aW4uY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgdGFnVEhSRUFETkFNRV9J
TkZPIHsKIH0gVEhSRUFETkFNRV9JTkZPOwogI3ByYWdtYSBwYWNrKHBvcCkKIAotdm9pZCBpbml0
aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKK3Zv
aWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6
VGhyZWFkTmFtZSkKIHsKICNpZiBDT01QSUxFUihNSU5HVykKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRocmVhZCBuYW1lIHNldHRpbmcgd2l0aCBNaW5nVy4KQEAgLTEyOSw3ICsxMjksNyBAQCB2
b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWRO
YW1lKQogI2Vsc2UKICAgICBUSFJFQUROQU1FX0lORk8gaW5mbzsKICAgICBpbmZvLmR3VHlwZSA9
IDB4MTAwMDsKLSAgICBpbmZvLnN6TmFtZSA9IG5vcm1hbGl6ZVRocmVhZE5hbWUoc3pUaHJlYWRO
YW1lKTsKKyAgICBpbmZvLnN6TmFtZSA9IFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShzelRo
cmVhZE5hbWUpOwogICAgIGluZm8uZHdUaHJlYWRJRCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwog
ICAgIGluZm8uZHdGbGFncyA9IDA7CiAKQEAgLTE0MCw3MCArMTQwLDM5IEBAIHZvaWQgaW5pdGlh
bGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiAjZW5k
aWYKIH0KIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KIHZvaWQg
aW5pdGlhbGl6ZVRocmVhZGluZygpCiB7Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZDsK
LSAgICAKLSAgICBpZiAoaXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXNJ
bml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFs
aXplKCk7Ci0gICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRz
IHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCi0gICAgLy8gc28gZW5zdXJl
IGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KLSAgICBTdHJpbmdJbXBsOjplbXB0
eSgpOwotICAgIHRocmVhZE1hcE11dGV4KCk7Ci0gICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdl
bmVyYXRvcigpOwotICAgIHd0ZlRocmVhZERhdGEoKTsKLSAgICBpbml0aWFsaXplRGF0ZXMoKTsK
LX0KLQotc3RhdGljIEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4mIHRocmVhZE1hcCgpCi17Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4+IG1hcDsKLSAgICBy
ZXR1cm4gbWFwOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplS2V5OworICAg
IHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsKKyAgICAgICAgV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOworICAgICAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxp
emVPbmNlKCk7CisgICAgICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3Ry
dWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAorICAgICAgICAv
LyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgorICAgICAgICBT
dHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJh
dG9yKCk7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGVz
KCk7CisgICAgfSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlm
aWVyKERXT1JEIHRocmVhZElELCBIQU5ETEUgdGhyZWFkSGFuZGxlKQorc3RhdGljIHVuc2lnbmVk
IF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQoIXRocmVhZE1hcCgp
LmNvbnRhaW5zKHRocmVhZElEKSk7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKHRocmVhZElELCB0aHJl
YWRIYW5kbGUpOwotfQorICAgIC8vIEJhbGFuY2VkIGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpj
cmVhdGVJbnRlcm5hbC4KKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24qPihwYXJhbSkpOwogCi1zdGF0aWMgSEFORExFIHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIo
VGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFw
TXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19CisgICAgVGhyZWFk
SG9sZGVyOjppbml0aWFsaXplKCppbnZvY2F0aW9uLT50aHJlYWQpOworICAgIGludm9jYXRpb24t
PnRocmVhZCA9IG51bGxwdHI7CiAKLXN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRl
bnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsK
LSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgX19zdGRj
YWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCi17Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2NhdGlvbihzdGF0aWNfY2FzdDxUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwogICAgIGludm9jYXRpb24tPmZ1bmN0aW9u
KGludm9jYXRpb24tPmRhdGEpOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKLVRocmVhZElkZW50aWZp
ZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCog
ZGF0YSwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3Jl
YXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3Qg
Y2hhciogdGhyZWFkTmFtZSkKIHsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigq
bmV3IFRocmVhZCgpKTsKICAgICB1bnNpZ25lZCB0aHJlYWRJZGVudGlmaWVyID0gMDsKICAgICBU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gMDsKLSAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwgZGF0YSk7
CisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24+KGVudHJ5UG9pbnQsIHRocmVhZC5wdHIoKSwgZGF0YSk7CiAgICAgSEFORExFIHRo
cmVhZEhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihfYmVnaW50aHJlYWRleCgwLCAw
LCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpLCAwLCAmdGhyZWFkSWRlbnRp
ZmllcikpOwogICAgIGlmICghdGhyZWFkSGFuZGxlKSB7CiAjaWYgIUhBVkUoRVJSTk9fSCkKQEAg
LTIxOSw1MSArMTg4LDMwIEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwo
VGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgVU5VU0VEX1BB
UkFNKGxlYWtlZEludm9jYXRpb24pOwogCiAgICAgdGhyZWFkSUQgPSBzdGF0aWNfY2FzdDxUaHJl
YWRJZGVudGlmaWVyPih0aHJlYWRJZGVudGlmaWVyKTsKLSAgICBzdG9yZVRocmVhZEhhbmRsZUJ5
SWRlbnRpZmllcih0aHJlYWRJZGVudGlmaWVyLCB0aHJlYWRIYW5kbGUpOwogCi0gICAgcmV0dXJu
IHRocmVhZElEOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSwgdGhyZWFkSWRl
bnRpZmllcik7CisgICAgcmV0dXJuIHRocmVhZDsKIH0KIAotdm9pZCBjaGFuZ2VUaHJlYWRQcmlv
cml0eShUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCBpbnQgZGVsdGEpCitUaHJlYWQmIFRocmVh
ZDo6Y3VycmVudCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBUaHJlYWRIb2xkZXIq
IGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAg
cmV0dXJuIGRhdGEtPnRocmVhZCgpOwogCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVh
ZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQot
ICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZG9lcyBub3QgY29ycmVzcG9u
ZCB0byBhbiBhY3RpdmUgdGhyZWFkIiwgdGhyZWFkSUQpOworICAgIC8vIE5vdCBhIFdURi1jcmVh
dGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgorICAg
IFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwogCi0gICAgU2V0
VGhyZWFkUHJpb3JpdHkodGhyZWFkSGFuZGxlLCBUSFJFQURfUFJJT1JJVFlfTk9STUFMICsgZGVs
dGEpOwotfQorICAgIEhBTkRMRSBoYW5kbGU7CisgICAgYm9vbCBpc1N1Y2Nlc3NmdWwgPSBEdXBs
aWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRD
dXJyZW50UHJvY2VzcygpLCAmaGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNT
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwogCi1pbnQgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQodGhy
ZWFkSUQpOwotICAgIAotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXRocmVhZEhhbmRsZSkKLSAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRpZCBub3QgY29ycmVzcG9uZCB0byBhbiBhY3Rp
dmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7Ci0gCi0gICAgRFdPUkQg
am9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkSGFuZGxlLCBJTkZJTklURSk7
Ci0gICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAgICAgIExPR19FUlJPUigi
VGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8g
cXVpdCIsIHRocmVhZElEKTsKLQotICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAg
Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLQotICAgIHJldHVybiBq
b2luUmVzdWx0OworICAgIHRocmVhZC0+ZXN0YWJsaXNoKGhhbmRsZSwgY3VycmVudElEKCkpOwor
ICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOworICAgIHJldHVybiB0
aHJlYWQuZ2V0KCk7CiB9CiAKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQpCi17Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIEhBTkRMRSB0aHJlYWRIYW5k
bGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAodGhyZWFk
SGFuZGxlKQotICAgICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhy
ZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIg
Y3VycmVudFRocmVhZCgpCitUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKIHsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVh
ZElkKCkpOwogfQpAQCAtNDkyLDYgKzQ0MCw5OSBAQCBEV09SRCBhYnNvbHV0ZVRpbWVUb1dhaXRU
aW1lb3V0SW50ZXJ2YWwoZG91YmxlIGFic29sdXRlVGltZSkKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RFdPUkQ+KChhYnNvbHV0ZVRpbWUgLSBjdXJyZW50VGltZSkgKiAxMDAwLjApOwogfQogCitU
aHJlYWQ6OlRocmVhZCgpCit7Cit9CisKK1RocmVhZDo6flRocmVhZCgpCit7Cit9CisKK3ZvaWQg
VGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAgICB7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tl
cihtX211dGV4KTsKKyAgICAgICAgbV9kaWRFeGl0ID0gdHJ1ZTsKKyAgICAgICAgLy8gSXQgaXMg
T0sgYmVjYXVzZSBGTFNBbGxvYydzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV2ZW4gYmVmb3Jl
IHRoZXJlIGFyZSBzb21lIG9wZW4gaGFuZGxlcy4KKyAgICAgICAgLy8gVGhpcyBlYXNpbHkgZW5z
dXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291cmNlcyBhcmUgYXV0b21hdGljYWxseSBjbG9z
ZWQuCisgICAgICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKG1faGFu
ZGxlKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fb25FeGl0Q2FsbGJhY2sp
CisgICAgICAgIGNhbGxiYWNrKCp0aGlzKTsKK30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChI
QU5ETEUgaGFuZGxlLCBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoreworICAgIFdvcmRMb2Nr
SG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBtX2lk
ID0gdGhyZWFkSUQ7Cit9CisKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0eShpbnQgZGVsdGEp
Cit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIFNldFRocmVhZFBy
aW9yaXR5KG1faGFuZGxlLCBUSFJFQURfUFJJT1JJVFlfTk9STUFMICsgZGVsdGEpOworfQorCitp
bnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAg
ICB7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFu
ZGxlID0gbV9oYW5kbGU7CisgICAgfQorCisgICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JT
aW5nbGVPYmplY3QoaGFuZGxlLCBJTkZJTklURSk7CisgICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJ
VF9GQUlMRUQpCisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91
bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIG1faWQpOworCisgICAgV29yZExv
Y2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIEFTU0VSVChqb2luYWJsZVN0YXRlKCkgPT0g
Sm9pbmFibGUpOworCisgICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIGRvIG5v
dGhpbmcuCisgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xl
YW4gYW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24g
aXQgc28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KKyAgICBpZiAoIWhhc0V4
aXRlZCgpKQorICAgICAgICBkaWRKb2luKCk7CisKKyAgICByZXR1cm4gam9pblJlc3VsdDsKK30K
Kwordm9pZCBUaHJlYWQ6OmRldGFjaCgpCit7CisgICAgLy8gV2UgZm9sbG93IHRoZSBwdGhyZWFk
IHNlbWFudGljczogZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNhbGxlZCwKKyAgICAvLyB3ZSBz
dGlsbCBjYW4gcGVyZm9ybSBvcGVyYXRpb24gb250byB0aGUgdGhyZWFkLiBUbyBkbyBzbywgd2Ug
ZG8KKyAgICAvLyBub3RoaW5nIGhlcmUgaW4gV2luZG93cy4gQ2xvc2VIYW5kbGUgd2lsbCBiZSBj
YWxsZWQgYXV0b21hdGljYWxseQorICAgIC8vIGJ5IHRoZSBGTFMgZGVzdHJ1Y3RvciBvbiB0aHJl
YWQgdGVybWluYXRpb24uCisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAg
IGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFjaGVkKCk7Cit9CisKK2F1
dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJy
b3I+Cit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIERXT1JEIHJl
c3VsdCA9IFN1c3BlbmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlmIChyZXN1bHQgIT0gKERXT1JE
KS0xKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1
bHQpOworfQorCisvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90
IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2b2lkIFRocmVhZDo6cmVzdW1l
KCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgUmVzdW1lVGhy
ZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgIHJlZ2lzdGVycy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05U
RVhUX0NPTlRST0w7CisgICAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9ybVRocmVhZEhhbmRsZSwg
JnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKICNlbmRpZiAvLyBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKaW5kZXgg
YjJhMGE3OWY0YWI1YWFjMjg5YjE2OWY5MmJiYzFhODA1ODUyY2EzMi4uOTczMGZjZjBmMDkyMWZk
ZWQ5MGY4OWYxMjkwZTc3NDkwYjUzOTcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29y
a1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCkBAIC03NCw3ICs3
NCw3IEBAIHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMs
IGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAKICAgICAgICAgICAgIG1fd29ya2Vycy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV93
b3JrZXJzLmFwcGVuZChjcmVhdGVUaHJlYWQoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wgV29y
a2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBtX3dv
cmtlcnMuYXBwZW5kKFRocmVhZDo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQb29sIFdv
cmtlciAldSIsIGkpLnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CiAgICAgICAgICAgICAgICAgICAg
IHRocmVhZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICB9CkBAIC0x
MTQsNyArMTE0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRl
cmF0aW9ucywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKICAgICAgICAgQ29uZGl0aW9u
IG1fY29uZGl0aW9uOwogICAgICAgICBEZXF1ZTxjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
Kj4gbV9xdWV1ZTsKIAotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV93b3JrZXJz
OworICAgICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IG1fd29ya2VyczsKICAgICB9OwogCiAg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxUaHJlYWRQb29sPiB0aHJlYWRQb29sOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3Jr
UXVldWUuaAppbmRleCBhNDdmMjFlMjBkMzFiYzhiZjczMThmNDFiOTU3YWIzNjZjMTkxNTAzLi43
NjM0NWMwNjkzMTY0ZjY4Y2E0YjFjNjY0NDg0YTI3M2NjNmU4YmUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApA
QCAtMTAzLDcgKzEwMyw3IEBAIGNsYXNzIFdvcmtRdWV1ZSBmaW5hbCA6IHB1YmxpYyBGdW5jdGlv
bkRpc3BhdGNoZXIgewogCiAgICAgSEFORExFIG1fdGltZXJRdWV1ZTsKICNlbGlmIFVTRShHTElC
X0VWRU5UX0xPT1ApIHx8IFVTRShHRU5FUklDX0VWRU5UX0xPT1ApCi0gICAgVGhyZWFkSWRlbnRp
ZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3dvcmtRdWV1ZVRo
cmVhZDsKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAgICBD
b25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICBSdW5Mb29wKiBtX3J1
bkxvb3A7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXggMWE3MjE5
YWQyNTllZDc1OTcyYTVhNDU4YzVjNDg0OTdhMzg4ZTRkMy4uNTllZTFmODViNDM1Y2UxYTcyZjUw
NTBmNGRmNjJlZmNmYmJjODJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvV29y
a1F1ZXVlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29h
LmNwcApAQCAtNDksMTUgKzQ5LDE1IEBAIHN0YXRpYyBkaXNwYXRjaF9xb3NfY2xhc3NfdCBkaXNw
YXRjaFFPU0NsYXNzKFdvcmtRdWV1ZTo6UU9TIHFvcykKIHsKICAgICBzd2l0Y2ggKHFvcykgewog
ICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZToKLSAgICAgICAgcmV0dXJu
IGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOworICAgICAgICBy
ZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZF
KTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW5pdGlhdGVkOgotICAgICAgICByZXR1
cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOworICAgICAgICBy
ZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7
CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6RGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGFkanVz
dGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOworICAgICAgICByZXR1cm4gVGhyZWFkOjph
ZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19ERUZBVUxUKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6
UU9TOjpVdGlsaXR5OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1Nf
VVRJTElUWSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NM
QVNTX1VUSUxJVFkpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OkJhY2tncm91bmQ6Ci0gICAg
ICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsKKyAgICAg
ICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dST1VORCk7
CiAgICAgfQogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29y
a1F1ZXVlR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVy
aWMuY3BwCmluZGV4IDkzNGEzOGNiYmU2NGJiZmZhZWI0ZDM3ZGYxYjhkOTk1MmI4ODUzNDQuLmRh
ODc1ZDFmYTA0Y2VmNTI0YjBkYzE4NmIzOWE0NjJkNjgwNDQ2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtMzUsNyArMzUsNyBAQAogdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1Mp
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11
dGV4KTsKLSAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZChuYW1lLCBbdGhpc10g
eworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUobmFtZSwgW3RoaXNdIHsK
ICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVu
TG9vcENvbmRpdGlvbk11dGV4KTsKICAgICAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpj
dXJyZW50KCk7CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFs
aWRhdGUoKQogICAgIGlmIChtX3J1bkxvb3ApCiAgICAgICAgIG1fcnVuTG9vcC0+c3RvcCgpOwog
ICAgIGlmIChtX3dvcmtRdWV1ZVRocmVhZCkgewotICAgICAgICBkZXRhY2hUaHJlYWQobV93b3Jr
UXVldWVUaHJlYWQpOwotICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IDA7CisgICAgICAgIG1f
d29ya1F1ZXVlVGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV93b3JrUXVldWVUaHJlYWQgPSBu
dWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbGludXgvTWVt
b3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwIGIvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5
UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCmluZGV4IGIyOTQxOTQ0NGU3NDI3MzZhNjdkYzBjMWFh
ODUxZGVjM2FlNTg3ZTQuLmZmZDQwMDg1NWI4MjkzYThiNWEzYzNhZWIyM2FiNzdhYWY1YTdlZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxp
bnV4LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJM
aW51eC5jcHAKQEAgLTExOSw3ICsxMTksMTAgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVu
dEZEUG9sbGVyOjpFdmVudEZEUG9sbGVyKGludCBmZCwgc3RkOjpmdW5jdGlvbjx2b2lkICgKICAg
ICB9LCB0aGlzLCBudWxscHRyKTsKICAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCks
IG51bGxwdHIpOwogI2Vsc2UKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKCJXVEY6IE1l
bW9yeVByZXNzdXJlSGFuZGxlciIsIFt0aGlzXSB7IHJlYWRBbmROb3RpZnkoKTsgfQorICAgIG1f
dGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIldURjogTWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwKKyAg
ICAgICAgW3RoaXNdIHsKKyAgICAgICAgICAgIHJlYWRBbmROb3RpZnkoKTsKKyAgICAgICAgfSk7
CiAjZW5kaWYKIH0KIApAQCAtMTI5LDcgKzEzMiw3IEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6
RXZlbnRGRFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIoKQogI2lmIFVTRShHTElCKQogICAgIGdfc291
cmNlX2Rlc3Ryb3kobV9zb3VyY2UuZ2V0KCkpOwogI2Vsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90
aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAK
aW5kZXggODc0NzY0MzhjYWU2NWE2Mzg3ZDkwMWE3NTI4ODE1ZWM5NTQ3ZjIzMi4uOWNkM2RiNGQx
YmMxNGEzNjE3MzIxYWIwMDVhMDE5NjIwNTI3ODI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTU2LDcgKzU2
LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2ZXIoSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhh
bmRsZXImIGZpbGVIYW5kbGVyKQogICAgIDogbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFu
ZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VU
aHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2Vy
dmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIp
OworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRhYmFzZVRocmVh
ZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiBJREJTZXJ2ZXI6
OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2lu
Z1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQpAQCAtNjYsNyArNjYsNyBA
QCBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYQogICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXIg
Y3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkp
OwogCiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2Nr
KTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJl
YWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKKyAgICBtX3RocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIklu
ZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnJlZ2lzdGVyQ29u
bmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggMjU2
Y2Q1MDdlNmU2ZDdmNjU2ZWVjZTBjMTE5ODk0OGZkOTIzZGExZC4uOTM0YTFkMTc0NTI5MDg0Mjhh
M2FlNmUwZWQ3ZTUxMGE5YTljYTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTI1LDcgKzEyNSw3IEBAIGNsYXNz
IElEQlNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNlcnZlcj4gewogICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7
CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIFJlZlB0cjxVbmlxdWVJREJEYXRh
YmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1f
dGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07
CiAgICAgTG9jayBtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrOwogICAgIExvY2sgbV9tYWlu
VGhyZWFkUmVwbHlMb2NrOwogICAgIGJvb2wgbV9tYWluVGhyZWFkUmVwbHlTY2hlZHVsZWQgeyBm
YWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3lu
Y0F1ZGlvRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5j
QXVkaW9EZWNvZGVyLmNwcAppbmRleCAyOTJmMDViOGNkNTA2ZTIyOWFlNmI4YmQ4NjI5YzA5NTRk
MTg0NTliLi43Y2Y3YWY4ZmVhMmUxZTY3ZDUyMzdjODcxYTAxNWIzYzQ5MDBhMjdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmNwcApAQCAtMzksNyArMzksNyBAQCBBc3luY0F1ZGlvRGVjb2Rlcjo6QXN5bmNBdWRpb0RlY29k
ZXIoKQogewogICAgIC8vIFN0YXJ0IHdvcmtlciB0aHJlYWQuCiAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChB
c3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnksIHRoaXMsICJBdWRpbyBEZWNvZGVyIik7Cisg
ICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50
cnksIHRoaXMsICJBdWRpbyBEZWNvZGVyIik7CiB9CiAKIEFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5
bmNBdWRpb0RlY29kZXIoKQpAQCAtNDcsOCArNDcsOCBAQCBBc3luY0F1ZGlvRGVjb2Rlcjo6fkFz
eW5jQXVkaW9EZWNvZGVyKCkKICAgICBtX3F1ZXVlLmtpbGwoKTsKICAgICAKICAgICAvLyBTdG9w
IHRocmVhZC4KLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKLSAgICBt
X3RocmVhZElEID0gMDsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBt
X3RocmVhZCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFz
eW5jKFJlZjxBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFJlZlB0
cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywgUmVmUHRyPEF1ZGlvQnVm
ZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBBc3lu
Y0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAK
ICAgICB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIHVudGlsIHdlIGhhdmUgbV90aHJlYWRJRCBlc3Rh
Ymxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIHJ1biBsb29wLgorICAgICAgICAvLyBXYWl0IGZv
ciB1bnRpbCB3ZSBoYXZlIG1fdGhyZWFkIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUg
cnVuIGxvb3AuCiAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
c3luY0F1ZGlvRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3lu
Y0F1ZGlvRGVjb2Rlci5oCmluZGV4IGJiNWM1ZTMzN2I1ZWNmMWY4ZTYxNzUzYTI5ZjhkMGY5NzE0
MTU1M2QuLmYxMjUxMGQxOTdjM2RmOTZjYzA1Njg1NDZjYmMzZmI0NmVhYWE4YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgK
QEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgQXN5bmNBdWRpb0RlY29kZXIgewogICAgIHN0YXRpYyB2
b2lkIHRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZvaWQgcnVuTG9vcCgpOwog
Ci0gICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVh
ZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7CiAgICAgTWVzc2Fn
ZVF1ZXVlPERlY29kaW5nVGFzaz4gbV9xdWV1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5jcHAKaW5kZXggNTA1MjMwNDE5N2NkZWRkZTQ3ZmRjYmI5MTJlYzQ3NDA1NTc5NzQyOC4uZTdk
NTY3ZGZlYWQ0NDJjMzk2YWYwZjcwNTEwOTczZmZlMTQ4YWIwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBjb25zdCBzaXplX3QgcmVuZGVyUXVhbnR1
bVNpemUgPSAxMjg7CiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiByZW5kZXJU
YXJnZXQpCiAgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCByZW5kZXJUYXJnZXQt
PnNhbXBsZVJhdGUoKSkKICAgICAsIG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKLSAgICAs
IG1fcmVuZGVyVGhyZWFkKDApCisgICAgLCBtX3JlbmRlclRocmVhZChudWxscHRyKQogICAgICwg
bV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQogewogICAgIG1fcmVuZGVyQnVzID0gQXVkaW9CdXM6
OmNyZWF0ZShyZW5kZXJUYXJnZXQtPm51bWJlck9mQ2hhbm5lbHMoKSwgcmVuZGVyUXVhbnR1bVNp
emUpOwpAQCAtNjYsOCArNjYsOCBAQCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
dW5pbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcmVuZGVyVGhyZWFk
KSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fcmVuZGVyVGhyZWFkKTsKLSAg
ICAgICAgbV9yZW5kZXJUaHJlYWQgPSAwOworICAgICAgICBtX3JlbmRlclRocmVhZC0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBudWxscHRyOwogICAgIH0K
IAogICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQg
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZygpCiAgICAgaWYgKCFt
X3N0YXJ0ZWRSZW5kZXJpbmcpIHsKICAgICAgICAgbV9zdGFydGVkUmVuZGVyaW5nID0gdHJ1ZTsK
ICAgICAgICAgcmVmKCk7IC8vIFNlZSBjb3JyZXNwb25kaW5nIGRlcmVmKCkgY2FsbCBpbiBub3Rp
ZnlDb21wbGV0ZURpc3BhdGNoKCkuCi0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gY3JlYXRlVGhy
ZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVudHJ5LCB0aGlz
LCAib2ZmbGluZSByZW5kZXJlciIpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IFRocmVhZDo6
Y3JlYXRlKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVudHJ5LCB0
aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmgKaW5kZXggNzU1NjA0NjQ3MjMyYzRiYzUxM2NjOWUzOWRkNDQ1ZjM4YjYyY2VmNC4uNTY5
MDEzOGIxNjU3MGIzZjlkMjM3ZjlkZDRhOGVhMjNkNzNmZmFhNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAgICAgUmVmUHRyPEF1ZGlvQnVz
PiBtX3JlbmRlckJ1czsKICAgICAKICAgICAvLyBSZW5kZXJpbmcgdGhyZWFkLgotICAgIHZvbGF0
aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4g
bV9yZW5kZXJUaHJlYWQ7CiAgICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CiAgICAgc3RhdGlj
IHZvaWQgb2ZmbGluZVJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZvaWQgb2Zm
bGluZVJlbmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlLmNwcAppbmRleCA4ODY5ZjZiZjIyMzIzMmU2M2NjM2ZiNTJlMTZhZTFkYjNlYjQxYmU2
Li44YzkyZDZlNTM5NmFkZjEyZmJkZDY4ZDdhYzk3ZjllZDE5YWRjMDE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtNzcwLDggKzc3
MCw3IEBAIFNlY3VyaXR5T3JpZ2luRGF0YSBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4oKQogewog
ICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKQogICAg
ICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9jb250
ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotICAgIGF1dG8mIHRocmVhZCA9IGRhdGFi
YXNlVGhyZWFkKCk7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWQuZ2V0VGhyZWFk
SUQoKSkKKyAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlVGhyZWFkKCkuZ2V0VGhy
ZWFkSUQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5
T3JpZ2luKG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggMGRkZTVmNzI2OGVlNjQy
YzAwNDMwNWNlZmUzNmIxYzllNDRiODdkMy4uZDcwODE0ZjliNTViMjQ4ZmQ2NGUxYWZmNDNlMzc2
NzRmMTY5MmQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKQEAgLTYwLDEyICs2MCwxMiBAQCBib29sIERhdGFiYXNl
VGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25N
dXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChEYXRhYmFzZVRo
cmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7Cisg
ICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJl
YWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7CiAKLSAgICByZXR1cm4gbV90aHJl
YWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJl
cXVlc3RUZXJtaW5hdGlvbihEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jKQpA
QCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkK
ICAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdCBvZiBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgb24g
dGhpcyBkYXRhYmFzZSB0aHJlYWQKICAgICBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3ItPnNodXRk
b3duKCk7CiAKLSAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkg
YW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBo
YXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUgcmVmIHRv
IERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhy
ZWFkLT5pZCgpLCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8vIENsb3NlIHRoZSBkYXRhYmFz
ZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBhbnkg
dHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFjayBhbmQgd2Ug
ZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCiAgICAgLy8gaW5jb25zaXN0ZW50IG9yIGxv
Y2tlZCBzdGF0ZS4KQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRh
YmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5EYXRhYmFzZS0+cGVyZm9ybUNsb3NlKCk7CiAKICAg
ICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25nZXIgb2Yg
YW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJRCk7
CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogCiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
KiBjbGVhbnVwU3luYyA9IG1fY2xlYW51cFN5bmM7CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lk
IERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UmIGRhdGFiYXNlKQog
ewogICAgIExvY2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAotICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX3RocmVhZC0+aWQoKSk7CiAgICAgQVNTRVJUKCFtX29wZW5EYXRhYmFzZVNl
dC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5hZGQoJmRhdGFi
YXNlKTsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmRE
YXRhYmFzZUNsb3NlZChEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9
PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkLT5p
ZCgpKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBtX29wZW5EYXRhYmFzZVNldC5j
b250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5yZW1vdmUoJmRhdGFi
YXNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUaHJlYWQuaAppbmRleCBlYzA0MWUzMTgxNzI0OTJlY2E2YmNlZmU4ZjFkYTI1ZWM5MmVk
MjZjLi5hNTIxMmRmYjhiMTcyY2UyZmY2YTk4ODhkZTBhOWRiOTc3YWUyZDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCkBA
IC01OCw3ICs1OCw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAKICAgICB2b2lkIHJlY29yZERhdGFiYXNlT3Bl
bihEYXRhYmFzZSYpOwogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UmKTsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsg
fQorICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZCA/
IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogCiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciog
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
ci5nZXQoKTsgfQogCkBAIC02OSw3ICs2OSw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAgICAgdm9pZCBkYXRh
YmFzZVRocmVhZCgpOwogCiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhy
ZWFkIHsgbnVsbHB0ciB9OwogICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9zZWxmUmVmOwog
CiAgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZmOWZjYTY3ZjNjNDdhZGRjODNk
ZWM4Y2IwZDVlYjhjY2I0MGQ3NDMuLjEzOWFhOTkxYTE2ZWFkMjJmNjhmNTAxYmU3Yjk0NTk2MzIy
MTM1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcApA
QCAtMTAxLDE0ICsxMDEsMTQgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93
SWZOb3REb25lUmVjZW50bHkoKQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RP
bkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhib29sIHdhaXRVbnRpbERvbmUpCiB7Ci0gICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChjb2xsZWN0LCAwLCAiV2Vi
Q29yZTogR0NDb250cm9sbGVyIik7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoY29sbGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOwogCiAgICAgaWYg
KHdhaXRVbnRpbERvbmUpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
SUQpOworICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHRocmVhZC0+ZGV0
YWNoKCk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxl
Y3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmNwcAppbmRleCAxNjhlNGUyNzc5NWQ0MjVmNDA0ZjE3NWM5YmNiYTkzZjcz
NjgwNzRjLi41NWM3Y2IwMjM5ODU5OWM5NzFlNmEzN2EwZjlhNzI0ODQ4NDJlNmJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCkBAIC03NCw3ICs3NCw3IEBA
IHN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlv
bikKIAogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVhdGVGaWxlVGhyZWFkT25jZTsKICAg
ICBzdGQ6OmNhbGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25jZSwgW10gewotICAgICAgICBjcmVh
dGVUaHJlYWQoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKKyAgICAgICAgVGhyZWFk
OjpjcmVhdGUoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKICAgICAgICAgICAgIGZv
ciAoOzspIHsKICAgICAgICAgICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggNGNkY2ZhYWQ2ZTgz
MmEzOWE1YzM1MjY1ODA1ODUwODZiM2Q5ZjcyZi4uYTQ4YmZmNjA1MWYwZjE3NGRhMThkMmZmOWQz
N2FiM2JjNjY4NGZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2UuY3BwCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQo
KSBBU1NFUlQoIW1fc3luY1RocmVhZFJ1bm5pbmcgfHwgIUlTX0lDT05fU1lOQ19USFJFQUQoKSkK
IAogLy8gRm9yIG1ldGhvZHMgdGhhdCBhcmUgbWVhbnQgdG8gc3VwcG9ydCB0aGUgc3luYyB0aHJl
YWQgT05MWQotI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkgKG1fc3luY1RocmVhZCA9PSBj
dXJyZW50VGhyZWFkKCkpCisjZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhy
ZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKSkKICNkZWZpbmUgQVNTRVJUX0lDT05fU1lOQ19U
SFJFQUQoKSBBU1NFUlQoSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAjaWYgUExBVEZPUk0oR1RL
KQpAQCAtMTQxLDcgKzE0MSw3IEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIC8vIExvY2sgaGVyZSBh
cyB3ZWxsIGFzIGZpcnN0IHRoaW5nIGluIHRoZSB0aHJlYWQgc28gdGhlIHRocmVhZCBkb2Vzbid0
IGFjdHVhbGx5IGNvbW1lbmNlIHVudGlsIHRoZSBjcmVhdGVUaHJlYWQoKSBjYWxsIAogICAgIC8v
IGNvbXBsZXRlcyBhbmQgbV9zeW5jVGhyZWFkUnVubmluZyBpcyBwcm9wZXJseSBzZXQKICAgICBt
X3N5bmNMb2NrLmxvY2soKTsKLSAgICBtX3N5bmNUaHJlYWQgPSBjcmVhdGVUaHJlYWQoSWNvbkRh
dGFiYXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBJY29u
RGF0YWJhc2UiKTsKKyAgICBtX3N5bmNUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJY29uRGF0YWJh
c2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRh
YmFzZSIpOwogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQ7CiAgICAgbV9z
eW5jTG9jay51bmxvY2soKTsKICAgICBpZiAoIW1fc3luY1RocmVhZCkKQEAgLTE2MSw3ICsxNjEs
NyBAQCB2b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQogICAgICAgICB3YWtlU3luY1RocmVhZCgp
OwogICAgICAgICAKICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHN5bmMgdGhyZWFkIHRvIHRlcm1p
bmF0ZQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3N5bmNUaHJlYWQpOworICAg
ICAgICBtX3N5bmNUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgbV9z
eW5jVGhyZWFkUnVubmluZyA9IGZhbHNlOyAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmgKaW5kZXggMDYxYWY0YTEyNTU3NzFkZTExYTMyZjU2ODNjMGVmZGE1OTI5
M2I5ZC4uODY0MDk1NTQ3NTMzZmQ4OTBmMDNhZmU5MmJiMDZmNjA4N2VlNzM2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKQEAgLTExOSw3ICsxMTksNyBAQCBj
bGFzcyBJY29uRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgSWNvbkRhdGFiYXNlQmFzZSB7CiAgICAg
dm9pZCBzeW5jVGltZXJGaXJlZCgpOwogICAgIAogICAgIFRpbWVyIG1fc3luY1RpbWVyOwotICAg
IFRocmVhZElkZW50aWZpZXIgbV9zeW5jVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fc3lu
Y1RocmVhZDsKICAgICBib29sIG1fc3luY1RocmVhZFJ1bm5pbmc7CiAgICAgCiAgICAgSGFzaFNl
dDxSZWZQdHI8RG9jdW1lbnRMb2FkZXI+PiBtX2xvYWRlcnNQZW5kaW5nRGVjaXNpb247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAppbmRleCA5MTIwMGMzNDVm
NDU1Zjk2ZDQ5NGJmZDJhZDcwM2YyOGM1YzYyOWQxLi5kOWI2ZjcyZmEzNmZhNzAwYzgyNmYzYzk3
ZDZiYWEwMmQ0MmU4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRo
cmVhZC5jcHAKQEAgLTk2LDExICs5NiwxMSBAQCB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6Om5v
dGlmeU9ic2VydmVycyhSZXNvdXJjZVVzYWdlRGF0YSYmIGRhdGEpCiAKIHZvaWQgUmVzb3VyY2VV
c2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElk
ZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Zt
ID0gJmNvbW1vblZNKCk7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRo
cmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogUmVzb3VyY2VVc2FnZSIpOworICAgIG1fdGhy
ZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNv
dXJjZVVzYWdlIik7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6dGhyZWFkQ2FsbGJh
Y2sodm9pZCogcmVzb3VyY2VVc2FnZVRocmVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJj
ZVVzYWdlVGhyZWFkLmgKaW5kZXggMThhMWU2NzU0M2QyMjA5YzE3OTU3NDczNjYyMmE3OGIzODRi
YjhmYy4uZWZkZTI3ZWZlNmIwYWM0NTQ2NGRlODkxYzY3Y2U3OWY5Y2YyZTE5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKQEAgLTYyLDcgKzYyLDcgQEAgY2xh
c3MgUmVzb3VyY2VVc2FnZVRocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRCb2R5KCk7CiAgICAgdm9p
ZCBwbGF0Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSosIFJlc291cmNlVXNhZ2VEYXRhJik7CiAKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllciB7IDAgfTsKKyAgICBSZWZQdHI8
VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fbG9jazsKICAgICBDb25k
aXRpb24gbV9jb25kaXRpb247CiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpmdW5jdGlvbjx2b2lk
IChjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpPj4gbV9vYnNlcnZlcnM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAppbmRleCA3MzBjMGE2
YmQ5M2Y0NTc4ZDFlZGJmOWFjZTFjZDg2NTY2ZTZjOTg4Li5kMjA3ODQwNTYwZGRmOTA1OTBhMGRh
ZGQyNzMwODRjOTFjOWZiMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTM1LDE0ICszNSwxNCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCgpCi0gICAgOiBtX3Ro
cmVhZElkZW50aWZpZXIoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiB9CiAKIGJvb2wg
U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQogewotICAgIGF1dG8gdGhyZWFkSWRl
bnRpZmllciA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlmaWVy
OwotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJl
YWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFNjcm9sbGluZ1RocmVh
ZDo6c2luZ2xldG9uKCkubV90aHJlYWQ7CisgICAgcmV0dXJuIHRocmVhZCAmJiB0aHJlYWQtPmlk
KCkgPT0gY3VycmVudFRocmVhZCgpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKQEAgLTc0LDE0ICs3NCwxNCBAQCBTY3Jv
bGxpbmdUaHJlYWQmIFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkKIAogdm9pZCBTY3JvbGxp
bmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV90aHJlYWRJZGVu
dGlmaWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Fp
dCBmb3IgdGhlIHRocmVhZCB0byBpbml0aWFsaXplIHRoZSBydW4gbG9vcC4KICAgICB7CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXgp
OwogCi0gICAgICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxs
YmFjaywgdGhpcywgIldlYkNvcmU6IFNjcm9sbGluZyIpOworICAgICAgICBtX3RocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5nIik7
CiAgICAgICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBtX2luaXRpYWxpemVSdW5M
b29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc117IHJldHVybiBtX3RocmVhZFJ1
bkxvb3A7IH0pOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRl
VGhyZWFkSWZOZWVkZWQoKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2so
dm9pZCogc2Nyb2xsaW5nVGhyZWFkKQogewotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNl
ckludGVyYWN0aXZlKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJ
bnRlcmFjdGl2ZSgpOwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGluZ1RocmVhZCo+KHNjcm9sbGlu
Z1RocmVhZCktPnRocmVhZEJvZHkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaAppbmRleCBkZTA2MmQ3N2FjMDFkZjlkMmEwOTg2MGVi
ZTZiOGU5ZmQzY2ZmNWMwLi5kODg5MmYwNWJlNjQzN2Q0YWFjYzBhNzUxYTdjYTdlOTNiZWUwZGZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQu
aApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBTY3JvbGxpbmdUaHJlYWQgewogICAgIHZvaWQgdGhy
ZWFkUnVuTG9vcFNvdXJjZUNhbGxiYWNrKCk7CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZp
ZXIgbV90aHJlYWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogCiAg
ICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKICAgICBM
b2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCmluZGV4IGY3MTMzM2M1YTM3YTk5
ODk2NGYzYTc0MWM3MzE1MmU5NTE0NjZjZjYuLmRkYmUzYmE5ODBlNDUwYTQ5NGNkMDY0OGY0MWI1
ZTM2YWZlZWI1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZEYXRhYmFzZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
SFJURkRhdGFiYXNlTG9hZGVyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBQYXNzUmVmUHRyPEhSVEZE
YXRhYmFzZUxvYWRlcj4gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9u
b3VzbHlJZgogfQogCiBIUlRGRGF0YWJhc2VMb2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcihmbG9h
dCBzYW1wbGVSYXRlKQotICAgIDogbV9kYXRhYmFzZUxvYWRlclRocmVhZCgwKQorICAgIDogbV9k
YXRhYmFzZUxvYWRlclRocmVhZChudWxscHRyKQogICAgICwgbV9kYXRhYmFzZVNhbXBsZVJhdGUo
c2FtcGxlUmF0ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTA2LDcgKzEw
Niw3IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoKQogICAg
IAogICAgIGlmICghbV9ocnRmRGF0YWJhc2UuZ2V0KCkgJiYgIW1fZGF0YWJhc2VMb2FkZXJUaHJl
YWQpIHsKICAgICAgICAgLy8gU3RhcnQgdGhlIGFzeW5jaHJvbm91cyBkYXRhYmFzZSBsb2FkaW5n
IHByb2Nlc3MuCi0gICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQo
ZGF0YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJhc2UgbG9hZGVyIik7CisgICAg
ICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkYXRhYmFzZUxvYWRl
ckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKICAgICB9CiB9CiAKQEAgLTEy
MSw4ICsxMjEsOCBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6d2FpdEZvckxvYWRlclRocmVh
ZENvbXBsZXRpb24oKQogICAgIAogICAgIC8vIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKCkgc2hv
dWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIHRocmVhZC4KICAgICBpZiAobV9k
YXRhYmFzZUxvYWRlclRocmVhZCkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9k
YXRhYmFzZUxvYWRlclRocmVhZCk7Ci0gICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IDA7Cisg
ICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAg
bV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRh
YmFzZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmgKaW5kZXggYzg2OWQxMzdhMWRiMmY1MjQ5OGQwZTFiNjVkNTg3ZTZjODE5YjM4MS4u
M2FkMjUxZjIxOTkwOWY0YmM2NDU0ZDAxMzIwMWI2YTdjYTcwMjY4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKQEAgLTc3LDcg
Kzc3LDcgQEAgY2xhc3MgSFJURkRhdGFiYXNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8SFJU
RkRhdGFiYXNlTG9hZGVyPiB7CiAKICAgICAvLyBIb2xkaW5nIGEgbV90aHJlYWRMb2NrIGlzIHJl
cXVpcmVkIHdoZW4gYWNjZXNzaW5nIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQuCiAgICAgTG9jayBt
X3RocmVhZExvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2RhdGFiYXNlTG9hZGVyVGhyZWFk
OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CiAKICAgICBmbG9h
dCBtX2RhdGFiYXNlU2FtcGxlUmF0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA5NmYzMzA4MjgwNzlhNzlhZDY0ODIw
ZDA3MjFjNTljNWVhMTZmZGIxLi4yMWJlOTk2ZWYzN2U1M2RiNzAzMTAwMTk2MjdjMGM0MGQyYjIx
MGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252
b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZv
bHZlci5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVyYkNvbnZv
bHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNsaQogICAg
IC8vIFN0YXJ0IHVwIGJhY2tncm91bmQgdGhyZWFkCiAgICAgLy8gRklYTUU6IHdvdWxkIGJlIGJl
dHRlciB0byB1cCB0aGUgdGhyZWFkIHByaW9yaXR5IGhlcmUuICBJdCBkb2Vzbid0IG5lZWQgdG8g
YmUgcmVhbC10aW1lLCBidXQgaGlnaGVyIHRoYW4gdGhlIGRlZmF1bHQuLi4KICAgICBpZiAodGhp
cy0+dXNlQmFja2dyb3VuZFRocmVhZHMoKSAmJiBtX2JhY2tncm91bmRTdGFnZXMuc2l6ZSgpID4g
MCkKLSAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gY3JlYXRlVGhyZWFkKFdlYkNvcmU6OmJh
Y2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91bmQgdGhyZWFk
Iik7CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdlYkNvcmU6
OmJhY2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91bmQgdGhy
ZWFkIik7CiB9CiAKIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZlcigpCkBAIC0xNDYs
NyArMTQ2LDcgQEAgUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKICAgICAgICAg
ICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9iYWNrZ3JvdW5kVGhy
ZWFkKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252
b2x2ZXIuaAppbmRleCA2YmFlYjdjY2UyOTg5NmM5ODk2MzUxMmY0MWI0M2EyZjEyODg1NDFjLi4w
NTk2MzM2N2FlMjgzNDk0ODc5MGJhN2NjYjcyMDYwZWM1OTgxMDcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaApAQCAtODYsNyArODYsNyBA
QCBjbGFzcyBSZXZlcmJDb252b2x2ZXIgewogCiAgICAgLy8gQmFja2dyb3VuZCB0aHJlYWQgYW5k
IHN5bmNocm9uaXphdGlvbgogICAgIGJvb2wgbV91c2VCYWNrZ3JvdW5kVGhyZWFkczsKLSAgICBU
aHJlYWRJZGVudGlmaWVyIG1fYmFja2dyb3VuZFRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBt
X2JhY2tncm91bmRUaHJlYWQ7CiAgICAgYm9vbCBtX3dhbnRzVG9FeGl0OwogICAgIGJvb2wgbV9t
b3JlSW5wdXRCdWZmZXJlZDsKICAgICBtdXRhYmxlIExvY2sgbV9iYWNrZ3JvdW5kVGhyZWFkTXV0
ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCmluZGV4IDZjZDhiZDdm
ODFiZmYyMjI3ZmUxNGZiY2EwZmJmZDA1NWQwOWM1NzEuLjFmMjVlOGU1NGU5ZWU4NWZhMGNjYTZh
MzFiOTJlMTExZTZkZjBjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwCkBAIC0zNzAsMjAgKzM3MCwyMCBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBBdWRpb0ZpbGVS
ZWFkZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubwogUGFzc1Jl
ZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0
aCwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlv
QnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJBdWRp
b0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBzYW1wbGVS
YXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVy
IiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAg
ICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRlQnVzKHNh
bXBsZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24odGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21J
bk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wg
bWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIFJlZlB0cjxBdWRpb0J1cz4gcmV0
dXJuVmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgiQXVkaW9GaWxlUmVh
ZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0
ZV0geworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIkF1ZGlvRmlsZVJlYWRlciIs
IFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIoZGF0YSwgZGF0YVNpemUpLmNy
ZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0pOwotICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJT
b3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDFjNWMzMGYzNzdhNDJiZTAwMTc3MTY1MWU4N2Y3MDQz
YTVkNjVjOTAuLjI2NDY2ZjUzYjQ4MjE4ZDMzN2E1YTg5NGYxZGI3MjhkZjRjNDdjODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRX
ZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0xMDgsNyArMTA4
LDcgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQsIHB1YmxpYyBTdHJlYW0KICAgICAgICAgdm9pZCB3YXNCbG9ja2VkKFJl
c291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgY2Fubm90U2hvd1VSTChSZXNv
dXJjZUhhbmRsZSopIG92ZXJyaWRlOwogCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJl
YWQgeyAwIH07CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9Owog
ICAgICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAgICAgICAg
Q29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgICAgIFJ1bkxvb3Aq
IG1fcnVuTG9vcCB7IG51bGxwdHIgfTsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIFJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRX
ZWJTcmMqIHNyYywKICAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKLSAgICBtX3RocmVh
ZCA9IGNyZWF0ZVRocmVhZCgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBbdGhpcywg
cmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3Jl
YXRlKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RG
TW92ZShyZXF1ZXN0KV0gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5M
b29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTExMTMsOCArMTExMyw4IEBAIFJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJL
aXRXZWJTcmMqIHNyYywKIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp+UmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQoKQogewogICAgIGlmIChtX3RocmVhZCkgewotICAgICAgICBk
ZXRhY2hUaHJlYWQobV90aHJlYWQpOwotICAgICAgICBtX3RocmVhZCA9IDA7CisgICAgICAgIG1f
dGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAppbmRl
eCA0NmI4OTk0YTg0MWVmNzFlYTI3OWNlNzdjYmM4ZmI0M2MyOWYwYTYyLi5mZmJmZGE5Yjg5MzQ4
MzU0OTBjOWE0MGJhMWY0ODMzNmU0NzYwYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCkBAIC03Nyw3ICs3Nyw3
IEBAIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY0xvY2s+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KTsKIAogICAgIGlmICghbG9hZGVyUnVu
TG9vcE9iamVjdCkgewotICAgICAgICBjcmVhdGVUaHJlYWQocnVuTG9hZGVyVGhyZWFkLCAwLCAi
V2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRlciIpOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZShydW5M
b2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CiAKICAgICAgICAg
bG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW10geyByZXR1cm4gbG9h
ZGVyUnVuTG9vcE9iamVjdDsgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA0NDA4Y2QxOTg3MDVi
YTg2Y2M4YzE5ODZmYjNlMmNhZGU3OTZkY2M2Li5mMTA1NzE1ZWQ4ZDg3OTM3M2I2MzMxY2IyNmUw
ODJjM2UxYWI4YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtOTQsMTAgKzk0LDEwIEBAIGludCBDdXJsRG93
bmxvYWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpIGNvbnN0CiB2b2lkIEN1cmxE
b3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogewogICAgIGlmICghcnVuVGhy
ZWFkKCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkSWQpCi0gICAgICAgICAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbihtX3RocmVhZElkKTsKKyAgICAgICAgaWYgKG1fdGhyZWFkKQorICAgICAg
ICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHNldFJ1blRocmVh
ZCh0cnVlKTsKLSAgICAgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZChkb3dubG9hZFRocmVh
ZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOwogICAgIH0KIH0K
IApAQCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVh
ZCgpCiB7CiAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIAotICAgIGlmIChtX3RocmVhZElkKSB7
Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOwotICAgICAgICBt
X3RocmVhZElkID0gMDsKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPndh
aXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuaAppbmRleCAwMmNlNzMxYmQxMGE4MDE5YjdlYmUxZmFjNTJiNDVlNDA5MjU2MjMxLi5m
NmJiYzc3ZjRkM2NlMGI5Njg3ZDFkOGZjYTYwOTE1ODdjOWFlNDljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC02OSw3
ICs2OSw3IEBAIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewogCiAgICAgc3RhdGljIHZvaWQg
ZG93bmxvYWRUaHJlYWQodm9pZCogZGF0YSk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhy
ZWFkSWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgQ1VSTE0qIG1fY3VybE11
bHRpSGFuZGxlOwogICAgIFZlY3RvcjxDVVJMKj4gbV9wZW5kaW5nSGFuZGxlTGlzdDsKICAgICBW
ZWN0b3I8Q1VSTCo+IG1fYWN0aXZlSGFuZGxlTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5o
CmluZGV4IDVmOWUwOTU0MDQ3MTdkMzBiZDg5OTQxZTVmMjUyZjE3YjBhODY3YjkuLjY4ZTIxZjQ3
NDQ1MWFjMzg3NTJiOWJjODk0M2MzNWQyM2I2OTY5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGwuaApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsIDogcHVi
bGljIFNvY2tldFN0cmVhbUhhbmRsZSB7CiAgICAgICAgIHNpemVfdCBzaXplIHsgMCB9OwogICAg
IH07CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkIHsgMCB9OworICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fd29ya2VyVGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIHN0ZDo6YXRvbWlj
PGJvb2w+IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07CiAgICAgTG9jayBtX211dGV4U2VuZDsKICAg
ICBMb2NrIG1fbXV0ZXhSZWNlaXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5j
cHAKaW5kZXggMWUzNzlkMWIwMGQwOTU1ZmMyZGEwMGJlM2Y5NmY5OTJhOTFiOTQzZi4uZWNiOWY1
NGI2NWEzMzUyNGUzYTM1NmEzYmMxM2QwZTJmNmY2YWNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbEN1cmwuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpzdGFydFRocmVhZCgpCiAKICAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgpIHdp
bGwgY2FsbCBkZXJlZigpLgogCi0gICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoIldl
YlNvY2tldCB0aHJlYWQiLCBbdGhpc10geworICAgIG1fd29ya2VyVGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10gewogCiAgICAgICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsOjpzdG9wVGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdG9wVGhyZWFk
ID0gdHJ1ZTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3dvcmtlclRocmVhZCk7Ci0g
ICAgbV93b3JrZXJUaHJlYWQgPSAwOworICAgIG1fd29ya2VyVGhyZWFkLT53YWl0Rm9yQ29tcGxl
dGlvbigpOworICAgIG1fd29ya2VyVGhyZWFkID0gbnVsbHB0cjsKICAgICBkZXJlZigpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggN2FkNWI1NzkxM2Ex
NjcyZGY5MTk2ZTllYjAxMzNlMjNlMjMyOTg1ZC4uZGVlNmNlNmQ2NzNkNzZiNDFmMjc0NTQwNGZi
MDc5ZjIxOTY1M2I2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApA
QCAtOTksNyArOTksNyBAQCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3Rh
cnR1cERhdGEoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cgogfQogCiBXb3JrZXJUaHJl
YWQ6OldvcmtlclRocmVhZChjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2Rl
LCBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHksIFdvcmtlclJlcG9ydGluZ1By
b3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9k
ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiBjb250ZW50U2Vj
dXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29u
dGVudFNlY3VyaXR5UG9saWN5LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luLCBNb25v
dG9uaWNUaW1lIHRpbWVPcmlnaW4sIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5KiBjb25u
ZWN0aW9uUHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92aWRlciwgSlNDOjpSdW50aW1l
RmxhZ3MgcnVudGltZUZsYWdzKQotICAgIDogbV90aHJlYWRJRCgwKQorICAgIDogbV90aHJlYWQo
bnVsbHB0cikKICAgICAsIG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCiAg
ICAgLCBtX3dvcmtlclJlcG9ydGluZ1Byb3h5KHdvcmtlclJlcG9ydGluZ1Byb3h5KQogICAgICwg
bV9ydW50aW1lRmxhZ3MocnVudGltZUZsYWdzKQpAQCAtMTMzLDE1ICsxMzMsMTUgQEAgV29ya2Vy
VGhyZWFkOjp+V29ya2VyVGhyZWFkKCkKIAogYm9vbCBXb3JrZXJUaHJlYWQ6OnN0YXJ0KCkKIHsK
LSAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3Ro
cmVhZElEIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCisgICAgLy8gTXV0
ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWQgaXMgaW5p
dGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90
aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3Ro
cmVhZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhy
ZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3Jr
ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdvcmtlclRocmVhZDo6d29ya2Vy
VGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKIAotICAgIHJldHVybiBtX3Ro
cmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWQ6Ondv
cmtlclRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIFdv
cmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFk
X2RlZmF1bHQobWFpbkNvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElEID0gbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBwcm90ZWN0b3Ig
PSBtX3RocmVhZDsKIAogICAgIEFTU0VSVChtX3dvcmtlckdsb2JhbFNjb3BlLT5oYXNPbmVSZWYo
KSk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFk
KCkKICAgICB0aHJlYWRHbG9iYWxEYXRhKCkuZGVzdHJveSgpOwogCiAgICAgLy8gVGhlIHRocmVh
ZCBvYmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIGZyb20gbm90aWZpY2F0aW9uIG5vdywg
ZG9uJ3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCi0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsK
KyAgICBwcm90ZWN0b3ItPmRldGFjaCgpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6c3RhcnRS
dW5uaW5nRGVidWdnZXJUYXNrcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApp
bmRleCAwN2FkM2NlNzg0ZjkxOWY3MGM0NTY4MWI5NTRjMDA5OTk2ZjU1N2YyLi5mODA5ZWU2Njcy
N2VlMTM5ZGM0ZjE5ZDJjYjYxYjIyNjVlNGVhNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyVGhyZWFkLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgV29ya2VyVGhyZWFkIDogcHVibGlj
IFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgYm9vbCBzdGFydCgpOwogICAgIHZvaWQg
c3RvcCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyBy
ZXR1cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KICAgICBXb3JrZXJSdW5Mb29w
JiBydW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkm
IHdvcmtlckxvYWRlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJMb2FkZXJQcm94eTsg
fQogICAgIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgpIGNvbnN0
IHsgcmV0dXJuIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KQEAgLTk4LDcgKzk4LDcgQEAgY2xh
c3MgV29ya2VyVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAg
c3RhdGljIHZvaWQgd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwogICAgIHZvaWQgd29ya2VyVGhy
ZWFkKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV90aHJlYWQ7CiAgICAgV29ya2VyUnVuTG9vcCBtX3J1bkxvb3A7CiAgICAgV29ya2Vy
TG9hZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7CiAgICAgV29ya2VyUmVwb3J0aW5nUHJv
eHkmIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0
b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRo
cmVhZC5jcHAKaW5kZXggYmI2NmZjZWE3ZTUyOGJjMjdmNjMzYTNlNTI4NzhiNTAxZWYwZTE4Ny4u
MzU3Njc5NDZhZGUzNzJhNDc5NDVmODVkM2Y4OTU4YjUyNTRhYmU0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
U3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcApAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgSGFzaFNl
dDxTdG9yYWdlVGhyZWFkKj4mIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkKIH0KIAogU3RvcmFnZVRo
cmVhZDo6U3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCisgICAgOiBtX3RocmVh
ZChudWxscHRyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiB9CkBAIC00OCwxNiAr
NDgsMTYgQEAgU3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgpCiBTdG9yYWdlVGhyZWFkOjp+
U3RvcmFnZVRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NF
UlQoIW1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV90aHJlYWQpOwogfQogCiBib29sIFN0b3Jh
Z2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
ICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChTdG9yYWdl
VGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0
b3JhZ2UiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6
Y3JlYXRlKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhpcywgIldl
YkNvcmU6IExvY2FsU3RvcmFnZSIpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkuYWRkKHRo
aXMpOwotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAog
dm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2sodm9pZCogdGhyZWFk
KQpAQCAtNzgsMjUgKzc4LDI1IEBAIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2lu
dCgpCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVu
Y3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fcXVl
dWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgp
ICYmIG1fdGhyZWFkKTsKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0
aW9uPHZvaWQgKCk+PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJl
YWQ6OnRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NF
UlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVl
LmtpbGxlZCgpICYmIG1fdGhyZWFkKTsKICAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygpLnJlbW92
ZSh0aGlzKTsKICAgICAvLyBFdmVuIGluIHdlaXJkLCBleGNlcHRpb25hbCBjYXNlcywgZG9uJ3Qg
d2FpdCBvbiBhIG5vbmV4aXN0ZW50IHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgaWYgKCFtX3Ro
cmVhZElEKQorICAgIGlmICghbV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcXVl
dWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFt0aGlzXSB7CiAg
ICAgICAgIHBlcmZvcm1UZXJtaW5hdGUoKTsKICAgICB9KSk7Ci0gICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24obV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAg
IG1fdGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjpwZXJmb3JtVGVy
bWluYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFk
LmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCmluZGV4IDk1NjRiOGFh
MDZlNTI0M2UzMGU0NjdjNWZiZmUyY2RhZGIyNDBjNTYuLjhjZjFiM2Q0YWRjNWEzMDZhNzdlYzc3
YzljMzI2NjYxNjg3YmVjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9y
YWdlVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaApA
QCAtNTYsNyArNTYsNyBAQCBjbGFzcyBTdG9yYWdlVGhyZWFkIHsKICAgICAvLyBCYWNrZ3JvdW5k
IHRocmVhZCBwYXJ0IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJlLgogICAgIHZvaWQgcGVyZm9y
bVRlcm1pbmF0ZSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIE1lc3NhZ2VRdWV1ZTxGdW5jdGlvbjx2b2lkICgp
Pj4gbV9xdWV1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcAppbmRleCAzYjg1ZjIyZmZhZTAxZTI4YWFiOTk4MTY2OThhZGFkN2Ez
ODQzYzVmLi5iMDRhY2M4YzMxYzVlY2E4MmE1MTc0MTY2N2RiNzBlMDUzZjFkMmM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIHsKICAgICBwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKIAotICAgIFdURjo6c2V0Q3VycmVu
dFRocmVhZElzVXNlckluaXRpYXRlZCgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW5pdGlhdGVkKCk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5k
bGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcjsKICAg
ICBtX2xvYWRUaHJvdHRsZUxhdGVuY3kgPSBwYXJhbWV0ZXJzLmxvYWRUaHJvdHRsZUxhdGVuY3k7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IGVmN2JhODk5ODIwMjMyNTg5
ZTczOTFmMjdmY2QzZDZlMTY5ZjY4OTQuLmZhMDMwZmIzYTJhMGY4MmQ2YTI0NWJmODU2YjM2YWEy
NzMyMDA3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0xODMsNyAr
MTgzLDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNldCwg
c2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKIAogICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7Ci0gICAgZGV0YWNo
VGhyZWFkKGNyZWF0ZVRocmVhZCgiSU9DaGFubmVsOjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXpl
LCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICBUaHJlYWQ6OmNyZWF0ZSgiSU9DaGFu
bmVsOjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXJd
IHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVmYXVsdFJl
YWRCdWZmZXJTaXplKTsKICAgICAgICAgdWludDhfdCogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihmYXN0TWFsbG9jKGJ1ZmZlclNpemUpKTsKICAgICAgICAgR1JlZlB0cjxTb3Vw
QnVmZmVyPiByZWFkQnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVy
KGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGJ1ZmZlckRhdGEsIGZhc3RGcmVlKSk7CkBAIC0yMTcs
NyArMjE3LDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNl
dCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICAgICAgICAgIERhdGEgZGF0
YSA9IHsgV1RGTW92ZShidWZmZXIpIH07CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihk
YXRhLCAwKTsKICAgICAgICAgfSwgcXVldWUpOwotICAgIH0pKTsKKyAgICB9KS0+ZGV0YWNoKCk7
CiB9CiAKIHN0cnVjdCBXcml0ZUFzeW5jRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggYmFmNTMwNjZiZTIwMDllMjZkYmViN2FjODg4YzQwNWUz
YmRiYTZmZi4uYjM4N2I2YjQ0NWUzN2QzZGEzZThhNzJjN2MwYmEzNWM4NjNmMjcxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcApAQCAtNjc1LDcgKzY3NSw3
IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9w
dHI8RGVjb2Rlcj4gbWVzc2FnZSkKIAogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgaWYgKG1l
c3NhZ2UtPmlzU3luY01lc3NhZ2UoKSAmJiBtX3Nob3VsZEJvb3N0TWFpblRocmVhZE9uU3luY01l
c3NhZ2UpIHsKLSAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9v
dmVycmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBhZGp1c3RlZFFPU0NsYXNz
KFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKSwgMCk7CisgICAgICAgIHB0aHJlYWRfb3ZlcnJp
ZGVfdCBvdmVycmlkZSA9IHB0aHJlYWRfb3ZlcnJpZGVfcW9zX2NsYXNzX3N0YXJ0X25wKG1fbWFp
blRocmVhZCwgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNU
SVZFKSwgMCk7CiAgICAgICAgIG1lc3NhZ2UtPnNldFFPU0NsYXNzT3ZlcnJpZGUob3ZlcnJpZGUp
OwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5
UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQ
Q1NlcnZpY2VFbnRyeVBvaW50LmgKaW5kZXggM2JiN2M2ZDQ3ZDQzYzY5NzZiMDNjZmY3NzM2NDRm
NDg3ODQ5M2Q0MS4uZjIzZGI0M2MwMjM0ZGM3YzgxMDQ5NTNmMDRlZjg3OTUyZjliODc0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQ
Q1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2lu
dC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBYUENTZXJ2aWNlSW5pdGlhbGl6ZXIoT1NPYmpl
Y3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4gY29ubmVjdGlvbiwgeHBjX29iamVjdF8KIAogI2lmIEhB
VkUoUU9TX0NMQVNTRVMpCiAgICAgaWYgKHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRh
dGEuY29udGFpbnMoQVNDSUlMaXRlcmFsKCJhbHdheXMtcnVucy1hdC1iYWNrZ3JvdW5kLXByaW9y
aXR5IikpKQotICAgICAgICBzZXRHbG9iYWxNYXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7
CisgICAgICAgIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MoUU9TX0NMQVNTX1VUSUxJVFkp
OwogI2VuZGlmCiAKICAgICBYUENTZXJ2aWNlVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShw
YXJhbWV0ZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51eC9N
ZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4
L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKaW5kZXggMDYwOGFiNzJmOTkyNDhlZjI0Y2QyZDUy
NDVlZTUzMzNhMDBkOWQwZC4uNDhkMTA2OTc3NjVhOTVhOGIzNTg3MjMwZTEwMmQ4MDNhZDU4YzBh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNz
dXJlTW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9y
eVByZXNzdXJlTW9uaXRvci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBNZW1vcnlQcmVzc3VyZU1v
bml0b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgaWYgKG1fZXZlbnRGRCA9PSAtMSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKCJNZW1vcnlQcmVzc3VyZU1vbml0b3IiLCBbdGhpc10geworICAgIFJl
ZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJNZW1vcnlQcmVzc3VyZU1vbml0
b3IiLCBbdGhpc10gewogICAgICAgICBkb3VibGUgcG9sbEludGVydmFsID0gc19tYXhQb2xsaW5n
SW50ZXJ2YWxJblNlY29uZHM7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBz
bGVlcChwb2xsSW50ZXJ2YWwpOwpAQCAtMjcxLDcgKzI3MSw3IEBAIE1lbW9yeVByZXNzdXJlTW9u
aXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKCkKICAgICAgICAgfQogICAgICAgICBjbG9zZSht
X2V2ZW50RkQpOwogICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJZGVudGlmaWVyKTsK
KyAgICB0aHJlYWQtPmRldGFjaCgpOwogfQogCiBJUEM6OkF0dGFjaG1lbnQgTWVtb3J5UHJlc3N1
cmVNb25pdG9yOjpjcmVhdGVIYW5kbGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKaW5kZXggMWQ1MDIxNWEyMDMxMTRiNGYyM2Q1ZDU4ZjJkMjUzZmY3OTA1
NmQ1ZS4uNGY5NmFiYmYwZGM5NzJmOGI5YzJjNmNmNmU4MjY0NjllMjVmYmY1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yNTgsNyArMjU4LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICBwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdU
Rk1vdmUocGFyYW1ldGVycykpOwogCiAgICAgLy8gTWF0Y2ggdGhlIFFvUyBvZiB0aGUgVUlQcm9j
ZXNzIGFuZCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBidXQgdXNlIGEgc2xpZ2h0bHkgbG93ZXIgcHJp
b3JpdHkuCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoLTEpOwor
ICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoLTEpOwog
CiAgICAgbV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IHBhcmFtZXRlcnMuc2hvdWxk
U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgaWYgKCFtX3N1cHByZXNzTWVtb3J5
UHJlc3N1cmVIYW5kbGVyKSB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggZDM1YWVkODcxNTBkZWU0MTE5NzE0NmZlZWYwYjA5ZmY0NmU4NDA2MC4u
ZWEyNzA1Y2NjNGQxZWEzNzZlM2NiNWViNDlmMTQ4NTU2YjRkYmNlNSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3
LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAg
IFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQg
YWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJl
YWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwOgorICAgICAgICAocnVuSmF2
YVNjcmlwdFRocmVhZCk6CisgICAgICAgIChzdGFydEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAg
ICAgKHN0b3BKYXZhU2NyaXB0VGhyZWFkcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAodGVzdFRocmVhZElkZW50aWZpZXJNYXApOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHA6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpydW5Mb2NrVGVzdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFy
a2luZ0xvdC5jcHA6CisKIDIwMTctMDQtMDYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxk
QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEZvbnRXaXRoRmVhdHVyZXMgdGVzdCBmb250IHBh
c3MgT1RTCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFk
aW5nLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCmlu
ZGV4IGUyZjliYWRlNmNhN2MyNjk0ODVhNGNkY2JlNjA5OWMzNmJhMDIxOTguLjcxMGQyYTU5ZGE5
MjkwMTZlNjA4YTRjZjdkOTQ2ZmE4N2ZhZDkzMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBMb2NrJiBq
YXZhU2NyaXB0VGhyZWFkc011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9CiAKLXR5
cGVkZWYgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBUaHJlYWRTZXQ7Cit0eXBlZGVmIEhhc2hT
ZXQ8UmVmUHRyPFRocmVhZD4+IFRocmVhZFNldDsKIHN0YXRpYyBUaHJlYWRTZXQmIGphdmFTY3Jp
cHRUaHJlYWRzKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVGhyZWFk
U2V0LCBzdGF0aWNKYXZhU2NyaXB0VGhyZWFkcywgKCkpOwpAQCAtMTA4LDEwICsxMDgsMTAgQEAg
dm9pZCBydW5KYXZhU2NyaXB0VGhyZWFkKHZvaWQqKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAg
IGRldGFjaFRocmVhZCh0aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLnJlbW92
ZSh0aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQo
JnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAgICAgVGhyZWFkJiB0aHJlYWQgPSBU
aHJlYWQ6OmN1cnJlbnQoKTsKKyAgICAgICAgdGhyZWFkLmRldGFjaCgpOworICAgICAgICBqYXZh
U2NyaXB0VGhyZWFkcygpLnJlbW92ZSgmdGhyZWFkKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVh
ZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBzdGFydEphdmFT
Y3JpcHRUaHJlYWRzKCkKICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011
dGV4KCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0Nv
dW50OyArK2kpCi0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgm
cnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygp
LmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogfQogCiB2
b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBzdG9w
SmF2YVNjcmlwdFRocmVhZHMoKQogICAgICAgICBqYXZhU2NyaXB0VGhyZWFkc1Nob3VsZFRlcm1p
bmF0ZSA9IHRydWU7CiAgICAgfQogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIGphdmFT
Y3JpcHRUaHJlYWRzQ291bnQ+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCBq
YXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0aHJlYWRzOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKICAgICAgICAgY29weVRvVmVjdG9y
KGphdmFTY3JpcHRUaHJlYWRzKCksIHRocmVhZHMpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQg
c3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0
aW9uKCk7CiAKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJl
YWRzTXV0ZXgoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0K
aW5kZXggZmI0ZDI2ZmNjZWI3MGM0YjUzMjAxMGRhODVmYjljZTc4NTVjMTM4NC4uM2NlYWE2ZjNl
NjU3MzVkMzBlZjFhNGY4OTdkNWU2OWM0ZmE1ZmYwNiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtMTA3Miw4ICsxMDcyLDggQEAgc3RhdGljIHZvaWQg
dGVzdFRocmVhZElkZW50aWZpZXJNYXAoKQogICAgIHB0aHJlYWRfam9pbihwdGhyZWFkLCAwKTsK
IAogICAgIC8vIE5vdyBjcmVhdGUgYW5vdGhlciB0aHJlYWQgdXNpbmcgV1RGLiBPbiBPU1gsIGl0
IHdpbGwgaGF2ZSB0aGUgc2FtZSBwdGhyZWFkIGhhbmRsZQotICAgIC8vIGJ1dCBzaG91bGQgZ2V0
IGEgZGlmZmVyZW50IFRocmVhZElkZW50aWZpZXIuCi0gICAgY3JlYXRlVGhyZWFkKHJ1blRocmVh
ZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0ZXN0Iik7CisgICAgLy8gYnV0IHNob3VsZCBnZXQgYSBk
aWZmZXJlbnQgUmVmUHRyPFRocmVhZD4uCisgICAgVGhyZWFkOjpjcmVhdGUocnVuVGhyZWFkLCAw
LCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsKIH0KIAogc3RhdGljIHZvaWQgYWxsb2NhdGVHbG9i
YWxDb250cm9sbGVycygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Db25kaXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9u
LmNwcAppbmRleCA4NDg1MjczNTFmNjA2M2ZjMjYzNjg3ODA1NmQ5YzI0ZGJhYmU4M2RjLi43NzIx
NjM2Yjc3ODA3ZjEzOTUxZWExMTJmYmQ0MTNlOGZhYzQ2MGJjIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2b2lkIHJ1
blRlc3QoCiAgICAgQ29uZGl0aW9uIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlvbiBmdWxs
Q29uZGl0aW9uOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IGNvbnN1bWVyVGhyZWFk
czsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gcHJvZHVjZXJUaHJlYWRzOworICAgIFZl
Y3RvcjxSZWZQdHI8VGhyZWFkPj4gY29uc3VtZXJUaHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8
VGhyZWFkPj4gcHJvZHVjZXJUaHJlYWRzOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiByZWNlaXZl
ZDsKICAgICBMb2NrIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVu
dGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVu
dGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiQ29uc3VtZXIgdGhyZWFkIiwK
ICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTA4
LDcgKzEwOCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bXB0eUNvbmRpdGlvbiwgbG9ja2VyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250
aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6
ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVk
aWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5z
aXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVvdXQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICBzbGVlcChk
ZWxheSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAor
ICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUo
CiAgICAgICAgICAgICAiUHJvZHVjZXIgVGhyZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzUGVyUHJv
ZHVjZXI7ICsraSkgewpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdWxsQ29uZGl0aW9uLCBsb2NrZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNh
dGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXpl
KCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2lu
ZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29u
dGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1ZXVl
U2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVvdXQpOwpAQCAtMTU1LDggKzE1NSw4IEBAIHZvaWQgcnVuVGVzdCgKICAg
ICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAgICB9CiAK
LSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhy
ZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7
CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJl
YWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAg
ICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9ja2VyKGxvY2spOwpAQCAtMTY0
LDggKzE2NCw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICB9CiAgICAgZW1wdHlDb25kaXRpb24ubm90
aWZ5QWxsKCk7CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6
IGNvbnN1bWVyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
SWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDog
Y29uc3VtZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxl
dGlvbigpOwogCiAgICAgRVhQRUNUX0VRKG51bVByb2R1Y2VycyAqIG51bU1lc3NhZ2VzUGVyUHJv
ZHVjZXIsIHJlY2VpdmVkLnNpemUoKSk7CiAgICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJlZ2luKCks
IHJlY2VpdmVkLmVuZCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0xvY2suY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKaW5k
ZXggNTU3NjMwMmQ2OTBkZmNhMzU5OTI5MjhiMWM4NTNjNzYyMmU0NWZiOS4uNmE0ZTUzOGY1NmY0
NmQxNzdhM2Y2MmYxZGRlYjNhNGQwYWYyYWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTG9jay5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVk
IG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAog
ewogICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlx
dWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91
YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBz
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3Rk
OjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRo
cmVhZHNQZXJHcm91cCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRo
cmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZEdyb3Vw
cyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3Vw
SW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKICAgICAgICAg
d29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhy
ZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7Ci0gICAgICAg
ICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJl
YWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3Vw
SW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6OmNyZWF0
ZSgKICAgICAgICAgICAgICAgICAiTG9jayB0ZXN0IHRocmVhZCIsCiAgICAgICAgICAgICAgICAg
W3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCBudW1JdGVyYXRpb25zLCB3b3JrUGVy
Q3JpdGljYWxTZWN0aW9uXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBydW5Mb2Nr
VGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91
cCwgdW5zaWduZWQKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVt
VGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykKLSAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgICAg
ICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIGRvdWJs
ZSBleHBlY3RlZCA9IDA7CiAgICAgZm9yICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRocmVhZHNQ
ZXJHcm91cDsgaS0tOykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1BhcmtpbmdMb3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xv
dC5jcHAKaW5kZXggYzY3ZTFlMDgxNWE4M2FmYTkzMzNlMmFjOWEyYmQ3OGI2N2IxNjQ1Yi4uNWFm
OWM3YzgyN2IyMWUyMWQ4ZGY5MzA1MjYwZDZmZmVlNjhmYmQxYyAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKQEAgLTQ4LDE2ICs0OCwxNCBAQCBzdHJ1
Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bVRocmVhZHM7IGktLTspIHsKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAg
ICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgK
ICAgICAgICAgICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAogICAgICAgICAgICAg
ICAgICAgICBbJl0gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBj
dXJyZW50VGhyZWFkKCkpOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIo
bG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRocmVhZCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhyZWFkKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoVGhyZWFkOjpjdXJyZW50KCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0pKTsKICAgICAgICAgfQpAQCAtNjUsMTYgKzYzLDE2IEBAIHN0cnVjdCBT
aW5nbGVMYXRjaFRlc3QgewogCiAgICAgdm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2luZ2xlVW5w
YXJrSW5kZXgpCiAgICAgewotICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4pOworICAg
ICAgICBFWFBFQ1RfVFJVRShudWxscHRyID09IGxhc3RBd29rZW4pOwogICAgICAgICAKICAgICAg
ICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7Ci0gICAgICAgIFZlY3RvcjxUaHJl
YWRJZGVudGlmaWVyLCA4PiBxdWV1ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCA4
PiBxdWV1ZTsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAo
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7
CisgICAgICAgICAgICBbJl0gKFRocmVhZCYgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCog
YWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVu
ZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoJnRocmVh
ZElkZW50aWZpZXIpOwogCiAgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOwog
ICAgICAgICAgICAgfSk7CkBAIC04NywxMiArODUsMTIgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVz
dCB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2Nr
KTsKICAgICAgICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJbmRleCAr
IDEpCiAgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAgICAgICAg
IEVYUEVDVF9ORSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShudWxs
cHRyICE9IGxhc3RBd29rZW4pOwogICAgICAgICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5KCkgJiYg
cXVldWVbMF0gIT0gbGFzdEF3b2tlbikgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIldva2Ug
dXAgd3JvbmcgdGhyZWFkOiBxdWV1ZSA9ICIsIGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFzdCBhd29r
ZW4gPSAiLCBsYXN0QXdva2VuLCAiXG4iKTsKICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEocXVl
dWVbMF0sIGxhc3RBd29rZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFzdEF3b2tl
biA9IDA7CisgICAgICAgICAgICBsYXN0QXdva2VuID0gbnVsbHB0cjsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTAwLDcgKzk4LDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgewog
ICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAgUGFya2lu
Z0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qg
dm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2b2lkKiBh
ZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIApAQCAtMTE0LDcgKzEx
Miw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgICAgIG51bVdhaXRpbmdPbkFk
ZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZd
IChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBb
Jl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAo
YWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKQEAgLTEyOSw4ICsxMjcsOCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAg
ICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAg
ICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQotICAg
ICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAg
ICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMpCisgICAg
ICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIAog
ICAgIC8vIFNlbWFwaG9yZSBvcGVyYXRpb25zLgpAQCAtMTc5LDkgKzE3Nyw5IEBAIHN0cnVjdCBT
aW5nbGVMYXRjaFRlc3QgewogICAgIEF0b21pYzxpbnQ+IHNlbWFwaG9yZTsKICAgICBzdGQ6Om11
dGV4IGxvY2s7CiAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uOwotICAgIEhh
c2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gYXdha2U7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IHRocmVhZHM7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBsYXN0QXdva2VuIHsgMCB9OworICAg
IEhhc2hTZXQ8UmVmPFRocmVhZD4+IGF3YWtlOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4g
dGhyZWFkczsKKyAgICBSZWZQdHI8VGhyZWFkPiBsYXN0QXdva2VuIHsgbnVsbHB0ciB9OwogfTsK
IAogdm9pZCBydW5QYXJraW5nVGVzdCh1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxh
eSwgdW5zaWduZWQgbnVtVGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306501</attachid>
            <date>2017-04-07 07:33:32 -0700</date>
            <delta_ts>2017-04-07 08:42:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170407233331.patch</filename>
            <type>text/plain</type>
            <size>217740</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi5jMTBkYzA5MGMwMzI1Mzlj
NzM1MWJmNDEyMDFmYzg2MzhiM2Y0Zjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Om93bmVyVGhyZWFkKToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6
c2VuZCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKwogMjAxNy0wNC0wNyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA1YzBiYjUwZDg1MGNjZDVmZDRlYzUwZGM5NDQ4ODM0Y2ZjNmNjYzNkLi45OGY0YmMwNGI4
OWNjMmQ4OTllMDA2YzQ4Njk0YWVmMzcxZTUxNmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAx
Ny0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5k
IGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhy
ZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0Nv
bmRpdGlvblNwZWVkVGVzdC5jcHA6CisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NU
ZXN0LmNwcDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAg
ICAqIHd0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJl
YWQ6OnN0YXJ0KToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3Rm
L01haW5UaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFG
b3JUaHJlYWQpOgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisgICAgICAgICogd3RmL01l
bW9yeVByZXNzdXJlSGFuZGxlci5oOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6
dHJ5TG9ja0Zvcik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFBy
aXZhdGU6OndvcmtlclRocmVhZCk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aDoKKyAgICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6VGhy
ZWFkUHJpdmF0ZSk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorICAgICAgICAoV1RG
OjpQYXJraW5nTG90Ojpmb3JFYWNoSW1wbCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoK
KyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9yRWFjaCk6CisgICAgICAgICogd3RmL1JlZlB0
ci5oOgorICAgICAgICAoV1RGOjpSZWZQdHI6OlJlZlB0cik6CisgICAgICAgICogd3RmL1RocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oOgorICAgICAgICAoV1RGOjpUaHJlYWRGdW5jdGlvbkludm9j
YXRpb246OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbik6CisgICAgICAgICogd3RmL1RocmVhZEdy
b3VwLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9y
bVRocmVhZC5oLgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwLgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgorICAgICAgICAoV1RG
OjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKToK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAgICogd3RmL1Ro
cmVhZEhvbGRlclB0aHJlYWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAg
ICogd3RmL1RocmVhZEhvbGRlcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9U
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFs
aXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJXaW4uaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAg
ICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRI
b2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAgICAgIChXVEY6OnRo
cmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZHVtcCk6Cisg
ICAgICAgIChXVEY6Om5vcm1hbGl6ZVRocmVhZE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpjcmVhdGVUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW50ZXJhY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW5pdGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjphZGp1c3RlZFFPU0NsYXNzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6
aWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkZE9uRXhpdENhbGxiYWNrKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlk
Sm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6
Y3VycmVudFRocmVhZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToK
KyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6Ond0
ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUludGVybmFs
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFj
aCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwpOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Z2V0UmVnaXN0ZXJz
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFk
Ojplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpQdGhyZWFkU3RhdGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVh
ZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlI
ZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmRldGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6c2lnbmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5n
V2luLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50
VGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAg
ICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6
OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Vy
cmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJl
YWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRp
Zmllcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpk
ZXRhY2hUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1
ZXVlOjpjb25jdXJyZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAg
ICAgKiB3dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAoV1RGOjpkaXNwYXRj
aFFPU0NsYXNzKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcDoK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGludXgvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyTGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAoV1RGOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKToKKwogMjAxNy0w
NC0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291
cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDg3M2QzNzkzNDg0ZGRkNjA4YmNjNTlhMDBhNWJlZjU5MmNhYzBi
NmQuLmFlZmNmNGFkZDJiNGVlYzE4YWExYjBiM2JmM2RjYmY3OWRjODI5ZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw4MSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1
c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0
aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpJREJTZXJ2ZXIp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFy
dFJlbmRlcmluZyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFk
OjpyZWNvcmREYXRhYmFzZU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6
OnJlY29yZERhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6Z2V0VGhy
ZWFkSUQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRG
b3JEZWJ1Z2dpbmcpOgorICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGxPbkZpbGVUaHJlYWQpOgorICAgICAgICAqIGxvYWRlci9pY29u
L0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Om9wZW4p
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAgICogbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmg6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRo
cmVhZElmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaDoKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUaHJlYWQ6OnRocmVhZENhbGxiYWNrKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRGF0
YWJhc2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjpI
UlRGRGF0YWJhc2VMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVy
Ojpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9h
ZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbik6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6UmV2
ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6flJldmVy
YkNvbnZvbHZlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJl
YW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5j
cHA6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGll
bnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVy
UnVuTG9vcCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BUaHJl
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3Vy
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdGFydFRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdG9wVGhy
ZWFkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2Vy
VGhyZWFkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkOjp0aHJlYWRJRCk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0
aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
MmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1ODA5NzdmMTI5NWQxZmJmZS4uNzg1MzgxNDg2NDNiNTY4
NjIzNmIxMGFlZDI3ODY2OWFmZWFlYWRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAx
Ny0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5k
IGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhy
ZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRo
cmVhZDo6U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp+
U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUpOgorICAgICAgICAqIFN0b3JhZ2UvU3Rv
cmFnZVRocmVhZC5oOgorCiAyMDE3LTA0LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogT25seSBDYXB0dXJlIEV4dHJhIE5l
dHdvcmsgTG9hZCBNZXRyaWNzIHdoZW4gdGhlcmUgaXMgYSBXZWIgSW5zcGVjdG9yIEZyb250ZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggYTUyY2Q3YWNkZDEyMjYzZTY1YWYxOTZiYTAwMzMwMjEzOGI5MWU2Ni4u
NTQxZWMxMjRjMDE2NDRiZjliYmRmNjYxYjBlYmNmMWE2MmUyNjQ0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIzIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBS
ZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24g
c2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFkU3lu
Y0luVGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAg
ICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAq
IFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRy
eVBvaW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0aWFsaXplcik6CisgICAg
ICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0
ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNw
cAppbmRleCBlNzgwODZjM2E5NjEyYTJmMGI0ZDdhYWYxYWRjN2JhMWExMDFjNTQ3Li40M2FlZjA3
Nzk3MGNmZWRiMmNhYzA0NjNmY2Q5ZWNjYTI5ZDE1MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwCkBAIC05Niw3
ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkKIHsKICAgICBCaXRtYXAgYml0bWFw
OwogICAgIGNvbnN0IGludCBudW1UaHJlYWRzID0gNTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEc1tudW1UaHJlYWRzXTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRzW251bVRocmVh
ZHNdOwogICAgIERhdGEgZGF0YVtudW1UaHJlYWRzXTsKIAogICAgIFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwpAQCAtMTA3LDEyICsxMDcsMTIgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAo
KQogICAgICAgICBkYXRhW2ldLmlkID0gaTsKICAgICAgICAgZGF0YVtpXS5udW1UaHJlYWRzID0g
bnVtVGhyZWFkczsKICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRocmVhZEZ1bmMgPSBz
dGQ6OmJpbmQoc2V0Qml0VGhyZWFkRnVuYywgJmRhdGFbaV0pOwotICAgICAgICB0aHJlYWRJRHNb
aV0gPSBjcmVhdGVUaHJlYWQoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRGdW5jKTsKKyAgICAg
ICAgdGhyZWFkc1tpXSA9IFRocmVhZDo6Y3JlYXRlKCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhyZWFk
RnVuYyk7CiAgICAgfQogCiAgICAgcHJpbnRmKCJXYWl0aW5nIGZvciAlZCB0aHJlYWRzIHRvIGpv
aW5cbiIsIG51bVRocmVhZHMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsg
aSsrKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRHNbaV0pOworICAg
ICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgcHJpbnRmKCJQQVNT
OiBDb21wYXJlQW5kU3dhcCB0ZXN0IGNvbXBsZXRlZCB3aXRob3V0IGEgaGFuZ1xuIik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyMTdiNWM4NTUxYTU4ZTZjZmQwMGM1YmQx
ZjJkYWExMDI1ZjQwOGUuLjdkMjAzNmJlODYxNmZmNTM4NjdlNWUwNzk1NjVmZGE1YTc4ODUxZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDY3LDcgKzI0NjcsNiBAQAogCQlG
RUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAv
KiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZFRTQzRkNFMUU2NjQxNzEw
MDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhy
ZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2NjJE
MDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYxRDVF
Nzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3Ry
aW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KQEAgLTUwOTMsNyArNTA5Miw2IEBA
CiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQaW5nUG9uZ1N0YWNr
T3ZlcmZsb3dUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dU
ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDUxQjk3RjREOTAw
OUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVGhyZWFkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5k
U3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29tcGFy
ZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAg
LyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZENkZDNTFENUU3OTcwMDA4RjJG
MEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg1NCw3
ICs2ODUyLDYgQEAKIAkJCQlGNjkyQTg3ODAyNTU1OTdEMDFGRjYwRjcgLyogT3BlcmF0aW9ucy5o
ICovLAogCQkJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLywKIAkJ
CQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovLAotCQkJCUZFRTQzRkNE
MUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oICovLAogCQkJCTg2ODkxNkE5MTU1
RjI4NTQwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oICovLAogCQkJCTE0NzM0MURGMURDMkNFOTYw
MEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJMTQ3MzQxRDMxREMwMkU2
RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmggKi8sCkBAIC05MzM0LDcgKzkzMzEsNiBA
QAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwNUI0MUFFMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVFNDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBsYXRm
b3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQg
LyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMDFB
NkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVC
NDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCmluZGV4IDg3YjM1M2FhMzc5
MjVjYTFlMmZhODQxMTk5NzZhZGYwYjFlMDdiYWEuLmM5MTc3MDc5NTg4Zjg2ZDQzMWEyOGJjMDc0
ZDRmZTJlM2YxM2RjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
dGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNw
cApAQCAtMTkxMywxMCArMTkxMywxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAK
ICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsK
KyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CiAg
ICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAg
ICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAog
ICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsK
QEAgLTE5MzMsOCArMTkzMyw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAg
ICAgICAgICAgICB9KSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZCA6IHRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7Cisg
ICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAwMTk5NmFmNzFhYjRmMDllYjQ5YjcwMTFjMTdk
YmM5M2M0MGNlODdhLi45MDQ2NTY0ODg3YjZiM2E0YWZhYzM1OWRjMTBjNTAzODRkNzRkZWZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAtMTY4NTAsMTAgKzE2ODUwLDEwIEBA
IHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAgIExvY2sgbG9jazsKIAotICAgIFZl
Y3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFk
Pj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1i
ZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0g
ICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAg
ICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAgICAgICAgICAgICAgICAgWyZdICgpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTY4NzAsOCArMTY4NzAsOCBAQCB2
b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0K
IAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4g
dGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
ICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKaW5kZXggYTRlMjFmOWZhM2NkNDcyMWVhMjY3NWUwNmU0
ZDUzMGM1YmE5NWIzNS4uZTliMWY1YzJmMGJjMjdiMDI5MzEwYzU1ODE1MjBiMWI1NTIyNTk3OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAK
QEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbml0aWFsaXplU3VwZXJTYW1wbGVyKCkKICAgICBpZiAo
IU9wdGlvbnM6OnVzZVN1cGVyU2FtcGxlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjcmVh
dGVUaHJlYWQoCisgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgU3VwZXIgU2FtcGxl
ciIsCiAgICAgICAgIFtdICgpIHsKICAgICAgICAgICAgIGNvbnN0IGludCBzbGVlcFF1YW50dW0g
PSAxMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKaW5kZXggY2Vm
OTkwY2I0ODMzYTZiYjk0NzFiZDA4YTUwNGU1NWZiNDdkZjQ1OC4uYWQwZWNjNjlhNzdkMTcyY2Y0
YmMxZWZhYzkzZGY5MzAyN2MwMDllNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9k
eSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmts
aXN0LCAiOiBUaHJlYWQgc3RhcnRlZFxuIik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9yZWxh
dGl2ZVByaW9yaXR5KQotICAgICAgICAgICAgY2hhbmdlVGhyZWFkUHJpb3JpdHkoY3VycmVudFRo
cmVhZCgpLCBtX3JlbGF0aXZlUHJpb3JpdHkpOworICAgICAgICAgICAgVGhyZWFkOjpjdXJyZW50
KCkuY2hhbmdlUHJpb3JpdHkobV9yZWxhdGl2ZVByaW9yaXR5KTsKICAgICAgICAgCiAgICAgICAg
IG1fY29tcGlsYXRpb25TY29wZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb25TY29wZT4o
KTsKICAgICAgICAgbV9sb25nTGl2ZWRTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TG9uZ0xpdmVk
U3RhdGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5jcHAKaW5kZXggNzg4YTZjMzYyMzY5YzU4ZGFkMjlhNjBhMzg3MTA0NGU0NjRl
ZDMwNS4uMmI4MjRlY2ZkZTU4OTNiMmM2YjcwNmY0NzAyZWNkMjI5NWQyMzU1NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcApA
QCAtNzMsNyArNzMsNyBAQCBjbGFzcyBBc3luY2hyb25vdXNEaXNhc3NlbWJsZXIgewogcHVibGlj
OgogICAgIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpCiAgICAgewotICAgICAgICBjcmVhdGVU
aHJlYWQoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7Cisg
ICAgICAgIFRocmVhZDo6Y3JlYXRlKCJBc3luY2hyb25vdXMgRGlzYXNzZW1ibGVyIiwgWyZdICgp
IHsgcnVuKCk7IH0pOwogICAgIH0KICAgICAKICAgICB2b2lkIGVucXVldWUoc3RkOjp1bmlxdWVf
cHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
aW5kZXggM2FlZTMwMTA0ZjUyOTFhMjg3NjRhNWNkZWU1YWE4ZjBjYTcyYWQzMS4uNzIyM2IyMGM5
ZGZiYTEwNDMwOThhNzg1NzRiYTI4YTY5NGMwNDViZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFs
aXplKCkKICAgICAgICAgICAgIG1fc2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3VzbHkgPSB0
cnVlOwogICAgICAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uLm5vdGlmeU9u
ZSgpOwogICAgICAgICB9Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fY29sbGVj
dENvbnRpbnVvdXNseVRocmVhZCk7CisgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVh
ZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQCB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29s
bGVjdCgpCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOwogICAgIAogICAgIGlmIChPcHRp
b25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKLSAgICAgICAgbV9jb2xsZWN0Q29udGludW91
c2x5VGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlU
aHJlYWQgPSBXVEY6OlRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkpTQyBERUJVRyBDb250
aW51b3VzIEdDIiwKICAgICAgICAgICAgIFt0aGlzXSAoKSB7CiAgICAgICAgICAgICAgICAgTW9u
b3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDE2YmVlZjlhODlkMDZkZjI3OTcxN2U3NzBiMTY0
YTQ3MTQuLmQ2NzgzN2FmZWYxMzAxZjk2NzJmNjBlYTI5YzQzZmM4NTk3ZGViOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXJhbGxlbEhlbHBlclBvb2wuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC02NjYsNyArNjY3LDcgQEAgY2xhc3MgSGVhcCB7CiAgICAgTG9jayBt
X2NvbGxlY3RDb250aW51b3VzbHlMb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbGxlY3RDb250aW51
b3VzbHlDb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29udGludW91
c2x5IHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fY29sbGVjdENvbnRpbnVvdXNs
eVRocmVhZCB7IDAgfTsKKyAgICBSZWZQdHI8V1RGOjpUaHJlYWQ+IG1fY29sbGVjdENvbnRpbnVv
dXNseVRocmVhZCB7IG51bGxwdHIgfTsKICAgICAKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEdD
U3RhcnRUaW1lOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NFbmRUaW1lOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggYjg1
Yjc2NDhlMmY1ZDE5ZmEyMmQ3NjNmN2JjZGVmOGY0NGM0MmM4OC4uNGZmZGY5Y2M0ZTNjMzYwNmIx
ZGE5YTk0MDc3ZmM3NGM4ODZlYzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBAIC02NCw2MyArNjQsMTMgQEAKICNpbmNsdWRl
IDxwdGhyZWFkX25wLmg+CiAjZW5kaWYKIAotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRP
V1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdV
U1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENv
cmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwot
c3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFsTG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMg
c3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2Fs
Q3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQotc3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhh
bmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0g
ICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5k
bGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRo
cmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRo
cmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0g
ICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVu
ZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMg
aGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBz
aWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2ln
bmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0
aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikg
d2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAv
LyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9u
cy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0
X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNp
ZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVz
ZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5z
dXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRp
ZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQg
aXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0
aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVy
LgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkv
ZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8v
IEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNw
ZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1
YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0
Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1
c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNp
Z2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQs
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMg
ZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAg
ICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OwotICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWdu
YWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBB
bGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0g
ICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQot
I2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0K
ICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNp
bmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRocmVhZDsKK3VzaW5nIEpTVGhyZWFkID0gTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFzcyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFn
ZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5lVGhy
ZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTQ0LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFj
aGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lm
aWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBMb2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRz
TG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9y
ZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsK
KyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAg
ICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0OwogICAgICAgICBkZWxldGUgdDsKICAgICAgICAg
dCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEq
IHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVjaWZp
YzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRocmVh
ZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEuZ2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJlYWRz
OjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0aHJlYWREYXRhKQotICAgIDogZGF0YSh0aHJl
YWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWREYXRhKTsKLX0KLQotVGhyZWFkKiBNYWNoaW5l
VGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4g
bmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQotCi1ib29sIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdAotewotI2lm
IE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAgICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJl
YWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9l
cXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3RoZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEg
d2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQogdm9p
ZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiB7CiAgICAgaWYgKHRocmVhZFNw
ZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcykpIHsKQEAgLTIzOSw3
ICsxNjEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVG
b3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJlYWQqIHRocmVhZCA9IG5ldyBKU1RocmVhZCh0
aGlzKTsKICAgICB0aHJlYWRTcGVjaWZpY1NldChtX3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRo
cmVhZHMsIHRoaXMpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNN
dXRleCk7CkBAIC0yNDgsMTIgKzE3MCwxMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJy
ZW50VGhyZWFkKCkKICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gdGhyZWFkOwogfQogCi1UaHJl
YWQqIE1hY2hpbmVUaHJlYWRzOjptYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpCitKU1Ro
cmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKIHsK
ICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBQbGF0
Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwotICAg
IGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCA9PSBwbGF0Zm9ybVRocmVh
ZCkKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gY3VycmVudFRocmVhZCgpOworICAgIGZvciAo
SlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0g
dGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgPT0gaWQpCiAg
ICAgICAgICAgICByZXR1cm4gdGhyZWFkOwogICAgIH0KIApAQCAtMjgzLDIyICsyMDUsMjEgQEAg
dm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKHZv
aWQqIHApCiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgICAgICBtYWNoaW5lVGhy
ZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSk7CisgICAg
ICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRUaHJlYWQoKSk7
CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLXZvaWQgTWFj
aGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1U
aHJlYWQpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElk
ZW50aWZpZXIgaWQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNN
dXRleCk7Ci0gICAgVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKLSAgICBpZiAoKnQg
PT0gcGxhdGZvcm1UaHJlYWQpIHsKKyAgICBKU1RocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgbV9yZWdpc3RlcmVk
VGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0Owog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7
CisgICAgICAgIEpTVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICAgICAg
Zm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsKLSAg
ICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgICAgICAgICAgaWYgKHQt
PnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgICAgICAgICBsYXN0LT5uZXh0ID0gdC0+bmV4
dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMyMCwxODIgKzI0
MSwyMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdAogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFk
ZChjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tUb3AsIGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja09y
aWdpbiwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKIH0KIAotTWFjaGluZVRocmVhZHM6
OlRocmVhZERhdGE6OlRocmVhZERhdGEoKQorTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpKU1Ro
cmVhZChNYWNoaW5lVGhyZWFkcyopCisgICAgOiBuZXh0KG51bGxwdHIpCisgICAgLCBtX3RocmVh
ZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3dGZU
aHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9y
bVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAgIHN0
YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEFTU0VS
VChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAgYm9vbCBpc1N1
Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwg
R2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLAotICAgICAgICAgICAgJnBs
YXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAh
T1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5zdG9yZSh0aGlzKTsKLQot
ICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4K
LSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXI7Ci0gICAg
c3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXIsIFtdIHsKLSAgICAgICAgLy8g
SW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVy
LgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0
aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlv
bjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgc2lnYWRk
c2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAgICAg
YWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsK
LSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87Ci0gICAg
ICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAwKTsKLSAgICB9
KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAgc2lnZW1wdHlzZXQoJm1hc2spOwotICAgIHNp
Z2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgcHRocmVhZF9zaWdt
YXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0KLSAgICBzZW1faW5pdCgmc2VtYXBob3JlRm9y
U3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAv
KiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKLSNlbmRpZgorICAgIG1f
c3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7CisgICAgbV9zdGFja0VuZCA9IHN0YWNr
Qm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVhZERh
dGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Z2V0UmVnaXN0ZXJzKEpTVGhy
ZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgIENsb3Nl
SGFuZGxlKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9T
KERBUldJTikKLSAgICBzZW1fZGVzdHJveSgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0j
ZW5kaWYKKyAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7
CisgICAgcmV0dXJuIG1fdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVncyk7CiB9CiAKLWJvb2wgTWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGE6OnN1c3BlbmQoKQotewotI2lmIE9TKERBUldJTikKLSAg
ICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFkKTsK
LSAgICByZXR1cm4gcmVzdWx0ID09IEtFUk5fU1VDQ0VTUzsKLSNlbGlmIE9TKFdJTkRPV1MpCi0g
ICAgYm9vbCB0aHJlYWRJc1N1c3BlbmRlZCA9IChTdXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhyZWFk
SGFuZGxlKSAhPSAoRFdPUkQpLTEpOwotICAgIEFTU0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7Ci0g
ICAgcmV0dXJuIHRocmVhZElzU3VzcGVuZGVkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoY3VycmVudFBsYXRmb3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1UaHJl
YWQsICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVh
ZCBpdHNlbGYuIik7Ci0gICAgewotICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBv
ciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgot
ICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2su
Ci0gICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVh
ZHMgQSBhbmQgQi4KLSAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIg
YXR0ZW1wdCB0byBzdXNwZW5kIEEuCi0gICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBB
bmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgotICAgICAgICAvLyBJ
biB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCi0gICAgICAgIExvY2tIb2xkZXIg
bG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKCFzdXNwZW5kQ291bnQpIHsKLSAg
ICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVl
dWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRs
ZXIuCi0gICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1z
LCBsaWtlIExpbnV4LgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3Rv
cmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwg
aGFuZGxlci4KLSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsK
LSAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRp
b24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBk
b25lLgotICAgICAgICAgICAgc3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgICsrc3VzcGVuZENvdW50OwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBzdXNwZW5kIHRocmVh
ZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KLXZvaWQgTWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGE6OnJlc3VtZSgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHRocmVhZF9yZXN1bWUo
cGxhdGZvcm1UaHJlYWQpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBSZXN1bWVUaHJlYWQocGxh
dGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHsKLSAgICAgICAg
Ly8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRl
ZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICBMb2NrSG9sZGVyIGxvY2soZ2xvYmFs
U2lnbmFsTG9jayk7Ci0gICAgICAgIGlmIChzdXNwZW5kQ291bnQgPT0gMSkgewotICAgICAgICAg
ICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSBpcyBhY3R1YWxseSBpc3N1ZWQsCi0gICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIg
aXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCi0gICAgICAgICAgICAvLyBUaGVyZSBh
cmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9y
IHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAgICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2ln
bmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4K
LSAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNw
ZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJl
IHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCi0gICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxv
Y2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4K
LSAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNw
ZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgotICAgICAgICAgICAgaWYgKHB0
aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNS
Q0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVu
c3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRo
ZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUo
ZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgIC0t
c3VzcGVuZENvdW50OwotICAgIH0KLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byByZXN1bWUg
dGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotc2l6ZV90IE1hY2hpbmVUaHJl
YWRzOjpUaHJlYWREYXRhOjpnZXRSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdp
c3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIE9TKERBUldJTikKLSNpZiBDUFUoWDg2KQotICAg
IHVuc2lnbmVkIHVzZXJfY291bnQgPSBzaXplb2YocmVncykvc2l6ZW9mKGludCk7Ci0gICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BV
KFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NP
VU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRF
NjQ7Ci0jZWxpZiBDUFUoUFBDKSAKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RIUkVB
RF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RI
UkVBRF9TVEFURTsKLSNlbGlmIENQVShQUEM2NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0g
UFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2
b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUoQVJNKQotICAgIHVuc2lnbmVkIHVz
ZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2
b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIHVu
c2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKLSNlbHNlCi0jZXJy
b3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgotCi0gICAga2Vybl9yZXR1cm5fdCByZXN1
bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKHBsYXRmb3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3Rh
dGVfdCkmcmVncywgJnVzZXJfY291bnQpOwotICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNT
KSB7Ci0gICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlw
dCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1
cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmlu
ZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOwotICAg
ICAgICBDUkFTSCgpOwotICAgIH0KLSAgICByZXR1cm4gdXNlcl9jb3VudCAqIHNpemVvZih1aW50
cHRyX3QpOwotLy8gZW5kIE9TKERBUldJTikKLQotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZWdz
LkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsKLSAgICBH
ZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxlLCAmcmVncyk7Ci0gICAgcmV0dXJu
IHNpemVvZihDT05URVhUKTsKLSNlbGlmICgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJD
X18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICByZWdzID0gc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7
Ci0gICAgcmV0dXJuIHNpemVvZihSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzKTsKLSNlbGlm
IFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmcmVncy5hdHRyaWJ1dGUpOwot
I2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhORVRCU0QpCi0jaWYgIU9TKE9QRU5CU0QpCi0g
ICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZwotICAgIHB0aHJlYWRf
YXR0cl9nZXRfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYKLSNl
bHNlCi0gICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQ
T1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICBwdGhy
ZWFkX2dldGF0dHJfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gMDsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhyZWFkIHJl
Z2lzdGVycyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCogTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAog
ewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4
dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwpAQCAtNTE5LDcgKzI4MCw3IEBAIHZvaWQqIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB9CiAK
ICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRo
cmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYg
T1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dM
SUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ3MpOwpA
QCAtNTI4LDcgKzI4OSw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdp
c3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3QK
K3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBv
aW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKE9TKEZS
RUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkKICAgICByZXR1cm4gTWFjaGluZUNvbnRleHQ6
Omluc3RydWN0aW9uUG9pbnRlcihyZWdzKTsKQEAgLTUzNyw3ICsyOTgsNyBAQCB2b2lkKiBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBj
b25zdAogI2VuZGlmCiB9CiAKLXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdp
c3RlcnM6OmxsaW50UEMoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewogICAgIC8vIExMSW50IHVzZXMgcmVnVDQgYXMg
UEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVm
aW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICszMDksNiBAQCB2b2lkKiBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKIH0KICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERh
dGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0g
ICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lz
dGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJX
SU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJ
VCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9z
UmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGludCByZWRab25lQWRqdXN0bWVudCA9IDA7CkBA
IC01NzMsMTcgKzMyNCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50
KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1lbnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0
YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQogewotICAgIGNoYXIqIGJlZ2luID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSk7CisgICAgY2hhciogYmVnaW4gPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jhc2UpOwogICAgIGNoYXIqIGVuZCA9
IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lk
Kik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFja1RvcCkpKTsKICAgICBBU1NFUlQo
YmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVuZFdpdGhSZWRab25lID0gZW5kICsgb3NSZWRa
b25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6
ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSkg
PT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSk7CiAKLSAgICBp
ZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFja0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQpOworICAgIGlmIChlbmRXaXRoUmVk
Wm9uZSA8IG1fc3RhY2tFbmQpCisgICAgICAgIGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tFbmQpOwogCiAgICAgc3RkOjpzd2FwKGJlZ2luLCBlbmRX
aXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJlZ2luLCBlbmRXaXRoUmVk
Wm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5ICszNjcsOSBAQCBzdGF0aWMgdm9pZCBjb3B5TWVtb3J5
KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKIC8vIHNpZ25pZmljYW50
IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2sgaXMgb25seSBjYWxs
ZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBzaXplKQogLy8gb3BlcmF0aW9uLiBBcyB0aGUgaGVhcCBp
cyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIgdGhhbiB0aGUgc3RhY2sgdGhlIHBlcmZvcm1hbmNlIGhp
dCBpcyBtaW5pbWFsLgogLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
ayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCog
c2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhy
ZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUp
CiB7Ci0gICAgVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIEpTVGhyZWFkOjpSZWdp
c3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCByZWdpc3RlcnNTaXplID0gdGhyZWFkLT5nZXRS
ZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gc3RhY2sg
PSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3RlcnMuc3RhY2tQb2ludGVyKCkpOwogCkBAIC02
MzEsOCArMzgyLDYgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3Rh
Y2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV8KICAgICBpZiAoY2FuQ29weSkK
ICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyKSArICpzaXplLCBz
dGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAgICAqc2l6ZSArPSBzdGFjay5zZWNvbmQ7Ci0K
LSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKIH0KIAogYm9vbCBNYWNoaW5l
VGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
dm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKQEAgLTY0NCwzNiAr
MzkzLDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhj
b25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAKICAgICAqc2l6ZSA9IDA7CiAKLSAg
ICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgp
OworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CiAgICAgaW50IG51
bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAgdG8gZGVub3RlIHRoYXQgd2UgaGF2ZW4ndCBj
b3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5ZXQuCiAgICAgaW50IGluZGV4ID0gMTsKLSAg
ICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CisgICAgSlNUaHJlYWQqIHRo
cmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CiAKLSAgICBUaHJlYWQqIHByZXZpb3VzVGhyZWFk
ID0gbnVsbHB0cjsKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsgdGhyZWFkOyBpbmRleCsrKSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhy
ZWFkKSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aHJlYWQtPnN1c3BlbmQoKTsKKyAg
ICBKU1RocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOworICAgIGZvciAoSlNUaHJlYWQq
IHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgaW5kZXgrKykgeworICAgICAg
ICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKSB7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lmIE9TKERBUldJTikKLSAgICAgICAgICAgIGlmICgh
c3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIW51bWJlck9mVGhyZWFkcykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKFRocmVhZCog
Y291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNvdW50
ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5uZXh0KQorICAgICAgICAgICAgICAgICAgICBmb3Ig
KEpTVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRo
cmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZlRocmVhZHMrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gUmUtZG8gdGhlIHN1c3BlbnNpb24gdG8gZ2V0
IHRoZSBhY3R1YWwgZmFpbHVyZSByZXN1bHQgZm9yIGxvZ2dpbmcuCi0gICAgICAgICAgICAgICAg
a2Vybl9yZXR1cm5fdCBlcnJvciA9IHRocmVhZF9zdXNwZW5kKHRocmVhZC0+cGxhdGZvcm1UaHJl
YWQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVycm9yICE9IEtFUk5fU1VDQ0VTUyk7CisK
KyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmVycm9yKCkgIT0gS0VSTl9TVUNDRVNTKTsK
IAogICAgICAgICAgICAgICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwKLSAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFn
ZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRo
cmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVhZCAlcC4iLAotICAgICAgICAgICAgICAgICAg
ICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0
PHZvaWQqPih0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
IkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhy
ZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBpZCAlcC4iLAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZXJyb3IoKSwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnRocmVhZElEKCkpKTsKIAogICAgICAgICAg
ICAgICAgIC8vIFB1dCB0aGUgaW52YWxpZCB0aHJlYWQgb24gdGhlIHRocmVhZHNUb0JlRGVsZXRl
ZCBsaXN0LgogICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgZGVsZXRlIGl0IGhlcmUg
YmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRlZCBvdGhlcgogICAgICAgICAgICAgICAgIC8vIHRocmVh
ZHMsIGFuZCB0aGV5IG1heSBzdGlsbCBiZSBob2xkaW5nIHRoZSBDIGhlYXAgbG9jayB3aGljaAog
ICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgZm9yIGRlbGV0aW5nIHRoZSBpbnZhbGlkIHRocmVh
ZC4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAvLyBkZWZlciB0aGUgZGVsZXRp
b24gdGlsbCBhZnRlciB3ZSBoYXZlIHJlc3VtZWQgYWxsIHRocmVhZHMuCi0gICAgICAgICAgICAg
ICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgICAgICAgICAgICAgIEpT
VGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICAgICAgICAgIHRocmVh
ZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsKICAgICAgICAgICAgICAgICB0aHJlYWRzVG9C
ZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4NywyNSArNDM0LDI1IEBAIGJvb2wgTWFjaGluZVRo
cmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mVGhyZWFk
cyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJldmlvdXNUaHJlYWQpOwotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcHJldmlv
dXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IHRocmVhZC0+bmV4dDsKICAgICB9
CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZv
cm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+
dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKHRo
cmVhZCwgYnVmZmVyLCBjYXBhY2l0eSwgc2l6ZSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQq
IHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5u
ZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKQorICAgIGZvciAo
SlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0g
dGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpCiAg
ICAgICAgICAgICB0aHJlYWQtPnJlc3VtZSgpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0
aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7Ci0gICAgICAgIFRocmVhZCog
bmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSB0
aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0VGhy
ZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICBkZWxldGUgdGhyZWFkOwogICAgICAgICB0aHJl
YWQgPSBuZXh0VGhyZWFkOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggZDE5NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNkODdm
Nzk5NDQ4N2YyMi4uOTE5N2M0NDA4Y2UyZmQ0ZWU2YWEzZDE0YTdjNjllNmY4Y2ExMDk0NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKQEAg
LTIyLDI1ICsyMiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4
dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTdGF0
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVj
aWZpYy5oPgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJ
TikKLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLS8vIFVzaW5n
IHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxl
IG9uIEZyZWVCU0QuCi0vLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAt
Q1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQotLy8gcmVtb3ZlZCBhZnRlciBGcmVl
QlNEIDEwLnggZ29lcyBFT0wuCi0vLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEv
c2hvd19idWcuY2dpP2lkPTIwNzA3OQotI2lmIE9TKEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNvbnRl
eHQuaD4KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxv
Y2tTZXQ7CkBAIC02NCwxMyArNTEsMTAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCk7IC8vIE9ubHkgbmVlZHMg
dG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJvbSBt
dWx0aXBsZSB0aHJlYWRzLgogCi0gICAgY2xhc3MgVGhyZWFkRGF0YSB7CisgICAgY2xhc3MgSlNU
aHJlYWQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFRocmVhZERhdGEoKTsKLSAgICAgICAgflRocmVhZERhdGEoKTsKLQotICAgICAgICBz
dGF0aWMgVGhyZWFkRGF0YSogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICBKU1Ro
cmVhZChNYWNoaW5lVGhyZWFkcyopOwogCiAgICAgICAgIHN0cnVjdCBSZWdpc3RlcnMgewogICAg
ICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVyKCkgY29uc3Q7CkBAIC03OSw4NCArNjMsNDAgQEAg
Y2xhc3MgTWFjaGluZVRocmVhZHMgewogICAgICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2lu
dGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYg
Ly8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICAgICAgCi0jaWYgT1MoREFSV0lO
KSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBN
YWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdpc3RlcnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkgfHwg
ZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKQotICAgICAgICAgICAgdXNpbmcgUGxh
dGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgICAg
ICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKLSAgICAgICAgICAgICAgICBwdGhyZWFk
X2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAgICAgICB9OwotI2Vsc2UKLSNlcnJvciBOZWVkIGEg
dGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3IgdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAgICAg
ICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CisgICAgICAgICAgICBXVEY6OlBsYXRmb3Jt
UmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBzdXNwZW5kKCk7Ci0g
ICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0
ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJlZ2lzdGVycyhSZWdpc3RlcnMmKTsKKyAgICAgICAg
RXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpIHsg
cmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7IH0KKyAgICAgICAgdm9pZCByZXN1bWUoKSB7IG1f
dGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVy
cyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2so
dm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFk
OwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kOwotI2lm
IE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRMRSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNlbGlm
IFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3JlRm9y
U3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNvbnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4
dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3VudCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9taWM8
Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFzcyBU
aHJlYWQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgVGhyZWFk
KFRocmVhZERhdGEqKTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgUmVnaXN0ZXJzID0g
VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0ZUZv
ckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZv
cm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBs
YXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
LQotICAgICAgICBib29sIHN1c3BlbmQoKSB7IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0KLSAg
ICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEtPnJlc3VtZSgpOyB9Ci0gICAgICAgIHNpemVfdCBn
ZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3RlcnMo
cmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykgeyBk
YXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9Ci0gICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6
ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1cmVT
dGFjayhzdGFja1RvcCk7IH0KLQotICAgICAgICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZv
cm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVhZDsgfQotICAgICAgICB2b2lk
KiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0Jhc2U7IH0KLSAgICAgICAg
dm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0VuZDsgfQorICAgICAg
ICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVh
ZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
Y2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQqIG5leHQ7Ci0gICAgICAgIFRocmVhZERhdGEqIGRh
dGE7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0OworICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1f
dGhyZWFkOworICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKKyAgICAgICAgdm9pZCogbV9zdGFj
a0VuZDsKICAgICB9OwogCiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJl
ZFRocmVhZHNNdXRleDsgfQotICAgIFRocmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9j
a2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQotICAgIFRocmVhZCogbWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkc0xpc3RIZWFk
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFk
c011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQorICAgIEpT
VGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOwogCiBwcml2YXRlOgogICAg
IHZvaWQgZ2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHVi
Um91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0gICAg
dm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QqKTsKKyAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhyZWFk
Kiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7CiAgICAgYm9vbCB0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIHJl
bW92ZVRocmVhZCh2b2lkKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVh
ZD4KLSAgICB2b2lkIHJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQpOworICAgIHZv
aWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJlYWRJZGVudGlmaWVyKTsKIAogICAgIExvY2sgbV9y
ZWdpc3RlcmVkVGhyZWFkc011dGV4OwotICAgIFRocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsK
KyAgICBKU1RocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNwZWNp
ZmljS2V5IG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkczsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCmluZGV4IDIwODBjZDkzNDU4MzNkMmQyMzJiOGE5Y2Q2
ZjNkYmZlYmUwNWNiMjMuLmUwYWJmMjk4YmZiZTJlZWVjMzQyNWI2NjA5Y2U3MjEzM2M0MWNkZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcApAQCAtNTgsNyArNTgsNyBAQCBB
dG9taWM8SUNTdGF0cyo+IElDU3RhdHM6OnNfaW5zdGFuY2U7CiAKIElDU3RhdHM6OklDU3RhdHMo
KQogewotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgIG1fdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoCiAgICAgICAgICJKU0MgSUNTdGF0cyIsCiAgICAgICAgIFt0aGlzXSAoKSB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwpAQCAtODQsNyArODQsNyBAQCBJ
Q1N0YXRzOjp+SUNTdGF0cygpCiAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwogICAg
IH0KICAgICAKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZCk7CisgICAgbV90
aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiB9CiAKIHZvaWQgSUNTdGF0czo6YWRkKGNvbnN0
IElDRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9J
Q1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAppbmRleCBlNzVj
ZmRmNGQ0ZDlkN2RjYmYxYTMxYTk4Mjk0MTkyZTU1YjljZmIwLi5lYjdlMWU5MmNlOTdkZDFkOTUw
ODk3MjdjODRhOWM1ZWM3ZjU3YzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaApA
QCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIElDU3RhdHMgewogcHJpdmF0ZToKIAogICAgIFNwZWN0
cnVtPElDRXZlbnQsIHVpbnQ2NF90PiBtX3NwZWN0cnVtOwotICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX2xvY2s7
CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIGJvb2wgbV9zaG91bGRTdG9wIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTliNjI3M2RlYWIxZGQ1OWZkNzU5NDFjZDZl
NjExNDkyODc5MjQ3MC4uNzVhYzYwZDliMzQ2MDgxY2I2NzA2OWVkZWQzNTI4NTQzZmJkM2Q4NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI1NDQsNyArMjU0NCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBDb25kaXRpb24gZGlkU3RhcnRDb25kaXRpb247CiAgICAgYm9vbCBkaWRTdGFydCA9IGZh
bHNlOwogICAgIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkID0gY3JlYXRlVGhyZWFkKAor
ICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAiSlND
IEFnZW50IiwKICAgICAgICAgW3NvdXJjZUNvZGUsICZkaWRTdGFydExvY2ssICZkaWRTdGFydENv
bmRpdGlvbiwgJmRpZFN0YXJ0XSAoKSB7CiAgICAgICAgICAgICBDb21tYW5kTGluZSBjb21tYW5k
TGluZSgwLCBudWxscHRyKTsKQEAgLTI1NzEsNyArMjU3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNo
KCk7CiAgICAgCiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpZFN0YXJ0
TG9jayk7CkBAIC0zMzExLDcgKzMzMTEsNyBAQCBzdGF0aWMgdm9pZCBzdGFydFRpbWVvdXRUaHJl
YWRJZk5lZWRlZCgpCiAgICAgICAgICAgICBkYXRhTG9nKCJXQVJOSU5HOiB0aW1lb3V0IHN0cmlu
ZyBpcyBtYWxmb3JtZWQsIGdvdCAiLCB0aW1lb3V0U3RyaW5nLAogICAgICAgICAgICAgICAgICIg
YnV0IGV4cGVjdGVkIGEgbnVtYmVyLiBOb3QgdXNpbmcgYSB0aW1lb3V0LlxuIik7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAi
anNjIFRpbWVvdXQgVGhyZWFkIik7CisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSh0aW1lb3V0
VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggMDFiMWZlMTI3ZThiNzMxZmI1
M2I3YzJjZGI5OWVlMTlkZDVhZGE2OC4uNjMyMmU3MzMyMjkyMTE0ZjBlMjU0YThlMWVmMTNkYTVj
NDE5NTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0x
MDksNyArMTA5LDcgQEAgdm9pZCBKU0xvY2s6OmxvY2soaW50cHRyX3QgbG9ja0NvdW50KQogICAg
ICAgICBtX2xvY2subG9jaygpOwogICAgIH0KIAotICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50
VGhyZWFkKCk7CisgICAgbV9vd25lclRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1faGFzT3duZXJUaHJlYWQgPSB0cnVlOwogICAg
IEFTU0VSVCghbV9sb2NrQ291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
aAppbmRleCAwYzM1ODQ3ZTQyM2U2NGJjNzA1MDNkNWUxZDg1ZDQ4MDUwOWRiZTc0Li4xYWNhNGI5
YTdiYjRkY2FmMDRkZjEyMTcxMDk3MjBlYzhlMmQ2OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suaApAQCAtOTIsMTMgKzkyLDEzIEBAIGNsYXNzIEpTTG9jayA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKIAogICAgIFZNKiB2bSgpIHsgcmV0dXJu
IG1fdm07IH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8VGhyZWFkSWRlbnRpZmllcj4gb3duZXJUaHJl
YWQoKSBjb25zdAorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVyVGhyZWFk
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2hhc093bmVyVGhyZWFkKQogICAgICAgICAg
ICAgcmV0dXJuIG1fb3duZXJUaHJlYWQ7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAg
ICAgfQotICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB7IHJldHVybiBtX2hh
c093bmVyVGhyZWFkICYmIG1fb3duZXJUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpOyB9CisgICAg
Ym9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsgcmV0dXJuIG1faGFzT3duZXJUaHJl
YWQgJiYgbV9vd25lclRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7IH0KIAogICAgIHZv
aWQgd2lsbERlc3Ryb3lWTShWTSopOwogCkBAIC0xMzUsNyArMTM1LDcgQEAgY2xhc3MgSlNMb2Nr
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogICAgIC8vIGRpZmZlcmVu
dCB0aHJlYWQsIGFuZCBhbiBvcHRpb25hbCBpcyB2dWxuZXJhYmxlIHRvIHJhY2VzLgogICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MDQyI2M2CiAg
ICAgYm9vbCBtX2hhc093bmVyVGhyZWFkIHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fb3duZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9vd25lclRocmVhZDsKICAgICBp
bnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX2xvY2tEcm9wRGVwdGg7CiAgICAg
Ym9vbCBtX3Nob3VsZFJlbGVhc2VIZWFwQWNjZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU0MTk3ZTczYzg0MTJhODBmMzYxNDBjN2FkODZlYzc2NGZhYzI5MzcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUGxhdGZvcm1UaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIE9TKERBUldJTikgfHwgT1MoVU5JWCkKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0j
aW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDxt
YWNoL3RocmVhZF9hY3QuaD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8d2luZG93cy5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgT1MoREFSV0lOKQotdHlwZWRlZiBt
YWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIE9TKFdJTkRPV1MpCi10eXBlZGVmIERX
T1JEIFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhyZWFk
X3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZW5kaWYgLy8gT1MoREFSV0lOKQotICAgIAotaW5saW5lIFBs
YXRmb3JtVGhyZWFkIGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpCi17Ci0jaWYgT1MoREFSV0lOKQot
ICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhyZWFkX25wKHB0aHJlYWRfc2VsZigpKTsKLSNlbGlm
IE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOwotI2VsaWYgVVNF
KFBUSFJFQURTKQotICAgIHJldHVybiBwdGhyZWFkX3NlbGYoKTsKLSNlbmRpZgotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5jcHAKaW5kZXggN2QzN2E2NzRhYmEwOTQ3MjMxODQ5M2IzM2JjODlmZTNm
YWQ5OGE5ZC4uNjdmMjBkOTJjZWNkZjBhYjNiZmY3ZjZmZDEyNjYwMGFhMTViZjFhZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAK
QEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBGcmFtZVdhbGtlciB7CiAgICAgYm9vbCBpc1ZhbGlk
RnJhbWVQb2ludGVyKHZvaWQqIGV4ZWMpCiAgICAgewogICAgICAgICB1aW50OF90KiBmcENhc3Qg
PSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGV4ZWMpOwotICAgICAgICBmb3IgKE1hY2hpbmVUaHJl
YWRzOjpUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNM
aXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQt
Pm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9
IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVUaHJl
YWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAg
IHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNr
QmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrTGltaXQgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0YWNrQmFzZSk7CkBAIC0yNzksNyArMjc5LDcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxp
bmdQcm9maWxlcihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAgICwg
bV93ZWFrUmFuZG9tKCkKICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkKICAg
ICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhPcHRpb25zOjpz
YW1wbGVJbnRlcnZhbCgpKSkKLSAgICAsIG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgICwgbV90
aHJlYWQobnVsbHB0cikKICAgICAsIG1fanNjRXhlY3V0aW9uVGhyZWFkKG51bGxwdHIpCiAgICAg
LCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pc1NodXREb3duKGZhbHNlKQpAQCAtMzAwLDEx
ICszMDAsMTEgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2Fy
eShjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgp
KTsKIAotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8U2FtcGxpbmdQcm9maWxlcj4gcHJvZmlsZXIgPSB0
aGlzOwotICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgianNjLnNhbXBsaW5n
LXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci50aHJlYWQiLCBbcHJvZmlsZXJdIHsKICAgICAg
ICAgcHJvZmlsZXItPnRpbWVyTG9vcCgpOwogICAgIH0pOwogfQpAQCAtMzQ0LDcgKzM0NCw3IEBA
IHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYs
IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAgICAgIExvY2tIb2xkZXIgY29kZUJsb2NrU2V0
TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwogICAgICAgICBMb2Nr
SG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2lu
Z2xldG9uKCkuZ2V0TG9jaygpKTsKIAotICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4
ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOworICAgICAgICBhdXRvIGRpZFN1c3BlbmQgPSBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewog
ICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBjYW4n
dCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVzZSB0aGUgSlNDIHRocmVhZAogICAgICAgICAg
ICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgpAQCAtMzU0LDEzICszNTQsMTIg
QEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xM
SW50ID0gZmFsc2U7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3Rl
cnM7CisgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnMg
cmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdp
c3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICBtYWNoaW5lRnJhbWUgPSByZWdpc3Rl
cnMuZnJhbWVQb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGljX2Nh
c3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAgICAgICAgICAgICAgICBtYWNoaW5lUEMg
PSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgbGxpbnRQ
QyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25U
aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFy
c2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0N2Y5ZTY3NjhhZDQzN2JiMThlMGE4YWJjNzk1
YmQ2Y2YuLjA0M2RhZGJhNDA3MGI2ZjkxODA3YmQ0Y2ExMzI2OTRjM2NlYmFjNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAgLTE5
NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1fbGFzdFRpbWU7CiAgICAgTG9jayBt
X2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7Ci0gICAgTWFj
aGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVjdXRpb25UaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV90aHJlYWQ7CisgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkKiBtX2pzY0V4ZWN1
dGlvblRocmVhZDsKICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lzU2h1dERvd247
CiAgICAgYm9vbCBtX25lZWRzUmVwb3J0QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5NWY0
NmUuLmU5N2MzMTg1ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZN
PiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENvZGVC
bG9jayosIGNvbnN0IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAgc3Rk
OjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRo
cmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVh
ZCgpOyB9CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNkNDYz
YjcyZjMzZTQ2NGI3YjVhNTlkMDExOTM4ZjY5Li4yNzJjNGRlZmE4NTVmYzM5YjBjZDQxMDFlNWU3
ZTRiMmJkYzBkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cApAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8Vk0qLCBTdGFj
a0JvdW5kcz4sIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAgICAgICAgICAg
ICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBUcnkgbmV4
dCBWTS4KICAgICAgICAgfQogCi0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OlRocmVhZCog
dGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9j
a2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNo
aW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1hY2hpbmVUaHJlYWRzLnRocmVhZHNMaXN0
SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPnN0YWNrQmFzZSgpKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tFbmQoKSk7CiAgICAgICAgICAg
ICBpZiAoc3RhY2tQb2ludGVyIDw9IHRocmVhZC0+c3RhY2tCYXNlKCkgJiYgc3RhY2tQb2ludGVy
ID49IHRocmVhZC0+c3RhY2tFbmQoKSkgewpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgVk1UcmFw
czo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAg
ICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAg
ICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2ln
bmFsVGhyZWFkKG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKSwgU0lHVVNSMSk7CisgICAgICAg
ICAgICAgICAgb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLT5zaWduYWwoU0lHVVNSMSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQ5Myw3ICs0OTMsNyBA
QCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6OkV2ZW50VHlwZSBldmVudFR5cGUpCiAg
ICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3QgYmxvY2suCiAgICAgICAgIFJlZlB0cjxTaWdu
YWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5ldyBTaWduYWxTZW5kZXIodm0oKSwgZXZlbnRU
eXBlKSk7CiAgICAgICAgIGFkZFNpZ25hbFNlbmRlcihzZW5kZXIuZ2V0KCkpOwotICAgICAgICBj
cmVhdGVUaHJlYWQoImpzYy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0gewor
ICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBb
c2VuZGVyXSB7CiAgICAgICAgICAgICBzZW5kZXItPnNlbmQoKTsKICAgICAgICAgfSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU4ZjE5YjU2
ZDMzY2I4OGE2ZmI0OWQ2ZTVmM2I2MDk3ODZiYzBjYy4uNzQxNDhhODAxNGIyZWUwY2U1MTEyNjZj
YmE0YThhNzRlZWQyNjg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zMjUsOCArMzI1LDggQEAKIAkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEE0NzMyRDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJQThB
NDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdU
RlN0cmluZy5oICovOyB9OwogCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uLmggKi87IH07Ci0JCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmNwcCAqLzsgfTsKLQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmggKi87IH07CisJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRo
cmVhZHMuY3BwICovOyB9OworCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9s
ZGVyUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oICov
OyB9OwogCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMyMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi87IH07CiAJ
CUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovOyB9OwpAQCAtNzI4LDggKzcyOCw4
IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThB
NDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhy
ZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTE2NCw4ICsxMTY0LDggQEAKIAkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJD
MjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgwMDEw
MDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovLAotCQkJCUE4QTQ3MzMwMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywKLQkJCQlB
OEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5o
ICovLAorCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFk
cy5jcHAgKi8sCisJCQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0
aHJlYWRzLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAog
CQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8s
CkBAIC0xNjE4LDcgKzE2MTgsNyBAQAogCQkJCTFDQ0RCMTRGMUU1NjY4OTgwMDZDNzNDMCAvKiBU
ZXh0QnJlYWtJdGVyYXRvcklDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1
QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xODQzLDcgKzE4NDMsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMw
MEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3
RjFEMzA3OERBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUMxODFDOTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
OEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNG
IC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNl
L1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1
MjllOGFhZWE2YWJmNjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRi
OGMwYjk5YWJjM2I3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlv
blNwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVk
VGVzdC5jcHAKQEAgLTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9u
VHlwZSBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAK
LSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxU
aHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9k
dWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tU
eXBlIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1l
cnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgp
IHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVu
VGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25z
dW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVl
LCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVu
dCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51
ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgp
LCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxk
Q29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVl
dWUuaXNFbXB0eSgpKQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNv
bnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAg
ICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9p
ZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxv
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcg
cHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRp
bnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRp
bnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXpl
KCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVl
LnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBA
IC0xMzgsMTEgKzEzOCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5v
dGlmeShlbXB0eUNvbmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRp
Zmllcik7CisgICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAK
LSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhy
ZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7
CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAg
ICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtz
L0xvY2tGYWlybmVzc1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTEx
ODQ4YmI1MmQ5NGYuLjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYy
LDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3Vu
aXF1ZTx1bnNpZ25lZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRo
cmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRp
ZmllcltdPihudW1UaHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJl
YWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRo
cmVhZHMpOwogICAgIAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAg
ICAgCkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsK
ICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFk
c1t0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhy
ZWFkIiwKICAgICAgICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcg
KzEwNyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFk
SW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3Ro
cmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFy
a3MvTG9ja1NwZWVkVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVz
dC5jcHAKaW5kZXggNTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJk
MzlmODdjNmM3MDZjMTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2ht
YXJrcy9Mb2NrU3BlZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJr
IHsKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5b
XT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1U
aHJlYWRHcm91cHMpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91Ymxl
PltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1U
aHJlYWRHcm91cHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltd
PiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVh
ZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFk
PltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZv
bGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3Qg
QmVuY2htYXJrIHsKICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0g
MDsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQ
ZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVU
aHJlYWQoCisgICAgICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhy
ZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAg
ICAgICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVh
ZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xv
Y2ssICZudW1JdGVyYXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
bG9jYWxXb3JkID0gMDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAg
ICAgICAga2VlcEdvaW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhy
ZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZElu
ZGV4LS07KQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJl
YWRJbmRleF0pOworICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21w
bGV0aW9uKCk7CiAKICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJl
YWQuY3BwIGIvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUy
NWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJk
MGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNU
aHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1
NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQogICAgIAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0g
ICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRo
cmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1Ro
cmVhZCIsCiAgICAgICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVz
dWx0OjpDb250aW51ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRo
cmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGlj
VGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5
Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1NWZlYmEyYzcuLmI1MGJiYmMzYmYzYWQyYjFmZGQxMzQ1
MzQ4NjU0YWIxZDQxOGNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xMjgsNyArMTI4LDYg
QEAgc2V0KFdURl9IRUFERVJTCiAgICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0
cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5oCiAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmljLmgK
ICAgICBUaHJlYWRpbmcuaApAQCAtMzI5LDE2ICszMjgsMTQgQEAgbGlzdChBUFBFTkQgV1RGX0xJ
QlJBUklFUwogaWYgKFdJTjMyKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAg
IE9TQWxsb2NhdG9yV2luLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAgICAg
IFRocmVhZFNwZWNpZmljV2luLmNwcAogICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAgKQog
ZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9IRUFERVJTCi0gICAgICAgIFRocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHMuaAotICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwog
ICAgICAgICBPU0FsbG9jYXRvclBvc2l4LmNwcAotICAgICAgICBUaHJlYWRJZGVudGlmaWVyRGF0
YVB0aHJlYWRzLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAgICAg
VGhyZWFkaW5nUHRocmVhZHMuY3BwCiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAK
aW5kZXggMDI0OTU0NGM1MThlODJhZmYxNzA1ZGUxOWVjOTY1YWI5OGIxZDEwNi4uMzRiOTQyNTU1
YWI1NjE4MzIxMDE4YjRmMDc5MGYyODI1MGE3ZGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvTWFpblRocmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKQEAg
LTE4Niw5ICsxODYsOSBAQCBib29sIGlzTWFpblRocmVhZCgpCiAjZW5kaWYKIAogI2lmICFVU0Uo
V0VCX1RIUkVBRCkKLWJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWQpCitib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRo
cmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCkKIHsKLSAgICByZXR1cm4gdGhyZWFkSWQgPT0g
Y3VycmVudFRocmVhZCgpOworICAgIHJldHVybiB0aHJlYWQgPT0gY3VycmVudFRocmVhZCgpOwog
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBiL1Nv
dXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3NjgzY2U1
NTA4ZGQ4ZDdmMWQ3N2FmLi4wZTc4ZThlNTFhYmU4ZDk1NTQ3MmM3OWRkMzQ2OTJmMTU0NmRiMWE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvTWFpblRocmVhZC5oCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlIDxzdGRpbnQu
aD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQ
cmludFN0cmVhbTsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotCiAvLyBN
dXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmgKaW5kZXggZGZkZGYwYTk1NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2YzdiZC4u
NDEyOGY1Y2Q3MWE3ZGIyZjRmZDcwMzI5NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93dGYv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIgewogI2lmIFVTRShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fc291cmNlOwogI2Vsc2UKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwor
ICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIvU291
cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIwYTM4
ZTEwM2U3YzlhMmU0ZjBmN2UwNjEwNTcxNC4uY2NlMTEwNmQ0NjdiNzIwODNjMWVkYjIxM2FkNTlj
NDQwMzE3YTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJp
Yy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTkz
LDE0ICs5MywxNCBAQCBib29sIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRy
eUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCogcGFyZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElEID0g
Y3JlYXRlVGhyZWFkKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJU
aHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAg
ICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJl
YWRQcml2YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKIAotICAg
IGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgbV9wYXJlbnQgPSBw
YXJlbnQ7CiAKICAgICBtX211dGV4LnVubG9jaygpOwotICAgIHJldHVybiBtX3RocmVhZElEOwor
ICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJl
YWRQcml2YXRlOjpleGVjdXRlKFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lkKiBw
YXJhbWV0ZXJzKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6
VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEpCiAgICAgVGhyZWFk
UHJpdmF0ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWRQcml2YXRlKj4o
dGhyZWFkRGF0YSk7CiAgICAgTG9ja0hvbGRlciBsb2NrKHNoYXJlZFRocmVhZC0+bV9tdXRleCk7
CiAKLSAgICB3aGlsZSAoc2hhcmVkVGhyZWFkLT5tX3RocmVhZElEKSB7CisgICAgd2hpbGUgKHNo
YXJlZFRocmVhZC0+bV90aHJlYWQpIHsKICAgICAgICAgaWYgKHNoYXJlZFRocmVhZC0+bV9ydW5u
aW5nKSB7CiAgICAgICAgICAgICAoKnNoYXJlZFRocmVhZC0+bV90aHJlYWRGdW5jdGlvbikoc2hh
cmVkVGhyZWFkLT5tX3BhcmFtZXRlcnMpOwogICAgICAgICAgICAgc2hhcmVkVGhyZWFkLT5tX3J1
bm5pbmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dl
bmVyaWMuaCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCA0NTg0
MDdjNGNiNGEzZjk5NWM5MGM1NTU2MjdjMWNiZDIyYjQxYjVjLi43ZDY4ZWYwNzBmNjdhNjUzM2Mw
Yjg3NTgzZDJhNTdhMTE4ZDA1NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxl
bEpvYnNHZW5lcmljLmgKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5o
CkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgIGNsYXNz
IFRocmVhZFByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7CiAgICAg
cHVibGljOgogICAgICAgICBUaHJlYWRQcml2YXRlKCkKLSAgICAgICAgICAgIDogbV90aHJlYWRJ
RCgwKQorICAgICAgICAgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICAgICAgICAgLCBtX3J1
bm5pbmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGFyZW50KDApCiAgICAgICAgIHsKQEAgLTc0
LDcgKzc0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgICAgIHN0YXRpYyB2
b2lkIHdvcmtlclRocmVhZCh2b2lkKik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwog
ICAgICAgICBib29sIG1fcnVubmluZzsKICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCogbV9w
YXJlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5YWRk
YjJjYzU4MTBiNTZlMWMxNC4uY2MxYTIxYjllYTVjY2NjNmYxYWNlNGM5NzQ5ODk5YmJkYTVkN2Ux
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVhZERh
dGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRocmVh
ZERhdGEoKTsKICAgICB+VGhyZWFkRGF0YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyOworICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKICAgICAKICAgICBNdXRleCBw
YXJraW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKQEAgLTQy
Myw3ICs0MjMsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFk
cykKIH0KIAogVGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCi0gICAgOiB0aHJlYWRJZGVudGlmaWVy
KGN1cnJlbnRUaHJlYWQoKSkKKyAgICA6IHRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAg
ICB1bnNpZ25lZCBjdXJyZW50TnVtVGhyZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC03OTMsNyAr
NzkzLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZv
aWQqIGFkZHJlc3MpCiAgICAgdW5wYXJrQ291bnQoYWRkcmVzcywgVUlOVF9NQVgpOwogfQogCi1O
RVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1i
ZGE8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKK05FVkVS
X0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2
b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQogewogICAgIFZlY3RvcjxCdWNr
ZXQqPiBidWNrZXRzVG9VbmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CiAKQEAgLTgwMyw3ICs4MDMs
NyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaQogICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJlYWRE
YXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhyZWFk
RGF0YSA9IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKLSAgICAgICAgICAgIGNhbGxi
YWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLCBjdXJyZW50VGhyZWFkRGF0
YS0+YWRkcmVzcyk7CisgICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhy
ZWFkLmdldCgpLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAgIAogICAg
IHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmluZGV4IDdk
NWZiMTdlZmEwMmFiNzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTljN2I3ZmQ0
Y2M2YWNhZTM2MmFlYTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3ICsxNTgs
NyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAgIGZv
ckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZv
aWQqKT4oZnVuYykpOworICAgICAgICBmb3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChU
aHJlYWQmLCBjb25zdCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNzEs
NyArMTcxLDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNv
bnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwogCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3Bl
ZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRh
PHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1Jl
ZlB0ci5oCmluZGV4IGZlMTYzMGM5NzM1YjVmZjUzNTNjYjJjNTU4ZTMxMDU4MTI0Nzg3ZDguLjI3
N2U2NzVkYjNjNTU1ZDVlNGM2Y2UwNDk0Njg4NzRkMzY3Njk1OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC00Miw3
ICs0Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0ciB7CiAKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNSZWZQdHIgPSB0cnVlOwogCi0gICAgQUxXQVlTX0lOTElORSBS
ZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3RleHBy
IFJlZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQdHIo
VCogcHRyKSA6IG1fcHRyKHB0cikgeyByZWZJZk5vdE51bGwocHRyKTsgfQogICAgIEFMV0FZU19J
TkxJTkUgUmVmUHRyKGNvbnN0IFJlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IHJlZklmTm90
TnVsbChtX3B0cik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29uc3QgUmVm
UHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0KCkpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAppbmRleCA5NDNmZDZkNzlkMDk0
NDI1NTAzYWM4OTczMWIwYTA2YTZhYzQwZmZkLi5jYjI3NWY3MDEyY2ZlNTY2MWU0OWUwYjRmZjBk
OWM2MjFiMGU0OTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24u
aApAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAog
I2RlZmluZSBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAogCisjaW5jbHVkZSAiVGhyZWFkaW5n
LmgiCisKIG5hbWVzcGFjZSBXVEYgewogCiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbiko
dm9pZCogYXJndW1lbnQpOwpAQCAtMzYsMTMgKzM4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKlRocmVh
ZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEpCisg
ICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCBSZWZQ
dHI8VGhyZWFkPiYmIHRocmVhZCwgdm9pZCogZGF0YSkKICAgICAgICAgOiBmdW5jdGlvbihmdW5j
dGlvbikKKyAgICAgICAgLCB0aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQogICAgICAgICAsIGRhdGEo
ZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb247CisgICAg
UmVmUHRyPFRocmVhZD4gdGhyZWFkOwogICAgIHZvaWQqIGRhdGE7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRHcm91cC5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkR3Jv
dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZDc1MDdjZTQ3NzFkZGMyYzkxZTIzMGM0OGEzZjhmOWYzYTY1YTA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkR3JvdXAuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgVGhyZWFkR3Jv
dXAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEdyb3VwKTsKK3B1YmxpYzoKK3By
aXZhdGU6Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQ
dGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2FjMjNiMGFmZTk2MTI0ZDJmZDBjNTYxMTdmMDBmMzA5NGIwZWI1ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApAQCAt
MCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhv
bGRlclB0aHJlYWRzLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworI2lmIFVTRShQVEhS
RUFEUykKKworI2lmIE9TKEhVUkQpCisvLyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVk
IGluIGJpb25pYyBub3IgaW4gSHVyZCwgc28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVyZS4KKyNk
ZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAxMDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0cy5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitwdGhyZWFkX2tleV90IFRocmVhZEhvbGRlcjo6
bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkKTsK
KworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlkRXhp
dCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIGlu
dCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKKyAgICBpZiAo
ZXJyb3IpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVy
OjpjdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHB0aHJlYWRfZ2V0c3BlY2lmaWMo
bV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFkJiB0aHJl
YWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3ZSdkIGhh
dmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1
cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVy
ZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8vIFdURjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAg
ICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7
CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sK
KyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhy
ZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKKwor
ICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAg
ICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAg
ICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0
KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUg
Y2FsbGVkLgorICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJE
YXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTNjZWRmMTU4
MDM1ZmNjNjQzZDMyZjVlMmVkMjI1NjdlNzBlYzNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApAQCAtMCwwICsxLDgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFRocmVhZEhvbGRlclB0aHJlYWRzX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyUHRocmVhZHNf
aAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
SG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBw
dGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlCisv
LyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZp
YyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KK2NsYXNzIFRocmVh
ZEhvbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkSG9sZGVyKTsKK3B1Ymxp
YzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7CisKKyAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlv
biBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgorICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUg
Y2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOworCisgICAgLy8gQ3JlYXRlcyBhbmQgcHV0
cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRIb2xkZXIgaW50byB0aHJlYWQtc3BlY2lmaWMgc3RvcmFn
ZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFRocmVhZCYpOworCisgICAgLy8gUmV0dXJu
cyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisgICAg
c3RhdGljIFRocmVhZEhvbGRlciogY3VycmVudCgpOworCisgICAgVGhyZWFkJiB0aHJlYWQoKSB7
IHJldHVybiBtX3RocmVhZC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFRocmVhZEhvbGRlcihU
aHJlYWQmIHRocmVhZCkKKyAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAgICwgbV9p
c0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIC8vIFRoaXMgdGhyZWFk
LXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWlu
YXRlczoKKyAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmlj
IGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0
cm95ZWQgb25jZScKKyAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNw
ZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAg
IC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUg
aW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUK
KyAgICAvLyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVw
LgorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVh
ZD4gbV90aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgcHRo
cmVhZF9rZXlfdCBtX2tleTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
VGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY5YzA5NTkzYjk1ZDc2MGU4MjEwODU0MzIyYmNjYTI5NjY4MjU4N2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVy
V2luLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK0RX
T1JEIFRocmVhZEhvbGRlcjo6bV9rZXkgPSAwOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFk
KTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlk
RXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAg
IERXT1JEIG1fa2V5ID0gRmxzQWxsb2MoZGVzdHJ1Y3QpOworICAgIGlmIChtX2tleSA9PSBGTFNf
T1VUX09GX0lOREVYRVMpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhy
ZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9s
ZGVyKj4oRmxzR2V0VmFsdWUobV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemUoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAg
Ly8gSWRlYWxseSB3ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUs
IGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMg
cmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxs
CisgICAgICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdz
IGluIHJlbGVhc2UgbW9kZS4KKyAgICAgICAgRmxzU2V0VmFsdWUobV9rZXksIG5ldyBUaHJlYWRI
b2xkZXIodGhyZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qo
dm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0g
c3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50
aWZpZXJEYXRhKTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3ll
ZE9uY2UpIHsKKyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRP
bmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBh
bm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRl
c3RydWN0b3JzIHdlcmUgY2FsbGVkLgorICAgIEZsc1NldFZhbHVlKG1fa2V5LCB0aHJlYWRJZGVu
dGlmaWVyRGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJX
aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNmQ3MDM1YWQwOGRkNzE4NTFlZTNiOGU0YWQ3ZTkxNmRjZDEyMjYz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmgKQEAg
LTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRIb2xkZXJXaW5faAorI2RlZmluZSBUaHJl
YWRIb2xkZXJXaW5faAorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFk
IGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBGTFMgMi1wYXNzIGRl
c3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQorLy8gVGhyZWFkIGZyb20gdGhyZWFkTWFwLiBJ
dCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMgdHlwZXMgZG9uJ3QgdXNlIG11bHRpcGxl
LXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFzcyBUaHJlYWRIb2xkZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFRocmVhZEhvbGRlcik7CitwdWJsaWM6CisgICAgflRocmVhZEhvbGRlcigpOwor
CisgICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9s
ZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgp
IGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9u
Y2UoKTsKKworICAgIC8vIENyZWF0ZXMgYW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkSG9s
ZGVyIGludG8gdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuCisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZShUaHJlYWQmKTsKKworICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3Rv
cmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgorICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIqIGN1cnJl
bnQoKTsKKworICAgIFRocmVhZCYgdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7IH0K
KworcHJpdmF0ZToKKyAgICBUaHJlYWRIb2xkZXIoVGhyZWFkJiB0aHJlYWQpCisgICAgICAgIDog
bV90aHJlYWQodGhyZWFkKQorICAgICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNh
bGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFkIHRlcm1pbmF0ZXM6CisgICAgLy8gLSBmaXJzdCwgd2hl
biBhbGwgdGhlIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBp
dCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdhcyAnZGVzdHJveWVkIG9uY2UnCisgICAgLy8gYW5kIHJl
LXNldHMgaXRzZWxmIGludG8gdGhlIHRocmVhZC1zcGVjaWZpYyBzbG90IHRvIG1ha2UgV2luIHRv
IGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAt
IHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRN
YXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJ
RklDX0NBTEwgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVh
ZDsKKyAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBEV09SRCBtX2tleTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyV2luX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
Y3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZWJmZTkzYmE1YzcwYTliNGY0YjVmMjY1NzIx
ZGQxNjliZmYxNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
VVNFKFBUSFJFQURTKQotCi0jaW5jbHVkZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5o
IgotCi0jaW5jbHVkZSAiVGhyZWFkaW5nLmgiCi0KLSNpZiBPUyhIVVJEKQotLy8gUFRIUkVBRF9L
RVlTX01BWCBpcyBub3QgZGVmaW5lZCBpbiBiaW9uaWMgbm9yIGluIEh1cmQsIHNvIGV4cGxpY2l0
bHkgZGVmaW5lIGl0IGhlcmUuCi0jZGVmaW5lIFBUSFJFQURfS0VZU19NQVggMTAyNAotI2Vsc2UK
LSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotcHRocmVh
ZF9rZXlfdCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOwot
Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci0KLVRocmVhZElkZW50aWZp
ZXJEYXRhOjp+VGhyZWFkSWRlbnRpZmllckRhdGEoKQotewotICAgIHRocmVhZERpZEV4aXQobV9p
ZGVudGlmaWVyKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9u
Y2UoKQotewotICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3Ry
dWN0KTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIENSQVNIKCk7Ci19Ci0KLVRocmVhZElkZW50
aWZpZXIgVGhyZWFkSWRlbnRpZmllckRhdGE6OmlkZW50aWZpZXIoKQotewotICAgIEFTU0VSVCht
X2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhy
ZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KHB0
aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkpKTsKLQotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVy
RGF0YSA/IHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lkZW50aWZpZXIgOiAwOwotfQotCi12b2lk
IFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKFRocmVhZElkZW50aWZpZXIgaWQpCi17
Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyKCkpOwotICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRo
aXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBl
cmZvcm1hbmUuCi0gICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0
aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCi0gICAgLy8gV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fa2V5ICE9IFBUSFJFQURfS0VZU19NQVgpOwotICAgIHB0aHJlYWRfc2V0c3BlY2lm
aWMobV9rZXksIG5ldyBUaHJlYWRJZGVudGlmaWVyRGF0YShpZCkpOwotfQotCi12b2lkIFRocmVh
ZElkZW50aWZpZXJEYXRhOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQotewotICAgIFRocmVhZElkZW50
aWZpZXJEYXRhKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50
aWZpZXJEYXRhKj4oZGF0YSk7Ci0gICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKLQot
ICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKLSAgICAg
ICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKLSAg
ICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0
KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUg
Y2FsbGVkLgotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJE
YXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoUFRIUkVBRFMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzQ5YTBjZGRhYWVjODYwYmNiZTRiYzBhNzI1YmQy
NzVlNzJlYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19o
Ci0jZGVmaW5lIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotCi0jaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gSG9sZHMgVGhyZWFkSWRlbnRp
ZmllciBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgcHRocmVhZHMt
c3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQotLy8gVGhyZWFk
SWRlbnRpZmllciBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNp
ZmljIHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhy
ZWFkSWRlbnRpZmllckRhdGEgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZElkZW50
aWZpZXJEYXRhKTsKLXB1YmxpYzoKLSAgICB+VGhyZWFkSWRlbnRpZmllckRhdGEoKTsKLQotICAg
IC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCi0g
ICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQg
aXQgaXMgbm90IHRocmVhZC1zYWZlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7
Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZElkZW50aWZp
ZXJEYXRhIGludG8gdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuCi0gICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0dXJucyAw
IGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAgc3Rh
dGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllcigpOwotCi1wcml2YXRlOgotICAgIFRocmVh
ZElkZW50aWZpZXJEYXRhKFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAgICAgOiBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxz
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3Rv
ciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8vIC0gZmly
c3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNh
bGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwotICAgIC8v
IGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBtYWtl
IFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQsIGFmdGVy
IGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNh
bGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVhZElkZW50
aWZpZXIgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgotICAgIHN0
YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBt
X2lkZW50aWZpZXI7Ci0gICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKLSAgICBzdGF0aWMgcHRo
cmVhZF9rZXlfdCBtX2tleTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8g
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXgg
YzFkYzM1MDE5MDNhYjc2YjM3MDQ2ZDkzMzNmOTMyYTNlZjBjNmM2ZS4uNzE4NzgxNDEwMThlNjgw
M2MwMDcwNzFhMmY2ZmE2MGVjMjAzY2U1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00NSw3ICs0
NSw3IEBAIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsKICAgICBNdXRleCBjcmVhdGlvbk11dGV4
OwogfTsKIAotY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJl
YWROYW1lKQorY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcmV0
dXJuIHRocmVhZE5hbWU7CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5
UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250
ZXh0LT5jcmVhdGlvbk11dGV4KTsKICAgICB9CiAKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKGNvbnRleHQtPm5hbWUpOworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKIAogICAgIGF1dG8gZW50cnlQb2ludCA9IFdU
Rk1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7CiAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMg
dm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAgIGVudHJ5UG9pbnQo
KTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6
OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2lu
dCkKIHsKICAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRl
eHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQg
dGhlIHRocmVhZCBib2R5IGZyb20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRo
ZSB0aHJlYWQgaWRlbnRpZmllci4KICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3Jl
YXRpb25NdXRleCk7CiAKLSAgICByZXR1cm4gY3JlYXRlVGhyZWFkSW50ZXJuYWwodGhyZWFkRW50
cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CisgICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlSW50ZXJu
YWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CiB9CiAKLVRocmVhZElkZW50aWZp
ZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNv
bnN0IGNoYXIqIG5hbWUpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShUaHJlYWRGdW5j
dGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJl
dHVybiBjcmVhdGVUaHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICByZXR1cm4g
VGhyZWFkOjpjcmVhdGUobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKICAgICAgICAgZW50cnlQ
b2ludChkYXRhKTsKICAgICB9KTsKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50
ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRo
cmVhZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUo
UU9TX0NMQVNTRVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAs
NyArMTIwLDcgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJl
bGF0aXZlUHJpb3JpdHkpCiAjZW5kaWYKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2Vy
SW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShR
T1NfQ0xBU1NFUykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwx
MyArMTM0LDEzIEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVs
YXRpdmVQcmlvcml0eSkKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190
IGdsb2JhbE1heFFPU2NsYXNzIHsgUU9TX0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0
R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0
R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6
YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4
UU9TY2xhc3MgPSBtYXhDbGFzczsKIH0KIAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhx
b3NfY2xhc3NfdCBvcmlnaW5hbENsYXNzKQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFP
U0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFP
U2NsYXNzICE9IFFPU19DTEFTU19VTlNQRUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWlu
KG9yaWdpbmFsQ2xhc3MsIGdsb2JhbE1heFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBx
b3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9
CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9pZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAppbmRleCA2YjU1OGIzZTFkNTE3ZTgxMGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi41OTk1NmM2
NTY1N2E3ODlhNTU0NGJmODM1MmM2ZmJjMDI3ZWVhMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3Rp
biBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBK
dXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zOCw3MiArMzksMjI4IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgor
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMp
CisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vsc2UKKyNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5nIHNpZ25h
bC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZy
ZWVCU0QuCisvLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVO
VCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEw
LnggZ29lcyBFT0wuCisvLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19i
dWcuY2dpP2lkPTIwNzA3OQorI2lmIE9TKEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRleHQuaD4K
KyNlbmRpZgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYK
KyNlbmRpZgorCisjaWYgIUNPTVBJTEVSKE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5j
bHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5kaWYKIAog
bmFtZXNwYWNlIFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKKyNp
ZiBPUyhEQVJXSU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90
IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVh
ZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBw
cGNfdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0
eXBlZGVmIHBwY190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BV
KEFSTSkKK3R5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vs
aWYgQ1BVKEFSTTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lz
dGVyczsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxp
ZiBPUyhXSU5ET1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNl
bGlmIChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBD
UFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNp
bmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxh
dGZvcm1SZWdpc3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgor
Cit1c2luZyBUaHJlYWRJZGVudGlmaWVyID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJl
YWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUg
Y2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0
ZWRseS4KLS8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0
byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0
aGF0IHRoZSBjYWxscyBhcmUgbm90IHJlZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGluaXRpYWxpemVUaHJlYWRpbmcoKTsKK2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50
U3RyZWFtOworCitjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhy
ZWFkPiB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0
dXJucyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVz
dCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8g
dGhlIHRocmVhZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRo
cmVhZChjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB+VGhyZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhy
ZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkg
aXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRp
Y2F0ZXMgYSBsb3dlciBwcmlvcml0eS4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJl
bnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQg
cmVsYXRpdmVQcmlvcml0eSA9IDApOworICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQg
Y3JlYXRpb24gZmFpbGVkLgorICAgIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJh
bCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0
IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50
cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJ
VkFURSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZp
ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZp
ZXIpOworICAgIC8vIFJldHVybnMgVGhyZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNhbiBiZSAo
YSBiaXQpIGNvc3RseSBpbiBXaW5kb3dzLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
VGhyZWFkJiBjdXJyZW50KCk7CiAKLS8vIERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNl
ZCB0aHJlYWQgY3JlYXRpb24uCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBj
cmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1l
KTsKKyAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1
bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFk
cyBhbmQgZW5zdXJlIHRoZSB0aHJlYWQgbGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0
Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hh
ciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3Jp
dHkoaW50KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0
aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3Jt
cyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVh
ZC4KLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJl
YWROYW1lKTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3Ig
PSBrZXJuX3JldHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3Jt
U3VzcGVuZEVycm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9y
bVN1c3BlbmRFcnJvciA9IERXT1JEOworI2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRo
cmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IEV4cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzdW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNp
emVfdCBnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFE
UykKLWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsK
ICNlbmRpZgogCisgICAgLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJ
IHJlc3BvbnNpdmVuZXNzLgorICAgIC8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0
aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBw
cmlvcml0eS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRo
cmVhZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0
ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xh
c3NfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFP
U0NsYXNzKHFvc19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19j
bGFzc190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFt
ZXNwYWNlIFdURgorICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3Jl
YXRlIGltcGxlbWVudGF0aW9uLgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRl
cm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11
c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVz
aW5nIFdURjo6Y3VycmVudFRocmVhZDsKLXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7
Ci11c2luZyBXVEY6OmRldGFjaFRocmVhZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBs
ZXRpb247CisgICAgLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9u
LgorICAgIC8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVz
dCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOwogCiAjaWYgVVNFKFBUSFJFQURTKQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAg
dm9pZCBlc3RhYmxpc2gocHRocmVhZF90KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFO
RExFLCBUaHJlYWRJZGVudGlmaWVyKTsKICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykK
LXVzaW5nIFdURjo6c2V0R2xvYmFsTWF4UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9T
Q2xhc3M7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisjaWYgVVNF
KFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQorICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhhbmRsZXJT
dXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpOwogI2VuZGlmCiAK
KyAgICBUaHJlYWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAg
dm9pZCBhZGRPbkV4aXRDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+IGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgbV9vbkV4aXRDYWxsYmFjay5hcHBlbmQoY2FsbGJhY2spOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBpZCgpID09IHRocmVhZC5pZCgpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJldHVybiBp
ZCgpICE9IHRocmVhZC5pZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQoKTsKKwor
ICAgIGVudW0gSm9pbmFibGVTdGF0ZSB7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBz
dGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgorICAgICAgICBKb2luYWJsZSwKKwor
ICAgICAgICAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhp
cyB0aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJl
IGNhbiBiZSBhCisgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0aGUgdGhy
ZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQgdGhlIHJl
bWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAgLy8gYW5k
IHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhpdCB0byB0
YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdzCisgICAg
ICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2FzZSAoc2lu
Y2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisgICAgICAg
IEpvaW5lZCwKKworICAgICAgICAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBj
YW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0
IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERldGFjaGVk
LAorICAgIH07CisKKyAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBt
X2pvaW5hYmxlU3RhdGU7IH0KKyAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5h
YmxlU3RhdGUgPSBEZXRhY2hlZDsgfQorICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZvaWQgZGlk
Sm9pbigpIHsgbV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNFeGl0ZWQo
KSB7IHJldHVybiBtX2RpZEV4aXQ7IH0KKworICAgIFdvcmRMb2NrIG1fbXV0ZXg7CisgICAgVGhy
ZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0
YXRlIHsgSm9pbmFibGUgfTsKKyAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07CisgICAgVmVj
dG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWQmKT4+IG1fb25FeGl0Q2FsbGJhY2s7CisjaWYg
VVNFKFBUSFJFQURTKQorICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJXSU4pCisg
ICAgbWFjaF9wb3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3QgbV9zZW1h
cGhvcmVGb3JTdXNwZW5kUmVzdW1lOworICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRNYWNoaW5l
Q29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBzdGQ6OmF0
b21pYzxib29sPiBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CisjZW5kaWYKKyNlbGlmIE9TKFdJTkRP
V1MpCisgICAgSEFORExFIG1faGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5c3RlbQor
I2VuZGlmCit9OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERhcndpbiBp
cyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55
IHRocmVhZCwgdGhlIG9ubHkKKy8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBu
b3QgcmVlbnRyYW50LgorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGlu
ZygpOworCitpbmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sKKyAgICBy
ZXR1cm4gVGhyZWFkOjpjdXJyZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNpbmcgV1RG
OjpjdXJyZW50VGhyZWFkOworCiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1B0aHJlYWRzLmNwcAppbmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZjYTFkYTVh
NjkyZDBmLi45MzdkNTVhYjNkOTJhYWRlMTE3YmM1NWVlMWU4YzNjNGUwMTczZTE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXgu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFr
dGl4LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDE0MSArNDIsMTM0IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgog
I2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbi5oIgotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLSNpbmNs
dWRlICJUaHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJlYWRzLmgi
CisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+CiAjaW5j
bHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUg
PHd0Zi9Xb3JkTG9jay5oPgogCi0jaWYgIUNPTVBJTEVSKE1TVkMpCi0jaW5jbHVkZSA8bGltaXRz
Lmg+Ci0jaW5jbHVkZSA8c2NoZWQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCitu
YW1lc3BhY2UgV1RGIHsKIAotI2lmIE9TKExJTlVYKQotI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgor
VGhyZWFkOjpUaHJlYWQoKQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2Vt
YXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNz
LiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKICNlbmRp
ZgorfQogCitUaHJlYWQ6On5UaHJlYWQoKQorewogI2lmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8
c2lnbmFsLmg+CisgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
CiAjZW5kaWYKK30KIAotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIFB0aHJlYWRTdGF0ZSB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBKb2luYWJsZVN0
YXRlIHsKLSAgICAgICAgSm9pbmFibGUsIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhl
IHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgotCi0gICAgICAgIEpvaW5lZCwgLy8gU29tZWJvZHkg
d2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhp
dGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYSAKLSAgICAgICAg
ICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAo
d2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Yg
d2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pIAotICAgICAgICAgICAgICAgIC8vIGFuZCB3
aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFr
ZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncyAKLSAgICAg
ICAgICAgICAgICAvLyBub2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNh
c2UgKHNpbmNlIHdhaXRPblRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgot
Ci0gICAgICAgIERldGFjaGVkIC8vIFRoZSB0aHJlYWQgaGFzIGJlZW4gZGV0YWNoZWQgYW5kIGNh
biBubyBsb25nZXIgYmUgam9pbmVkIG9uLiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkIG11c3Qg
dGFrZSBjYXJlIG9mIGNsZWFuaW5nIHVwIGFmdGVyIGl0c2VsZi4KLSAgICB9OwotCi0gICAgLy8g
Q3VycmVudGx5IGFsbCB0aHJlYWRzIGNyZWF0ZWQgYnkgV1RGIHN0YXJ0IG91dCBhcyBqb2luYWJs
ZS4gCi0gICAgUHRocmVhZFN0YXRlKHB0aHJlYWRfdCBoYW5kbGUpCi0gICAgICAgIDogbV9qb2lu
YWJsZVN0YXRlKEpvaW5hYmxlKQotICAgICAgICAsIG1fZGlkRXhpdChmYWxzZSkKLSAgICAgICAg
LCBtX3B0aHJlYWRIYW5kbGUoaGFuZGxlKQotICAgIHsKLSAgICB9Ci0KLSAgICBKb2luYWJsZVN0
YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KLSAgICBwdGhy
ZWFkX3QgcHRocmVhZEhhbmRsZSgpIHsgcmV0dXJuIG1fcHRocmVhZEhhbmRsZTsgfQotICAgIHZv
aWQgZGlkQmVjb21lRGV0YWNoZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVkOyB9Ci0g
ICAgdm9pZCBkaWRFeGl0KCkgeyBtX2RpZEV4aXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBkaWRKb2lu
KCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBKb2luZWQ7IH0KLSAgICBib29sIGhhc0V4aXRlZCgpIHsg
cmV0dXJuIG1fZGlkRXhpdDsgfQotCi1wcml2YXRlOgotICAgIEpvaW5hYmxlU3RhdGUgbV9qb2lu
YWJsZVN0YXRlOwotICAgIGJvb2wgbV9kaWRFeGl0OwotICAgIHB0aHJlYWRfdCBtX3B0aHJlYWRI
YW5kbGU7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgc3RkOjp1bmlx
dWVfcHRyPFB0aHJlYWRTdGF0ZT4+IFRocmVhZE1hcDsKKyNpZiAhT1MoREFSV0lOKQogCi12b2lk
IHVuc2FmZVRocmVhZFdhc0RldGFjaGVkKFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWRE
aWRFeGl0KFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWRXYXNKb2luZWQoVGhyZWFkSWRl
bnRpZmllcik7CisvLyBXZSB1c2UgU0lHVVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUgbWFjaGlu
ZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3JlLgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCBpbnQg
U2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7CitzdGF0aWMgc3RkOjphdG9taWM8VGhy
ZWFkKj4gdGFyZ2V0VGhyZWFkIHsgbnVsbHB0ciB9Oworc3RhdGljIFN0YXRpY1dvcmRMb2NrIGds
b2JhbFN1c3BlbmRMb2NrOwogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKK3ZvaWQg
VGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCosIHZvaWQq
IHVjb250ZXh0KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0ZXg7Ci0g
ICAgcmV0dXJuIG11dGV4OwotfQotCi12b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQotewotICAg
IHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQ7Ci0KLSAgICBpZiAoaXNJbml0aWFsaXplZCkKKyAg
ICAvLyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRs
ZXJzIGlzIGFsbG93ZWQuCisgICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQubG9hZCgp
OworCisgICAgaWYgKHRocmVhZC0+bV9zdXNwZW5kZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9h
Y3F1aXJlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24g
dGhhdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlc3VtZSBzaWdzdXNwZW5kLgorICAgICAg
ICAvLyBTbyB0aGlzIGhhbmRsZXIgaW52b2NhdGlvbiBpdHNlbGYgc2hvdWxkIG5vdCBwcm9jZXNz
LgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHNpZ25hbCBjb21lcywgZmlyc3QsIHRoZSBz
eXN0ZW0gY2FsbHMgc2lnbmFsIGhhbmRsZXIuIEFuZCBsYXRlciwgc2lnc3VzcGVuZCB3aWxsIGJl
IHJlc3VtZWQuIFNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gYWx3YXlzIHByZWNlZGVzLgorICAg
ICAgICAvLyBTbywgdGhlIHByb2JsZW0gbmV2ZXIgaGFwcGVucyB0aGF0IHN1c3BlbmRlZC5zdG9y
ZSh0cnVlLCAuLi4pIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBoYW5kbGVyIGlzIGNhbGxl
ZC4KKyAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5
NTM5OS9mdW5jdGlvbnMvc2lnc3VzcGVuZC5odG1sCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OmluaXRpYWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0
cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBz
byBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0lt
cGw6OmVtcHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9t
TnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVP
bmNlKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQor
ICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVj
b250ZXh0KTsKKyNpZiBDUFUoUFBDKQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29u
dGV4dCA9ICp1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQudWNfcmVnczsKKyNlbHNlCisgICAgdGhy
ZWFkLT5tX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0
OworI2VuZGlmCiAKLXN0YXRpYyBUaHJlYWRNYXAmIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFRocmVhZE1hcD4gbWFwOwotICAgIHJldHVybiBtYXA7CisgICAgLy8g
QWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVk
LgorICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFu
cyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgorICAgIC8vIGh0
dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hz
aF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKKyAgICAvLworICAgIC8vIEFuZCBzZW1fcG9z
dCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5l
Q29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3Vw
Lm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0
XzExCisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsK
KworICAgIC8vIFJlYWNoaW5nIGhlcmUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYmxvY2tl
ZCBpbiB0aGlzIGhhbmRsZXIgKHRoaXMgaXMgY29uZmlndXJlZCBieSBzaWdhY3Rpb24ncyBzYV9t
YXNrKS4KKyAgICAvLyBTbyBiZWZvcmUgY2FsbGluZyBzaWdzdXNwZW5kLCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lIHRvIHRoaXMgdGhyZWFkIGlzIGRlZmVycmVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0
aGUgaGFuZGxlciBpcyBub3QgZXhlY3V0ZWQgcmVjdXJzaXZlbHkuCisgICAgc2lnc2V0X3QgYmxv
Y2tlZFNpZ25hbFNldDsKKyAgICBzaWdmaWxsc2V0KCZibG9ja2VkU2lnbmFsU2V0KTsKKyAgICBz
aWdkZWxzZXQoJmJsb2NrZWRTaWduYWxTZXQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAg
IHNpZ3N1c3BlbmQoJmJsb2NrZWRTaWduYWxTZXQpOworCisgICAgLy8gQWxsb3cgcmVzdW1lIGNh
bGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBpcyByZXN1bWVkLgorICAgIHNlbV9wb3N0KCZ0
aHJlYWQtPm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CiB9CiAKLXN0YXRpYyBUaHJlYWRJ
ZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhy
ZWFkSGFuZGxlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsK
LQotICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAg
Zm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVh
ZF9lcXVhbChpLT52YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+
dmFsdWUtPmhhc0V4aXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gMDsKLX0KKyNlbmRpZiAvLyAhT1MoREFSV0lOKQogCi1zdGF0aWMgVGhyZWFk
SWRlbnRpZmllciBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShjb25zdCBwdGhy
ZWFkX3QmIHB0aHJlYWRIYW5kbGUpCit2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogewotICAg
IEFTU0VSVCghaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBUaHJlYWRJ
ZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50
aWZpZXJDb3VudCwgc3RkOjptYWtlX3VuaXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRIYW5kbGUp
KTsKLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10g
eworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAg
IFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6
ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRz
YWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXpl
ZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRp
YWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOwor
ICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKworI2lmICFPUyhEQVJXSU4pCisgICAgICAgIC8v
IFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KKyAgICAg
ICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBo
YW5kbGVyLgorICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dl
ZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgorICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9u
IGFjdGlvbjsKKyAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAg
c2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisKKyAg
ICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IFRocmVhZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRS
ZXN1bWU7CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZP
OworICAgICAgICBzaWdhY3Rpb24oU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlvbiwgMCk7
CisjZW5kaWYKKyAgICB9KTsKIH0KIAotc3RhdGljIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlRm9y
SWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQoVGhyZWFkSWRlbnRpZmllciBpZCkKK3N0YXRp
YyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCiB7Ci0g
ICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCktPnB0aHJlYWRIYW5kbGUoKTsKKyNpZiAhT1Mo
REFSV0lOKQorICAgIHNpZ3NldF90IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAg
IHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgcHRocmVhZF9z
aWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQq
IHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgLy8gQmFsYW5jZWQgYnkg
LmxlYWtQdHIoKSBpbiBjcmVhdGVUaHJlYWRJbnRlcm5hbC4KKyAgICAvLyBCYWxhbmNlZCBieSAu
bGVha1B0cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwuCiAgICAgYXV0byBpbnZvY2F0aW9u
ID0gc3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKKworICAgIFRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQg
PSBudWxscHRyOworCiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
SW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hh
ciopCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9u
IGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewotICAgIGF1dG8gaW52b2Nh
dGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBv
aW50LCBkYXRhKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhy
ZWFkKCkpOworICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCB0aHJlYWQuZ2V0KCksIGRhdGEpOwogICAgIHB0
aHJlYWRfdCB0aHJlYWRIYW5kbGU7CiAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKICAgICBwdGhy
ZWFkX2F0dHJfaW5pdCgmYXR0cik7CkBAIC0xODYsMTcgKzE4MCwxOCBAQCBUaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQq
IGRhdGEsIGNvbgogICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyKTsKICAgICBpZiAoZXJy
b3IpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50
cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlv
bi5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICAvLyBCYWxhbmNlZCBieSBzdGQ6OnVuaXF1ZV9wdHIgY29uc3RydWN0b3IgaW4g
d3RmVGhyZWFkRW50cnlQb2ludC4KICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGxlYWtl
ZEludm9jYXRpb24gPSBpbnZvY2F0aW9uLnJlbGVhc2UoKTsKICAgICBVTlVTRURfUEFSQU0obGVh
a2VkSW52b2NhdGlvbik7CiAKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJl
YWRIYW5kbGUodGhyZWFkSGFuZGxlKTsKKyAgICB0aHJlYWQtPmVzdGFibGlzaCh0aHJlYWRIYW5k
bGUpOworICAgIHJldHVybiB0aHJlYWQ7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJl
YWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBI
QVZFKFBUSFJFQURfU0VUTkFNRV9OUCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXpl
VGhyZWFkTmFtZSh0aHJlYWROYW1lKSk7CkBAIC0yMDUsMTIzICsyMDAsMjM0IEBAIHZvaWQgaW5p
dGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0odGhyZWFkTmFtZSk7CiAjZW5kaWYKLQotICAgIFRocmVhZElk
ZW50aWZpZXIgaWQgPSBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJlYWRfc2VsZigpKTsK
LSAgICBBU1NFUlQoaWQpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKGlk
KTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0K
LSAgICAKLXZvaWQgY2hhbmdlVGhyZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCwgaW50IGRlbHRhKQotewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFTU0VS
VCh0aHJlYWRJRCk7CiAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVu
dGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhy
ZWFkSGFuZGxlKTsKLSAgICB9Cit2b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRlbHRh
KQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKIAogICAgIGludCBwb2xp
Y3k7CiAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogCi0gICAgaWYgKHB0aHJlYWRfZ2V0
c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQorICAgIGlmIChwdGhy
ZWFkX2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOwogCi0gICAgcHRocmVh
ZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKKyAgICBwdGhy
ZWFkX3NldHNjaGVkcGFyYW0obV9oYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKIH0KIAotaW50IHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCitpbnQgVGhy
ZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7
Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQorICAgIHB0aHJlYWRfdCBoYW5kbGU7CiAgICAgewot
ICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGxvY2sgYWNyb3NzIHRoZSBjYWxsIHRvIGpvaW4s
IHNpbmNlIHRoYXQgY2FuIGJsb2NrIG91ciB0aHJlYWQgYW5kIGNhdXNlIGRlYWRsb2NrLgotICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJl
YWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQo
dGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7CisgICAgICAgIFdvcmRM
b2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7CiAg
ICAgfQogCi0gICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pvaW4ocHRocmVhZEhhbmRsZSwg
MCk7CisgICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pvaW4oaGFuZGxlLCAwKTsKIAogICAg
IGlmIChqb2luUmVzdWx0ID09IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRl
bnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRo
cmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3Vu
ZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CiAgICAgZWxzZSBpZiAo
am9pblJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1
bmFibGUgdG8gYmUgam9pbmVkLlxuIiwgdGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1IoIlRo
cmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBqb2luZWQuXG4iLCBtX2lkKTsKIAot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3Rh
dGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUp
OwotICAgIEFTU0VSVChzdGF0ZS0+am9pbmFibGVTdGF0ZSgpID09IFB0aHJlYWRTdGF0ZTo6Sm9p
bmFibGUpOworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBBU1NFUlQo
am9pbmFibGVTdGF0ZSgpID09IEpvaW5hYmxlKTsKIAotICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFs
cmVhZHkgZXhpdGVkLCBzbyBjbGVhbiB1cCBhZnRlciBpdC4KLSAgICBpZiAoc3RhdGUtPmhhc0V4
aXRlZCgpKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOworICAgIC8vIFRo
ZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBkbyBub3RoaW5nLgogICAgIC8vIFRoZSB0aHJl
YWQgaGFzbid0IGV4aXRlZCB5ZXQsIHNvIGRvbid0IGNsZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNp
Z25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVh
biB1cCBhZnRlciBpdHNlbGYuCi0gICAgZWxzZQotICAgICAgICBzdGF0ZS0+ZGlkSm9pbigpOwor
ICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBq
b2luUmVzdWx0OwogfQogCi12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEKQordm9pZCBUaHJlYWQ6OmRldGFjaCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAg
ICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9
IHB0aHJlYWRfZGV0YWNoKG1faGFuZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAg
ICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hl
ZFxuIiwgbV9pZCk7CiAKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7
Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgIEFTU0VSVChwdGhyZWFkSGFuZGxl
KTsKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOwor
fQogCi0gICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRIYW5kbGUp
OwotICAgIGlmIChkZXRhY2hSZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRp
ZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4iLCB0aHJlYWRJRCk7Ci0KLSAgICBQ
dGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBBU1NF
UlQoc3RhdGUpOwotICAgIGlmIChzdGF0ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgIHRocmVhZE1h
cCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgZWxzZQotICAgICAgICB0aHJlYWRNYXAoKS5nZXQo
dGhyZWFkSUQpLT5kaWRCZWNvbWVEZXRhY2hlZCgpOworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQo
KQoreworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOwor
ICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAgICAvLyBO
b3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlz
aGVkIHlldC4KKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFk
KCkpOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBUaHJlYWRI
b2xkZXI6OmluaXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRF
dmVuSWZOb25XVEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7CiB9CiAKLXZvaWQgdGhy
ZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQorVGhyZWFkSWRlbnRpZmllciBU
aHJlYWQ6OmN1cnJlbnRJRCgpCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11
dGV4KCkpOwotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFk
SUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgCi0gICAgc3RhdGUtPmRpZEV4aXQoKTsKKyAg
ICByZXR1cm4gY3VycmVudCgpLmlkKCk7Cit9CiAKLSAgICBpZiAoc3RhdGUtPmpvaW5hYmxlU3Rh
dGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1v
dmUodGhyZWFkSUQpOworYm9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQorewor
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhy
ZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8g
QSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3VycmVudFRo
cmVhZCgpCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBsYXRmb3Jt
U3VzcGVuZEVycm9yPgogewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJZGVudGlm
aWVyRGF0YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJuIGlkOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodGhpcyAhPSAmY3VycmVudCgpLCAiQ3VycmVudGx5IHdl
IGRvbid0IHN1cHBvcnQgc3VzcGVuZCB0aGUgY3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOworICAg
IFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAga2Vy
bl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFkKTsKKyAg
ICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBE
dXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBm
cm9tIHRoZSBvdGhlciB0aHJlYWRzLgorICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5z
dGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCisgICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dp
bmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KKyAgICAgICAgLy8gQW5kIEEgYXR0
ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCisgICAgICAgIC8v
IEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0
byBBIGFuZCBCLgorICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5k
ZWQuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7Cisg
ICAgICAgIGlmICghbV9zdXNwZW5kQ291bnQpIHsKKyAgICAgICAgICAgIC8vIElkZWFsbHksIHdl
IHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNz
IHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICAvLyBCdXQg
aXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgorICAgICAgICAg
ICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwg
c3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgICAgIHRh
cmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBwdGhyZWFk
X2tpbGwobV9oYW5kbGUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsK
KyAgICAgICAgICAgIHNlbV93YWl0KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAg
ICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBp
cyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUu
CisgICAgICAgICAgICBtX3N1c3BlbmRlZC5zdG9yZSh0cnVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKTsKKyAgICAgICAgfQorICAgICAgICArK21fc3VzcGVuZENvdW50OworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgorfQogCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQg
dGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQg
PSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0g
ICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsK
K3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211
dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZShtX3BsYXRmb3JtVGhyZWFk
KTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJl
c3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAg
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlm
IChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBz
aWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwK
KyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQg
b25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlz
dGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgor
ICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNr
IHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAgICAgICAgLy8gMi4gVXNl
IHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUg
aGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhp
cy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21p
YyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgLy8gSW4gdGhp
cyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8g
ZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7Cisg
ICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJlYWRTdXNwZW5kUmVz
dW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZW1f
d2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVh
c2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVk
IGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9z
dXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAg
ICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2VuZGlmCiB9CiAKLWJvb2wg
c2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBzaWduYWxOdW1iZXIp
CitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVy
cykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lO
KQorI2lmIENQVShYODYpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gc2l6ZW9mKHJlZ2lzdGVy
cykgLyBzaXplb2YoaW50KTsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4
Nl9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3Vu
dCA9IHg4Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3Qg
Zmxhdm9yID0geDg2X1RIUkVBRF9TVEFURTY0OworI2VsaWYgQ1BVKFBQQykKKyAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFBQQzY0KQorICAg
IHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJl
YWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTY0OworI2VsaWYgQ1BV
KEFSTSkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOwor
ICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOworI2Vs
aWYgQ1BVKEFSTTY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEU2
NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9T
VEFURTY0OworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyAg
ICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUobV9wbGF0Zm9ybVRocmVh
ZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgJnVzZXJDb3VudCk7CisgICAg
aWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJv
cihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICJKYXZhU2NyaXB0IGdh
cmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVybmVk
IGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGlu
c2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7CisgICAgICAg
IENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiB1c2VyQ291bnQgKiBzaXplb2YodWludHB0cl90
KTsKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkK
KyAgICByZWdpc3RlcnMgPSBtX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0OworICAgIHJldHVybiBz
aXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpOworI2Vsc2UKKyAgICBwdGhyZWFkX2F0dHJfdCBhdHRy
aWJ1dGU7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHJpYnV0ZSk7CisjaWYgSEFWRShQVEhS
RUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKKyNpZiAhT1MoT1BFTkJTRCkKKyAgICAvLyBlLmcuIG9u
IEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCisgICAgcHRocmVhZF9hdHRyX2dldF9ucCht
X2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZW5kaWYKKyNlbHNlCisgICAgLy8gRklYTUU6IHRoaXMg
ZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRp
ZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKKyAgICBwdGhyZWFkX2dldGF0dHJfbnAobV9oYW5kbGUs
ICZhdHRyaWJ1dGUpOworI2VuZGlmCisKKyAgICB2b2lkKiBzdGFja0Jhc2UgPSAwOworICAgIHNp
emVfdCBzdGFja1NpemUgPSAwOworICAgIGludCByYyA9IHB0aHJlYWRfYXR0cl9nZXRzdGFjaygm
YXR0cmlidXRlLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJj
LCAhcmMpOworICAgIEFTU0VSVChzdGFja0Jhc2UpOworICAgIHJlZ2lzdGVycy5zdGFja1BvaW50
ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6ZTsKKworICAgIHB0
aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyaWJ1dGUpOworCisgICAgcmV0dXJuIDA7CisjZW5kaWYK
K30KKwordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQogewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFu
ZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJRCk7CiAgICAgewotICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFk
SGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAg
ICBBU1NFUlQocHRocmVhZEhhbmRsZSk7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlciht
X211dGV4KTsKKyAgICAgICAgbV9kaWRFeGl0ID0gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChhdXRv
JiBjYWxsYmFjayA6IG1fb25FeGl0Q2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrKCp0aGlzKTsK
K30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChwdGhyZWFkX3QgaGFuZGxlKQoreworICAgIFdv
cmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAg
ICBpZiAoIW1faWQpIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZElkZW50aWZp
ZXI+IHByb3ZpZGVyIHsgMCB9OworICAgICAgICBtX2lkID0gKytwcm92aWRlcjsKKyNpZiBPUyhE
QVJXSU4pCisgICAgICAgIG1fcGxhdGZvcm1UaHJlYWQgPSBwdGhyZWFkX21hY2hfdGhyZWFkX25w
KGhhbmRsZSk7CisjZW5kaWYKICAgICB9Ci0gICAgaW50IGVyck5vID0gcHRocmVhZF9raWxsKHB0
aHJlYWRIYW5kbGUsIHNpZ25hbE51bWJlcik7Ci0gICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVy
ck5vIG1lYW5zIHN1Y2Nlc3MuCiB9CiAKIE11dGV4OjpNdXRleCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2lu
LmNwcAppbmRleCA1NGI0M2VmZWYzNWNkNjYzMmE3MDA4MTUwN2E1YjM3OTlkZWZiNmZiLi5lZGRl
YTU1ZGQ4NjNmN2ZlYTgxMTY2MzkwNDVhNmMxMWVlZDQ4ODczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dp
bi5jcHAKQEAgLTEwOSw2ICsxMDksMTQgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK1RocmVhZDo6
VGhyZWFkKCkKK3sKK30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwogLy8gTVNfVkNfRVhD
RVBUSU9OLCBUSFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNv
bWUgZnJvbSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhz
LmFzcHg+Lgogc3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7
CiAKQEAgLTEyMSw3ICsxMjksNyBAQCB0eXBlZGVmIHN0cnVjdCB0YWdUSFJFQUROQU1FX0lORk8g
ewogfSBUSFJFQUROQU1FX0lORk87CiAjcHJhZ21hIHBhY2socG9wKQogCi12b2lkIGluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQordm9pZCBU
aHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJl
YWROYW1lKQogewogI2lmIENPTVBJTEVSKE1JTkdXKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhyZWFkIG5hbWUgc2V0dGluZyB3aXRoIE1pbmdXLgpAQCAtMTI5LDcgKzEzNyw3IEBAIHZvaWQg
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUp
CiAjZWxzZQogICAgIFRIUkVBRE5BTUVfSU5GTyBpbmZvOwogICAgIGluZm8uZHdUeXBlID0gMHgx
MDAwOwotICAgIGluZm8uc3pOYW1lID0gbm9ybWFsaXplVGhyZWFkTmFtZShzelRocmVhZE5hbWUp
OworICAgIGluZm8uc3pOYW1lID0gVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKHN6VGhyZWFk
TmFtZSk7CiAgICAgaW5mby5kd1RocmVhZElEID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAgICAg
aW5mby5kd0ZsYWdzID0gMDsKIApAQCAtMTQwLDcwICsxNDgsMzkgQEAgdm9pZCBpbml0aWFsaXpl
Q3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbmRpZgog
fQogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0
aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkOwotICAg
IAotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpc0luaXRp
YWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUo
KTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3Rh
dGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQg
aGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7
Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJh
dG9yKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNl
KGluaXRpYWxpemVLZXksIFtdIHsKKyAgICAgICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5p
dGlhbGl6ZSgpOworICAgICAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKCk7CisgICAg
ICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMg
c3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAorICAgICAgICAvLyBzbyBlbnN1cmUgaXQg
aGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgorICAgICAgICBTdHJpbmdJbXBsOjplbXB0
eSgpOworICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CisgICAgICAg
IHd0ZlRocmVhZERhdGEoKTsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CisgICAgfSk7CiB9
CiAKLXN0YXRpYyBIYXNoTWFwPERXT1JELCBIQU5ETEU+JiB0aHJlYWRNYXAoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPERXT1JELCBIQU5ETEU+PiBtYXA7Ci0gICAgcmV0
dXJuIG1hcDsKLX0KLQotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIo
RFdPUkQgdGhyZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWduZWQgX19z
dGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFwKCkuY29u
dGFpbnModGhyZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRocmVhZEhh
bmRsZSk7Ci19CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0
ZUludGVybmFsLgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+
KHBhcmFtKSk7CiAKLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJl
YWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJlYWRIb2xk
ZXI6OmluaXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhy
ZWFkID0gbnVsbHB0cjsKIAotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlm
aWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVh
ZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotICAg
IHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwg
d3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52
b2NhdGlvbi0+ZGF0YSk7Ci0KICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBj
cmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJ
bnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFy
KiB0aHJlYWROYW1lKQogeworICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcg
VGhyZWFkKCkpOwogICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKKyAg
ICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUgdGhyZWFk
SGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0
ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVy
KSk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpAQCAtMjE5
LDU1ICsxOTYsMTE5IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhy
ZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgVU5VU0VEX1BBUkFN
KGxlYWtlZEludm9jYXRpb24pOwogCiAgICAgdGhyZWFkSUQgPSBzdGF0aWNfY2FzdDxUaHJlYWRJ
ZGVudGlmaWVyPih0aHJlYWRJZGVudGlmaWVyKTsKLSAgICBzdG9yZVRocmVhZEhhbmRsZUJ5SWRl
bnRpZmllcih0aHJlYWRJZGVudGlmaWVyLCB0aHJlYWRIYW5kbGUpOwogCi0gICAgcmV0dXJuIHRo
cmVhZElEOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSwgdGhyZWFkSWRlbnRp
Zmllcik7CisgICAgcmV0dXJuIHRocmVhZDsKIH0KIAotdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0
eShUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCBpbnQgZGVsdGEpCit2b2lkIFRocmVhZDo6Y2hh
bmdlUHJpb3JpdHkoaW50IGRlbHRhKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICBI
QU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7
Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRp
ZmllciAldSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQiLCB0aHJlYWRJ
RCk7Ci0KLSAgICBTZXRUaHJlYWRQcmlvcml0eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklU
WV9OT1JNQUwgKyBkZWx0YSk7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgIFNldFRocmVhZFByaW9yaXR5KG1faGFuZGxlLCBUSFJFQURfUFJJT1JJVFlfTk9STUFMICsg
ZGVsdGEpOwogfQogCi1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWRJRCkKK2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBBU1NF
UlQodGhyZWFkSUQpOwotICAgIAotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5k
bGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXRocmVhZEhhbmRsZSkKLSAgICAg
ICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRpZCBub3QgY29ycmVzcG9uZCB0byBh
biBhY3RpdmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7Ci0gCi0gICAg
RFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkSGFuZGxlLCBJTkZJ
TklURSk7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICB7CisgICAgICAgIFdvcmRMb2NrSG9sZGVy
IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7CisgICAgfQorCisg
ICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCBJTkZJTklU
RSk7CiAgICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAgICAgIExPR19FUlJP
UigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcg
dG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVy
ICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CiAK
LSAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9y
SWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgIEFTU0VSVChqb2luYWJsZVN0YXRlKCkgPT0gSm9pbmFibGUpOworCisgICAgLy8gVGhl
IHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIGRvIG5vdGhpbmcuCisgICAgLy8gVGhlIHRocmVh
ZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1c3Qgc2ln
bmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxsIGNsZWFu
IHVwIGFmdGVyIGl0c2VsZi4KKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRKb2lu
KCk7CiAKICAgICByZXR1cm4gam9pblJlc3VsdDsKIH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3ZvaWQgVGhyZWFkOjpkZXRhY2goKQoreworICAgIC8v
IFdlIGZvbGxvdyB0aGUgcHRocmVhZCBzZW1hbnRpY3M6IGV2ZW4gYWZ0ZXIgdGhlIGRldGFjaCBp
cyBjYWxsZWQsCisgICAgLy8gd2Ugc3RpbGwgY2FuIHBlcmZvcm0gb3BlcmF0aW9uIG9udG8gdGhl
IHRocmVhZC4gVG8gZG8gc28sIHdlIGRvCisgICAgLy8gbm90aGluZyBoZXJlIGluIFdpbmRvd3Mu
IENsb3NlSGFuZGxlIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkKKyAgICAvLyBieSB0aGUg
RkxTIGRlc3RydWN0b3Igb24gdGhyZWFkIHRlcm1pbmF0aW9uLgorICAgIFdvcmRMb2NrSG9sZGVy
IGxvY2tlcihtX211dGV4KTsKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNv
bWVEZXRhY2hlZCgpOworfQorCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZv
aWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPgoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlciht
X211dGV4KTsKKyAgICBEV09SRCByZXN1bHQgPSBTdXNwZW5kVGhyZWFkKG1faGFuZGxlKTsKKyAg
ICBpZiAocmVzdWx0ICE9IChEV09SRCktMSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKK30KKworLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVu
ZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRz
Lgordm9pZCBUaHJlYWQ6OnJlc3VtZSgpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgIFJlc3VtZVRocmVhZChtX2hhbmRsZSk7Cit9CisKK3NpemVfdCBUaHJlYWQ6
OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQoreworICAgIFdvcmRM
b2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICByZWdpc3RlcnMuQ29udGV4dEZsYWdzID0g
Q09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MOworICAgIEdldFRocmVhZENvbnRleHQo
cGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdpc3RlcnMpOworICAgIHJldHVybiBzaXplb2YoQ09O
VEVYVCk7Cit9CisKK1RocmVhZCYgVGhyZWFkOjpjdXJyZW50KCkKIHsKLSAgICBBU1NFUlQodGhy
ZWFkSUQpOworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgp
OworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CiAKLSAgICBI
QU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7
Ci0gICAgaWYgKHRocmVhZEhhbmRsZSkKLSAgICAgICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxl
KTsKLSAgICBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIC8v
IE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJs
aXNoZWQgeWV0LgorICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFk
KCkpOworCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBib29sIGlzU3VjY2Vzc2Z1bCA9IER1cGxp
Y2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1
cnJlbnRQcm9jZXNzKCksICZoYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1Mp
OworICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7CisKKyAgICB0aHJlYWQtPmVzdGFi
bGlzaChoYW5kbGUsIGN1cnJlbnRJRCgpKTsKKyAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUo
dGhyZWFkLmdldCgpKTsKKyAgICByZXR1cm4gdGhyZWFkLmdldCgpOwogfQogCi1UaHJlYWRJZGVu
dGlmaWVyIGN1cnJlbnRUaHJlYWQoKQorVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJ
RCgpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KEdldEN1cnJl
bnRUaHJlYWRJZCgpKTsKIH0KIAordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAgIHsKKyAg
ICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX2RpZEV4aXQg
PSB0cnVlOworICAgICAgICAvLyBJdCBpcyBPSyBiZWNhdXNlIEZMU0FsbG9jJ3MgY2FsbGJhY2sg
d2lsbCBiZSBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlcmUgYXJlIHNvbWUgb3BlbiBoYW5kbGVzLgor
ICAgICAgICAvLyBUaGlzIGVhc2lseSBlbnN1cmVzIHRoYXQgYWxsIHRoZSB0aHJlYWQgcmVzb3Vy
Y2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KKyAgICAgICAgaWYgKG1faGFuZGxlKQorICAg
ICAgICAgICAgQ2xvc2VIYW5kbGUobV9oYW5kbGUpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGNh
bGxiYWNrIDogbV9vbkV4aXRDYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soKnRoaXMpOworfQor
Cit2b2lkIFRocmVhZDo6ZXN0YWJsaXNoKEhBTkRMRSBoYW5kbGUsIFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIG1f
aGFuZGxlID0gaGFuZGxlOworICAgIG1faWQgPSB0aHJlYWRJRDsKK30KKwogTXV0ZXg6Ok11dGV4
KCkKIHsKICAgICBtX211dGV4Lm1fcmVjdXJzaW9uQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAK
aW5kZXggYjJhMGE3OWY0YWI1YWFjMjg5YjE2OWY5MmJiYzFhODA1ODUyY2EzMi4uOTczMGZjZjBm
MDkyMWZkZWQ5MGY4OWYxMjkwZTc3NDkwYjUzOTcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvV29ya1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCkBAIC03
NCw3ICs3NCw3IEBAIHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJh
dGlvbnMsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAKICAgICAgICAgICAgIG1fd29y
a2Vycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgbV93b3JrZXJzLmFwcGVuZChjcmVhdGVUaHJlYWQoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBv
b2wgV29ya2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKKyAgICAgICAgICAgICAg
ICBtX3dvcmtlcnMuYXBwZW5kKFRocmVhZDo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQ
b29sIFdvcmtlciAldSIsIGkpLnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CiAgICAgICAgICAgICAg
ICAgICAgIHRocmVhZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICB9
CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXpl
X3QgaXRlcmF0aW9ucywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKICAgICAgICAgQ29u
ZGl0aW9uIG1fY29uZGl0aW9uOwogICAgICAgICBEZXF1ZTxjb25zdCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+Kj4gbV9xdWV1ZTsKIAotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV93
b3JrZXJzOworICAgICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IG1fd29ya2VyczsKICAgICB9
OwogCiAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxUaHJlYWRQb29sPiB0aHJlYWRQb29s
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9Xb3JrUXVldWUuaAppbmRleCBhNDdmMjFlMjBkMzFiYzhiZjczMThmNDFiOTU3YWIzNjZjMTkx
NTAzLi43NjM0NWMwNjkzMTY0ZjY4Y2E0YjFjNjY0NDg0YTI3M2NjNmU4YmUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuaApAQCAtMTAzLDcgKzEwMyw3IEBAIGNsYXNzIFdvcmtRdWV1ZSBmaW5hbCA6IHB1YmxpYyBG
dW5jdGlvbkRpc3BhdGNoZXIgewogCiAgICAgSEFORExFIG1fdGltZXJRdWV1ZTsKICNlbGlmIFVT
RShHTElCX0VWRU5UX0xPT1ApIHx8IFVTRShHRU5FUklDX0VWRU5UX0xPT1ApCi0gICAgVGhyZWFk
SWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3dvcmtR
dWV1ZVRocmVhZDsKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsK
ICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICBSdW5Mb29w
KiBtX3J1bkxvb3A7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVD
b2NvYS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXgg
MWE3MjE5YWQyNTllZDc1OTcyYTVhNDU4YzVjNDg0OTdhMzg4ZTRkMy4uNTllZTFmODViNDM1Y2Ux
YTcyZjUwNTBmNGRmNjJlZmNmYmJjODJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29j
b2EvV29ya1F1ZXVlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1
ZUNvY29hLmNwcApAQCAtNDksMTUgKzQ5LDE1IEBAIHN0YXRpYyBkaXNwYXRjaF9xb3NfY2xhc3Nf
dCBkaXNwYXRjaFFPU0NsYXNzKFdvcmtRdWV1ZTo6UU9TIHFvcykKIHsKICAgICBzd2l0Y2ggKHFv
cykgewogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZToKLSAgICAgICAg
cmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOworICAg
ICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVS
QUNUSVZFKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW5pdGlhdGVkOgotICAgICAg
ICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOworICAg
ICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJ
QVRFRCk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6RGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOworICAgICAgICByZXR1cm4gVGhy
ZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19ERUZBVUxUKTsKICAgICBjYXNlIFdvcmtR
dWV1ZTo6UU9TOjpVdGlsaXR5OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1Nf
Q0xBU1NfVVRJTElUWSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3Mo
UU9TX0NMQVNTX1VUSUxJVFkpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OkJhY2tncm91bmQ6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsK
KyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dS
T1VORCk7CiAgICAgfQogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVy
aWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1
ZUdlbmVyaWMuY3BwCmluZGV4IDkzNGEzOGNiYmU2NGJiZmZhZWI0ZDM3ZGYxYjhkOTk1MmI4ODUz
NDQuLmRhODc1ZDFmYTA0Y2VmNTI0YjBkYzE4NmIzOWE0NjJkNjgwNDQ2MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtMzUsNyArMzUsNyBAQAog
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBl
LCBRT1MpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRp
dGlvbk11dGV4KTsKLSAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZChuYW1lLCBb
dGhpc10geworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUobmFtZSwgW3Ro
aXNdIHsKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFs
aXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKICAgICAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5M
b29wOjpjdXJyZW50KCk7CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9y
bUludmFsaWRhdGUoKQogICAgIGlmIChtX3J1bkxvb3ApCiAgICAgICAgIG1fcnVuTG9vcC0+c3Rv
cCgpOwogICAgIGlmIChtX3dvcmtRdWV1ZVRocmVhZCkgewotICAgICAgICBkZXRhY2hUaHJlYWQo
bV93b3JrUXVldWVUaHJlYWQpOwotICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IDA7CisgICAg
ICAgIG1fd29ya1F1ZXVlVGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV93b3JrUXVldWVUaHJl
YWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbGlu
dXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwIGIvU291cmNlL1dURi93dGYvbGludXgv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCmluZGV4IGIyOTQxOTQ0NGU3NDI3MzZhNjdk
YzBjMWFhODUxZGVjM2FlNTg3ZTQuLmZmZDQwMDg1NWI4MjkzYThiNWEzYzNhZWIyM2FiNzdhYWY1
YTdlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFu
ZGxlckxpbnV4LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhh
bmRsZXJMaW51eC5jcHAKQEAgLTExOSw3ICsxMTksMTAgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVy
OjpFdmVudEZEUG9sbGVyOjpFdmVudEZEUG9sbGVyKGludCBmZCwgc3RkOjpmdW5jdGlvbjx2b2lk
ICgKICAgICB9LCB0aGlzLCBudWxscHRyKTsKICAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2Uu
Z2V0KCksIG51bGxwdHIpOwogI2Vsc2UKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKCJX
VEY6IE1lbW9yeVByZXNzdXJlSGFuZGxlciIsIFt0aGlzXSB7IHJlYWRBbmROb3RpZnkoKTsgfQor
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIldURjogTWVtb3J5UHJlc3N1cmVIYW5kbGVy
IiwKKyAgICAgICAgW3RoaXNdIHsKKyAgICAgICAgICAgIHJlYWRBbmROb3RpZnkoKTsKKyAgICAg
ICAgfSk7CiAjZW5kaWYKIH0KIApAQCAtMTI5LDcgKzEzMiw3IEBAIE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6RXZlbnRGRFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIoKQogI2lmIFVTRShHTElCKQogICAg
IGdfc291cmNlX2Rlc3Ryb3kobV9zb3VyY2UuZ2V0KCkpOwogI2Vsc2UKLSAgICBkZXRhY2hUaHJl
YWQobV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogI2VuZGlmCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHAKaW5kZXggODc0NzY0MzhjYWU2NWE2Mzg3ZDkwMWE3NTI4ODE1ZWM5NTQ3ZjIzMi4uOWNk
M2RiNGQxYmMxNGEzNjE3MzIxYWIwMDVhMDE5NjIwNTI3ODI3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTU2
LDcgKzU2LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2ZXIoSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5
RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQogICAgIDogbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlG
aWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0
YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQo
SURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNl
cnZlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRhYmFz
ZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiBJREJT
ZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURC
QmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQpAQCAtNjYsNyAr
NjYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYQogICAgIExPRyhJbmRleGVkREIsICJJREJT
ZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5k
YXRhKCkpOwogCiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRp
b25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJh
c2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKKyAgICBtX3Ro
cmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhp
cywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnJlZ2lz
dGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5k
ZXggMjU2Y2Q1MDdlNmU2ZDdmNjU2ZWVjZTBjMTE5ODk0OGZkOTIzZGExZC4uOTM0YTFkMTc0NTI5
MDg0MjhhM2FlNmUwZWQ3ZTUxMGE5YTljYTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTI1LDcgKzEyNSw3IEBA
IGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNlcnZlcj4gewogICAgIEhh
c2hNYXA8dWludDY0X3QsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rp
b25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CiAKLSAgICBUaHJlYWRJZGVudGlm
aWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxs
cHRyIH07CiAgICAgTG9jayBtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrOwogICAgIExvY2sg
bV9tYWluVGhyZWFkUmVwbHlMb2NrOwogICAgIGJvb2wgbV9tYWluVGhyZWFkUmVwbHlTY2hlZHVs
ZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmNwcAppbmRleCAyOTJmMDViOGNkNTA2ZTIyOWFlNmI4YmQ4NjI5
YzA5NTRkMTg0NTliLi43Y2Y3YWY4ZmVhMmUxZTY3ZDUyMzdjODcxYTAxNWIzYzQ5MDBhMjdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNv
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9E
ZWNvZGVyLmNwcApAQCAtMzksNyArMzksNyBAQCBBc3luY0F1ZGlvRGVjb2Rlcjo6QXN5bmNBdWRp
b0RlY29kZXIoKQogewogICAgIC8vIFN0YXJ0IHdvcmtlciB0aHJlYWQuCiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRo
cmVhZChBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnksIHRoaXMsICJBdWRpbyBEZWNvZGVy
Iik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShBc3luY0F1ZGlvRGVjb2Rlcjo6dGhy
ZWFkRW50cnksIHRoaXMsICJBdWRpbyBEZWNvZGVyIik7CiB9CiAKIEFzeW5jQXVkaW9EZWNvZGVy
Ojp+QXN5bmNBdWRpb0RlY29kZXIoKQpAQCAtNDcsOCArNDcsOCBAQCBBc3luY0F1ZGlvRGVjb2Rl
cjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKICAgICBtX3F1ZXVlLmtpbGwoKTsKICAgICAKICAgICAv
LyBTdG9wIHRocmVhZC4KLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsK
LSAgICBtX3RocmVhZElEID0gMDsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsK
KyAgICBtX3RocmVhZCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRl
Y29kZUFzeW5jKFJlZjxBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUs
IFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFjaywgUmVmUHRyPEF1
ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKQEAgLTcyLDcgKzcyLDcgQEAgdm9p
ZCBBc3luY0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAKICAgICB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIHVudGlsIHdlIGhhdmUgbV90aHJlYWRJ
RCBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIHJ1biBsb29wLgorICAgICAgICAvLyBX
YWl0IGZvciB1bnRpbCB3ZSBoYXZlIG1fdGhyZWFkIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGlu
ZyB0aGUgcnVuIGxvb3AuCiAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9u
TXV0ZXgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9Bc3luY0F1ZGlvRGVjb2Rlci5oCmluZGV4IGJiNWM1ZTMzN2I1ZWNmMWY4ZTYxNzUzYTI5Zjhk
MGY5NzE0MTU1M2QuLmYxMjUxMGQxOTdjM2RmOTZjYzA1Njg1NDZjYmMzZmI0NmVhYWE4YTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29k
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNv
ZGVyLmgKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgQXN5bmNBdWRpb0RlY29kZXIgewogICAgIHN0
YXRpYyB2b2lkIHRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZvaWQgcnVuTG9v
cCgpOwogCi0gICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRy
PFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7CiAgICAg
TWVzc2FnZVF1ZXVlPERlY29kaW5nVGFzaz4gbV9xdWV1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHAKaW5kZXggNTA1MjMwNDE5N2NkZWRkZTQ3ZmRjYmI5MTJlYzQ3NDA1NTc5NzQy
OC4uZTdkNTY3ZGZlYWQ0NDJjMzk2YWYwZjcwNTEwOTczZmZlMTQ4YWIwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBjb25zdCBzaXplX3QgcmVuZGVy
UXVhbnR1bVNpemUgPSAxMjg7CiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiBy
ZW5kZXJUYXJnZXQpCiAgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCByZW5kZXJU
YXJnZXQtPnNhbXBsZVJhdGUoKSkKICAgICAsIG1fcmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkK
LSAgICAsIG1fcmVuZGVyVGhyZWFkKDApCisgICAgLCBtX3JlbmRlclRocmVhZChudWxscHRyKQog
ICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQogewogICAgIG1fcmVuZGVyQnVzID0gQXVk
aW9CdXM6OmNyZWF0ZShyZW5kZXJUYXJnZXQtPm51bWJlck9mQ2hhbm5lbHMoKSwgcmVuZGVyUXVh
bnR1bVNpemUpOwpAQCAtNjYsOCArNjYsOCBAQCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6dW5pbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcmVuZGVy
VGhyZWFkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fcmVuZGVyVGhyZWFk
KTsKLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSAwOworICAgICAgICBtX3JlbmRlclRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBudWxscHRyOwog
ICAgIH0KIAogICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7CkBAIC04Myw3ICs4Myw3IEBA
IHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZygpCiAgICAg
aWYgKCFtX3N0YXJ0ZWRSZW5kZXJpbmcpIHsKICAgICAgICAgbV9zdGFydGVkUmVuZGVyaW5nID0g
dHJ1ZTsKICAgICAgICAgcmVmKCk7IC8vIFNlZSBjb3JyZXNwb25kaW5nIGRlcmVmKCkgY2FsbCBp
biBub3RpZnlDb21wbGV0ZURpc3BhdGNoKCkuCi0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVudHJ5
LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVu
dHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgKaW5kZXggNzU1NjA0NjQ3MjMyYzRiYzUxM2NjOWUzOWRkNDQ1ZjM4YjYyY2Vm
NC4uNTY5MDEzOGIxNjU3MGIzZjlkMjM3ZjlkZDRhOGVhMjNkNzNmZmFhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAgICAgUmVmUHRyPEF1
ZGlvQnVzPiBtX3JlbmRlckJ1czsKICAgICAKICAgICAvLyBSZW5kZXJpbmcgdGhyZWFkLgotICAg
IHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV9yZW5kZXJUaHJlYWQ7CiAgICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CiAgICAg
c3RhdGljIHZvaWQgb2ZmbGluZVJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZv
aWQgb2ZmbGluZVJlbmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmNwcAppbmRleCA4ODY5ZjZiZjIyMzIzMmU2M2NjM2ZiNTJlMTZhZTFkYjNl
YjQxYmU2Li44YzkyZDZlNTM5NmFkZjEyZmJkZDY4ZDdhYzk3ZjllZDE5YWRjMDE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtNzcw
LDggKzc3MCw3IEBAIFNlY3VyaXR5T3JpZ2luRGF0YSBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4o
KQogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4o
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotICAgIGF1dG8mIHRocmVhZCA9
IGRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWQuZ2V0
VGhyZWFkSUQoKSkKKyAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlVGhyZWFkKCku
Z2V0VGhyZWFkSUQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNl
Y3VyaXR5T3JpZ2luKG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggMGRkZTVmNzI2
OGVlNjQyYzAwNDMwNWNlZmUzNmIxYzllNDRiODdkMy4uZDcwODE0ZjliNTViMjQ4ZmQ2NGUxYWZm
NDNlMzc2NzRmMTY5MmQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKQEAgLTYwLDEyICs2MCwxMiBAQCBib29sIERh
dGFiYXNlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3Jl
YXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNl
Iik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShEYXRhYmFzZVRocmVhZDo6ZGF0YWJh
c2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7CiAKLSAgICByZXR1cm4g
bV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnJlcXVlc3RUZXJtaW5hdGlvbihEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBT
eW5jKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkKCkKICAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdCBvZiBhbGwgcGVuZGluZyB0cmFuc2FjdGlv
bnMgb24gdGhpcyBkYXRhYmFzZSB0aHJlYWQKICAgICBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3It
PnNodXRkb3duKCk7CiAKLSAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJl
YWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJl
bnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUg
cmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIs
IG1fdGhyZWFkLT5pZCgpLCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8vIENsb3NlIHRoZSBk
YXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhhdCBp
ZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFjayBh
bmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCiAgICAgLy8gaW5jb25zaXN0ZW50
IG9yIGxvY2tlZCBzdGF0ZS4KQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFk
OjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5EYXRhYmFzZS0+cGVyZm9ybUNsb3NlKCk7
CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25n
ZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90aHJl
YWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogCiAgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiBjbGVhbnVwU3luYyA9IG1fY2xlYW51cFN5bmM7CiAKQEAgLTE0Miw3ICsxNDIsNyBA
QCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UmIGRhdGFi
YXNlKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAot
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZC0+aWQoKSk7CiAgICAgQVNTRVJUKCFtX29wZW5EYXRh
YmFzZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5hZGQo
JmRhdGFiYXNlKTsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpy
ZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhy
ZWFkLT5pZCgpKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBtX29wZW5EYXRhYmFz
ZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5yZW1vdmUo
JmRhdGFiYXNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUaHJlYWQuaAppbmRleCBlYzA0MWUzMTgxNzI0OTJlY2E2YmNlZmU4ZjFkYTI1
ZWM5MmVkMjZjLi5hNTIxMmRmYjhiMTcyY2UyZmY2YTk4ODhkZTBhOWRiOTc3YWUyZDJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVh
ZC5oCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAKICAgICB2b2lkIHJlY29yZERhdGFi
YXNlT3BlbihEYXRhYmFzZSYpOwogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJh
c2UmKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJl
YWRJRDsgfQorICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3Ro
cmVhZCA/IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogCiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29y
ZGluYXRvci5nZXQoKTsgfQogCkBAIC02OSw3ICs2OSw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFk
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAgICAgdm9p
ZCBkYXRhYmFzZVRocmVhZCgpOwogCiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci0g
ICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+
IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9zZWxm
UmVmOwogCiAgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZmOWZjYTY3ZjNjNDdh
ZGRjODNkZWM4Y2IwZDVlYjhjY2I0MGQ3NDMuLjEzOWFhOTkxYTE2ZWFkMjJmNjhmNTAxYmU3Yjk0
NTk2MzIyMTM1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVy
LmNwcApAQCAtMTAxLDE0ICsxMDEsMTQgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xs
ZWN0Tm93SWZOb3REb25lUmVjZW50bHkoKQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNv
bGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhib29sIHdhaXRVbnRpbERvbmUpCiB7
Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChjb2xsZWN0LCAw
LCAiV2ViQ29yZTogR0NDb250cm9sbGVyIik7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0g
VGhyZWFkOjpjcmVhdGUoY29sbGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOwogCiAg
ICAgaWYgKHdhaXRVbnRpbERvbmUpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSUQpOworICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHRocmVh
ZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvQXN5bmNGaWxlU3RyZWFtLmNwcAppbmRleCAxNjhlNGUyNzc5NWQ0MjVmNDA0ZjE3NWM5YmNi
YTkzZjczNjgwNzRjLi41NWM3Y2IwMjM5ODU5OWM5NzFlNmEzN2EwZjlhNzI0ODQ4NDJlNmJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCkBAIC03NCw3ICs3
NCw3IEBAIHN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoRnVuY3Rpb248dm9pZCAoKT4mJiBm
dW5jdGlvbikKIAogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVhdGVGaWxlVGhyZWFkT25j
ZTsKICAgICBzdGQ6OmNhbGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25jZSwgW10gewotICAgICAg
ICBjcmVhdGVUaHJlYWQoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKKyAgICAgICAg
VGhyZWFkOjpjcmVhdGUoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKICAgICAgICAg
ICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggNGNkY2Zh
YWQ2ZTgzMmEzOWE1YzM1MjY1ODA1ODUwODZiM2Q5ZjcyZi4uYTQ4YmZmNjA1MWYwZjE3NGRhMThk
MmZmOWQzN2FiM2JjNjY4NGZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIEFTU0VSVF9OT1RfU1lOQ19U
SFJFQUQoKSBBU1NFUlQoIW1fc3luY1RocmVhZFJ1bm5pbmcgfHwgIUlTX0lDT05fU1lOQ19USFJF
QUQoKSkKIAogLy8gRm9yIG1ldGhvZHMgdGhhdCBhcmUgbWVhbnQgdG8gc3VwcG9ydCB0aGUgc3lu
YyB0aHJlYWQgT05MWQotI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkgKG1fc3luY1RocmVh
ZCA9PSBjdXJyZW50VGhyZWFkKCkpCisjZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9z
eW5jVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKSkKICNkZWZpbmUgQVNTRVJUX0lDT05f
U1lOQ19USFJFQUQoKSBBU1NFUlQoSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAjaWYgUExBVEZP
Uk0oR1RLKQpAQCAtMTQxLDcgKzE0MSw3IEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpvcGVuKGNvbnN0
IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIC8vIExvY2sg
aGVyZSBhcyB3ZWxsIGFzIGZpcnN0IHRoaW5nIGluIHRoZSB0aHJlYWQgc28gdGhlIHRocmVhZCBk
b2Vzbid0IGFjdHVhbGx5IGNvbW1lbmNlIHVudGlsIHRoZSBjcmVhdGVUaHJlYWQoKSBjYWxsIAog
ICAgIC8vIGNvbXBsZXRlcyBhbmQgbV9zeW5jVGhyZWFkUnVubmluZyBpcyBwcm9wZXJseSBzZXQK
ICAgICBtX3N5bmNMb2NrLmxvY2soKTsKLSAgICBtX3N5bmNUaHJlYWQgPSBjcmVhdGVUaHJlYWQo
SWNvbkRhdGFiYXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3Jl
OiBJY29uRGF0YWJhc2UiKTsKKyAgICBtX3N5bmNUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJY29u
RGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IElj
b25EYXRhYmFzZSIpOwogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQ7CiAg
ICAgbV9zeW5jTG9jay51bmxvY2soKTsKICAgICBpZiAoIW1fc3luY1RocmVhZCkKQEAgLTE2MSw3
ICsxNjEsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQogICAgICAgICB3YWtlU3luY1Ro
cmVhZCgpOwogICAgICAgICAKICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHN5bmMgdGhyZWFkIHRv
IHRlcm1pbmF0ZQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3N5bmNUaHJlYWQp
OworICAgICAgICBtX3N5bmNUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAg
ICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IGZhbHNlOyAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkRhdGFiYXNlLmgKaW5kZXggMDYxYWY0YTEyNTU3NzFkZTExYTMyZjU2ODNjMGVm
ZGE1OTI5M2I5ZC4uODY0MDk1NTQ3NTMzZmQ4OTBmMDNhZmU5MmJiMDZmNjA4N2VlNzM2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKQEAgLTExOSw3ICsxMTks
NyBAQCBjbGFzcyBJY29uRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgSWNvbkRhdGFiYXNlQmFzZSB7
CiAgICAgdm9pZCBzeW5jVGltZXJGaXJlZCgpOwogICAgIAogICAgIFRpbWVyIG1fc3luY1RpbWVy
OwotICAgIFRocmVhZElkZW50aWZpZXIgbV9zeW5jVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+
IG1fc3luY1RocmVhZDsKICAgICBib29sIG1fc3luY1RocmVhZFJ1bm5pbmc7CiAgICAgCiAgICAg
SGFzaFNldDxSZWZQdHI8RG9jdW1lbnRMb2FkZXI+PiBtX2xvYWRlcnNQZW5kaW5nRGVjaXNpb247
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAppbmRleCA5MTIw
MGMzNDVmNDU1Zjk2ZDQ5NGJmZDJhZDcwM2YyOGM1YzYyOWQxLi5kOWI2ZjcyZmEzNmZhNzAwYzgy
NmYzYzk3ZDZiYWEwMmQ0MmU4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VV
c2FnZVRocmVhZC5jcHAKQEAgLTk2LDExICs5NiwxMSBAQCB2b2lkIFJlc291cmNlVXNhZ2VUaHJl
YWQ6Om5vdGlmeU9ic2VydmVycyhSZXNvdXJjZVVzYWdlRGF0YSYmIGRhdGEpCiAKIHZvaWQgUmVz
b3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3Ro
cmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX3ZtID0gJmNvbW1vblZNKCk7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogUmVzb3VyY2VVc2FnZSIpOworICAg
IG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3Jl
OiBSZXNvdXJjZVVzYWdlIik7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6dGhyZWFk
Q2FsbGJhY2sodm9pZCogcmVzb3VyY2VVc2FnZVRocmVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9S
ZXNvdXJjZVVzYWdlVGhyZWFkLmgKaW5kZXggMThhMWU2NzU0M2QyMjA5YzE3OTU3NDczNjYyMmE3
OGIzODRiYjhmYy4uZWZkZTI3ZWZlNmIwYWM0NTQ2NGRlODkxYzY3Y2U3OWY5Y2YyZTE5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKQEAgLTYyLDcgKzYyLDcg
QEAgY2xhc3MgUmVzb3VyY2VVc2FnZVRocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRCb2R5KCk7CiAg
ICAgdm9pZCBwbGF0Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSosIFJlc291cmNlVXNhZ2VEYXRhJik7
CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllciB7IDAgfTsKKyAgICBS
ZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fbG9jazsKICAg
ICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpmdW5jdGlv
bjx2b2lkIChjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpPj4gbV9vYnNlcnZlcnM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAppbmRleCA3
MzBjMGE2YmQ5M2Y0NTc4ZDFlZGJmOWFjZTFjZDg2NTY2ZTZjOTg4Li5kMjA3ODQwNTYwZGRmOTA1
OTBhMGRhZGQyNzMwODRjOTFjOWZiMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTM1LDE0ICszNSwxNCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCgpCi0gICAg
OiBtX3RocmVhZElkZW50aWZpZXIoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiB9CiAK
IGJvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQogewotICAgIGF1dG8gdGhy
ZWFkSWRlbnRpZmllciA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWRJZGVu
dGlmaWVyOwotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQoKSA9
PSB0aHJlYWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFNjcm9sbGlu
Z1RocmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWQ7CisgICAgcmV0dXJuIHRocmVhZCAmJiB0aHJl
YWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6
ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKQEAgLTc0LDE0ICs3NCwxNCBA
QCBTY3JvbGxpbmdUaHJlYWQmIFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkKIAogdm9pZCBT
Y3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV90aHJl
YWRJZGVudGlmaWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBpbml0aWFsaXplIHRoZSBydW4gbG9vcC4KICAgICB7
CiAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2luaXRpYWxpemVSdW5Mb29w
TXV0ZXgpOwogCi0gICAgICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJl
YWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFNjcm9sbGluZyIpOworICAgICAgICBtX3RocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xs
aW5nIik7CiAgICAgICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBtX2luaXRpYWxp
emVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc117IHJldHVybiBtX3Ro
cmVhZFJ1bkxvb3A7IH0pOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6
Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2Fs
bGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKQogewotICAgIFdURjo6c2V0Q3VycmVudFRocmVh
ZElzVXNlckludGVyYWN0aXZlKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJ
c1VzZXJJbnRlcmFjdGl2ZSgpOwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGluZ1RocmVhZCo+KHNj
cm9sbGluZ1RocmVhZCktPnRocmVhZEJvZHkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaAppbmRleCBkZTA2MmQ3N2FjMDFkZjlkMmEw
OTg2MGViZTZiOGU5ZmQzY2ZmNWMwLi5kODg5MmYwNWJlNjQzN2Q0YWFjYzBhNzUxYTdjYTdlOTNi
ZWUwZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuaApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBTY3JvbGxpbmdUaHJlYWQgewogICAgIHZv
aWQgdGhyZWFkUnVuTG9vcFNvdXJjZUNhbGxiYWNrKCk7CiAjZW5kaWYKIAotICAgIFRocmVhZElk
ZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFk
OwogCiAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsK
ICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCmluZGV4IGY3MTMzM2M1
YTM3YTk5ODk2NGYzYTc0MWM3MzE1MmU5NTE0NjZjZjYuLmRkYmUzYmE5ODBlNDUwYTQ5NGNkMDY0
OGY0MWI1ZTM2YWZlZWI1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcApAQCAtNjQsNyArNjQsNyBAQCBQYXNzUmVmUHRy
PEhSVEZEYXRhYmFzZUxvYWRlcj4gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5
bmNocm9ub3VzbHlJZgogfQogCiBIUlRGRGF0YWJhc2VMb2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRl
cihmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogbV9kYXRhYmFzZUxvYWRlclRocmVhZCgwKQorICAg
IDogbV9kYXRhYmFzZUxvYWRlclRocmVhZChudWxscHRyKQogICAgICwgbV9kYXRhYmFzZVNhbXBs
ZVJhdGUoc2FtcGxlUmF0ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTA2
LDcgKzEwNiw3IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHko
KQogICAgIAogICAgIGlmICghbV9ocnRmRGF0YWJhc2UuZ2V0KCkgJiYgIW1fZGF0YWJhc2VMb2Fk
ZXJUaHJlYWQpIHsKICAgICAgICAgLy8gU3RhcnQgdGhlIGFzeW5jaHJvbm91cyBkYXRhYmFzZSBs
b2FkaW5nIHByb2Nlc3MuCi0gICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBjcmVhdGVU
aHJlYWQoZGF0YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJhc2UgbG9hZGVyIik7
CisgICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkYXRhYmFz
ZUxvYWRlckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKICAgICB9CiB9CiAK
QEAgLTEyMSw4ICsxMjEsOCBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6d2FpdEZvckxvYWRl
clRocmVhZENvbXBsZXRpb24oKQogICAgIAogICAgIC8vIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIHRocmVhZC4KICAgICBp
ZiAobV9kYXRhYmFzZUxvYWRlclRocmVhZCkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24obV9kYXRhYmFzZUxvYWRlclRocmVhZCk7Ci0gICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9
IDA7CisgICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7
CisgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZEYXRhYmFzZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRh
dGFiYXNlTG9hZGVyLmgKaW5kZXggYzg2OWQxMzdhMWRiMmY1MjQ5OGQwZTFiNjVkNTg3ZTZjODE5
YjM4MS4uM2FkMjUxZjIxOTkwOWY0YmM2NDU0ZDAxMzIwMWI2YTdjYTcwMjY4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKQEAg
LTc3LDcgKzc3LDcgQEAgY2xhc3MgSFJURkRhdGFiYXNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50
ZWQ8SFJURkRhdGFiYXNlTG9hZGVyPiB7CiAKICAgICAvLyBIb2xkaW5nIGEgbV90aHJlYWRMb2Nr
IGlzIHJlcXVpcmVkIHdoZW4gYWNjZXNzaW5nIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQuCiAgICAg
TG9jayBtX3RocmVhZExvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2RhdGFiYXNlTG9hZGVy
VGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CiAKICAg
ICBmbG9hdCBtX2RhdGFiYXNlU2FtcGxlUmF0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA5NmYzMzA4MjgwNzlhNzlh
ZDY0ODIwZDA3MjFjNTljNWVhMTZmZGIxLi4yMWJlOTk2ZWYzN2U1M2RiNzAzMTAwMTk2MjdjMGM0
MGQyYjIxMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlci5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBSZXZlcmJDb252b2x2ZXI6OlJldmVy
YkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6ZV90IHJlbmRlclNs
aQogICAgIC8vIFN0YXJ0IHVwIGJhY2tncm91bmQgdGhyZWFkCiAgICAgLy8gRklYTUU6IHdvdWxk
IGJlIGJldHRlciB0byB1cCB0aGUgdGhyZWFkIHByaW9yaXR5IGhlcmUuICBJdCBkb2Vzbid0IG5l
ZWQgdG8gYmUgcmVhbC10aW1lLCBidXQgaGlnaGVyIHRoYW4gdGhlIGRlZmF1bHQuLi4KICAgICBp
ZiAodGhpcy0+dXNlQmFja2dyb3VuZFRocmVhZHMoKSAmJiBtX2JhY2tncm91bmRTdGFnZXMuc2l6
ZSgpID4gMCkKLSAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gY3JlYXRlVGhyZWFkKFdlYkNv
cmU6OmJhY2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91bmQg
dGhyZWFkIik7CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdl
YkNvcmU6OmJhY2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9uIGJhY2tncm91
bmQgdGhyZWFkIik7CiB9CiAKIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZlcigpCkBA
IC0xNDYsNyArMTQ2LDcgQEAgUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKICAg
ICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9iYWNrZ3Jv
dW5kVGhyZWFkKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlv
bigpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiQ29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuaAppbmRleCA2YmFlYjdjY2UyOTg5NmM5ODk2MzUxMmY0MWI0M2EyZjEyODg1
NDFjLi4wNTk2MzM2N2FlMjgzNDk0ODc5MGJhN2NjYjcyMDYwZWM1OTgxMDcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaApAQCAtODYsNyAr
ODYsNyBAQCBjbGFzcyBSZXZlcmJDb252b2x2ZXIgewogCiAgICAgLy8gQmFja2dyb3VuZCB0aHJl
YWQgYW5kIHN5bmNocm9uaXphdGlvbgogICAgIGJvb2wgbV91c2VCYWNrZ3JvdW5kVGhyZWFkczsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIG1fYmFja2dyb3VuZFRocmVhZDsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX2JhY2tncm91bmRUaHJlYWQ7CiAgICAgYm9vbCBtX3dhbnRzVG9FeGl0OwogICAgIGJv
b2wgbV9tb3JlSW5wdXRCdWZmZXJlZDsKICAgICBtdXRhYmxlIExvY2sgbV9iYWNrZ3JvdW5kVGhy
ZWFkTXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCmluZGV4IDZj
ZDhiZDdmODFiZmYyMjI3ZmUxNGZiY2EwZmJmZDA1NWQwOWM1NzEuLjFmMjVlOGU1NGU5ZWU4NWZh
MGNjYTZhMzFiOTJlMTExZTZkZjBjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3Ry
ZWFtZXIuY3BwCkBAIC0zNzAsMjAgKzM3MCwyMCBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBBdWRp
b0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubwog
UGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBm
aWxlUGF0aCwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRy
PEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFk
KCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBz
YW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxl
UmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0g
ewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRl
QnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1
c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUs
IGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIFJlZlB0cjxBdWRpb0J1
cz4gcmV0dXJuVmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgiQXVkaW9G
aWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2Ft
cGxlUmF0ZV0geworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIkF1ZGlvRmlsZVJl
YWRlciIsIFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNhbXBsZVJh
dGVdIHsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIoZGF0YSwgZGF0YVNp
emUpLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0pOwotICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0
aW9uKCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDFjNWMzMGYzNzdhNDJiZTAwMTc3MTY1MWU4
N2Y3MDQzYTVkNjVjOTAuLjI2NDY2ZjUzYjQ4MjE4ZDMzN2E1YTg5NGYxZGI3MjhkZjRjNDdjODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0xMDgs
NyArMTA4LDcgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMg
UmVzb3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBTdHJlYW0KICAgICAgICAgdm9pZCB3YXNCbG9j
a2VkKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgY2Fubm90U2hvd1VS
TChSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOwogCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWQgeyAwIH07CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0
ciB9OwogICAgICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAg
ICAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgICAgIFJ1
bkxvb3AqIG1fcnVuTG9vcCB7IG51bGxwdHIgfTsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIFJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChX
ZWJLaXRXZWJTcmMqIHNyYywKICAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKLSAgICBt
X3RocmVhZCA9IGNyZWF0ZVRocmVhZCgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBb
dGhpcywgcmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKKyAgICBtX3RocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0
ID0gV1RGTW92ZShyZXF1ZXN0KV0gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAg
bV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTExMTMsOCArMTExMyw4IEBAIFJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dChXZWJLaXRXZWJTcmMqIHNyYywKIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp+UmVz
b3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQoKQogewogICAgIGlmIChtX3RocmVhZCkgewotICAg
ICAgICBkZXRhY2hUaHJlYWQobV90aHJlYWQpOwotICAgICAgICBtX3RocmVhZCA9IDA7CisgICAg
ICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAg
IH0KIAogICAgIGlmIChtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNw
cAppbmRleCA0NmI4OTk0YTg0MWVmNzFlYTI3OWNlNzdjYmM4ZmI0M2MyOWYwYTYyLi5mZmJmZGE5
Yjg5MzQ4MzU0OTBjOWE0MGJhMWY0ODMzNmU0NzYwYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCkBAIC03Nyw3
ICs3Nyw3IEBAIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY0xvY2s+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KTsKIAogICAgIGlmICghbG9h
ZGVyUnVuTG9vcE9iamVjdCkgewotICAgICAgICBjcmVhdGVUaHJlYWQocnVuTG9hZGVyVGhyZWFk
LCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRlciIpOworICAgICAgICBUaHJlYWQ6OmNyZWF0
ZShydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CiAKICAg
ICAgICAgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW10geyByZXR1
cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA0NDA4Y2Qx
OTg3MDViYTg2Y2M4YzE5ODZmYjNlMmNhZGU3OTZkY2M2Li5mMTA1NzE1ZWQ4ZDg3OTM3M2I2MzMx
Y2IyNmUwODJjM2UxYWI4YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtOTQsMTAgKzk0LDEwIEBAIGludCBD
dXJsRG93bmxvYWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpIGNvbnN0CiB2b2lk
IEN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogewogICAgIGlmICgh
cnVuVGhyZWFkKCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkSWQpCi0gICAgICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElkKTsKKyAgICAgICAgaWYgKG1fdGhyZWFkKQor
ICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHNldFJ1
blRocmVhZCh0cnVlKTsKLSAgICAgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZChkb3dubG9h
ZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOwogICAg
IH0KIH0KIApAQCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3Rv
cFRocmVhZCgpCiB7CiAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIAotICAgIGlmIChtX3RocmVh
ZElkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOwotICAg
ICAgICBtX3RocmVhZElkID0gMDsKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJl
YWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuaAppbmRleCAwMmNlNzMxYmQxMGE4MDE5YjdlYmUxZmFjNTJiNDVlNDA5MjU2
MjMxLi5mNmJiYzc3ZjRkM2NlMGI5Njg3ZDFkOGZjYTYwOTE1ODdjOWFlNDljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBA
IC02OSw3ICs2OSw3IEBAIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewogCiAgICAgc3RhdGlj
IHZvaWQgZG93bmxvYWRUaHJlYWQodm9pZCogZGF0YSk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fdGhyZWFkSWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgQ1VSTE0qIG1f
Y3VybE11bHRpSGFuZGxlOwogICAgIFZlY3RvcjxDVVJMKj4gbV9wZW5kaW5nSGFuZGxlTGlzdDsK
ICAgICBWZWN0b3I8Q1VSTCo+IG1fYWN0aXZlSGFuZGxlTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCmluZGV4IDVmOWUwOTU0MDQ3MTdkMzBiZDg5OTQxZTVmMjUyZjE3YjBhODY3YjkuLjY4
ZTIxZjQ3NDQ1MWFjMzg3NTJiOWJjODk0M2MzNWQyM2I2OTY5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZUltcGwuaApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
IDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZSB7CiAgICAgICAgIHNpemVfdCBzaXplIHsgMCB9
OwogICAgIH07CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkIHsgMCB9Owor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya2VyVGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIHN0ZDo6
YXRvbWljPGJvb2w+IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07CiAgICAgTG9jayBtX211dGV4U2Vu
ZDsKICAgICBMb2NrIG1fbXV0ZXhSZWNlaXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Q3VybC5jcHAKaW5kZXggMWUzNzlkMWIwMGQwOTU1ZmMyZGEwMGJlM2Y5NmY5OTJhOTFiOTQzZi4u
ZWNiOWY1NGI2NWEzMzUyNGUzYTM1NmEzYmMxM2QwZTJmNmY2YWNiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxD
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGVJbXBsOjpzdGFydFRocmVhZCgpCiAKICAgICByZWYoKTsgLy8gc3RvcFRocmVh
ZCgpIHdpbGwgY2FsbCBkZXJlZigpLgogCi0gICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJl
YWQoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10geworICAgIG1fd29ya2VyVGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10gewogCiAgICAgICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpzdG9wVGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdG9w
VGhyZWFkID0gdHJ1ZTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3dvcmtlclRocmVh
ZCk7Ci0gICAgbV93b3JrZXJUaHJlYWQgPSAwOworICAgIG1fd29ya2VyVGhyZWFkLT53YWl0Rm9y
Q29tcGxldGlvbigpOworICAgIG1fd29ya2VyVGhyZWFkID0gbnVsbHB0cjsKICAgICBkZXJlZigp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggN2FkNWI1
NzkxM2ExNjcyZGY5MTk2ZTllYjAxMzNlMjNlMjMyOTg1ZC4uZGVlNmNlNmQ2NzNkNzZiNDFmMjc0
NTQwNGZiMDc5ZjIxOTY1M2I2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcApAQCAtOTksNyArOTksNyBAQCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhy
ZWFkU3RhcnR1cERhdGEoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cgogfQogCiBXb3Jr
ZXJUaHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHksIFdvcmtlclJlcG9y
dGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0
YXJ0TW9kZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiBjb250
ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldv
cmxkQ29udGVudFNlY3VyaXR5UG9saWN5LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2lu
LCBNb25vdG9uaWNUaW1lIHRpbWVPcmlnaW4sIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5
KiBjb25uZWN0aW9uUHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92aWRlciwgSlNDOjpS
dW50aW1lRmxhZ3MgcnVudGltZUZsYWdzKQotICAgIDogbV90aHJlYWRJRCgwKQorICAgIDogbV90
aHJlYWQobnVsbHB0cikKICAgICAsIG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJv
eHkpCiAgICAgLCBtX3dvcmtlclJlcG9ydGluZ1Byb3h5KHdvcmtlclJlcG9ydGluZ1Byb3h5KQog
ICAgICwgbV9ydW50aW1lRmxhZ3MocnVudGltZUZsYWdzKQpAQCAtMTMzLDE1ICsxMzMsMTUgQEAg
V29ya2VyVGhyZWFkOjp+V29ya2VyVGhyZWFkKCkKIAogYm9vbCBXb3JrZXJUaHJlYWQ6OnN0YXJ0
KCkKIHsKLSAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhh
dCBtX3RocmVhZElEIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCisgICAg
Ly8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWQg
aXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBMb2NrSG9sZGVyIGxv
Y2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlm
IChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3Jl
YXRlVGhyZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3Jl
OiBXb3JrZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdvcmtlclRocmVhZDo6
d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKIAotICAgIHJldHVy
biBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBXb3JrZXJUaHJl
YWQ6OndvcmtlclRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTE5Myw3ICsxOTMsNyBAQCB2
b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICBnX21haW5fY29udGV4dF9wb3Bf
dGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElEID0gbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBwcm90
ZWN0b3IgPSBtX3RocmVhZDsKIAogICAgIEFTU0VSVChtX3dvcmtlckdsb2JhbFNjb3BlLT5oYXNP
bmVSZWYoKSk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIFdvcmtlclRocmVhZDo6d29ya2Vy
VGhyZWFkKCkKICAgICB0aHJlYWRHbG9iYWxEYXRhKCkuZGVzdHJveSgpOwogCiAgICAgLy8gVGhl
IHRocmVhZCBvYmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIGZyb20gbm90aWZpY2F0aW9u
IG5vdywgZG9uJ3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCi0gICAgZGV0YWNoVGhyZWFkKHRocmVh
ZElEKTsKKyAgICBwcm90ZWN0b3ItPmRldGFjaCgpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6
c3RhcnRSdW5uaW5nRGVidWdnZXJUYXNrcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJl
YWQuaAppbmRleCAwN2FkM2NlNzg0ZjkxOWY3MGM0NTY4MWI5NTRjMDA5OTk2ZjU1N2YyLi5mODA5
ZWU2NjcyN2VlMTM5ZGM0ZjE5ZDJjYjYxYjIyNjVlNGVhNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyVGhyZWFkLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgV29ya2VyVGhyZWFkIDog
cHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgYm9vbCBzdGFydCgpOwogICAg
IHZvaWQgc3RvcCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29u
c3QgeyByZXR1cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KICAgICBXb3JrZXJS
dW5Mb29wJiBydW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9CiAgICAgV29ya2VyTG9hZGVy
UHJveHkmIHdvcmtlckxvYWRlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJMb2FkZXJQ
cm94eTsgfQogICAgIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgp
IGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KQEAgLTk4LDcgKzk4LDcg
QEAgY2xhc3MgV29ya2VyVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7
CiAgICAgc3RhdGljIHZvaWQgd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwogICAgIHZvaWQgd29y
a2VyVGhyZWFkKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVm
UHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgV29ya2VyUnVuTG9vcCBtX3J1bkxvb3A7CiAgICAg
V29ya2VyTG9hZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7CiAgICAgV29ya2VyUmVwb3J0
aW5nUHJveHkmIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3Rv
cmFnZVRocmVhZC5jcHAKaW5kZXggYmI2NmZjZWE3ZTUyOGJjMjdmNjMzYTNlNTI4NzhiNTAxZWYw
ZTE4Ny4uMzU3Njc5NDZhZGUzNzJhNDc5NDVmODVkM2Y4OTU4YjUyNTRhYmU0MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcApAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMg
SGFzaFNldDxTdG9yYWdlVGhyZWFkKj4mIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkKIH0KIAogU3Rv
cmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCisgICAgOiBt
X3RocmVhZChudWxscHRyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiB9CkBAIC00
OCwxNiArNDgsMTYgQEAgU3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgpCiBTdG9yYWdlVGhy
ZWFkOjp+U3RvcmFnZVRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBBU1NFUlQoIW1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV90aHJlYWQpOwogfQogCiBib29s
IFN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChT
dG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBM
b2NhbFN0b3JhZ2UiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhp
cywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCku
YWRkKHRoaXMpOwotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsK
IH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2sodm9pZCog
dGhyZWFkKQpAQCAtNzgsMjUgKzc4LDI1IEBAIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50
cnlQb2ludCgpCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+
JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
IW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtp
bGxlZCgpICYmIG1fdGhyZWFkKTsKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVl
PEZ1bmN0aW9uPHZvaWQgKCk+PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiB2b2lkIFN0b3Jh
Z2VUaHJlYWQ6OnRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFt
X3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkKTsKICAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygp
LnJlbW92ZSh0aGlzKTsKICAgICAvLyBFdmVuIGluIHdlaXJkLCBleGNlcHRpb25hbCBjYXNlcywg
ZG9uJ3Qgd2FpdCBvbiBhIG5vbmV4aXN0ZW50IHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgaWYg
KCFtX3RocmVhZElEKQorICAgIGlmICghbV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFt0aGlz
XSB7CiAgICAgICAgIHBlcmZvcm1UZXJtaW5hdGUoKTsKICAgICB9KSk7Ci0gICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0
aW9uKCk7CiAgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkpOwotICAgIG1fdGhyZWFkSUQgPSAw
OworICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjpwZXJm
b3JtVGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
VGhyZWFkLmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCmluZGV4IDk1
NjRiOGFhMDZlNTI0M2UzMGU0NjdjNWZiZmUyY2RhZGIyNDBjNTYuLjhjZjFiM2Q0YWRjNWEzMDZh
NzdlYzc3YzljMzI2NjYxNjg3YmVjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9TdG9yYWdlVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJl
YWQuaApAQCAtNTYsNyArNTYsNyBAQCBjbGFzcyBTdG9yYWdlVGhyZWFkIHsKICAgICAvLyBCYWNr
Z3JvdW5kIHRocmVhZCBwYXJ0IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJlLgogICAgIHZvaWQg
cGVyZm9ybVRlcm1pbmF0ZSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIE1lc3NhZ2VRdWV1ZTxGdW5jdGlvbjx2
b2lkICgpPj4gbV9xdWV1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAzYjg1ZjIyZmZhZTAxZTI4YWFiOTk4MTY2OThh
ZGFkN2EzODQzYzVmLi5iMDRhY2M4YzMxYzVlY2E4MmE1MTc0MTY2N2RiNzBlMDUzZjFkMmM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIHsKICAgICBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKIAotICAgIFdURjo6c2V0
Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxl
cjsKICAgICBtX2xvYWRUaHJvdHRsZUxhdGVuY3kgPSBwYXJhbWV0ZXJzLmxvYWRUaHJvdHRsZUxh
dGVuY3k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IGVmN2JhODk5ODIw
MjMyNTg5ZTczOTFmMjdmY2QzZDZlMTY5ZjY4OTQuLmZhMDMwZmIzYTJhMGY4MmQ2YTI0NWJmODU2
YjM2YWEyNzMyMDA3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0x
ODMsNyArMTgzLDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9m
ZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKIAogICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7Ci0gICAg
ZGV0YWNoVGhyZWFkKGNyZWF0ZVRocmVhZCgiSU9DaGFubmVsOjpyZWFkU3luYyIsIFtjaGFubmVs
LCBzaXplLCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICBUaHJlYWQ6OmNyZWF0ZSgi
SU9DaGFubmVsOjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwgY29tcGxldGlvbkhh
bmRsZXJdIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVm
YXVsdFJlYWRCdWZmZXJTaXplKTsKICAgICAgICAgdWludDhfdCogYnVmZmVyRGF0YSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKGJ1ZmZlclNpemUpKTsKICAgICAgICAgR1JlZlB0
cjxTb3VwQnVmZmVyPiByZWFkQnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRo
X293bmVyKGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGJ1ZmZlckRhdGEsIGZhc3RGcmVlKSk7CkBA
IC0yMTcsNyArMjE3LDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90
IG9mZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICAgICAgICAgIERh
dGEgZGF0YSA9IHsgV1RGTW92ZShidWZmZXIpIH07CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihkYXRhLCAwKTsKICAgICAgICAgfSwgcXVldWUpOwotICAgIH0pKTsKKyAgICB9KS0+ZGV0
YWNoKCk7CiB9CiAKIHN0cnVjdCBXcml0ZUFzeW5jRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggYmFmNTMwNjZiZTIwMDllMjZkYmViN2FjODg4
YzQwNWUzYmRiYTZmZi4uYjM4N2I2YjQ0NWUzN2QzZGEzZThhNzJjN2MwYmEzNWM4NjNmMjcxMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcApAQCAtNjc1LDcg
KzY3NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShzdGQ6OnVu
aXF1ZV9wdHI8RGVjb2Rlcj4gbWVzc2FnZSkKIAogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAg
aWYgKG1lc3NhZ2UtPmlzU3luY01lc3NhZ2UoKSAmJiBtX3Nob3VsZEJvb3N0TWFpblRocmVhZE9u
U3luY01lc3NhZ2UpIHsKLSAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRo
cmVhZF9vdmVycmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBhZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKSwgMCk7CisgICAgICAgIHB0aHJlYWRf
b3ZlcnJpZGVfdCBvdmVycmlkZSA9IHB0aHJlYWRfb3ZlcnJpZGVfcW9zX2NsYXNzX3N0YXJ0X25w
KG1fbWFpblRocmVhZCwgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lO
VEVSQUNUSVZFKSwgMCk7CiAgICAgICAgIG1lc3NhZ2UtPnNldFFPU0NsYXNzT3ZlcnJpZGUob3Zl
cnJpZGUpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2
aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKaW5kZXggM2JiN2M2ZDQ3ZDQzYzY5NzZiMDNjZmY3
NzM2NDRmNDg3ODQ5M2Q0MS4uZjIzZGI0M2MwMjM0ZGM3YzgxMDQ5NTNmMDRlZjg3OTUyZjliODc0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMv
bWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50
cnlQb2ludC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBYUENTZXJ2aWNlSW5pdGlhbGl6ZXIo
T1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4gY29ubmVjdGlvbiwgeHBjX29iamVjdF8KIAog
I2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgaWYgKHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXph
dGlvbkRhdGEuY29udGFpbnMoQVNDSUlMaXRlcmFsKCJhbHdheXMtcnVucy1hdC1iYWNrZ3JvdW5k
LXByaW9yaXR5IikpKQotICAgICAgICBzZXRHbG9iYWxNYXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJ
TElUWSk7CisgICAgICAgIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MoUU9TX0NMQVNTX1VU
SUxJVFkpOwogI2VuZGlmCiAKICAgICBYUENTZXJ2aWNlVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlh
bGl6ZShwYXJhbWV0ZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9s
aW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKaW5kZXggMDYwOGFiNzJmOTkyNDhlZjI0
Y2QyZDUyNDVlZTUzMzNhMDBkOWQwZC4uNDhkMTA2OTc3NjVhOTVhOGIzNTg3MjMwZTEwMmQ4MDNh
ZDU4YzBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9y
eVByZXNzdXJlTW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4
L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBNZW1vcnlQcmVz
c3VyZU1vbml0b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgaWYgKG1fZXZlbnRGRCA9
PSAtMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVu
dGlmaWVyID0gY3JlYXRlVGhyZWFkKCJNZW1vcnlQcmVzc3VyZU1vbml0b3IiLCBbdGhpc10gewor
ICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJNZW1vcnlQcmVzc3Vy
ZU1vbml0b3IiLCBbdGhpc10gewogICAgICAgICBkb3VibGUgcG9sbEludGVydmFsID0gc19tYXhQ
b2xsaW5nSW50ZXJ2YWxJblNlY29uZHM7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
ICAgICBzbGVlcChwb2xsSW50ZXJ2YWwpOwpAQCAtMjcxLDcgKzI3MSw3IEBAIE1lbW9yeVByZXNz
dXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKCkKICAgICAgICAgfQogICAgICAgICBj
bG9zZShtX2V2ZW50RkQpOwogICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJZGVudGlm
aWVyKTsKKyAgICB0aHJlYWQtPmRldGFjaCgpOwogfQogCiBJUEM6OkF0dGFjaG1lbnQgTWVtb3J5
UHJlc3N1cmVNb25pdG9yOjpjcmVhdGVIYW5kbGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMWQ1MDIxNWEyMDMxMTRiNGYyM2Q1ZDU4ZjJkMjUz
ZmY3OTA1NmQ1ZS4uNGY5NmFiYmYwZGM5NzJmOGI5YzJjNmNmNmU4MjY0NjllMjVmYmY1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yNTgsNyArMjU4LDcg
QEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICBwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9j
ZXNzKFdURk1vdmUocGFyYW1ldGVycykpOwogCiAgICAgLy8gTWF0Y2ggdGhlIFFvUyBvZiB0aGUg
VUlQcm9jZXNzIGFuZCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBidXQgdXNlIGEgc2xpZ2h0bHkgbG93
ZXIgcHJpb3JpdHkuCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
LTEpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
LTEpOwogCiAgICAgbV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IHBhcmFtZXRlcnMu
c2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgaWYgKCFtX3N1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyKSB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggZDM1YWVkODcxNTBkZWU0MTE5NzE0NmZlZWYwYjA5ZmY0NmU4
NDA2MC4uZWEyNzA1Y2NjNGQxZWEzNzZlM2NiNWViNDlmMTQ4NTU2YjRkYmNlNSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBA
CisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisg
ICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFk
PiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRv
IFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwOgorICAgICAgICAo
cnVuSmF2YVNjcmlwdFRocmVhZCk6CisgICAgICAgIChzdGFydEphdmFTY3JpcHRUaHJlYWRzKToK
KyAgICAgICAgKHN0b3BKYXZhU2NyaXB0VGhyZWFkcyk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAodGVzdFRocmVhZElkZW50aWZpZXJN
YXApOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHA6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpydW5Mb2NrVGVzdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvUGFya2luZ0xvdC5jcHA6CisKIDIwMTctMDQtMDYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1h
eGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEZvbnRXaXRoRmVhdHVyZXMgdGVzdCBm
b250IHBhc3MgT1RTCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0
VGhyZWFkaW5nLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcu
Y3BwCmluZGV4IGUyZjliYWRlNmNhN2MyNjk0ODVhNGNkY2JlNjA5OWMzNmJhMDIxOTguLjcxMGQy
YTU5ZGE5MjkwMTZlNjA4YTRjZjdkOTQ2ZmE4N2ZhZDkzMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBM
b2NrJiBqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9
CiAKLXR5cGVkZWYgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBUaHJlYWRTZXQ7Cit0eXBlZGVm
IEhhc2hTZXQ8UmVmUHRyPFRocmVhZD4+IFRocmVhZFNldDsKIHN0YXRpYyBUaHJlYWRTZXQmIGph
dmFTY3JpcHRUaHJlYWRzKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
VGhyZWFkU2V0LCBzdGF0aWNKYXZhU2NyaXB0VGhyZWFkcywgKCkpOwpAQCAtMTA4LDEwICsxMDgs
MTAgQEAgdm9pZCBydW5KYXZhU2NyaXB0VGhyZWFkKHZvaWQqKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgp
KTsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0g
ICAgICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygp
LnJlbW92ZSh0aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVU
aHJlYWQoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAgICAgVGhyZWFkJiB0aHJl
YWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKKyAgICAgICAgdGhyZWFkLmRldGFjaCgpOworICAgICAg
ICBqYXZhU2NyaXB0VGhyZWFkcygpLnJlbW92ZSgmdGhyZWFkKTsKKyAgICAgICAgamF2YVNjcmlw
dFRocmVhZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDAp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBzdGFy
dEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhy
ZWFkc011dGV4KCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhy
ZWFkc0NvdW50OyArK2kpCi0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRo
cmVhZCgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOworICAgICAgICBqYXZhU2NyaXB0VGhy
ZWFkcygpLmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwog
fQogCiB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9p
ZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQogICAgICAgICBqYXZhU2NyaXB0VGhyZWFkc1Nob3Vs
ZFRlcm1pbmF0ZSA9IHRydWU7CiAgICAgfQogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIs
IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJl
YWQ+LCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0aHJlYWRzOwogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKICAgICAgICAgY29weVRv
VmVjdG9yKGphdmFTY3JpcHRUaHJlYWRzKCksIHRocmVhZHMpOwpAQCAtMTQ2LDcgKzE0Niw3IEBA
IHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JD
b21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3Jp
cHRUaHJlYWRzTXV0ZXgoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0KaW5kZXggZmI0ZDI2ZmNjZWI3MGM0YjUzMjAxMGRhODVmYjljZTc4NTVjMTM4NC4uM2Nl
YWE2ZjNlNjU3MzVkMzBlZjFhNGY4OTdkNWU2OWM0ZmE1ZmYwNiAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtMTA3Miw4ICsxMDcyLDggQEAgc3RhdGlj
IHZvaWQgdGVzdFRocmVhZElkZW50aWZpZXJNYXAoKQogICAgIHB0aHJlYWRfam9pbihwdGhyZWFk
LCAwKTsKIAogICAgIC8vIE5vdyBjcmVhdGUgYW5vdGhlciB0aHJlYWQgdXNpbmcgV1RGLiBPbiBP
U1gsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZSBwdGhyZWFkIGhhbmRsZQotICAgIC8vIGJ1dCBzaG91
bGQgZ2V0IGEgZGlmZmVyZW50IFRocmVhZElkZW50aWZpZXIuCi0gICAgY3JlYXRlVGhyZWFkKHJ1
blRocmVhZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0ZXN0Iik7CisgICAgLy8gYnV0IHNob3VsZCBn
ZXQgYSBkaWZmZXJlbnQgUmVmUHRyPFRocmVhZD4uCisgICAgVGhyZWFkOjpjcmVhdGUocnVuVGhy
ZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsKIH0KIAogc3RhdGljIHZvaWQgYWxsb2Nh
dGVHbG9iYWxDb250cm9sbGVycygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Db25kaXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29u
ZGl0aW9uLmNwcAppbmRleCA4NDg1MjczNTFmNjA2M2ZjMjYzNjg3ODA1NmQ5YzI0ZGJhYmU4M2Rj
Li43NzIxNjM2Yjc3ODA3ZjEzOTUxZWExMTJmYmQ0MTNlOGZhYzQ2MGJjIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlv
biBmdWxsQ29uZGl0aW9uOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IGNvbnN1bWVy
VGhyZWFkczsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gcHJvZHVjZXJUaHJlYWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gY29uc3VtZXJUaHJlYWRzOworICAgIFZlY3RvcjxS
ZWZQdHI8VGhyZWFkPj4gcHJvZHVjZXJUaHJlYWRzOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBy
ZWNlaXZlZDsKICAgICBMb2NrIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiQ29uc3VtZXIgdGhy
ZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewpA
QCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbXB0eUNvbmRpdGlvbiwgbG9ja2VyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91
bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVl
dWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlv
biBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBx
dWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHko
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICBz
bGVlcChkZWxheSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTsp
IHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpj
cmVhdGUoCiAgICAgICAgICAgICAiUHJvZHVjZXIgVGhyZWFkIiwKICAgICAgICAgICAgIFsmXSAo
KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2Vz
UGVyUHJvZHVjZXI7ICsraSkgewpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgcnVuVGVzdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ29uZGl0aW9uLCBsb2NrZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBD
aGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1h
eFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVvdXQpOwpAQCAtMTU1LDggKzE1NSw4IEBAIHZvaWQgcnVuVGVz
dCgKICAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAg
ICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1
Y2VyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRp
Zmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVj
ZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9ja2VyKGxvY2spOwpA
QCAtMTY0LDggKzE2NCw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICB9CiAgICAgZW1wdHlDb25kaXRp
b24ubm90aWZ5QWxsKCk7CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRp
ZmllciA6IGNvbnN1bWVyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlm
aWVyIDogY29uc3VtZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogCiAgICAgRVhQRUNUX0VRKG51bVByb2R1Y2VycyAqIG51bU1lc3NhZ2Vz
UGVyUHJvZHVjZXIsIHJlY2VpdmVkLnNpemUoKSk7CiAgICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJl
Z2luKCksIHJlY2VpdmVkLmVuZCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5j
cHAKaW5kZXggNTU3NjMwMmQ2OTBkZmNhMzU5OTI5MjhiMWM4NTNjNzYyMmU0NWZiOS4uNmE0ZTUz
OGY1NmY0NmQxNzdhM2Y2MmYxZGRlYjNhNGQwYWYyYWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTG9jay5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVu
c2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNp
Z25lZAogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFr
ZV91bmlxdWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8ZG91YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFk
R3JvdXBzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAq
IG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+
W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVh
ZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVh
ZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKICAg
ICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOwogCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7Ci0g
ICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAg
KyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAiTG9jayB0ZXN0IHRocmVhZCIsCiAgICAgICAgICAg
ICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCBudW1JdGVyYXRpb25zLCB3
b3JrUGVyQ3JpdGljYWxTZWN0aW9uXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBy
dW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQ
ZXJHcm91cCwgdW5zaWduZWQKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4
ID0gbnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykK
LSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOwor
ICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAg
IGRvdWJsZSBleHBlY3RlZCA9IDA7CiAgICAgZm9yICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRo
cmVhZHNQZXJHcm91cDsgaS0tOykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1BhcmtpbmdMb3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFy
a2luZ0xvdC5jcHAKaW5kZXggYzY3ZTFlMDgxNWE4M2FmYTkzMzNlMmFjOWEyYmQ3OGI2N2IxNjQ1
Yi4uNWFmOWM3YzgyN2IyMWUyMWQ4ZGY5MzA1MjYwZDZmZmVlNjhmYmQxYyAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKQEAgLTQ4LDE2ICs0OCwxNCBA
QCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bVRocmVhZHM7IGktLTspIHsKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKAot
ICAgICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICBUaHJlYWQ6OmNy
ZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAogICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05F
KDB1LCBjdXJyZW50VGhyZWFkKCkpOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrZXIobG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRo
cmVhZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhy
ZWFkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoVGhyZWFkOjpjdXJyZW50
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9ICZUaHJlYWQ6OmN1cnJl
bnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgfQpAQCAtNjUsMTYgKzYzLDE2IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgdm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2lu
Z2xlVW5wYXJrSW5kZXgpCiAgICAgewotICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4p
OworICAgICAgICBFWFBFQ1RfVFJVRShudWxscHRyID09IGxhc3RBd29rZW4pOwogICAgICAgICAK
ICAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7Ci0gICAgICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyLCA4PiBxdWV1ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxUaHJl
YWQ+LCA4PiBxdWV1ZTsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAg
IFsmXSAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRy
ZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qg
dm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhv
cmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIHF1ZXVl
LmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQo
JnRocmVhZElkZW50aWZpZXIpOwogCiAgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVz
cysrOwogICAgICAgICAgICAgfSk7CkBAIC04NywxMiArODUsMTIgQEAgc3RydWN0IFNpbmdsZUxh
dGNoVGVzdCB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tl
cihsb2NrKTsKICAgICAgICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJ
bmRleCArIDEpCiAgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAg
ICAgICAgIEVYUEVDVF9ORSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShudWxscHRyICE9IGxhc3RBd29rZW4pOwogICAgICAgICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5
KCkgJiYgcXVldWVbMF0gIT0gbGFzdEF3b2tlbikgewogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ildva2UgdXAgd3JvbmcgdGhyZWFkOiBxdWV1ZSA9ICIsIGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFz
dCBhd29rZW4gPSAiLCBsYXN0QXdva2VuLCAiXG4iKTsKICAgICAgICAgICAgICAgICBFWFBFQ1Rf
RVEocXVldWVbMF0sIGxhc3RBd29rZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFz
dEF3b2tlbiA9IDA7CisgICAgICAgICAgICBsYXN0QXdva2VuID0gbnVsbHB0cjsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTAwLDcgKzk4LDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAg
UGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwg
Y29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2
b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9y
ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIApAQCAtMTE0
LDcgKzExMiw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgICAgIG51bVdhaXRp
bmdPbkFkZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAg
ICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAg
ICAgICBbJl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAg
ICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKQEAgLTEyOSw4ICsxMjcsOCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0
IHsKICAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwogICAgICAgICB9CiAK
LSAgICAgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRz
KQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7
CisgICAgICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMp
CisgICAgICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
IH0KIAogICAgIC8vIFNlbWFwaG9yZSBvcGVyYXRpb25zLgpAQCAtMTc5LDkgKzE3Nyw5IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgIEF0b21pYzxpbnQ+IHNlbWFwaG9yZTsKICAgICBz
dGQ6Om11dGV4IGxvY2s7CiAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uOwot
ICAgIEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gYXdha2U7Ci0gICAgVmVjdG9yPFRocmVhZElk
ZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBsYXN0QXdva2VuIHsgMCB9
OworICAgIEhhc2hTZXQ8UmVmPFRocmVhZD4+IGF3YWtlOworICAgIFZlY3RvcjxSZWZQdHI8VGhy
ZWFkPj4gdGhyZWFkczsKKyAgICBSZWZQdHI8VGhyZWFkPiBsYXN0QXdva2VuIHsgbnVsbHB0ciB9
OwogfTsKIAogdm9pZCBydW5QYXJraW5nVGVzdCh1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25l
ZCBkZWxheSwgdW5zaWduZWQgbnVtVGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306506</attachid>
            <date>2017-04-07 08:42:40 -0700</date>
            <delta_ts>2017-04-07 09:51:01 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170408004238.patch</filename>
            <type>text/plain</type>
            <size>216110</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi4xNDhmZTAxNWI1OTg1ZTNj
MTE1YWI4NWEzYmMzOGU1NGIxZjdkYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1BsYXRmb3JtVGhyZWFkLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6Omlz
VmFsaWRGcmFtZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1w
bGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6Y3JlYXRlVGhy
ZWFkSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2Ft
cGxlKToKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpvd25lclRocmVhZCk6CisgICAgICAgICog
cnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6ZmluZEFjdGl2ZVZNQW5kU3RhY2tC
b3VuZHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAg
ICAgICAoSlNDOjpWTVRyYXBzOjpmaXJlVHJhcCk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0
aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNWMwYmI1
MGQ4NTBjY2Q1ZmQ0ZWM1MGRjOTQ0ODgzNGNmYzZjY2MzZC4uYmU2Y2IxMmU4OGRiNGJjZTVlODM2
NDE3OGQ0YzlhMTFjMGU5NzRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTUgQEAKKzIwMTctMDQtMDcgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5k
b3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVl
ZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6Cisg
ICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0
b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFk
LmNwcDoKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3Ip
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUp
OgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChX
VEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9SZWZQdHIuaDoKKyAgICAg
ICAgKFdURjo6UmVmUHRyOjpSZWZQdHIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uaDoKKyAgICAgICAgKFdURjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uOjpUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24pOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJQdGhyZWFk
cy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuY3BwLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAg
ICAgICogd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYv
d3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFk
SG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRl
cik6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVu
dCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
VEY6OlRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJX
aW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAo
V1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAgICogd3RmL1RocmVhZGlu
Zy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAg
ICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0
aXZlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlh
dGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6ZHVtcCk6CisgICAgICAgIChXVEY6Om5vcm1hbGl6ZVRocmVhZE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRD
dXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
c2V0R2xvYmFsTWF4UU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjphZGp1c3RlZFFP
U0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChX
VEY6OlRocmVhZDo6aWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkZE9uRXhpdENhbGxiYWNr
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6ZGlkSm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAg
IChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAg
ICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNy
ZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRo
cmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Z2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0
aHJlYWRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFi
bGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0
YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OnRocmVhZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OmVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50
ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZElu
dGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmRldGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRo
cmVhZERpZEV4aXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6c2lnbmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKToKKyAgICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5n
ZVByaW9yaXR5KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1
bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3Rh
Ymxpc2gpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhh
bmRsZUJ5SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5h
bCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50
VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAg
KFdURjo6V29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVl
dWUuaDoKKyAgICAgICAgKiB3dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAo
V1RGOjpkaXNwYXRjaFFPU0NsYXNzKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVH
ZW5lcmljLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGlu
dXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAo
V1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVy
KToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gVXBkYXRlIHRoZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBt
YWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUwZDQzYjFhY2Y3NGNjZjA5OWM2ZGNjOGQ4
ZDc0ZjI1NzlhZjUyOGUuLmEyMTAzYzQzYzA1N2UzZmZkNjA3YjEwYzMwYjgyZGU5MTkwYmQ0MTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFk
IGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5n
IGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVy
OjpJREJTZXJ2ZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
Ojp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpzdGFydFJlbmRlcmluZyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzZWN1cml0eU9yaWdp
bik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRo
cmVhZDo6Z2V0VGhyZWFkSUQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRl
cm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcpOgorICAgICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3Ry
ZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxPbkZpbGVUaHJlYWQpOgorICAgICAgICAq
IGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpjbG9zZSk6Cisg
ICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmg6CisgICAgICAgICogcGFnZS9SZXNv
dXJjZVVzYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlVXNhZ2VUaHJl
YWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VU
aHJlYWQuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OnRocmVhZENhbGxiYWNrKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFi
YXNlTG9hZGVyOjpIUlRGRGF0YWJhc2VMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRh
dGFiYXNlTG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6SFJU
RkRhdGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNv
bnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZv
bHZlcjo6flJldmVyYkNvbnZvbHZlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJi
Q29udm9sdmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmls
ZVJlYWRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVk
aW9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmls
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6
UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVT
dHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bG9hZGVyUnVuTG9vcCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpz
dGFydFRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFn
ZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpzdGFydFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpzdG9wVGhyZWFkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp0aHJlYWRJRCk6CisKIDIwMTctMDQtMDcg
IFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEZpeCBjb2Rl
YyBuYW1lIGluIE9XUiBBU1NFUlQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1
ODA5NzdmMTI5NWQxZmJmZS4uNzg1MzgxNDg2NDNiNTY4NjIzNmIxMGFlZDI3ODY2OWFmZWFlYWRj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFk
IGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5n
IGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp+U3RvcmFnZVRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlVGhyZWFkOjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0
ZXJtaW5hdGUpOgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5oOgorCiAyMDE3LTA0
LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogT25seSBDYXB0dXJlIEV4dHJhIE5ldHdvcmsgTG9hZCBNZXRyaWNzIHdoZW4g
dGhlcmUgaXMgYSBXZWIgSW5zcGVjdG9yIEZyb250ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTUyY2Q3YWNk
ZDEyMjYzZTY1YWYxOTZiYTAwMzMwMjEzOGI5MWU2Ni4uNTQxZWMxMjRjMDE2NDRiZjliYmRmNjYx
YjBlYmNmMWE2MmUyNjQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA0LTA3
ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtXVEZd
IEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24g
V2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFkU3luY0luVGhyZWFkKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnBy
b2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0
aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50Lmg6CisgICAgICAgIChXZWJL
aXQ6OlhQQ1NlcnZpY2VJbml0aWFsaXplcik6CisgICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01l
bW9yeVByZXNzdXJlTW9uaXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJl
TW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2Vi
UHJvY2Vzcyk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGlu
IGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcAppbmRleCBlNzgwODZjM2E5NjEyYTJm
MGI0ZDdhYWYxYWRjN2JhMWExMDFjNTQ3Li40M2FlZjA3Nzk3MGNmZWRiMmNhYzA0NjNmY2Q5ZWNj
YTI5ZDE1MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Nv
bXBhcmVBbmRTd2FwVGVzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBh
cmVBbmRTd2FwKCkKIHsKICAgICBCaXRtYXAgYml0bWFwOwogICAgIGNvbnN0IGludCBudW1UaHJl
YWRzID0gNTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEc1tudW1UaHJlYWRzXTsKKyAg
ICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRzW251bVRocmVhZHNdOwogICAgIERhdGEgZGF0YVtudW1U
aHJlYWRzXTsKIAogICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwpAQCAtMTA3LDEyICsx
MDcsMTIgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3YXAoKQogICAgICAgICBkYXRhW2ldLmlkID0g
aTsKICAgICAgICAgZGF0YVtpXS5udW1UaHJlYWRzID0gbnVtVGhyZWFkczsKICAgICAgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IHRocmVhZEZ1bmMgPSBzdGQ6OmJpbmQoc2V0Qml0VGhyZWFkRnVu
YywgJmRhdGFbaV0pOwotICAgICAgICB0aHJlYWRJRHNbaV0gPSBjcmVhdGVUaHJlYWQoInNldEJp
dFRocmVhZEZ1bmMiLCB0aHJlYWRGdW5jKTsKKyAgICAgICAgdGhyZWFkc1tpXSA9IFRocmVhZDo6
Y3JlYXRlKCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhyZWFkRnVuYyk7CiAgICAgfQogCiAgICAgcHJp
bnRmKCJXYWl0aW5nIGZvciAlZCB0aHJlYWRzIHRvIGpvaW5cbiIsIG51bVRocmVhZHMpOwogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsgaSsrKQotICAgICAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbih0aHJlYWRJRHNbaV0pOworICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogCiAgICAgcHJpbnRmKCJQQVNTOiBDb21wYXJlQW5kU3dhcCB0ZXN0IGNv
bXBsZXRlZCB3aXRob3V0IGEgaGFuZ1xuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDcyMTdiNWM4NTUxYTU4ZTZjZmQwMGM1YmQxZjJkYWExMDI1ZjQwOGUuLjdkMjAzNmJl
ODYxNmZmNTM4NjdlNWUwNzk1NjVmZGE1YTc4ODUxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0yNDY3LDcgKzI0NjcsNiBAQAogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEg
LyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRDk0RjJFMTcxRTNF
MjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3Bw
ICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUZFRTQzRkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVh
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFNDNG
Q0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIw
IC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3
YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5n
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxl
IHNlY3Rpb24gKi8KQEAgLTUwOTMsNyArNTA5Miw2IEBACiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJF
NzdBNCAvKiBXYXRjaGRvZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXRj
aGRvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRURBNTBENDFCOTdGNDQyMDA5
QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcDsgcGF0aCA9
IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDUxQjk3RjREOTAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tP
dmVyZmxvd1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdT
dGFja092ZXJmbG93VGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxv
d1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkVFNDNGQ0QxRTY2NDE0MDAw
NzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0
MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9
IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBw
YXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg1NCw3ICs2ODUyLDYgQEAKIAkJCQlGNjkyQTg3
ODAyNTU1OTdEMDFGRjYwRjcgLyogT3BlcmF0aW9ucy5oICovLAogCQkJCTBGRTIyOEVBMTQzNkFC
MjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLywKIAkJCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZD
NDggLyogT3B0aW9ucy5oICovLAotCQkJCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0
Zm9ybVRocmVhZC5oICovLAogCQkJCTg2ODkxNkE5MTU1RjI4NTQwMENCMkI5QSAvKiBQcml2YXRl
TmFtZS5oICovLAogCQkJCTE0NzM0MURGMURDMkNFOTYwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0
YWJsZS5jcHAgKi8sCiAJCQkJMTQ3MzQxRDMxREMwMkU2RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVj
dXRhYmxlLmggKi8sCkBAIC05MzM0LDcgKzkzMzEsNiBAQAogCQkJCTBGNEEzOEZBMUM4RTEzREYw
MDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFDMUE2
RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUFFMUE2
RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkVFNDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9s
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyog
U3ltYm9sUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL3Rlc3RhaXIuY3BwCmluZGV4IDg3YjM1M2FhMzc5MjVjYTFlMmZhODQxMTk5NzZhZGYwYjFl
MDdiYWEuLmM5MTc3MDc5NTg4Zjg2ZDQzMWEyOGJjMDc0ZDRmZTJlM2YxM2RjNDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcApAQCAtMTkxMywxMCArMTkxMywxMCBA
QCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBW
ZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVh
ZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVt
YmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAot
ICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAg
ICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFsmXSAoKSB7
CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTE5MzMsOCArMTkzMyw4IEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgfQog
Ci0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0
aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApp
bmRleCAwMTk5NmFmNzFhYjRmMDllYjQ5YjcwMTFjMTdkYmM5M2M0MGNlODdhLi45MDQ2NTY0ODg3
YjZiM2E0YWZhYzM1OWRjMTBjNTAzODRkNzRkZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmNwcApAQCAtMTY4NTAsMTAgKzE2ODUwLDEwIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZp
bHRlcikKIAogICAgIExvY2sgbG9jazsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0
aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGkt
LTspIHsKICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQo
CisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAidGVzdGIzIHRo
cmVhZCIsCiAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9y
ICg7OykgewpAQCAtMTY4NzAsOCArMTY4NzAsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0
ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0
aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkIDogdGhyZWFkcykKKyAgICAg
ICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBs
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAK
aW5kZXggYTRlMjFmOWZhM2NkNDcyMWVhMjY3NWUwNmU0ZDUzMGM1YmE5NWIzNS4uZTliMWY1YzJm
MGJjMjdiMDI5MzEwYzU1ODE1MjBiMWI1NTIyNTk3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBp
bml0aWFsaXplU3VwZXJTYW1wbGVyKCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVN1cGVyU2FtcGxl
cigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjcmVhdGVUaHJlYWQoCisgICAgVGhyZWFkOjpj
cmVhdGUoCiAgICAgICAgICJKU0MgU3VwZXIgU2FtcGxlciIsCiAgICAgICAgIFtdICgpIHsKICAg
ICAgICAgICAgIGNvbnN0IGludCBzbGVlcFF1YW50dW0gPSAxMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKaW5kZXggY2VmOTkwY2I0ODMzYTZiYjk0NzFiZDA4YTUw
NGU1NWZiNDdkZjQ1OC4uYWQwZWNjNjlhNzdkMTcyY2Y0YmMxZWZhYzkzZGY5MzAyN2MwMDllNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKQEAgLTE0NCw3ICsx
NDQsNyBAQCBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJl
YWQgewogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmtsaXN0LCAiOiBUaHJlYWQgc3RhcnRlZFxu
Iik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9yZWxhdGl2ZVByaW9yaXR5KQotICAgICAgICAg
ICAgY2hhbmdlVGhyZWFkUHJpb3JpdHkoY3VycmVudFRocmVhZCgpLCBtX3JlbGF0aXZlUHJpb3Jp
dHkpOworICAgICAgICAgICAgVGhyZWFkOjpjdXJyZW50KCkuY2hhbmdlUHJpb3JpdHkobV9yZWxh
dGl2ZVByaW9yaXR5KTsKICAgICAgICAgCiAgICAgICAgIG1fY29tcGlsYXRpb25TY29wZSA9IHN0
ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb25TY29wZT4oKTsKICAgICAgICAgbV9sb25nTGl2ZWRT
dGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TG9uZ0xpdmVkU3RhdGU+KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKaW5kZXggNzg4
YTZjMzYyMzY5YzU4ZGFkMjlhNjBhMzg3MTA0NGU0NjRlZDMwNS4uMmI4MjRlY2ZkZTU4OTNiMmM2
YjcwNmY0NzAyZWNkMjI5NWQyMzU1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBB
c3luY2hyb25vdXNEaXNhc3NlbWJsZXIgewogcHVibGljOgogICAgIEFzeW5jaHJvbm91c0Rpc2Fz
c2VtYmxlcigpCiAgICAgewotICAgICAgICBjcmVhdGVUaHJlYWQoIkFzeW5jaHJvbm91cyBEaXNh
c3NlbWJsZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJB
c3luY2hyb25vdXMgRGlzYXNzZW1ibGVyIiwgWyZdICgpIHsgcnVuKCk7IH0pOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGVucXVldWUoc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFz
aykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggM2FlZTMwMTA0ZjUyOTFhMjg3
NjRhNWNkZWU1YWE4ZjBjYTcyYWQzMS4uNzIyM2IyMGM5ZGZiYTEwNDMwOThhNzg1NzRiYTI4YTY5
NGMwNDViZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM0OSw3ICszNDks
NyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKICAgICAgICAgICAgIG1fc2hv
dWxkU3RvcENvbGxlY3RpbmdDb250aW51b3VzbHkgPSB0cnVlOwogICAgICAgICAgICAgbV9jb2xs
ZWN0Q29udGludW91c2x5Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICB9Ci0gICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCk7Cisg
ICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCkBAIC0yNjgxLDcgKzI2ODEs
NyBAQCB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCiAgICAgbV9pc1NhZmVUb0Nv
bGxlY3QgPSB0cnVlOwogICAgIAogICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5
KCkpIHsKLSAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkID0gY3JlYXRlVGhyZWFk
KAorICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgPSBXVEY6OlRocmVhZDo6Y3Jl
YXRlKAogICAgICAgICAgICAgIkpTQyBERUJVRyBDb250aW51b3VzIEdDIiwKICAgICAgICAgICAg
IFt0aGlzXSAoKSB7CiAgICAgICAgICAgICAgICAgTW9ub3RvbmljVGltZSBpbml0aWFsVGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGQw
NjU3MDE2YmVlZjlhODlkMDZkZjI3OTcxN2U3NzBiMTY0YTQ3MTQuLmQ2NzgzN2FmZWYxMzAxZjk2
NzJmNjBlYTI5YzQzZmM4NTk3ZGViOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAg
LTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC02NjYsNyAr
NjY3LDcgQEAgY2xhc3MgSGVhcCB7CiAgICAgTG9jayBtX2NvbGxlY3RDb250aW51b3VzbHlMb2Nr
OwogICAgIENvbmRpdGlvbiBtX2NvbGxlY3RDb250aW51b3VzbHlDb25kaXRpb247CiAgICAgYm9v
bCBtX3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29udGludW91c2x5IHsgZmFsc2UgfTsKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCB7IDAgfTsKKyAgICBSZWZQ
dHI8V1RGOjpUaHJlYWQ+IG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCB7IG51bGxwdHIgfTsK
ICAgICAKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEdDU3RhcnRUaW1lOwogICAgIE1vbm90b25p
Y1RpbWUgbV9sYXN0R0NFbmRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXggYjg1Yjc2NDhlMmY1ZDE5ZmEyMmQ3NjNmN2Jj
ZGVmOGY0NGM0MmM4OC4uNGZmZGY5Y2M0ZTNjMzYwNmIxZGE5YTk0MDc3ZmM3NGM4ODZlYzE4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIu
Y3BwCkBAIC02NCw2MyArNjQsMTMgQEAKICNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CiAjZW5kaWYK
IAotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5j
bHVkZSA8c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3Vt
ZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFs
U2lnbmFsTG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIg
fTsKLQotc3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwg
c2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxv
Y2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpT
Qzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1
cnJlbnRUaHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFs
IGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1l
IHNpZ3N1c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2Vs
ZiBzaG91bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFs
IGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVy
LCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBh
bHdheXMgcHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5z
IHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUg
dGhlIGhhbmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAu
b3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERh
dGEtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51
Y19yZWdzOwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9
IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVu
ZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNl
bV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNh
biBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9w
ZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQu
aHRtbCN0YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1v
cnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBj
b3JyZWN0bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVw
dWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2Vt
X3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8g
UmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMg
aGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAg
IC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
dG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVy
IGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFs
U2V0OwotICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgm
YmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVu
ZCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNl
ZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEt
PnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykg
JiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0KICNlbmRpZgogCiB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVh
ZHM6OlRocmVhZDsKK3VzaW5nIEpTVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwog
CiBjbGFzcyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGlu
ZVRocmVhZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0
MSArMTQ0LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVh
ZFNwZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAK
ICAgICBMb2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXgpOwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsK
LSAgICAgICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0g
bV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5u
ZXh0OwogICAgICAgICBkZWxldGUgdDsKICAgICAgICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1z
dGF0aWMgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVjaWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFk
RGF0YSwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRocmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVh
ZERhdGEuZ2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWRE
YXRhKiB0aHJlYWREYXRhKQotICAgIDogZGF0YSh0aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0
aHJlYWREYXRhKTsKLX0KLQotVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVG
b3JDdXJyZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkp
OwotfQotCi1ib29sIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxh
dGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdAotewotI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9X
UykKLSAgICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0Uo
UFRIUkVBRFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVh
ZCwgb3RoZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBv
biB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQogdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3Vy
cmVudFRocmVhZCgpCiB7CiAgICAgaWYgKHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lm
aWNGb3JNYWNoaW5lVGhyZWFkcykpIHsKQEAgLTIzOSw3ICsxNjEsNyBAQCB2b2lkIE1hY2hpbmVU
aHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAg
SlNUaHJlYWQqIHRocmVhZCA9IG5ldyBKU1RocmVhZCh0aGlzKTsKICAgICB0aHJlYWRTcGVjaWZp
Y1NldChtX3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRocmVhZHMsIHRoaXMpOwogCiAgICAgTG9j
a0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7CkBAIC0yNDgsMTIgKzE3MCwx
MiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAgICBtX3JlZ2lz
dGVyZWRUaHJlYWRzID0gdGhyZWFkOwogfQogCi1UaHJlYWQqIE1hY2hpbmVUaHJlYWRzOjptYWNo
aW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpCitKU1RocmVhZCogTWFjaGluZVRocmVhZHM6Om1h
Y2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9y
ZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVh
ZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBt
X3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAg
ICAgICBpZiAoKnRocmVhZCA9PSBwbGF0Zm9ybVRocmVhZCkKKyAgICBUaHJlYWRJZGVudGlmaWVy
IGlkID0gY3VycmVudFRocmVhZCgpOworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVn
aXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAg
IGlmICh0aHJlYWQtPnRocmVhZElEKCkgPT0gaWQpCiAgICAgICAgICAgICByZXR1cm4gdGhyZWFk
OwogICAgIH0KIApAQCAtMjgzLDIyICsyMDUsMjEgQEAgdm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FM
TCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKHZvaWQqIHApCiAgICAgICAgICAgICByZXR1
cm47CiAjZW5kaWYKIAotICAgICAgICBtYWNoaW5lVGhyZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3Vu
ZChjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSk7CisgICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1v
dmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRUaHJlYWQoKSk7CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLXZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQoUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQpCit2b2lkIE1hY2hpbmVUaHJl
YWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIgaWQpCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgVGhyZWFkKiB0ID0g
bV9yZWdpc3RlcmVkVGhyZWFkczsKLSAgICBpZiAoKnQgPT0gcGxhdGZvcm1UaHJlYWQpIHsKKyAg
ICBKU1RocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7CisgICAgaWYgKHQtPnRocmVhZElE
KCkgPT0gaWQpIHsKICAgICAgICAgbV9yZWdpc3RlcmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRo
cmVhZHMtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRo
cmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7CisgICAgICAgIEpTVGhyZWFkKiBsYXN0
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICAgICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhy
ZWFkcy0+bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsKLSAgICAgICAgICAgIGlmICgqdCA9PSBwbGF0
Zm9ybVRocmVhZCkgeworICAgICAgICAgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAg
ICAgICAgICAgICAgICBsYXN0LT5uZXh0ID0gdC0+bmV4dDsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTMyMCwxODIgKzI0MSwyMiBAQCB2b2lkIE1hY2hpbmVUaHJl
YWRzOjpnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0
aXZlUm9vdAogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChjdXJyZW50VGhyZWFkU3RhdGUuc3Rh
Y2tUb3AsIGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja09yaWdpbiwgaml0U3R1YlJvdXRpbmVzLCBj
b2RlQmxvY2tzKTsKIH0KIAotTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEo
KQorTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpKU1RocmVhZChNYWNoaW5lVGhyZWFkcyopCisg
ICAgOiBuZXh0KG51bGxwdHIpCisgICAgLCBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgp
KQogewogICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAg
ICBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwotICAgIHN0YWNrQmFz
ZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAgIHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5k
KCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEFTU0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRD
dXJyZW50VGhyZWFkSWQoKSk7Ci0gICAgYm9vbCBpc1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBs
aWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRD
dXJyZW50UHJvY2VzcygpLAotICAgICAgICAgICAgJnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBG
QUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nl
c3NmdWwpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgIHRocmVhZExv
Y2FsQ3VycmVudFRocmVhZC5zdG9yZSh0aGlzKTsKLQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBh
cmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXI7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6
ZVNpZ25hbEhhbmRsZXIsIFtdIHsKLSAgICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5k
LgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQo
JmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0
aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdz
ID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87Ci0gICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAwKTsKLSAgICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7
Ci0gICAgc2lnZW1wdHlzZXQoJm1hc2spOwotICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFk
U3VzcGVuZFJlc3VtZSk7Ci0gICAgcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywg
MCk7Ci0KLSAgICBzZW1faW5pdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBh
dmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUg
c2VtYXBob3JlLiAqLyAwKTsKLSNlbmRpZgorICAgIG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMu
b3JpZ2luKCk7CisgICAgbV9zdGFja0VuZCA9IHN0YWNrQm91bmRzLmVuZCgpOwogfQogCi1NYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVhZERhdGEoKQorc2l6ZV90IE1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6Z2V0UmVnaXN0ZXJzKEpTVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVy
cykKIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgIENsb3NlSGFuZGxlKHBsYXRmb3JtVGhyZWFkSGFu
ZGxlKTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICBzZW1fZGVzdHJv
eSgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0jZW5kaWYKKyAgICBXVEY6OlBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7CisgICAgcmV0dXJuIG1fdGhyZWFkLT5n
ZXRSZWdpc3RlcnMocmVncyk7CiB9CiAKLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6
OnN1c3BlbmQoKQotewotI2lmIE9TKERBUldJTikKLSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9
IHRocmVhZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFkKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IEtF
Uk5fU1VDQ0VTUzsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgYm9vbCB0aHJlYWRJc1N1c3BlbmRl
ZCA9IChTdXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKSAhPSAoRFdPUkQpLTEpOwot
ICAgIEFTU0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7Ci0gICAgcmV0dXJuIHRocmVhZElzU3VzcGVu
ZGVkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY3VycmVu
dFBsYXRmb3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1UaHJlYWQsICJDdXJyZW50bHkgd2UgZG9uJ3Qg
c3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7Ci0gICAgewotICAg
ICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBl
eGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICAvLyBXZSB1c2UgZ2xvYmFs
IGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCi0gICAgICAgIC8vIENvbnNpZGVyIHRo
ZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KLSAgICAgICAgLy8g
QW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCi0g
ICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRl
bGl2ZXJlZCB0byBBIGFuZCBCLgotICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBi
ZSBzdXNwZW5kZWQuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxTaWduYWxMb2NrKTsK
LSAgICAgICAgaWYgKCFzdXNwZW5kQ291bnQpIHsKLSAgICAgICAgICAgIC8vIElkZWFsbHksIHdl
IHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNz
IHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBCdXQg
aXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgotICAgICAgICAg
ICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwg
c3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAgICAgIGlm
IChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09
IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHNlbV93
YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSAgICAgICAgICAgIC8vIFJlbGVhc2Ug
YmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFm
dGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgotICAgICAgICAgICAgc3VzcGVu
ZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0g
ICAgICAgICsrc3VzcGVuZENvdW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0j
ZXJyb3IgTmVlZCBhIHdheSB0byBzdXNwZW5kIHRocmVhZHMgb24gdGhpcyBwbGF0Zm9ybQotI2Vu
ZGlmCi19Ci0KLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3VtZSgpCi17Ci0j
aWYgT1MoREFSV0lOKQotICAgIHRocmVhZF9yZXN1bWUocGxhdGZvcm1UaHJlYWQpOwotI2VsaWYg
T1MoV0lORE9XUykKLSAgICBSZXN1bWVUaHJlYWQocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2Vs
aWYgVVNFKFBUSFJFQURTKQotICAgIHsKLSAgICAgICAgLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVu
ZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRz
LgotICAgICAgICBMb2NrSG9sZGVyIGxvY2soZ2xvYmFsU2lnbmFsTG9jayk7Ci0gICAgICAgIGlm
IChzdXNwZW5kQ291bnQgPT0gMSkgewotICAgICAgICAgICAgLy8gV2hlbiBhbGxvd2luZyBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2ln
c3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBhY3R1YWxseSBpc3N1ZWQsCi0g
ICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIgaXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9u
Y2UgYWdhaW4uCi0gICAgICAgICAgICAvLyBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rp
bmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAg
ICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2lnbmFsIG51bWJlcnMuIEFuZCBjaGVjayB0
aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIDIuIFVzZSBz
b21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNwZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhh
bmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJlIHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMu
Ci0gICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxvY2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMg
dmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEluIHRoaXMg
aW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNwZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRp
c3Rpbmd1aXNoIGl0LgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVh
ZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwot
ICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlv
biBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRv
bmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgIC0tc3VzcGVuZENvdW50OwotICAgIH0KLSNl
bHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byByZXN1bWUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3Jt
Ci0jZW5kaWYKLX0KLQotc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpnZXRSZWdp
c3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0
YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwot
I2lmIE9TKERBUldJTikKLSNpZiBDUFUoWDg2KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBz
aXplb2YocmVncykvc2l6ZW9mKGludCk7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZv
ciA9IGkzODZfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1
c2VyX2NvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUoUFBDKSAKLSAg
ICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJl
YWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShQ
UEM2NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5U
OwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7
Ci0jZWxpZiBDUFUoQVJNKQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NU
QVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFE
X1NUQVRFOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1f
VEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9
IEFSTV9USFJFQURfU1RBVEU2NDsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUK
LSNlbmRpZgotCi0gICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKHBs
YXRmb3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3RhdGVfdCkmcmVncywgJnVzZXJfY291bnQp
OwotICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIFdURlJlcG9ydEZh
dGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFp
bGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlz
IGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2gg
aXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAg
ICByZXR1cm4gdXNlcl9jb3VudCAqIHNpemVvZih1aW50cHRyX3QpOwotLy8gZW5kIE9TKERBUldJ
TikKLQotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZWdzLkNvbnRleHRGbGFncyA9IENPTlRFWFRf
SU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsKLSAgICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3Jt
VGhyZWFkSGFuZGxlLCAmcmVncyk7Ci0gICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKLSNlbGlm
ICgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAg
ICByZWdzID0gc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7Ci0gICAgcmV0dXJuIHNpemVvZihSZWdp
c3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzKTsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICBwdGhy
ZWFkX2F0dHJfaW5pdCgmcmVncy5hdHRyaWJ1dGUpOwotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8
fCBPUyhORVRCU0QpCi0jaWYgIU9TKE9QRU5CU0QpCi0gICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUu
NCwgbmV1bmRvcmZAa2RlLm9yZwotICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAocGxhdGZvcm1UaHJl
YWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgLy8gRklYTUU6IHRoaXMg
ZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRp
ZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICBwdGhyZWFkX2dldGF0dHJfbnAocGxhdGZvcm1U
aHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0j
ZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhyZWFkIHJlZ2lzdGVycyBvbiB0aGlzIHBsYXRmb3Jt
Ci0jZW5kaWYKLX0KLQotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVy
czo6c3RhY2tQb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6
UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1Mo
V0lORE9XUykgfHwgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJM
RShKSVQpKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwpA
QCAtNTE5LDcgKzI4MCw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdp
c3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFt
ZVBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3Rl
cnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dT
KSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNo
aW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ3MpOwpAQCAtNTI4LDcgKzI4OSw3IEBAIHZvaWQq
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNv
bnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lz
dGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAogewogI2lmIE9T
KERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElC
Q19fKSkKICAgICByZXR1cm4gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdz
KTsKQEAgLTUzNyw3ICsyOTgsNyBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6
UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAogI2VuZGlmCiB9CiAKLXZvaWQq
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAor
dm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25z
dAogewogICAgIC8vIExMSW50IHVzZXMgcmVnVDQgYXMgUEMuCiAjaWYgT1MoREFSV0lOKSB8fCBP
UyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4
LDE2ICszMDksNiBAQCB2b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJz
OjpsbGludFBDKCkgY29uc3QKIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFk
RGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJz
OjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIFVTRShQVEhS
RUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pICYmICEoKE9TKEZSRUVCU0QpIHx8
IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCi0gICAgcHRocmVhZF9hdHRyX2Rl
c3Ryb3koJnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwot
I2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogewog
ICAgIGludCByZWRab25lQWRqdXN0bWVudCA9IDA7CkBAIC01NzMsMTcgKzMyNCwxNyBAQCBzdGF0
aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKICAgICByZXR1cm4gcmVkWm9uZUFk
anVzdG1lbnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQq
LCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0
YWNrVG9wKQogewotICAgIGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+
KHN0YWNrQmFzZSk7CisgICAgY2hhciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFy
Kj4obV9zdGFja0Jhc2UpOwogICAgIGNoYXIqIGVuZCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihzdGFja1RvcCkpKTsKICAgICBBU1NFUlQoYmVnaW4gPj0gZW5kKTsKIAogICAgIGNo
YXIqIGVuZFdpdGhSZWRab25lID0gZW5kICsgb3NSZWRab25lQWRqdXN0bWVudCgpOwogICAgIEFT
U0VSVChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSkgPT0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGVuZFdpdGhSZWRab25lKSk7CiAKLSAgICBpZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFj
a0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFy
Kj4oc3RhY2tFbmQpOworICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IG1fc3RhY2tFbmQpCisgICAg
ICAgIGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tF
bmQpOwogCiAgICAgc3RkOjpzd2FwKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5
ICszNjcsOSBAQCBzdGF0aWMgdm9pZCBjb3B5TWVtb3J5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCog
c3JjLCBzaXplX3Qgc2l6ZSkKIC8vIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5
Q29weU90aGVyVGhyZWFkU3RhY2sgaXMgb25seSBjYWxsZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBz
aXplKQogLy8gb3BlcmF0aW9uLiBBcyB0aGUgaGVhcCBpcyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIg
dGhhbiB0aGUgc3RhY2sgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBtaW5pbWFsLgogLy8gU2VlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hp
bmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCog
YnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVh
ZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNpemUpCiB7Ci0gICAgVGhyZWFkOjpSZWdpc3Rl
cnMgcmVnaXN0ZXJzOworICAgIEpTVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgIHNp
emVfdCByZWdpc3RlcnNTaXplID0gdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAg
ICBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gc3RhY2sgPSB0aHJlYWQtPmNhcHR1cmVTdGFjayhy
ZWdpc3RlcnMuc3RhY2tQb2ludGVyKCkpOwogCkBAIC02MzEsOCArMzgyLDYgQEAgdm9pZCBNYWNo
aW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkKiB0aHJlYWQsIHZvaWQq
IGJ1ZmZlciwgc2l6ZV8KICAgICBpZiAoY2FuQ29weSkKICAgICAgICAgY29weU1lbW9yeShzdGF0
aWNfY2FzdDxjaGFyKj4oYnVmZmVyKSArICpzaXplLCBzdGFjay5maXJzdCwgc3RhY2suc2Vjb25k
KTsKICAgICAqc2l6ZSArPSBzdGFjay5zZWNvbmQ7Ci0KLSAgICB0aHJlYWQtPmZyZWVSZWdpc3Rl
cnMocmVnaXN0ZXJzKTsKIH0KIAogYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhy
ZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2Fw
YWNpdHksIHNpemVfdCogc2l6ZSkKQEAgLTY0NCwzNiArMzkzLDM0IEBAIGJvb2wgTWFjaGluZVRo
cmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqIGJ1ZmZlCiAKICAgICAqc2l6ZSA9IDA7CiAKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9y
bVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOworICAgIFRocmVhZElkZW50aWZpZXIg
aWQgPSBjdXJyZW50VGhyZWFkKCk7CiAgICAgaW50IG51bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVz
aW5nIDAgdG8gZGVub3RlIHRoYXQgd2UgaGF2ZW4ndCBjb3VudGVkIHRoZSBudW1iZXIgb2YgdGhy
ZWFkcyB5ZXQuCiAgICAgaW50IGluZGV4ID0gMTsKLSAgICBUaHJlYWQqIHRocmVhZHNUb0JlRGVs
ZXRlZCA9IG51bGxwdHI7CisgICAgSlNUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxw
dHI7CiAKLSAgICBUaHJlYWQqIHByZXZpb3VzVGhyZWFkID0gbnVsbHB0cjsKLSAgICBmb3IgKFRo
cmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7Ci0g
ICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKSB7Ci0gICAgICAgICAgICBib29s
IHN1Y2Nlc3MgPSB0aHJlYWQtPnN1c3BlbmQoKTsKKyAgICBKU1RocmVhZCogcHJldmlvdXNUaHJl
YWQgPSBudWxscHRyOworICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRo
cmVhZHM7IHRocmVhZDsgaW5kZXgrKykgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgp
ICE9IGlkKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwog
I2lmIE9TKERBUldJTikKLSAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
aWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBpZiAoIW51bWJlck9mVGhyZWFkcykgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKFRocmVhZCogY291bnRlZFRocmVhZCA9IG1fcmVnaXN0
ZXJlZFRocmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNvdW50ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFk
LT5uZXh0KQorICAgICAgICAgICAgICAgICAgICBmb3IgKEpTVGhyZWFkKiBjb3VudGVkVGhyZWFk
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNv
dW50ZWRUaHJlYWQtPm5leHQpCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlRocmVh
ZHMrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLy8gUmUtZG8gdGhlIHN1c3BlbnNpb24gdG8gZ2V0IHRoZSBhY3R1YWwgZmFpbHVyZSByZXN1
bHQgZm9yIGxvZ2dpbmcuCi0gICAgICAgICAgICAgICAga2Vybl9yZXR1cm5fdCBlcnJvciA9IHRo
cmVhZF9zdXNwZW5kKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGVycm9yICE9IEtFUk5fU1VDQ0VTUyk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0LmVycm9yKCkgIT0gS0VSTl9TVUNDRVNTKTsKIAogICAgICAgICAgICAgICAgIFdURlJl
cG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwKLSAgICAg
ICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVk
IGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9y
bVRocmVhZCAlcC4iLAotICAgICAgICAgICAgICAgICAgICBlcnJvciwgaW5kZXgsIG51bWJlck9m
VGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnBsYXRmb3Jt
VGhyZWFkKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xs
ZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBb
JWQvJWQ6ICVwXSBpZCAlcC4iLAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3IoKSwg
aW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0
aHJlYWQtPnRocmVhZElEKCkpKTsKIAogICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgaW52YWxp
ZCB0aHJlYWQgb24gdGhlIHRocmVhZHNUb0JlRGVsZXRlZCBsaXN0LgogICAgICAgICAgICAgICAg
IC8vIFdlIGNhbid0IGp1c3QgZGVsZXRlIGl0IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRl
ZCBvdGhlcgogICAgICAgICAgICAgICAgIC8vIHRocmVhZHMsIGFuZCB0aGV5IG1heSBzdGlsbCBi
ZSBob2xkaW5nIHRoZSBDIGhlYXAgbG9jayB3aGljaAogICAgICAgICAgICAgICAgIC8vIHdlIG5l
ZWQgZm9yIGRlbGV0aW5nIHRoZSBpbnZhbGlkIHRocmVhZC4gSGVuY2UsIHdlIG5lZWQgdG8KICAg
ICAgICAgICAgICAgICAvLyBkZWZlciB0aGUgZGVsZXRpb24gdGlsbCBhZnRlciB3ZSBoYXZlIHJl
c3VtZWQgYWxsIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0g
dGhyZWFkLT5uZXh0OworICAgICAgICAgICAgICAgIEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhy
ZWFkLT5uZXh0OwogICAgICAgICAgICAgICAgIHRocmVhZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVs
ZXRlZDsKICAgICAgICAgICAgICAgICB0aHJlYWRzVG9CZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAg
LTY4NywyNSArNDM0LDI1IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAjZWxzZQogICAgICAg
ICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mVGhyZWFkcyk7CiAgICAgICAgICAgICBVTlVTRURf
UEFSQU0ocHJldmlvdXNUaHJlYWQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNz
LCBzdWNjZXNzKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwog
I2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcHJldmlvdXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAg
ICAgIHRocmVhZCA9IHRocmVhZC0+bmV4dDsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhy
ZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQp
IHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1Ro
cmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJl
YWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAg
ICAgICAgIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKHRocmVhZCwgYnVmZmVyLCBjYXBhY2l0eSwg
c2l6ZSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRo
cmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhy
ZWFkICE9IHBsYXRmb3JtVGhyZWFkKQorICAgIGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVn
aXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAg
IGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQpCiAgICAgICAgICAgICB0aHJlYWQtPnJlc3Vt
ZSgpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0
ZWQ7IHRocmVhZDsgKSB7Ci0gICAgICAgIFRocmVhZCogbmV4dFRocmVhZCA9IHRocmVhZC0+bmV4
dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVh
ZDsgKSB7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAg
ICAgICBkZWxldGUgdGhyZWFkOwogICAgICAgICB0aHJlYWQgPSBuZXh0VGhyZWFkOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5k
ZXggZDE5NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNkODdmNzk5NDQ4N2YyMi4uOTE5N2M0NDA4Y2Uy
ZmQ0ZWU2YWEzZDE0YTdjNjllNmY4Y2ExMDk0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKQEAgLTIyLDI1ICsyMiwxMiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExh
bWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogCi0jaWYgVVNFKFBUSFJF
QURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxzZW1hcGhvcmUu
aD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLS8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1j
b250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCi0vLyBUaGlzIGJ1
ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJv
dW5kIGNhbiBiZQotLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wuCi0vLyBo
dHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQot
I2lmIE9TKEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNvbnRleHQuaD4KLSNlbmRpZgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2tTZXQ7CkBAIC02NCwxMyArNTEsMTAg
QEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
ZGRDdXJyZW50VGhyZWFkKCk7IC8vIE9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMg
dGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogCi0gICAg
Y2xhc3MgVGhyZWFkRGF0YSB7CisgICAgY2xhc3MgSlNUaHJlYWQgewogICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRocmVhZERhdGEoKTsKLSAg
ICAgICAgflRocmVhZERhdGEoKTsKLQotICAgICAgICBzdGF0aWMgVGhyZWFkRGF0YSogY3JlYXRl
Rm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICBKU1RocmVhZChNYWNoaW5lVGhyZWFkcyopOwog
CiAgICAgICAgIHN0cnVjdCBSZWdpc3RlcnMgewogICAgICAgICAgICAgdm9pZCogc3RhY2tQb2lu
dGVyKCkgY29uc3Q7CkBAIC03OSw4NCArNjMsNDAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewog
ICAgICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAg
ICB2b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQotICAgICAgICAgICAgCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgICAg
ICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBNYWNoaW5lQ29udGV4dDo6UGxhdGZvcm1S
ZWdpc3RlcnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBF
TkFCTEUoSklUKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4
dF90OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgICAgICAgICAgc3RydWN0IFBsYXRmb3JtUmVn
aXN0ZXJzIHsKLSAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAg
ICAgICAgICB9OwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgdGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBm
b3IgdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAgICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJz
IHJlZ3M7CisgICAgICAgICAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAg
IH07CiAKLSAgICAgICAgYm9vbCBzdXNwZW5kKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0g
ICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJl
ZVJlZ2lzdGVycyhSZWdpc3RlcnMmKTsKKyAgICAgICAgRXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQ
bGF0Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpIHsgcmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5k
KCk7IH0KKyAgICAgICAgdm9pZCByZXN1bWUoKSB7IG1fdGhyZWFkLT5yZXN1bWUoKTsgfQorICAg
ICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncyk7CiAgICAgICAgIHN0ZDo6
cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAg
ICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkOwotICAgICAgICB2b2lkKiBzdGFja0Jh
c2U7Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIEhB
TkRMRSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERB
UldJTikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZTsKLSAgICAgICAg
bWNvbnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKLSAgICAgICAgaW50IHN1c3BlbmRD
b3VudCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9taWM8Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2Ug
fTsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFzcyBUaHJlYWQgewotICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgVGhyZWFkKFRocmVhZERhdGEqKTsKLQotICAgIHB1
YmxpYzoKLSAgICAgICAgdXNpbmcgUmVnaXN0ZXJzID0gVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwot
Ci0gICAgICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKLQotICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdDsK
LSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgICAgICBib29sIHN1c3BlbmQo
KSB7IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0KLSAgICAgICAgdm9pZCByZXN1bWUoKSB7IGRh
dGEtPnJlc3VtZSgpOyB9Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiBy
ZWdzKSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgdm9pZCBm
cmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykgeyBkYXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3Mp
OyB9Ci0gICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCog
c3RhY2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1cmVTdGFjayhzdGFja1RvcCk7IH0KLQotICAg
ICAgICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQoKSB7IHJldHVybiBkYXRh
LT5wbGF0Zm9ybVRocmVhZDsgfQotICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJl
dHVybiBkYXRhLT5zdGFja0Jhc2U7IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7
IHJldHVybiBkYXRhLT5zdGFja0VuZDsgfQorICAgICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZC0+aWQoKTsgfQorICAgICAgICB2b2lk
KiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrQmFzZTsgfQorICAgICAgICB2b2lk
KiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tFbmQ7IH0KIAotICAgICAgICBUaHJl
YWQqIG5leHQ7Ci0gICAgICAgIFRocmVhZERhdGEqIGRhdGE7CisgICAgICAgIEpTVGhyZWFkKiBu
ZXh0OworICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1fdGhyZWFkOworICAgICAgICB2b2lkKiBt
X3N0YWNrQmFzZTsKKyAgICAgICAgdm9pZCogbV9zdGFja0VuZDsKICAgICB9OwogCiAgICAgTG9j
ayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleDsgfQotICAgIFRo
cmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NF
UlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3Rl
cmVkVGhyZWFkczsgfQotICAgIFRocmVhZCogbWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQo
KTsKKyAgICBKU1RocmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikg
Y29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1
cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQorICAgIEpTVGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9y
Q3VycmVudFRocmVhZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVyRnJvbUN1cnJlbnRU
aHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1Nl
dCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0gICAgdm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRT
dGFjayhUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKKyAgICB2b2lk
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhyZWFkKiwgdm9pZCosIHNpemVfdCBjYXBhY2l0
eSwgc2l6ZV90Kik7CiAgICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKIAogICAgIHN0
YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIHJlbW92ZVRocmVhZCh2b2lkKik7CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLSAgICB2b2lkIHJlbW92ZVRocmVh
ZElmRm91bmQoUGxhdGZvcm1UaHJlYWQpOworICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChU
aHJlYWRJZGVudGlmaWVyKTsKIAogICAgIExvY2sgbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4Owot
ICAgIFRocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICBKU1RocmVhZCogbV9yZWdpc3Rl
cmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1fdGhyZWFkU3BlY2lmaWNG
b3JNYWNoaW5lVGhyZWFkczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSUNTdGF0cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3Bw
CmluZGV4IDIwODBjZDkzNDU4MzNkMmQyMzJiOGE5Y2Q2ZjNkYmZlYmUwNWNiMjMuLmUwYWJmMjk4
YmZiZTJlZWVjMzQyNWI2NjA5Y2U3MjEzM2M0MWNkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmNwcApAQCAtNTgsNyArNTgsNyBAQCBBdG9taWM8SUNTdGF0cyo+IElDU3RhdHM6
OnNfaW5zdGFuY2U7CiAKIElDU3RhdHM6OklDU3RhdHMoKQogewotICAgIG1fdGhyZWFkID0gY3Jl
YXRlVGhyZWFkKAorICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0Mg
SUNTdGF0cyIsCiAgICAgICAgIFt0aGlzXSAoKSB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2xvY2spOwpAQCAtODQsNyArODQsNyBAQCBJQ1N0YXRzOjp+SUNTdGF0cygpCiAgICAg
ICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwogICAgIH0KICAgICAKLSAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbihtX3RocmVhZCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9u
KCk7CiB9CiAKIHZvaWQgSUNTdGF0czo6YWRkKGNvbnN0IElDRXZlbnQmIGV2ZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuaAppbmRleCBlNzVjZmRmNGQ0ZDlkN2RjYmYxYTMxYTk4Mjk0
MTkyZTU1YjljZmIwLi5lYjdlMWU5MmNlOTdkZDFkOTUwODk3MjdjODRhOWM1ZWM3ZjU3YzdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaApAQCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNz
IElDU3RhdHMgewogcHJpdmF0ZToKIAogICAgIFNwZWN0cnVtPElDRXZlbnQsIHVpbnQ2NF90PiBt
X3NwZWN0cnVtOwotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX2xvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0
aW9uOwogICAgIGJvb2wgbV9zaG91bGRTdG9wIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
aW5kZXggNTliNjI3M2RlYWIxZGQ1OWZkNzU5NDFjZDZlNjExNDkyODc5MjQ3MC4uNzVhYzYwZDli
MzQ2MDgxY2I2NzA2OWVkZWQzNTI4NTQzZmJkM2Q4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAg
LTI1NDQsNyArMjU0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25E
b2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBDb25kaXRpb24gZGlkU3RhcnRD
b25kaXRpb247CiAgICAgYm9vbCBkaWRTdGFydCA9IGZhbHNlOwogICAgIAotICAgIFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAiSlNDIEFnZW50IiwKICAgICAgICAgW3NvdXJj
ZUNvZGUsICZkaWRTdGFydExvY2ssICZkaWRTdGFydENvbmRpdGlvbiwgJmRpZFN0YXJ0XSAoKSB7
CiAgICAgICAgICAgICBDb21tYW5kTGluZSBjb21tYW5kTGluZSgwLCBudWxscHRyKTsKQEAgLTI1
NzEsNyArMjU3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xs
YXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRo
cmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiAgICAgCiAgICAgewogICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpZFN0YXJ0TG9jayk7CkBAIC0zMzExLDcgKzMzMTEs
NyBAQCBzdGF0aWMgdm9pZCBzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCgpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJXQVJOSU5HOiB0aW1lb3V0IHN0cmluZyBpcyBtYWxmb3JtZWQsIGdvdCAiLCB0
aW1lb3V0U3RyaW5nLAogICAgICAgICAgICAgICAgICIgYnV0IGV4cGVjdGVkIGEgbnVtYmVyLiBO
b3QgdXNpbmcgYSB0aW1lb3V0LlxuIik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3Jl
YXRlVGhyZWFkKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7Cisg
ICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSh0aW1lb3V0VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1l
b3V0IFRocmVhZCIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAKaW5kZXggMDFiMWZlMTI3ZThiNzMxZmI1M2I3YzJjZGI5OWVlMTlkZDVhZGE2OC4u
NjMyMmU3MzMyMjkyMTE0ZjBlMjU0YThlMWVmMTNkYTVjNDE5NTE2NCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBKU0xv
Y2s6OmxvY2soaW50cHRyX3QgbG9ja0NvdW50KQogICAgICAgICBtX2xvY2subG9jaygpOwogICAg
IH0KIAotICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgbV9vd25lclRo
cmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwog
ICAgIG1faGFzT3duZXJUaHJlYWQgPSB0cnVlOwogICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAppbmRleCAwYzM1ODQ3ZTQyM2U2NGJj
NzA1MDNkNWUxZDg1ZDQ4MDUwOWRiZTc0Li4xYWNhNGI5YTdiYjRkY2FmMDRkZjEyMTcxMDk3MjBl
YzhlMmQ2OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaApAQCAtOTIs
MTMgKzkyLDEzIEBAIGNsYXNzIEpTTG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxK
U0xvY2s+IHsKIAogICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KIAotICAgIHN0ZDo6b3B0
aW9uYWw8VGhyZWFkSWRlbnRpZmllcj4gb3duZXJUaHJlYWQoKSBjb25zdAorICAgIHN0ZDo6b3B0
aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChtX2hhc093bmVyVGhyZWFkKQogICAgICAgICAgICAgcmV0dXJuIG1fb3duZXJUaHJlYWQ7
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIGJvb2wgY3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2soKSB7IHJldHVybiBtX2hhc093bmVyVGhyZWFkICYmIG1fb3duZXJU
aHJlYWQgPT0gY3VycmVudFRocmVhZCgpOyB9CisgICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpIHsgcmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZC0+aWQo
KSA9PSBjdXJyZW50VGhyZWFkKCk7IH0KIAogICAgIHZvaWQgd2lsbERlc3Ryb3lWTShWTSopOwog
CkBAIC0xMzUsNyArMTM1LDcgQEAgY2xhc3MgSlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEpTTG9jaz4gewogICAgIC8vIGRpZmZlcmVudCB0aHJlYWQsIGFuZCBhbiBvcHRpb25h
bCBpcyB2dWxuZXJhYmxlIHRvIHJhY2VzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MDQyI2M2CiAgICAgYm9vbCBtX2hhc093bmVyVGhyZWFk
IHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fb3duZXJUaHJlYWQ7CisgICAgUmVm
UHRyPFRocmVhZD4gbV9vd25lclRocmVhZDsKICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAg
ICB1bnNpZ25lZCBtX2xvY2tEcm9wRGVwdGg7CiAgICAgYm9vbCBtX3Nob3VsZFJlbGVhc2VIZWFw
QWNjZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZv
cm1UaHJlYWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFk
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MTk3ZTczYzg0MTJhODBmMzYxNDBj
N2FkODZlYzc2NGZhYzI5MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIE9TKERBUldJTikgfHwgT1Mo
VU5JWCkKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykg
JiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5k
aWYKLQotI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KLSNlbGlm
IE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBK
U0MgewotCi0jaWYgT1MoREFSV0lOKQotdHlwZWRlZiBtYWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVh
ZDsKLSNlbGlmIE9TKFdJTkRPV1MpCi10eXBlZGVmIERXT1JEIFBsYXRmb3JtVGhyZWFkOwotI2Vs
aWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhyZWFkX3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZW5k
aWYgLy8gT1MoREFSV0lOKQotICAgIAotaW5saW5lIFBsYXRmb3JtVGhyZWFkIGN1cnJlbnRQbGF0
Zm9ybVRocmVhZCgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHJldHVybiBwdGhyZWFkX21hY2hf
dGhyZWFkX25wKHB0aHJlYWRfc2VsZigpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJu
IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHJldHVybiBw
dGhyZWFkX3NlbGYoKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXgg
N2QzN2E2NzRhYmEwOTQ3MjMxODQ5M2IzM2JjODlmZTNmYWQ5OGE5ZC4uNjdmMjBkOTJjZWNkZjBh
YjNiZmY3ZjZmZDEyNjYwMGFhMTViZjFhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFz
cyBGcmFtZVdhbGtlciB7CiAgICAgYm9vbCBpc1ZhbGlkRnJhbWVQb2ludGVyKHZvaWQqIGV4ZWMp
CiAgICAgewogICAgICAgICB1aW50OF90KiBmcENhc3QgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+
KGV4ZWMpOwotICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQqIHRocmVhZCA9IG1f
dm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVUaHJlYWRz
TG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFk
cygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJl
YWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNrQmFzZSgpKTsKICAgICAgICAgICAgIHVp
bnQ4X3QqIHN0YWNrTGltaXQgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4odGhyZWFkLT5zdGFja0Vu
ZCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrQmFzZSk7CkBAIC0yNzksNyAr
Mjc5LDcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdm0sIFJlZlB0
cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAgICwgbV93ZWFrUmFuZG9tKCkKICAgICAsIG1f
c3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkKICAgICAsIG1fdGltaW5nSW50ZXJ2YWwoc3Rk
OjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhPcHRpb25zOjpzYW1wbGVJbnRlcnZhbCgpKSkKLSAgICAs
IG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgICwgbV90aHJlYWQobnVsbHB0cikKICAgICAsIG1f
anNjRXhlY3V0aW9uVGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAg
ICwgbV9pc1NodXREb3duKGZhbHNlKQpAQCAtMzAwLDExICszMDAsMTEgQEAgdm9pZCBTYW1wbGlu
Z1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShjb25zdCBBYnN0cmFjdExvY2tlciYp
CiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKIAotICAgIGlmIChtX3RocmVhZElk
ZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQ
dHI8U2FtcGxpbmdQcm9maWxlcj4gcHJvZmlsZXIgPSB0aGlzOwotICAgIG1fdGhyZWFkSWRlbnRp
ZmllciA9IGNyZWF0ZVRocmVhZCgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9m
aWxlcl0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9m
aWxlci50aHJlYWQiLCBbcHJvZmlsZXJdIHsKICAgICAgICAgcHJvZmlsZXItPnRpbWVyTG9vcCgp
OwogICAgIH0pOwogfQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6
dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
CiAgICAgICAgIExvY2tIb2xkZXIgY29kZUJsb2NrU2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxv
Y2tTZXQoKS5nZXRMb2NrKCkpOwogICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0
b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0TG9jaygpKTsKIAot
ICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgp
OworICAgICAgICBhdXRvIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVu
ZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewogICAgICAgICAgICAgLy8gV2hpbGUgdGhl
IEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBjYW4ndCBkbyB0aGluZ3MgbGlrZSBtYWxsb2Mg
YmVjYXVzZSB0aGUgSlNDIHRocmVhZAogICAgICAgICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhl
IG1hbGxvYyBsb2NrLgpAQCAtMzU0LDEzICszNTQsMTIgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
Ojp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b24KICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CiAgICAgICAgICAg
ICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAg
ICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgICAgICBtYWNoaW5lRnJhbWUgPSByZWdpc3RlcnMuZnJhbWVQb2ludGVyKCk7CiAgICAg
ICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZy
YW1lKTsKICAgICAgICAgICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Q
b2ludGVyKCk7CiAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7
Ci0gICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVn
aXN0ZXJzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUg
YSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCmluZGV4IGI0
NGEzYmE0N2Y5ZTY3NjhhZDQzN2JiMThlMGE4YWJjNzk1YmQ2Y2YuLjA0M2RhZGJhNDA3MGI2Zjkx
ODA3YmQ0Y2ExMzI2OTRjM2NlYmFjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAgLTE5NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1w
bGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmls
ZXI+IHsKICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAg
ICAgZG91YmxlIG1fbGFzdFRpbWU7CiAgICAgTG9jayBtX2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElkZW50aWZpZXI7Ci0gICAgTWFjaGluZVRocmVhZHM6OlRocmVhZCogbV9q
c2NFeGVjdXRpb25UaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CisgICAgTWFj
aGluZVRocmVhZHM6OkpTVGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKICAgICBib29sIG1f
aXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lzU2h1dERvd247CiAgICAgYm9vbCBtX25lZWRzUmVwb3J0
QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDk5YTI2
ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5NWY0NmUuLmU5N2MzMTg1ZmM2ZjJjNjI4NGFl
NzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAt
NjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZN
PiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENvZGVCbG9jayosIGNvbnN0IGNoYXIqIHN1bW1h
cnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlm
aWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBpTG9jay0+b3duZXJUaHJlYWQo
KTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29u
c3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CiAKICAgICBWTVRyYXBzJiB0
cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNkNDYzYjcyZjMzZTQ2NGI3YjVhNTlkMDExOTM4
ZjY5Li4yNzJjNGRlZmE4NTVmYzM5YjBjZDQxMDFlNWU3ZTRiMmJkYzBkYmQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHN0
YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8Vk0qLCBTdGFja0JvdW5kcz4sIFZNVHJhcHM6OkVycm9y
PiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAgICAgICAgICAgICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1
bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBUcnkgbmV4dCBWTS4KICAgICAgICAgfQogCi0gICAg
ICAgIGZvciAoTWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMu
dGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRo
cmVhZCA9IG1hY2hpbmVUaHJlYWRzLnRocmVhZHNMaXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tl
cik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCh0aHJlYWQtPnN0YWNrQmFzZSgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRocmVhZC0+c3RhY2tFbmQoKSk7CiAgICAgICAgICAgICBpZiAoc3RhY2tQb2ludGVyIDw9IHRo
cmVhZC0+c3RhY2tCYXNlKCkgJiYgc3RhY2tQb2ludGVyID49IHRocmVhZC0+c3RhY2tFbmQoKSkg
ewpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkK
ICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93
bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93
bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2lnbmFsVGhyZWFkKG9wdGlvbmFsT3duZXJU
aHJlYWQudmFsdWUoKSwgU0lHVVNSMSk7CisgICAgICAgICAgICAgICAgb3B0aW9uYWxPd25lclRo
cmVhZC52YWx1ZSgpLT5zaWduYWwoU0lHVVNSMSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAKQEAgLTQ5Myw3ICs0OTMsNyBAQCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFw
KFZNVHJhcHM6OkV2ZW50VHlwZSBldmVudFR5cGUpCiAgICAgICAgIC8vIGZpcmVUcmFwKCkgZG9l
cyBub3QgYmxvY2suCiAgICAgICAgIFJlZlB0cjxTaWduYWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0
UmVmKG5ldyBTaWduYWxTZW5kZXIodm0oKSwgZXZlbnRUeXBlKSk7CiAgICAgICAgIGFkZFNpZ25h
bFNlbmRlcihzZW5kZXIuZ2V0KCkpOwotICAgICAgICBjcmVhdGVUaHJlYWQoImpzYy52bXRyYXBz
LnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgi
anNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBbc2VuZGVyXSB7CiAgICAgICAgICAgICBz
ZW5kZXItPnNlbmQoKTsKICAgICAgICAgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU4ZjE5YjU2ZDMzY2I4OGE2ZmI0OWQ2ZTVmM2I2MDk3
ODZiYzBjYy4uNzQxNDhhODAxNGIyZWUwY2U1MTEyNjZjYmE0YThhNzRlZWQyNjg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjUsOCArMzI1LDggQEAK
IAkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRDE1MUE4MjVCMDA0MTIz
RkYgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oICovOyB9OwogCQlBOEE0
NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRjE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi87IH07Ci0JCUE4QTQ3NDQ4
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLzsgfTsKLQkJ
QThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMx
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi87IH07
CisJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzMDE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovOyB9OworCQlBOEE0
NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQx
MjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oICovOyB9OwogCQlBOEE0NzQ0QTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3Bw
ICovOyB9OwogCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzMzE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi87IH07CiAJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJp
bWl0aXZlcy5oICovOyB9OwpAQCAtNzI4LDggKzcyOCw4IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIw
MDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcz
MkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThB
NDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJ
ZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJl
YWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzExNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Z1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkaW5n
UHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE2NCw4ICsxMTY0
LDggQEAKIAkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5n
LmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbi5oICovLAotCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywKLQkJCQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCisJCQkJQThBNDczMzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmggKi8sCiAJCQkJQThBNDcz
MzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQx
MjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCkBAIC0xNjE4LDcgKzE2MTgsNyBAQAog
CQkJCTFDQ0RCMTRGMUU1NjY4OTgwMDZDNzNDMCAvKiBUZXh0QnJlYWtJdGVyYXRvcklDVS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThBNDc0NDkxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQx
MjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODQzLDcg
KzE4NDMsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERBMDBGNUZBMTYgLyogVGV4
dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOTYxRDMwODAwQTAw
RjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNlcyAq
LywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEEx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJr
cy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlv
blNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2YWJmNjBlYzM4ZWEwYjhk
ZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJjM2I3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKKysrIGIvU291
cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKQEAgLTc5LDE0ICs3OSwx
NCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0eUNvbmRpdGlvbjsKICAg
ICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRp
Zmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBwcm9k
dWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1lclRocmVhZHM7
CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAKICAgICBWZWN0
b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2VpdmVkTG9jazsKICAgICAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBS
ZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25z
dW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3Ig
KDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
Y3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBz
aG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwg
cXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1w
dGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAi
LCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1w
dHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgpKQpAQCAtMTE0LDEx
ICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBl
bmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhy
ZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTsp
IHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAg
ICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNl
cjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0
aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0g
IiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9k
dWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUs
ICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEgKzEzOCwxMSBAQCB2b2lk
IHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0eUNvbmRpdGlvbiwgbXVz
dE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIHBy
b2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIHByb2R1Y2Vy
VGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFk
PiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrVHlwZT4gbG9j
a2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVz
c1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCmlu
ZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5NGYuLjY4Y2U4NGM0OGEz
ZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvYmVu
Y2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3Mv
TG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IEJlbmNobWFyayB7
CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZFtdPihudW1UaHJl
YWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFk
cyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRzKTsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwogICAgIAogICAgICAgICB2
b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03MCw3ICs3MCw3IEBAIHN0
cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4
ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAgIGNvdW50c1t0aHJl
YWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0gPSBjcmVhdGVU
aHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRl
KAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAgICAgICAgICAgICAgICBb
JiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaWNyb3NlY29u
ZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0cnVjdCBCZW5jaG1h
cmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgICAg
ICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAgYi9T
b3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5kZXggNTQ1ZDJlMGIwNDg4
ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3MDZjMTljZTRmMjk0Yzli
NjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVl
ZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcApA
QCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMpOwogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91
bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91cHMpOwotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJH
cm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBu
dW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0g
dHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAgICAg
IHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTsp
IHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRz
UGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAg
dGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5k
ZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgdGhy
ZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndv
cmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1JdGVyYXRpb25zXSAoKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3JkID0gMDsKQEAgLTEyMSw3
ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2VlcEdvaW5nID0gZmFsc2U7
CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91
cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAgICAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgICAgICAgICAg
dGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICAgICAgZG91
YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYv
QXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5
ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9t
YXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIAogICAgIG1faGFz
VW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAgICAgIFs9XSAoKSB7
CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9t
YXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51ZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVh
ZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJlYWREaWRTdGFydCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1
NWZlYmEyYzcuLmI1MGJiYmMzYmYzYWQyYjFmZGQxMzQ1MzQ4NjU0YWIxZDQxOGNiYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CkBAIC0xMjgsNyArMTI4LDYgQEAgc2V0KFdURl9IRUFERVJTCiAgICAg
U3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJhY2lu
Zy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCiAgICAgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJlYWRpbmcuaApAQCAtMzI5
LDE2ICszMjgsMTQgQEAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwogaWYgKFdJTjMyKQogICAg
IGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAgICAgIE9TQWxsb2NhdG9yV2luLmNwcAorICAg
ICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAgICAgIFRocmVhZFNwZWNpZmljV2luLmNwcAog
ICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAgKQogZWxzZSAoKQotICAgIGxpc3QoQVBQRU5E
IFdURl9IRUFERVJTCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaAotICAg
ICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAgICBPU0FsbG9jYXRvclBvc2l4
LmNwcAotICAgICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcAorICAgICAgICBU
aHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAgICAgVGhyZWFkaW5nUHRocmVhZHMuY3BwCiAg
ICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3Bw
IGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKaW5kZXggMDI0OTU0NGM1MThlODJhZmYx
NzA1ZGUxOWVjOTY1YWI5OGIxZDEwNi4uMzRiOTQyNTU1YWI1NjE4MzIxMDE4YjRmMDc5MGYyODI1
MGE3ZGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKQEAgLTE4Niw5ICsxODYsOSBAQCBib29sIGlz
TWFpblRocmVhZCgpCiAjZW5kaWYKIAogI2lmICFVU0UoV0VCX1RIUkVBRCkKLWJvb2wgY2FuQWNj
ZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCiti
b29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZCkKIHsKLSAgICByZXR1cm4gdGhyZWFkSWQgPT0gY3VycmVudFRocmVhZCgpOworICAgIHJl
dHVybiB0aHJlYWQgPT0gY3VycmVudFRocmVhZCgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQu
aAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3NjgzY2U1NTA4ZGQ4ZDdmMWQ3N2FmLi4wZTc4ZThl
NTFhYmU4ZDk1NTQ3MmM3OWRkMzQ2OTJmMTU0NmRiMWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCkBAIC0z
NCwxMyArMzQsMTIgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQcmludFN0cmVhbTsKIAotdHlwZWRlZiB1
aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotCiAvLyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHRocmVhZC4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFk
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5o
IGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKaW5kZXggZGZkZGYwYTk1
NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2YzdiZC4uNDEyOGY1Y2Q3MWE3ZGIyZjRmZDcwMzI5
NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1
cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgK
QEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1vcnlQcmVzc3VyZUhhbmRsZXIgewogI2lmIFVT
RShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwogI2Vsc2UKLSAgICAg
ICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBSZWZQdHI8VGhyZWFkPiBt
X3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2Jz
R2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIwYTM4ZTEwM2U3YzlhMmU0ZjBmN2UwNjEwNTcx
NC4uY2NlMTEwNmQ0NjdiNzIwODNjMWVkYjIxM2FkNTljNDQwMzE3YTRlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTkzLDE0ICs5MywxNCBAQCBib29sIFBhcmFs
bGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9u
bWVudCogcGFyZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFt
X3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKCZQYXJhbGxlbEVu
dmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3
b3JrZXIiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6
Y3JlYXRlKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQs
IHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlm
IChtX3RocmVhZCkKICAgICAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CiAKICAgICBtX211dGV4LnVu
bG9jaygpOwotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0K
IAogdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjpleGVjdXRlKFRocmVh
ZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lkKiBwYXJhbWV0ZXJzKQpAQCAtMTI2LDcgKzEy
Niw3IEBAIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhy
ZWFkKHZvaWQqIHRocmVhZERhdGEpCiAgICAgVGhyZWFkUHJpdmF0ZSogc2hhcmVkVGhyZWFkID0g
cmVpbnRlcnByZXRfY2FzdDxUaHJlYWRQcml2YXRlKj4odGhyZWFkRGF0YSk7CiAgICAgTG9ja0hv
bGRlciBsb2NrKHNoYXJlZFRocmVhZC0+bV9tdXRleCk7CiAKLSAgICB3aGlsZSAoc2hhcmVkVGhy
ZWFkLT5tX3RocmVhZElEKSB7CisgICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWQpIHsK
ICAgICAgICAgaWYgKHNoYXJlZFRocmVhZC0+bV9ydW5uaW5nKSB7CiAgICAgICAgICAgICAoKnNo
YXJlZFRocmVhZC0+bV90aHJlYWRGdW5jdGlvbikoc2hhcmVkVGhyZWFkLT5tX3BhcmFtZXRlcnMp
OwogICAgICAgICAgICAgc2hhcmVkVGhyZWFkLT5tX3J1bm5pbmcgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaCBiL1NvdXJjZS9XVEYvd3Rm
L1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCA0NTg0MDdjNGNiNGEzZjk5NWM5MGM1NTU2Mjdj
MWNiZDIyYjQxYjVjLi43ZDY4ZWYwNzBmNjdhNjUzM2MwYjg3NTgzZDJhNTdhMTE4ZDA1NmYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNz
IFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgIGNsYXNzIFRocmVhZFByaXZhdGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7CiAgICAgcHVibGljOgogICAgICAgICBUaHJlYWRQ
cml2YXRlKCkKLSAgICAgICAgICAgIDogbV90aHJlYWRJRCgwKQorICAgICAgICAgICAgOiBtX3Ro
cmVhZChudWxscHRyKQogICAgICAgICAgICAgLCBtX3J1bm5pbmcoZmFsc2UpCiAgICAgICAgICAg
ICAsIG1fcGFyZW50KDApCiAgICAgICAgIHsKQEAgLTc0LDcgKzc0LDcgQEAgY2xhc3MgUGFyYWxs
ZWxFbnZpcm9ubWVudCB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZCh2b2lkKik7
CiAKICAgICBwcml2YXRlOgotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Cisg
ICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgICAgICBib29sIG1fcnVubmluZzsK
ICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCogbV9wYXJlbnQ7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5j
cHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5YWRkYjJjYzU4MTBiNTZlMWMxNC4uY2MxYTIx
YjllYTVjY2NjNmYxYWNlNGM5NzQ5ODk5YmJkYTVkN2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAK
QEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVhZERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRocmVhZERhdGEoKTsKICAgICB+VGhyZWFkRGF0
YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOworICAgIFJlZjxU
aHJlYWQ+IHRocmVhZDsKICAgICAKICAgICBNdXRleCBwYXJraW5nTG9jazsKICAgICBUaHJlYWRD
b25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIGVuc3Vy
ZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFkcykKIH0KIAogVGhyZWFkRGF0YTo6VGhy
ZWFkRGF0YSgpCi0gICAgOiB0aHJlYWRJZGVudGlmaWVyKGN1cnJlbnRUaHJlYWQoKSkKKyAgICA6
IHRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAgICB1bnNpZ25lZCBjdXJyZW50TnVtVGhy
ZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC03OTMsNyArNzkzLDcgQEAgTkVWRVJfSU5MSU5FIHZv
aWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgdW5wYXJr
Q291bnQoYWRkcmVzcywgVUlOVF9NQVgpOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5n
TG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaWVy
LCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKK05FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6
OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQq
KT4mIGNhbGxiYWNrKQogewogICAgIFZlY3RvcjxCdWNrZXQqPiBidWNrZXRzVG9VbmxvY2sgPSBs
b2NrSGFzaHRhYmxlKCk7CiAKQEAgLTgwMyw3ICs4MDMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQ
YXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVu
dGlmaQogICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJlYWREYXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7
IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhyZWFkRGF0YSA9IGN1cnJlbnRUaHJlYWREYXRh
LT5uZXh0SW5RdWV1ZSkKLSAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50
aHJlYWRJZGVudGlmaWVyLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CisgICAgICAgICAg
ICBjYWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhyZWFkLmdldCgpLCBjdXJyZW50VGhyZWFk
RGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAgIAogICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRz
VG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oIGIvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmluZGV4IDdkNWZiMTdlZmEwMmFiNzZiMTI4ZWFmNTk5
ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTljN2I3ZmQ0Y2M2YWNhZTM2MmFlYTNiOTQzYTlkNTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHN0YXRpYyB2b2lkIGZvckVhY2goY29u
c3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAgIGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJl
Zjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4oZnVuYykpOworICAgICAgICBm
b3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+KGZ1
bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNzEsNyArMTcxLDcgQEAgY2xhc3MgUGFya2lu
Z0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVucGFya09uZUltcGwo
CiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IFNjb3BlZExhbWJkYTxpbnRwdHJf
dChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50
aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9p
ZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCmluZGV4IGZlMTYzMGM5NzM1
YjVmZjUzNTNjYjJjNTU4ZTMxMDU4MTI0Nzg3ZDguLjI3N2U2NzVkYjNjNTU1ZDVlNGM2Y2UwNDk0
Njg4NzRkMzY3Njk1OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC00Miw3ICs0Miw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNsYXNzIFJlZlB0ciB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNSZWZQ
dHIgPSB0cnVlOwogCi0gICAgQUxXQVlTX0lOTElORSBSZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIp
IHsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3RleHByIFJlZlB0cigpIDogbV9wdHIobnVsbHB0
cikgeyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyBy
ZWZJZk5vdE51bGwocHRyKTsgfQogICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKGNvbnN0IFJlZlB0
ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IHJlZklmTm90TnVsbChtX3B0cik7IH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29uc3QgUmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0
KCkpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlv
bkludm9jYXRpb24uaAppbmRleCA5NDNmZDZkNzlkMDk0NDI1NTAzYWM4OTczMWIwYTA2YTZhYzQw
ZmZkLi5jYjI3NWY3MDEyY2ZlNTY2MWU0OWUwYjRmZjBkOWM2MjFiMGU0OTlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaApAQCAtMjksNiArMjksOCBAQAogI2lm
bmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAogI2RlZmluZSBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb25faAogCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisKIG5hbWVzcGFjZSBXVEYgewog
CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOwpAQCAtMzYs
MTMgKzM4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVu
dCk7CiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFk
RnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEpCisgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCBSZWZQdHI8VGhyZWFkPiYmIHRocmVhZCwgdm9p
ZCogZGF0YSkKICAgICAgICAgOiBmdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCB0aHJlYWQo
V1RGTW92ZSh0aHJlYWQpKQogICAgICAgICAsIGRhdGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAg
ICAgVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb247CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkOwog
ICAgIHZvaWQqIGRhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRI
b2xkZXJQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2FjMjNiMGFmZTk2MTI0ZDJmZDBjNTYxMTdmMDBmMzA5NGIwZWI1ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNw
cApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRo
cmVhZEhvbGRlclB0aHJlYWRzLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworI2lmIFVT
RShQVEhSRUFEUykKKworI2lmIE9TKEhVUkQpCisvLyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBk
ZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwgc28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVy
ZS4KKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAxMDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0
cy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitwdGhyZWFkX2tleV90IFRocmVhZEhv
bGRlcjo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhy
ZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+
ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQorewor
ICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKKyAg
ICBpZiAoZXJyb3IpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFk
SG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01B
WCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHB0aHJlYWRfZ2V0c3Bl
Y2lmaWMobV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFk
JiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3
ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdv
dWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3Nl
cnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8v
IFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2Ug
bW9kZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7
CisgICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhy
ZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0
YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nh
c3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRh
KTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsK
KyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1
ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRl
c3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3Jz
IHdlcmUgY2FsbGVkLgorICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50
aWZpZXJEYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRI
UkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5o
IGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTNj
ZWRmMTU4MDM1ZmNjNjQzZDMyZjVlMmVkMjI1NjdlNzBlYzNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuaApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRocmVhZEhvbGRlclB0aHJlYWRzX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyUHRo
cmVhZHNfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsK
KworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1w
bG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVt
b3ZlCisvLyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRT
cGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KK2NsYXNz
IFRocmVhZEhvbGRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkSG9sZGVyKTsK
K3B1YmxpYzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7CisKKyAgICAvLyBPbmUgdGltZSBpbml0aWFs
aXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgorICAgIC8vIFRoaXMgbWV0aG9kIG11
c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2Fm
ZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOworCisgICAgLy8gQ3JlYXRlcyBh
bmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRIb2xkZXIgaW50byB0aHJlYWQtc3BlY2lmaWMg
c3RvcmFnZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFRocmVhZCYpOworCisgICAgLy8g
UmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQu
CisgICAgc3RhdGljIFRocmVhZEhvbGRlciogY3VycmVudCgpOworCisgICAgVGhyZWFkJiB0aHJl
YWQoKSB7IHJldHVybiBtX3RocmVhZC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFRocmVhZEhv
bGRlcihUaHJlYWQmIHRocmVhZCkKKyAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAg
ICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIC8vIFRoaXMg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQg
dGVybWluYXRlczoKKyAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNw
ZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2Fz
ICdkZXN0cm95ZWQgb25jZScKKyAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhy
ZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVy
LgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3Jz
IHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92
ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBj
bGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVm
PFRocmVhZD4gbV90aHJlYWQ7CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0
aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY5YzA5NTkzYjk1ZDc2MGU4MjEwODU0MzIyYmNjYTI5NjY4MjU4N2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFk
SG9sZGVyV2luLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKworbmFtZXNwYWNlIFdURiB7
CisKK0RXT1JEIFRocmVhZEhvbGRlcjo6bV9rZXkgPSAwOworCit2b2lkIHRocmVhZERpZEV4aXQo
VGhyZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVh
ZC0+ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQor
eworICAgIERXT1JEIG1fa2V5ID0gRmxzQWxsb2MoZGVzdHJ1Y3QpOworICAgIGlmIChtX2tleSA9
PSBGTFNfT1VUX09GX0lOREVYRVMpCisgICAgICAgIENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRl
ciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhy
ZWFkSG9sZGVyKj4oRmxzR2V0VmFsdWUobV9rZXkpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6
OmluaXRpYWxpemUoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAg
ICAgICAgLy8gSWRlYWxseSB3ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5
d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5n
IHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4n
dCBjYWxsCisgICAgICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdo
IiBidWdzIGluIHJlbGVhc2UgbW9kZS4KKyAgICAgICAgRmxzU2V0VmFsdWUobV9rZXksIG5ldyBU
aHJlYWRIb2xkZXIodGhyZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVz
dHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJE
YXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVh
ZElkZW50aWZpZXJEYXRhKTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rl
c3Ryb3llZE9uY2UpIHsKKyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0
cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNh
dXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNp
ZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgorICAgIEZsc1NldFZhbHVlKG1fa2V5LCB0aHJl
YWRJZGVudGlmaWVyRGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRI
b2xkZXJXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmQ3MDM1YWQwOGRkNzE4NTFlZTNiOGU0YWQ3ZTkxNmRj
ZDEyMjYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2lu
LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRIb2xkZXJXaW5faAorI2RlZmlu
ZSBUaHJlYWRIb2xkZXJXaW5faAorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMg
VGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBGTFMgMi1w
YXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQorLy8gVGhyZWFkIGZyb20gdGhyZWFk
TWFwLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMgdHlwZXMgZG9uJ3QgdXNlIG11
bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFzcyBUaHJlYWRIb2xkZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRocmVhZEhvbGRlcik7CitwdWJsaWM6CisgICAgflRocmVhZEhvbGRl
cigpOworCisgICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMg
YSB3aG9sZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlh
bGl6ZSgpIGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZU9uY2UoKTsKKworICAgIC8vIENyZWF0ZXMgYW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhy
ZWFkSG9sZGVyIGludG8gdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuCisgICAgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZShUaHJlYWQmKTsKKworICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lm
aWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgorICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIq
IGN1cnJlbnQoKTsKKworICAgIFRocmVhZCYgdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0
KCk7IH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRIb2xkZXIoVGhyZWFkJiB0aHJlYWQpCisgICAg
ICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9y
IGlzIGNhbGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFkIHRlcm1pbmF0ZXM6CisgICAgLy8gLSBmaXJz
dCwgd2hlbiBhbGwgdGhlIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2Fs
bGVkLCBpdCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdhcyAnZGVzdHJveWVkIG9uY2UnCisgICAgLy8g
YW5kIHJlLXNldHMgaXRzZWxmIGludG8gdGhlIHRocmVhZC1zcGVjaWZpYyBzbG90IHRvIG1ha2Ug
V2luIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0
aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBh
Z2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0
aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFE
X1NQRUNJRklDX0NBTEwgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBt
X3RocmVhZDsKKyAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBEV09SRCBt
X2tleTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVy
V2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZWJmZTkzYmE1YzcwYTliNGY0YjVm
MjY1NzIxZGQxNjliZmYxNDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgVVNFKFBUSFJFQURTKQotCi0jaW5jbHVkZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5oIgotCi0jaW5jbHVkZSAiVGhyZWFkaW5nLmgiCi0KLSNpZiBPUyhIVVJEKQotLy8gUFRI
UkVBRF9LRVlTX01BWCBpcyBub3QgZGVmaW5lZCBpbiBiaW9uaWMgbm9yIGluIEh1cmQsIHNvIGV4
cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUuCi0jZGVmaW5lIFBUSFJFQURfS0VZU19NQVggMTAyNAot
I2Vsc2UKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
cHRocmVhZF9rZXlfdCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6bV9rZXkgPSBQVEhSRUFEX0tFWVNf
TUFYOwotCi12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci0KLVRocmVhZElk
ZW50aWZpZXJEYXRhOjp+VGhyZWFkSWRlbnRpZmllckRhdGEoKQotewotICAgIHRocmVhZERpZEV4
aXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlh
bGl6ZU9uY2UoKQotewotICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXks
IGRlc3RydWN0KTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIENSQVNIKCk7Ci19Ci0KLVRocmVh
ZElkZW50aWZpZXIgVGhyZWFkSWRlbnRpZmllckRhdGE6OmlkZW50aWZpZXIoKQotewotICAgIEFT
U0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFYKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0
YSogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0
YSo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkpKTsKLQotICAgIHJldHVybiB0aHJlYWRJZGVu
dGlmaWVyRGF0YSA/IHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lkZW50aWZpZXIgOiAwOwotfQot
Ci12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKFRocmVhZElkZW50aWZpZXIg
aWQpCi17Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyKCkpOwotICAgIC8vIElkZWFsbHkgd2UnZCBo
YXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBo
dXJ0IHBlcmZvcm1hbmUuCi0gICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBt
ZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCi0gICAgLy8gV1RGOjppbml0aWFs
aXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgotICAgIFJF
TEVBU0VfQVNTRVJUKG1fa2V5ICE9IFBUSFJFQURfS0VZU19NQVgpOwotICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRJZGVudGlmaWVyRGF0YShpZCkpOwotfQotCi12b2lk
IFRocmVhZElkZW50aWZpZXJEYXRhOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQotewotICAgIFRocmVh
ZElkZW50aWZpZXJEYXRhKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVh
ZElkZW50aWZpZXJEYXRhKj4oZGF0YSk7Ci0gICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRh
KTsKLQotICAgIGlmICh0aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsK
LSAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZpZXJEYXRhOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgdGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1
ZTsKLSAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRl
c3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3Jz
IHdlcmUgY2FsbGVkLgotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50
aWZpZXJEYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoUFRI
UkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0
aHJlYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzQ5YTBjZGRhYWVjODYwYmNiZTRiYzBh
NzI1YmQyNzVlNzJlYmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkc19oCi0jZGVmaW5lIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gSG9sZHMgVGhyZWFk
SWRlbnRpZmllciBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgcHRo
cmVhZHMtc3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQotLy8g
VGhyZWFkSWRlbnRpZmllciBmcm9tIHRocmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVh
ZFNwZWNpZmljIHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xh
c3MgVGhyZWFkSWRlbnRpZmllckRhdGEgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVh
ZElkZW50aWZpZXJEYXRhKTsKLXB1YmxpYzoKLSAgICB+VGhyZWFkSWRlbnRpZmllckRhdGEoKTsK
LQotICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hv
bGUuCi0gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUo
KSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVP
bmNlKCk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZElk
ZW50aWZpZXJEYXRhIGludG8gdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuCi0gICAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0
dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0g
ICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllcigpOwotCi1wcml2YXRlOgotICAg
IFRocmVhZElkZW50aWZpZXJEYXRhKFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAg
ICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25j
ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVz
dHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8v
IC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMg
YXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwot
ICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0
byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQs
IGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBn
ZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVh
ZElkZW50aWZpZXIgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgot
ICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQqIGRhdGEpOwotCi0gICAgVGhyZWFkSWRlbnRp
ZmllciBtX2lkZW50aWZpZXI7Ci0gICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsKLSAgICBzdGF0
aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5k
aWYgLy8gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAK
aW5kZXggYzFkYzM1MDE5MDNhYjc2YjM3MDQ2ZDkzMzNmOTMyYTNlZjBjNmM2ZS4uNzE4NzgxNDEw
MThlNjgwM2MwMDcwNzFhMmY2ZmE2MGVjMjAzY2U1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00
NSw3ICs0NSw3IEBAIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsKICAgICBNdXRleCBjcmVhdGlv
bk11dGV4OwogfTsKIAotY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFy
KiB0aHJlYWROYW1lKQorY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNv
bnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCiAg
ICAgcmV0dXJuIHRocmVhZE5hbWU7CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHRocmVh
ZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsKICAgICB9CiAKLSAgICBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUpOworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1
cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsKIAogICAgIGF1dG8gZW50cnlQb2lu
dCA9IFdURk1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7CiAKQEAgLTkyLDI0ICs5MiwyNCBAQCBz
dGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAgIGVudHJ5
UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciog
bmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCitSZWZQdHI8VGhyZWFkPiBU
aHJlYWQ6OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50
cnlQb2ludCkKIHsKICAgICBOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1RocmVh
ZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFBy
ZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlz
aGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4
dC0+Y3JlYXRpb25NdXRleCk7CiAKLSAgICByZXR1cm4gY3JlYXRlVGhyZWFkSW50ZXJuYWwodGhy
ZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CisgICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRl
SW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CiB9CiAKLVRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRh
dGEsIGNvbnN0IGNoYXIqIG5hbWUpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShUaHJl
YWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQogewot
ICAgIHJldHVybiBjcmVhdGVUaHJlYWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICBy
ZXR1cm4gVGhyZWFkOjpjcmVhdGUobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKICAgICAgICAg
ZW50cnlQb2ludChkYXRhKTsKICAgICB9KTsKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNV
c2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3Vy
cmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lm
IEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBA
IC0xMjAsNyArMTIwLDcgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
aW50IHJlbGF0aXZlUHJpb3JpdHkpCiAjZW5kaWYKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1
cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYg
SEFWRShRT1NfQ0xBU1NFUykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAg
LTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChp
bnQgcmVsYXRpdmVQcmlvcml0eSkKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19j
bGFzc190IGdsb2JhbE1heFFPU2NsYXNzIHsgUU9TX0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZv
aWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVh
ZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1h
bGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xv
YmFsTWF4UU9TY2xhc3MgPSBtYXhDbGFzczsKIH0KIAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1ND
bGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNzKQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1
c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2Jh
bE1heFFPU2NsYXNzICE9IFFPU19DTEFTU19VTlNQRUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bWluKG9yaWdpbmFsQ2xhc3MsIGdsb2JhbE1heFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgs
OSBAQCBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xh
c3MpCiB9CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9pZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAppbmRleCA2YjU1OGIzZTFkNTE3ZTgxMGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi41
OTk1NmM2NTY1N2E3ODlhNTU0NGJmODM1MmM2ZmJjMDI3ZWVhMWY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApA
QCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3MiArMzksMjI4IEBACiAjaW5jbHVkZSA8c3Rk
aW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRI
UkVBRFMpCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vs
c2UKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5n
IHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxl
IG9uIEZyZWVCU0QuCisvLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAt
Q1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVl
QlNEIDEwLnggZ29lcyBFT0wuCisvLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEv
c2hvd19idWcuY2dpP2lkPTIwNzA3OQorI2lmIE9TKEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRl
eHQuaD4KKyNlbmRpZgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+Cisj
ZW5kaWYKKyNlbmRpZgorCisjaWYgIUNPTVBJTEVSKE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+
CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5k
aWYKIAogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmll
cjsKKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9z
dGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2
X3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlw
ZWRlZiBwcGNfdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBD
NjQpCit0eXBlZGVmIHBwY190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vs
aWYgQ1BVKEFSTSkKK3R5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJz
OworI2VsaWYgQ1BVKEFSTTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9y
bVJlZ2lzdGVyczsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgor
CisjZWxpZiBPUyhXSU5ET1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7
CisKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkK
KwordXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1
Y3QgUGxhdGZvcm1SZWdpc3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNl
bmRpZgorCit1c2luZyBUaHJlYWRJZGVudGlmaWVyID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQg
KCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11
c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQg
cmVwZWF0ZWRseS4KLS8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBp
cyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVu
dCBpcyB0aGF0IHRoZSBjYWxscyBhcmUgbm90IHJlZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKK2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNz
IFByaW50U3RyZWFtOworCitjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8VGhyZWFkPiB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAot
Ly8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5h
bWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQg
aW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNy
ZWF0ZVRocmVhZChjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4p
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+VGhyZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJl
bnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJp
b3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1
ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDAp
OwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRl
ZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOworICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0
aHJlYWQgY3JlYXRpb24gZmFpbGVkLgorICAgIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEg
bGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhy
ZWFkLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRl
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rp
b24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBP
UlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElk
ZW50aWZpZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElk
ZW50aWZpZXIpOworICAgIC8vIFJldHVybnMgVGhyZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNh
biBiZSAoYSBiaXQpIGNvc3RseSBpbiBXaW5kb3dzLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7CiAKLS8vIERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRl
ci1iYXNlZCB0aHJlYWQgY3JlYXRpb24uCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRp
ZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJl
YWROYW1lKTsKKyAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlz
IHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CisgICAgLy8gb2Yg
dGhyZWFkcyBhbmQgZW5zdXJlIHRoZSB0aHJlYWQgbGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5h
bCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJ
ZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29u
c3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdl
UHJpb3JpdHkoaW50KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0
aW9uKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxl
ZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBs
YXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhl
IHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFy
KiB0aHJlYWROYW1lKTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5k
RXJyb3IgPSBrZXJuX3JldHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBs
YXRmb3JtU3VzcGVuZEVycm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQ
bGF0Zm9ybVN1c3BlbmRFcnJvciA9IERXT1JEOworI2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1h
bGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEV4cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzdW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHNpemVfdCBnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQ
VEhSRUFEUykKLWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIsIGludCBzaWduYWxO
dW1iZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVt
YmVyKTsKICNlbmRpZgogCisgICAgLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWly
aW5nIFVJIHJlc3BvbnNpdmVuZXNzLgorICAgIC8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1
ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBs
b3dlciBwcmlvcml0eS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3Vy
cmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJ
bml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNT
RVMpCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xh
c3NfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhx
b3NfY2xhc3NfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2Jh
bE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0g
Ly8gbmFtZXNwYWNlIFdURgorICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVh
ZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVh
dGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUp
OwogCi11c2luZyBXVEY6OlRocmVhZElkZW50aWZpZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVh
ZDsKLXVzaW5nIFdURjo6Y3VycmVudFRocmVhZDsKLXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJp
b3JpdHk7Ci11c2luZyBXVEY6OmRldGFjaFRocmVhZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVh
ZENvbXBsZXRpb247CisgICAgLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxp
emF0aW9uLgorICAgIC8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5h
bWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRo
cmVhZE5hbWUpOwogCiAjaWYgVVNFKFBUSFJFQURTKQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7
CisgICAgdm9pZCBlc3RhYmxpc2gocHRocmVhZF90KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxp
c2goSEFORExFLCBUaHJlYWRJZGVudGlmaWVyKTsKICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xB
U1NFUykKLXVzaW5nIFdURjo6c2V0R2xvYmFsTWF4UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVz
dGVkUU9TQ2xhc3M7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisj
aWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQorICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhh
bmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpOwogI2Vu
ZGlmCiAKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQor
CisgICAgdm9pZCBhZGRPbkV4aXRDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+
IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbV9vbkV4aXRDYWxsYmFjay5hcHBlbmQoY2FsbGJh
Y2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBpZCgpID09IHRocmVhZC5pZCgpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpZCgpICE9IHRocmVhZC5pZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQo
KTsKKworICAgIGVudW0gSm9pbmFibGVTdGF0ZSB7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRo
cmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgorICAgICAgICBKb2luYWJs
ZSwKKworICAgICAgICAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBh
bmQgdGhpcyB0aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNl
IHRoZXJlIGNhbiBiZSBhCisgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0
aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQg
dGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAg
Ly8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhp
dCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdz
CisgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2Fz
ZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisg
ICAgICAgIEpvaW5lZCwKKworICAgICAgICAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVk
IGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVh
ZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERl
dGFjaGVkLAorICAgIH07CisKKyAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJl
dHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KKyAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBt
X2pvaW5hYmxlU3RhdGUgPSBEZXRhY2hlZDsgfQorICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZv
aWQgZGlkSm9pbigpIHsgbV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNF
eGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4aXQ7IH0KKworICAgIFdvcmRMb2NrIG1fbXV0ZXg7Cisg
ICAgVGhyZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2lu
YWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKKyAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07Cisg
ICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWQmKT4+IG1fb25FeGl0Q2FsbGJhY2s7
CisjaWYgVVNFKFBUSFJFQURTKQorICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJX
SU4pCisgICAgbWFjaF9wb3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3Qg
bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOworICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRN
YWNoaW5lQ29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBz
dGQ6OmF0b21pYzxib29sPiBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CisjZW5kaWYKKyNlbGlmIE9T
KFdJTkRPV1MpCisgICAgSEFORExFIG1faGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5
c3RlbQorI2VuZGlmCit9OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERh
cndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZy
b20gYW55IHRocmVhZCwgdGhlIG9ubHkKKy8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxz
IGFyZSBub3QgcmVlbnRyYW50LgorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpOworCitpbmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sK
KyAgICByZXR1cm4gVGhyZWFkOjpjdXJyZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNp
bmcgV1RGOjpjdXJyZW50VGhyZWFkOworCiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZj
YTFkYTVhNjkyZDBmLi45MzdkNTVhYjNkOTJhYWRlMTE3YmM1NWVlMWU4YzNjNGUwMTczZTE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJl
YWt0aXguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29v
ZEByZWFrdGl4LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQxLDE0MSArNDIsMTM0IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2Vl
ZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbi5oIgotI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIK
LSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJl
YWRzLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCi0jaWYgIUNPTVBJTEVSKE1TVkMpCi0jaW5jbHVkZSA8
bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2NoZWQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2Vu
ZGlmCituYW1lc3BhY2UgV1RGIHsKIAotI2lmIE9TKExJTlVYKQotI2luY2x1ZGUgPHN5cy9wcmN0
bC5oPgorVGhyZWFkOjpUaHJlYWQoKQoreworI2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQo
Jm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBw
cm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsK
ICNlbmRpZgorfQogCitUaHJlYWQ6On5UaHJlYWQoKQorewogI2lmICFPUyhEQVJXSU4pCi0jaW5j
bHVkZSA8c2lnbmFsLmg+CisgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJl
c3VtZSk7CiAjZW5kaWYKK30KIAotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIFB0aHJlYWRTdGF0
ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBKb2lu
YWJsZVN0YXRlIHsKLSAgICAgICAgSm9pbmFibGUsIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0
ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgotCi0gICAgICAgIEpvaW5lZCwgLy8gU29t
ZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFs
bHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYSAKLSAg
ICAgICAgICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBl
eGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5k
ZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pIAotICAgICAgICAgICAgICAgIC8v
IGFuZCB3aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQg
dG8gdGFrZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncyAK
LSAgICAgICAgICAgICAgICAvLyBub2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0
aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJu
ZWQpLgotCi0gICAgICAgIERldGFjaGVkIC8vIFRoZSB0aHJlYWQgaGFzIGJlZW4gZGV0YWNoZWQg
YW5kIGNhbiBubyBsb25nZXIgYmUgam9pbmVkIG9uLiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFk
IG11c3QgdGFrZSBjYXJlIG9mIGNsZWFuaW5nIHVwIGFmdGVyIGl0c2VsZi4KLSAgICB9OwotCi0g
ICAgLy8gQ3VycmVudGx5IGFsbCB0aHJlYWRzIGNyZWF0ZWQgYnkgV1RGIHN0YXJ0IG91dCBhcyBq
b2luYWJsZS4gCi0gICAgUHRocmVhZFN0YXRlKHB0aHJlYWRfdCBoYW5kbGUpCi0gICAgICAgIDog
bV9qb2luYWJsZVN0YXRlKEpvaW5hYmxlKQotICAgICAgICAsIG1fZGlkRXhpdChmYWxzZSkKLSAg
ICAgICAgLCBtX3B0aHJlYWRIYW5kbGUoaGFuZGxlKQotICAgIHsKLSAgICB9Ci0KLSAgICBKb2lu
YWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KLSAg
ICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSgpIHsgcmV0dXJuIG1fcHRocmVhZEhhbmRsZTsgfQot
ICAgIHZvaWQgZGlkQmVjb21lRGV0YWNoZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVk
OyB9Ci0gICAgdm9pZCBkaWRFeGl0KCkgeyBtX2RpZEV4aXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBk
aWRKb2luKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBKb2luZWQ7IH0KLSAgICBib29sIGhhc0V4aXRl
ZCgpIHsgcmV0dXJuIG1fZGlkRXhpdDsgfQotCi1wcml2YXRlOgotICAgIEpvaW5hYmxlU3RhdGUg
bV9qb2luYWJsZVN0YXRlOwotICAgIGJvb2wgbV9kaWRFeGl0OwotICAgIHB0aHJlYWRfdCBtX3B0
aHJlYWRIYW5kbGU7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgc3Rk
Ojp1bmlxdWVfcHRyPFB0aHJlYWRTdGF0ZT4+IFRocmVhZE1hcDsKKyNpZiAhT1MoREFSV0lOKQog
Ci12b2lkIHVuc2FmZVRocmVhZFdhc0RldGFjaGVkKFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0
aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWRXYXNKb2luZWQoVGhy
ZWFkSWRlbnRpZmllcik7CisvLyBXZSB1c2UgU0lHVVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUg
bWFjaGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3JlLgorc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7CitzdGF0aWMgc3RkOjphdG9t
aWM8VGhyZWFkKj4gdGFyZ2V0VGhyZWFkIHsgbnVsbHB0ciB9Oworc3RhdGljIFN0YXRpY1dvcmRM
b2NrIGdsb2JhbFN1c3BlbmRMb2NrOwogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkK
K3ZvaWQgVGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCos
IHZvaWQqIHVjb250ZXh0KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0
ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCi12b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQot
ewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQ7Ci0KLSAgICBpZiAoaXNJbml0aWFsaXpl
ZCkKKyAgICAvLyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFs
IGhhbmRsZXJzIGlzIGFsbG93ZWQuCisgICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQu
bG9hZCgpOworCisgICAgaWYgKHRocmVhZC0+bV9zdXNwZW5kZWQubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHNpZ25hbCBoYW5kbGVyIGludm9j
YXRpb24gdGhhdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlc3VtZSBzaWdzdXNwZW5kLgor
ICAgICAgICAvLyBTbyB0aGlzIGhhbmRsZXIgaW52b2NhdGlvbiBpdHNlbGYgc2hvdWxkIG5vdCBw
cm9jZXNzLgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHNpZ25hbCBjb21lcywgZmlyc3Qs
IHRoZSBzeXN0ZW0gY2FsbHMgc2lnbmFsIGhhbmRsZXIuIEFuZCBsYXRlciwgc2lnc3VzcGVuZCB3
aWxsIGJlIHJlc3VtZWQuIFNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gYWx3YXlzIHByZWNlZGVz
LgorICAgICAgICAvLyBTbywgdGhlIHByb2JsZW0gbmV2ZXIgaGFwcGVucyB0aGF0IHN1c3BlbmRl
ZC5zdG9yZSh0cnVlLCAuLi4pIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBoYW5kbGVyIGlz
IGNhbGxlZC4KKyAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJz
LzAwOTY5NTM5OS9mdW5jdGlvbnMvc2lnc3VzcGVuZC5odG1sCiAgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZl
cnNpb246OmluaXRpYWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90
IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAg
ICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0
cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXpl
UmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRp
YWxpemVPbmNlKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygp
OwotfQorICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVjb250ZXh0KTsKKyNpZiBDUFUoUFBDKQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNo
aW5lQ29udGV4dCA9ICp1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQudWNfcmVnczsKKyNlbHNlCisg
ICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21j
b250ZXh0OworI2VuZGlmCiAKLXN0YXRpYyBUaHJlYWRNYXAmIHRocmVhZE1hcCgpCi17Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZE1hcD4gbWFwOwotICAgIHJldHVybiBtYXA7Cisg
ICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3Vz
cGVuZGVkLgorICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJ
dCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgorICAg
IC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rp
b25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKKyAgICAvLworICAgIC8vIEFuZCBz
ZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRN
YWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCisgICAgLy8gaHR0cDovL3B1YnMub3Bl
bmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwj
dGFnXzA0XzExCisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVz
dW1lKTsKKworICAgIC8vIFJlYWNoaW5nIGhlcmUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMg
YmxvY2tlZCBpbiB0aGlzIGhhbmRsZXIgKHRoaXMgaXMgY29uZmlndXJlZCBieSBzaWdhY3Rpb24n
cyBzYV9tYXNrKS4KKyAgICAvLyBTbyBiZWZvcmUgY2FsbGluZyBzaWdzdXNwZW5kLCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lIHRvIHRoaXMgdGhyZWFkIGlzIGRlZmVycmVkLiBUaGlzIGVuc3VyZXMg
dGhhdCB0aGUgaGFuZGxlciBpcyBub3QgZXhlY3V0ZWQgcmVjdXJzaXZlbHkuCisgICAgc2lnc2V0
X3QgYmxvY2tlZFNpZ25hbFNldDsKKyAgICBzaWdmaWxsc2V0KCZibG9ja2VkU2lnbmFsU2V0KTsK
KyAgICBzaWdkZWxzZXQoJmJsb2NrZWRTaWduYWxTZXQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUp
OworICAgIHNpZ3N1c3BlbmQoJmJsb2NrZWRTaWduYWxTZXQpOworCisgICAgLy8gQWxsb3cgcmVz
dW1lIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBpcyByZXN1bWVkLgorICAgIHNlbV9w
b3N0KCZ0aHJlYWQtPm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CiB9CiAKLXN0YXRpYyBU
aHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90
JiBwdGhyZWFkSGFuZGxlKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLQotICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7
Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAo
cHRocmVhZF9lcXVhbChpLT52YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAm
JiAhaS0+dmFsdWUtPmhhc0V4aXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KKyNlbmRpZiAvLyAhT1MoREFSV0lOKQogCi1zdGF0aWMg
VGhyZWFkSWRlbnRpZmllciBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShjb25z
dCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCit2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQog
ewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBU
aHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRk
KGlkZW50aWZpZXJDb3VudCwgc3RkOjptYWtlX3VuaXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRI
YW5kbGUpKTsKLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtl
eSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7Cisg
ICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5n
SW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0
aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0
aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAg
IGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0
YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKworI2lmICFPUyhEQVJXSU4pCisgICAg
ICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4K
KyAgICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlu
IHRoZSBoYW5kbGVyLgorICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUg
YWxsb3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgorICAgICAgICBzdHJ1Y3Qgc2ln
YWN0aW9uIGFjdGlvbjsKKyAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAg
ICAgICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7
CisKKyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IFRocmVhZDo6c2lnbmFsSGFuZGxlclN1
c3BlbmRSZXN1bWU7CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9T
SUdJTkZPOworICAgICAgICBzaWdhY3Rpb24oU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlv
biwgMCk7CisjZW5kaWYKKyAgICB9KTsKIH0KIAotc3RhdGljIHB0aHJlYWRfdCBwdGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQoVGhyZWFkSWRlbnRpZmllciBpZCkK
K3N0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgp
CiB7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCktPnB0aHJlYWRIYW5kbGUoKTsKKyNp
ZiAhT1MoREFSV0lOKQorICAgIHNpZ3NldF90IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2sp
OworICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgcHRo
cmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7CisjZW5kaWYKIH0KIAogc3RhdGlj
IHZvaWQqIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgLy8gQmFsYW5j
ZWQgYnkgLmxlYWtQdHIoKSBpbiBjcmVhdGVUaHJlYWRJbnRlcm5hbC4KKyAgICAvLyBCYWxhbmNl
ZCBieSAubGVha1B0cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwuCiAgICAgYXV0byBpbnZv
Y2F0aW9uID0gc3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oc3RhdGlj
X2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKKworICAgIFRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50
aHJlYWQgPSBudWxscHRyOworCiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+
ZGF0YSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRl
VGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29u
c3QgY2hhciopCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewotICAgIGF1dG8g
aW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihl
bnRyeVBvaW50LCBkYXRhKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihu
ZXcgVGhyZWFkKCkpOworICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCB0aHJlYWQuZ2V0KCksIGRhdGEpOwog
ICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CiAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKICAg
ICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CkBAIC0xODYsMTcgKzE4MCwxOCBAQCBUaHJlYWRJ
ZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQs
IHZvaWQqIGRhdGEsIGNvbgogICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyKTsKICAgICBp
ZiAoZXJyb3IpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQg
YXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52
b2NhdGlvbi5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICAvLyBCYWxhbmNlZCBieSBzdGQ6OnVuaXF1ZV9wdHIgY29uc3RydWN0
b3IgaW4gd3RmVGhyZWFkRW50cnlQb2ludC4KICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24q
IGxlYWtlZEludm9jYXRpb24gPSBpbnZvY2F0aW9uLnJlbGVhc2UoKTsKICAgICBVTlVTRURfUEFS
QU0obGVha2VkSW52b2NhdGlvbik7CiAKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZv
clB0aHJlYWRIYW5kbGUodGhyZWFkSGFuZGxlKTsKKyAgICB0aHJlYWQtPmVzdGFibGlzaCh0aHJl
YWRIYW5kbGUpOworICAgIHJldHVybiB0aHJlYWQ7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJl
bnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6Omlu
aXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsK
ICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9OUCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9y
bWFsaXplVGhyZWFkTmFtZSh0aHJlYWROYW1lKSk7CkBAIC0yMDUsMTIzICsyMDAsMjM0IEBAIHZv
aWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1l
KQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odGhyZWFkTmFtZSk7CiAjZW5kaWYKLQotICAgIFRo
cmVhZElkZW50aWZpZXIgaWQgPSBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJlYWRfc2Vs
ZigpKTsKLSAgICBBU1NFUlQoaWQpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFs
aXplKGlkKTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQo
KTsKIH0KLSAgICAKLXZvaWQgY2hhbmdlVGhyZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJRCwgaW50IGRlbHRhKQotewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAg
IEFTU0VSVCh0aHJlYWRJRCk7CiAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVG
b3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VS
VChwdGhyZWFkSGFuZGxlKTsKLSAgICB9Cit2b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50
IGRlbHRhKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKIAogICAgIGlu
dCBwb2xpY3k7CiAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogCi0gICAgaWYgKHB0aHJl
YWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQorICAgIGlm
IChwdGhyZWFkX2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOwogCi0gICAg
cHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKKyAg
ICBwdGhyZWFkX3NldHNjaGVkcGFyYW0obV9oYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKIH0KIAot
aW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCitp
bnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRI
YW5kbGU7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQorICAgIHB0aHJlYWRfdCBoYW5kbGU7CiAg
ICAgewotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGxvY2sgYWNyb3NzIHRoZSBjYWxsIHRv
IGpvaW4sIHNpbmNlIHRoYXQgY2FuIGJsb2NrIG91ciB0aHJlYWQgYW5kIGNhdXNlIGRlYWRsb2Nr
LgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAg
IHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFk
eUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7CisgICAgICAg
IFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5k
bGU7CiAgICAgfQogCi0gICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pvaW4ocHRocmVhZEhh
bmRsZSwgMCk7CisgICAgaW50IGpvaW5SZXN1bHQgPSBwdGhyZWFkX2pvaW4oaGFuZGxlLCAwKTsK
IAogICAgIGlmIChqb2luUmVzdWx0ID09IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhy
ZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVp
dCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdh
cyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CiAgICAgZWxz
ZSBpZiAoam9pblJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1
IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwgdGhyZWFkSUQpOworICAgICAgICBMT0dfRVJS
T1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBqb2luZWQuXG4iLCBtX2lk
KTsKIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhy
ZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQo
c3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+am9pbmFibGVTdGF0ZSgpID09IFB0aHJlYWRTdGF0
ZTo6Sm9pbmFibGUpOworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBB
U1NFUlQoam9pbmFibGVTdGF0ZSgpID09IEpvaW5hYmxlKTsKIAotICAgIC8vIFRoZSB0aHJlYWQg
aGFzIGFscmVhZHkgZXhpdGVkLCBzbyBjbGVhbiB1cCBhZnRlciBpdC4KLSAgICBpZiAoc3RhdGUt
Pmhhc0V4aXRlZCgpKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOworICAg
IC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBkbyBub3RoaW5nLgogICAgIC8vIFRo
ZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQsIHNvIGRvbid0IGNsZWFuIGFueXRoaW5nIHVwLiBK
dXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0IHNvIHRoYXQgaXQgd2ls
bCBjbGVhbiB1cCBhZnRlciBpdHNlbGYuCi0gICAgZWxzZQotICAgICAgICBzdGF0ZS0+ZGlkSm9p
bigpOworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJl
dHVybiBqb2luUmVzdWx0OwogfQogCi12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEKQordm9pZCBUaHJlYWQ6OmRldGFjaCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElE
KTsKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJl
c3VsdCA9IHB0aHJlYWRfZGV0YWNoKG1faGFuZGxlKTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQor
ICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBk
ZXRhY2hlZFxuIiwgbV9pZCk7CiAKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRl
bnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgIEFTU0VSVChwdGhyZWFk
SGFuZGxlKTsKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hl
ZCgpOworfQogCi0gICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRI
YW5kbGUpOwotICAgIGlmIChkZXRhY2hSZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFk
SWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4iLCB0aHJlYWRJRCk7Ci0K
LSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAg
ICBBU1NFUlQoc3RhdGUpOwotICAgIGlmIChzdGF0ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgIHRo
cmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgZWxzZQotICAgICAgICB0aHJlYWRNYXAo
KS5nZXQodGhyZWFkSUQpLT5kaWRCZWNvbWVEZXRhY2hlZCgpOworVGhyZWFkJiBUaHJlYWQ6OmN1
cnJlbnQoKQoreworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVu
dCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAg
ICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVz
dGFibGlzaGVkIHlldC4KKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcg
VGhyZWFkKCkpOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBU
aHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7CiB9CiAKLXZv
aWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQorVGhyZWFkSWRlbnRp
ZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVh
ZE1hcE11dGV4KCkpOwotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQo
dGhyZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgCi0gICAgc3RhdGUtPmRpZEV4aXQo
KTsKKyAgICByZXR1cm4gY3VycmVudCgpLmlkKCk7Cit9CiAKLSAgICBpZiAoc3RhdGUtPmpvaW5h
YmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKQotICAgICAgICB0aHJlYWRNYXAo
KS5yZW1vdmUodGhyZWFkSUQpOworYm9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVy
KQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8g
PSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJO
bzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3Vy
cmVudFRocmVhZCgpCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBs
YXRmb3JtU3VzcGVuZEVycm9yPgogewotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJ
ZGVudGlmaWVyRGF0YTo6aWRlbnRpZmllcigpOwotICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJu
IGlkOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodGhpcyAhPSAmY3VycmVudCgpLCAiQ3VycmVu
dGx5IHdlIGRvbid0IHN1cHBvcnQgc3VzcGVuZCB0aGUgY3VycmVudCB0aHJlYWQgaXRzZWxmLiIp
OworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisg
ICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFk
KTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKKyNlbHNlCisgICAgeworICAgICAg
ICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVj
dXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgorICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxv
Y2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCisgICAgICAgIC8vIENvbnNpZGVyIHRoZSBm
b2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KKyAgICAgICAgLy8gQW5k
IEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCisgICAg
ICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2
ZXJlZCB0byBBIGFuZCBCLgorICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBz
dXNwZW5kZWQuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9j
ayk7CisgICAgICAgIGlmICghbV9zdXNwZW5kQ291bnQpIHsKKyAgICAgICAgICAgIC8vIElkZWFs
bHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0
byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICAv
LyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgorICAg
ICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQg
bG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAg
ICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBw
dGhyZWFkX2tpbGwobV9oYW5kbGUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVz
dWx0KTsKKyAgICAgICAgICAgIHNlbV93YWl0KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUp
OworICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJh
dGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlz
IGRvbmUuCisgICAgICAgICAgICBtX3N1c3BlbmRlZC5zdG9yZSh0cnVlLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQorICAgICAgICArK21fc3VzcGVuZENvdW50OworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgorfQogCi0gICAgLy8gTm90IGEgV1RGLWNy
ZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0g
ICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYo
KSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVy
biBpZDsKK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tl
cihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZShtX3BsYXRmb3Jt
VGhyZWFkKTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5k
IG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMu
CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAg
ICAgIGlmIChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBXaGVuIGFsbG93
aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxl
ciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlz
c3VlZCwKKyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBj
YWxsZWQgb25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMg
dG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVz
dW1lLgorICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5k
IGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAgICAgICAgLy8g
Mi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBp
biB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRh
a2UgdGhpcy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRo
IGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgLy8g
SW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlzIHVz
ZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhp
cyk7CisgICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8v
IFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4
ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAg
ICAgbV9zdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwor
ICAgICAgICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2VuZGlmCiB9CiAK
LWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBzaWduYWxO
dW1iZXIpCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisjaWYgT1Mo
REFSV0lOKQorI2lmIENQVShYODYpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gc2l6ZW9mKHJl
Z2lzdGVycykgLyBzaXplb2YoaW50KTsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9y
ID0gaTM4Nl9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHVuc2lnbmVkIHVz
ZXJDb3VudCA9IHg4Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxh
dm9yX3QgZmxhdm9yID0geDg2X1RIUkVBRF9TVEFURTY0OworI2VsaWYgQ1BVKFBQQykKKyAgICB1
bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9z
dGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFBQQzY0
KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTY0OworI2Vs
aWYgQ1BVKEFSTSkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NP
VU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRF
OworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURf
U1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RI
UkVBRF9TVEFURTY0OworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlm
CisKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUobV9wbGF0Zm9y
bVRocmVhZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgJnVzZXJDb3VudCk7
CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgV1RGUmVwb3J0RmF0
YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICJKYXZhU2Ny
aXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJl
dHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5u
aW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7Cisg
ICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiB1c2VyQ291bnQgKiBzaXplb2YodWlu
dHB0cl90KTsKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChD
UFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShN
SVBTKSkKKyAgICByZWdpc3RlcnMgPSBtX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0OworICAgIHJl
dHVybiBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpOworI2Vsc2UKKyAgICBwdGhyZWFkX2F0dHJf
dCBhdHRyaWJ1dGU7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHJpYnV0ZSk7CisjaWYgSEFW
RShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKKyNpZiAhT1MoT1BFTkJTRCkKKyAgICAvLyBl
LmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCisgICAgcHRocmVhZF9hdHRyX2dl
dF9ucChtX2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZW5kaWYKKyNlbHNlCisgICAgLy8gRklYTUU6
IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBo
YXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKKyAgICBwdGhyZWFkX2dldGF0dHJfbnAobV9o
YW5kbGUsICZhdHRyaWJ1dGUpOworI2VuZGlmCisKKyAgICB2b2lkKiBzdGFja0Jhc2UgPSAwOwor
ICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAgIGludCByYyA9IHB0aHJlYWRfYXR0cl9nZXRz
dGFjaygmYXR0cmlidXRlLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJjLCAhcmMpOworICAgIEFTU0VSVChzdGFja0Jhc2UpOworICAgIHJlZ2lzdGVycy5zdGFj
a1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6ZTsKKwor
ICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyaWJ1dGUpOworCisgICAgcmV0dXJuIDA7Cisj
ZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQogewotICAgIHB0aHJlYWRfdCBwdGhy
ZWFkSGFuZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJRCk7CiAgICAgewotICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBw
dGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwot
ICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxv
Y2tlcihtX211dGV4KTsKKyAgICAgICAgbV9kaWRFeGl0ID0gdHJ1ZTsKKyAgICB9CisgICAgZm9y
IChhdXRvJiBjYWxsYmFjayA6IG1fb25FeGl0Q2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrKCp0
aGlzKTsKK30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChwdGhyZWFkX3QgaGFuZGxlKQorewor
ICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRs
ZTsKKyAgICBpZiAoIW1faWQpIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZElk
ZW50aWZpZXI+IHByb3ZpZGVyIHsgMCB9OworICAgICAgICBtX2lkID0gKytwcm92aWRlcjsKKyNp
ZiBPUyhEQVJXSU4pCisgICAgICAgIG1fcGxhdGZvcm1UaHJlYWQgPSBwdGhyZWFkX21hY2hfdGhy
ZWFkX25wKGhhbmRsZSk7CisjZW5kaWYKICAgICB9Ci0gICAgaW50IGVyck5vID0gcHRocmVhZF9r
aWxsKHB0aHJlYWRIYW5kbGUsIHNpZ25hbE51bWJlcik7Ci0gICAgcmV0dXJuICFlcnJObzsgLy8g
QSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9CiAKIE11dGV4OjpNdXRleCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nV2luLmNwcAppbmRleCA1NGI0M2VmZWYzNWNkNjYzMmE3MDA4MTUwN2E1YjM3OTlkZWZiNmZi
Li4wMjAxYWMyMDlkYjlhMTQ1NTdhOGU2YThmYjE2YTk0ODJjZjU2MTUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1dpbi5jcHAKQEAgLTk0LDYgKzk0LDcgQEAKIAogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIK
ICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKKyNpbmNsdWRlICJUaHJlYWRI
b2xkZXJXaW4uaCIKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTA5LDYgKzExMCwxNCBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAorVGhyZWFkOjpUaHJlYWQoKQoreworfQorCitUaHJlYWQ6On5UaHJlYWQo
KQoreworfQorCiAvLyBNU19WQ19FWENFUFRJT04sIFRIUkVBRE5BTUVfSU5GTywgYW5kIHNldFRo
cmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9tIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29t
L2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4uCiBzdGF0aWMgY29uc3QgRFdPUkQgTVNfVkNf
RVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAtMTIxLDcgKzEzMCw3IEBAIHR5cGVkZWYgc3Ry
dWN0IHRhZ1RIUkVBRE5BTUVfSU5GTyB7CiB9IFRIUkVBRE5BTUVfSU5GTzsKICNwcmFnbWEgcGFj
ayhwb3ApCiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFy
KiBzelRocmVhZE5hbWUpCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRl
cm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiB7CiAjaWYgQ09NUElMRVIoTUlOR1cpCiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aHJlYWQgbmFtZSBzZXR0aW5nIHdpdGggTWluZ1cuCkBA
IC0xMjksNyArMTM4LDcgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNv
bnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbHNlCiAgICAgVEhSRUFETkFNRV9JTkZPIGluZm87
CiAgICAgaW5mby5kd1R5cGUgPSAweDEwMDA7Ci0gICAgaW5mby5zek5hbWUgPSBub3JtYWxpemVU
aHJlYWROYW1lKHN6VGhyZWFkTmFtZSk7CisgICAgaW5mby5zek5hbWUgPSBUaHJlYWQ6Om5vcm1h
bGl6ZVRocmVhZE5hbWUoc3pUaHJlYWROYW1lKTsKICAgICBpbmZvLmR3VGhyZWFkSUQgPSBHZXRD
dXJyZW50VGhyZWFkSWQoKTsKICAgICBpbmZvLmR3RmxhZ3MgPSAwOwogCkBAIC0xNDAsNzAgKzE0
OSwzOSBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciog
c3pUaHJlYWROYW1lKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgo
KQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0ZXg7Ci0gICAgcmV0dXJu
IG11dGV4OwotfQotCiB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogewotICAgIHN0YXRpYyBi
b29sIGlzSW5pdGlhbGl6ZWQ7Ci0gICAgCi0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9l
cyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9u
LAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCi0g
ICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAgIGluaXRp
YWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAg
aW5pdGlhbGl6ZURhdGVzKCk7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVL
ZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6
OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5v
dCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisg
ICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisg
ICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1i
ZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFs
aXplRGF0ZXMoKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4m
IHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8RFdPUkQs
IEhBTkRMRT4+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgdm9pZCBzdG9yZVRo
cmVhZEhhbmRsZUJ5SWRlbnRpZmllcihEV09SRCB0aHJlYWRJRCwgSEFORExFIHRocmVhZEhhbmRs
ZSkKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBw
YXJhbSkKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
QVNTRVJUKCF0aHJlYWRNYXAoKS5jb250YWlucyh0aHJlYWRJRCkpOwotICAgIHRocmVhZE1hcCgp
LmFkZCh0aHJlYWRJRCwgdGhyZWFkSGFuZGxlKTsKLX0KKyAgICAvLyBCYWxhbmNlZCBieSAubGVh
a1B0cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwuCisgICAgYXV0byBpbnZvY2F0aW9uID0g
c3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8VGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKIAotc3RhdGljIEhBTkRMRSB0aHJlYWRI
YW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQo
aWQpOwotfQorICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+dGhyZWFk
KTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRyOwogCi1zdGF0aWMgdm9pZCBjbGVh
clRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBN
dXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgQVNTRVJUKHRocmVhZE1h
cCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKLX0KLQotc3Rh
dGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQot
ewotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+IGludm9jYXRp
b24oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKICAgICBp
bnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5kYXRhKTsKLQogICAgIHJldHVybiAwOwog
fQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9u
IGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCitSZWZQdHI8
VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQs
IHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CisgICAgUmVmPFRocmVhZD4g
dGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAgICAgdW5zaWduZWQgdGhyZWFkSWRl
bnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IDA7Ci0gICAgYXV0
byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+
KGVudHJ5UG9pbnQsIGRhdGEpOworICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlx
dWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCB0aHJlYWQucHRyKCksIGRh
dGEpOwogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4o
X2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQo
KSwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKICAgICBpZiAoIXRocmVhZEhhbmRsZSkgewogI2lm
ICFIQVZFKEVSUk5PX0gpCkBAIC0yMTksNTUgKzE5NywxMTkgQEAgVGhyZWFkSWRlbnRpZmllciBj
cmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb24KICAgICBVTlVTRURfUEFSQU0obGVha2VkSW52b2NhdGlvbik7CiAKICAgICB0aHJlYWRJ
RCA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAg
IHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhh
bmRsZSk7CiAKLSAgICByZXR1cm4gdGhyZWFkSUQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhy
ZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12
b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBk
ZWx0YSkKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0eShpbnQgZGVsdGEpCiB7Ci0gICAgQVNT
RVJUKHRocmVhZElEKTsKLQotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVG
b3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXRocmVhZEhhbmRsZSkKLSAgICAgICAg
TE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW4g
YWN0aXZlIHRocmVhZCIsIHRocmVhZElEKTsKLQotICAgIFNldFRocmVhZFByaW9yaXR5KHRocmVh
ZEhhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1BTCArIGRlbHRhKTsKKyAgICBXb3JkTG9ja0hv
bGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0VGhyZWFkUHJpb3JpdHkobV9oYW5kbGUsIFRI
UkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7CiB9CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoraW50IFRocmVhZDo6d2FpdEZvckNv
bXBsZXRpb24oKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0gICAgCi0gICAgSEFORExFIHRo
cmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlm
ICghdGhyZWFkSGFuZGxlKQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUg
ZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVp
dCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9i
amVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRFKTsKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIHsK
KyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUg
PSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmds
ZU9iamVjdChoYW5kbGUsIElORklOSVRFKTsKICAgICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZB
SUxFRCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0
byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5
aW5nIHRvIHF1aXQiLCBtX2lkKTsKIAotICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0g
ICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICBXb3JkTG9j
a0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBK
b2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8gbm90
aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVh
biBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBp
dCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFzRXhp
dGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQog
Ci12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJl
YWQ6OmRldGFjaCgpCit7CisgICAgLy8gV2UgZm9sbG93IHRoZSBwdGhyZWFkIHNlbWFudGljczog
ZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNhbGxlZCwKKyAgICAvLyB3ZSBzdGlsbCBjYW4gcGVy
Zm9ybSBvcGVyYXRpb24gb250byB0aGUgdGhyZWFkLiBUbyBkbyBzbywgd2UgZG8KKyAgICAvLyBu
b3RoaW5nIGhlcmUgaW4gV2luZG93cy4gQ2xvc2VIYW5kbGUgd2lsbCBiZSBjYWxsZWQgYXV0b21h
dGljYWxseQorICAgIC8vIGJ5IHRoZSBGTFMgZGVzdHJ1Y3RvciBvbiB0aHJlYWQgdGVybWluYXRp
b24uCisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGlmICghaGFzRXhp
dGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFjaGVkKCk7Cit9CisKK2F1dG8gVGhyZWFkOjpz
dXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAg
V29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIERXT1JEIHJlc3VsdCA9IFN1c3Bl
bmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlmIChyZXN1bHQgIT0gKERXT1JEKS0xKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworfQorCisv
LyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVk
IGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgUmVzdW1lVGhyZWFkKG1faGFuZGxl
KTsKK30KKworc2l6ZV90IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiBy
ZWdpc3RlcnMpCit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIHJl
Z2lzdGVycy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05URVhUX0NPTlRST0w7
CisgICAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9ybVRocmVhZEhhbmRsZSwgJnJlZ2lzdGVycyk7
CisgICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJl
bnQoKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgVGhyZWFkSG9sZGVyKiBkYXRhID0g
VGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBk
YXRhLT50aHJlYWQoKTsKIAotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVG
b3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAodGhyZWFkSGFuZGxlKQotICAgICAgICBD
bG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRp
Zmllcih0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJ
ZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmPFRocmVhZD4gdGhyZWFk
ID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CisKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGJv
b2wgaXNTdWNjZXNzZnVsID0gRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdl
dEN1cnJlbnRUaHJlYWQoKSwgR2V0Q3VycmVudFByb2Nlc3MoKSwgJmhhbmRsZSwgMCwgRkFMU0Us
IERVUExJQ0FURV9TQU1FX0FDQ0VTUyk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVs
KTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNoKGhhbmRsZSwgY3VycmVudElEKCkpOworICAgIFRo
cmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOworICAgIHJldHVybiB0aHJlYWQu
Z2V0KCk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCitUaHJlYWRJZGVu
dGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhy
ZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVhZElkKCkpOwogfQogCit2b2lkIFRocmVhZDo6
ZGlkRXhpdCgpCit7CisgICAgeworICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7CisgICAgICAgIG1fZGlkRXhpdCA9IHRydWU7CisgICAgICAgIC8vIEl0IGlzIE9LIGJlY2F1
c2UgRkxTQWxsb2MncyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBldmVuIGJlZm9yZSB0aGVyZSBh
cmUgc29tZSBvcGVuIGhhbmRsZXMuCisgICAgICAgIC8vIFRoaXMgZWFzaWx5IGVuc3VyZXMgdGhh
dCBhbGwgdGhlIHRocmVhZCByZXNvdXJjZXMgYXJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkLgorICAg
ICAgICBpZiAobV9oYW5kbGUpCisgICAgICAgICAgICBDbG9zZUhhbmRsZShtX2hhbmRsZSk7Cisg
ICAgfQorICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX29uRXhpdENhbGxiYWNrKQorICAgICAg
ICBjYWxsYmFjaygqdGhpcyk7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2goSEFORExFIGhh
bmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBs
b2NrZXIobV9tdXRleCk7CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAgbV9pZCA9IHRocmVh
ZElEOworfQorCiBNdXRleDo6TXV0ZXgoKQogewogICAgIG1fbXV0ZXgubV9yZWN1cnNpb25Db3Vu
dCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNl
L1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRleCBiMmEwYTc5ZjRhYjVhYWMyODliMTY5ZjkyYmJj
MWE4MDU4NTJjYTMyLi45NzMwZmNmMGYwOTIxZmRlZDkwZjg5ZjEyOTBlNzc0OTBiNTM5NzFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1
cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9ucywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChz
aXoKIAogICAgICAgICAgICAgbV93b3JrZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFk
Q291bnQpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmtlcnMuYXBwZW5kKGNyZWF0ZVRocmVhZChT
dHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBpKS51dGY4KCkuZGF0YSgpLCBb
dGhpc10geworICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUo
U3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wgV29ya2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwg
W3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgpOwogICAgICAgICAgICAg
ICAgIH0pKTsKICAgICAgICAgICAgIH0KQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFdvcmtRdWV1
ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKHNpegogICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgICAgIERlcXVl
PGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4qPiBtX3F1ZXVlOwogCi0gICAgICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyPiBtX3dvcmtlcnM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhy
ZWFkPj4gbV93b3JrZXJzOwogICAgIH07CiAKICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVk
PFRocmVhZFBvb2w+IHRocmVhZFBvb2w7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3Jr
UXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCmluZGV4IGE0N2YyMWUyMGQzMWJj
OGJmNzMxOGY0MWI5NTdhYjM2NmMxOTE1MDMuLjc2MzQ1YzA2OTMxNjRmNjhjYTRiMWM2NjQ0ODRh
MjczY2M2ZThiZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0xMDMsNyArMTAzLDcgQEAgY2xhc3MgV29y
a1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uRGlzcGF0Y2hlciB7CiAKICAgICBIQU5ETEUg
bV90aW1lclF1ZXVlOwogI2VsaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkgfHwgVVNFKEdFTkVSSUNf
RVZFTlRfTE9PUCkKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFkOworICAg
IFJlZlB0cjxUaHJlYWQ+IG1fd29ya1F1ZXVlVGhyZWFkOwogICAgIExvY2sgbV9pbml0aWFsaXpl
UnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29w
Q29uZGl0aW9uOwogICAgIFJ1bkxvb3AqIG1fcnVuTG9vcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dv
cmtRdWV1ZUNvY29hLmNwcAppbmRleCAxYTcyMTlhZDI1OWVkNzU5NzJhNWE0NThjNWM0ODQ5N2Ez
ODhlNGQzLi41OWVlMWY4NWI0MzVjZTFhNzJmNTA1MGY0ZGY2MmVmY2ZiYmM4MmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCkBAIC00OSwxNSArNDksMTUgQEAgc3Rh
dGljIGRpc3BhdGNoX3Fvc19jbGFzc190IGRpc3BhdGNoUU9TQ2xhc3MoV29ya1F1ZXVlOjpRT1Mg
cW9zKQogewogICAgIHN3aXRjaCAocW9zKSB7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXNl
ckludGVyYWN0aXZlOgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1Nf
VVNFUl9JTlRFUkFDVElWRSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6
OlVzZXJJbml0aWF0ZWQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFT
U19VU0VSX0lOSVRJQVRFRCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpE
ZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfREVGQVVM
VCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RF
RkFVTFQpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlV0aWxpdHk6Ci0gICAgICAgIHJldHVy
biBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAgICAgICAgcmV0dXJuIFRo
cmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7CiAgICAgY2FzZSBXb3Jr
UXVldWU6OlFPUzo6QmFja2dyb3VuZDoKLSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3Mo
UU9TX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsKICAgICB9CiB9CiAjZWxzZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKaW5kZXggOTM0YTM4Y2JiZTY0YmJm
ZmFlYjRkMzdkZjFiOGQ5OTUyYjg4NTM0NC4uZGE4NzVkMWZhMDRjZWY1MjRiMGRjMTg2YjM5YTQ2
MmQ2ODA0NDYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVH
ZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMu
Y3BwCkBAIC0zNSw3ICszNSw3IEBACiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXpl
KGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1fd29ya1F1ZXVlVGhyZWFk
ID0gY3JlYXRlVGhyZWFkKG5hbWUsIFt0aGlzXSB7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBU
aHJlYWQ6OmNyZWF0ZShuYW1lLCBbdGhpc10gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAg
ICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTUxLDggKzUxLDggQEAg
dm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAgaWYgKG1fcnVuTG9vcCkK
ICAgICAgICAgbV9ydW5Mb29wLT5zdG9wKCk7CiAgICAgaWYgKG1fd29ya1F1ZXVlVGhyZWFkKSB7
Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVhZCk7Ci0gICAgICAgIG1fd29y
a1F1ZXVlVGhyZWFkID0gMDsKKyAgICAgICAgbV93b3JrUXVldWVUaHJlYWQtPmRldGFjaCgpOwor
ICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IG51bGxwdHI7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKaW5k
ZXggYjI5NDE5NDQ0ZTc0MjczNmE2N2RjMGMxYWE4NTFkZWMzYWU1ODdlNC4uZmZkNDAwODU1Yjgy
OTNhOGI1YTNjM2FlYjIzYWI3N2FhZjVhN2VlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
bGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcApAQCAtMTE5LDcgKzExOSwxMCBA
QCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIoaW50
IGZkLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKAogICAgIH0sIHRoaXMsIG51bGxwdHIpOwogICAgIGdf
c291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgbnVsbHB0cik7CiAjZWxzZQotICAgIG1fdGhy
ZWFkSUQgPSBjcmVhdGVUaHJlYWQoIldURjogTWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwgW3RoaXNd
IHsgcmVhZEFuZE5vdGlmeSgpOyB9CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV1RG
OiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLAorICAgICAgICBbdGhpc10geworICAgICAgICAgICAg
cmVhZEFuZE5vdGlmeSgpOworICAgICAgICB9KTsKICNlbmRpZgogfQogCkBAIC0xMjksNyArMTMy
LDcgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9sbGVyOjp+RXZlbnRGRFBvbGxl
cigpCiAjaWYgVVNFKEdMSUIpCiAgICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7
CiAjZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0
YWNoKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA4NzQ3NjQzOGNhZTY1YTYzODdkOTAx
YTc1Mjg4MTVlYzk1NDdmMjMyLi45Y2QzZGI0ZDFiYzE0YTM2MTczMjFhYjAwNWEwMTk2MjA1Mjc4
Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihJ
REJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBt
X2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyKGZpbGVIYW5kbGVyKQogewogICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jayk7Ci0gICAgbV90
aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRo
aXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJh
c2UgU2VydmVyIik7CiB9CiAKIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYg
ZmlsZUhhbmRsZXIpCkBAIC02Niw3ICs2Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhCiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7CiAKICAgICBMb2NrZXI8TG9jaz4gbG9ja2Vy
KG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFi
YXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2VydmVyOjpk
YXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQog
CiB2b2lkIElEQlNlcnZlcjo6cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVu
dCYgY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAyNTZjZDUwN2U2ZTZkN2Y2NTZlZWNlMGMxMTk4OTQ4
ZmQ5MjNkYTFkLi45MzRhMWQxNzQ1MjkwODQyOGEzYWU2ZTBlZDdlNTEwYTlhOWNhNmU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgY2xhc3MgSURCU2VydmVyIDogcHVibGljIFJlZkNvdW50
ZWQ8SURCU2VydmVyPiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPElEQkNvbm5lY3Rp
b25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRl
bnRpZmllciwgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1h
cDsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQdHI8
VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fZGF0YWJhc2VUaHJlYWRD
cmVhdGlvbkxvY2s7CiAgICAgTG9jayBtX21haW5UaHJlYWRSZXBseUxvY2s7CiAgICAgYm9vbCBt
X21haW5UaHJlYWRSZXBseVNjaGVkdWxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCmluZGV4IDI5MmYw
NWI4Y2Q1MDZlMjI5YWU2YjhiZDg2MjljMDk1NGQxODQ1OWIuLjdjZjdhZjhmZWEyZTFlNjdkNTIz
N2M4NzFhMDE1YjNjNDkwMGEyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIEFzeW5j
QXVkaW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2RlcigpCiB7CiAgICAgLy8gU3RhcnQgd29ya2Vy
IHRocmVhZC4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAg
ICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRy
eSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRl
KEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsK
IH0KIAogQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCkBAIC00Nyw4ICs0
Nyw4IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQogICAgIG1fcXVl
dWUua2lsbCgpOwogICAgIAogICAgIC8vIFN0b3AgdGhyZWFkLgotICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKG1fdGhyZWFkSUQpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFk
LT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9p
ZCBBc3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlv
RGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3Vj
Y2Vzc0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNr
KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3Ig
dW50aWwgd2UgaGF2ZSBtX3RocmVhZElEIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUg
cnVuIGxvb3AuCisgICAgICAgIC8vIFdhaXQgZm9yIHVudGlsIHdlIGhhdmUgbV90aHJlYWQgZXN0
YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4gbG9vcC4KICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKaW5kZXggYmI1YzVl
MzM3YjVlY2YxZjhlNjE3NTNhMjlmOGQwZjk3MTQxNTUzZC4uZjEyNTEwZDE5N2MzZGY5NmNjMDU2
ODU0NmNiYzNmYjQ2ZWFhYThhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBBc3lu
Y0F1ZGlvRGVjb2RlciB7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnkodm9pZCogdGhyZWFk
RGF0YSk7CiAgICAgdm9pZCBydW5Mb29wKCk7CiAKLSAgICBXVEY6OlRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBMb2NrIG1fdGhy
ZWFkQ3JlYXRpb25NdXRleDsKICAgICBNZXNzYWdlUXVldWU8RGVjb2RpbmdUYXNrPiBtX3F1ZXVl
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA1MDUyMzA0MTk3Y2RlZGRl
NDdmZGNiYjkxMmVjNDc0MDU1Nzk3NDI4Li5lN2Q1NjdkZmVhZDQ0MmMzOTZhZjBmNzA1MTA5NzNm
ZmUxNDhhYjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC00MSw3ICs0MSw3
IEBAIGNvbnN0IHNpemVfdCByZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsKIE9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCYg
Y29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKICAgICA6IEF1ZGlvRGVzdGluYXRp
b25Ob2RlKGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQogICAgICwgbV9yZW5k
ZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotICAgICwgbV9yZW5kZXJUaHJlYWQoMCkKKyAgICAsIG1f
cmVuZGVyVGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX3N0YXJ0ZWRSZW5kZXJpbmcoZmFsc2UpCiB7
CiAgICAgbV9yZW5kZXJCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKHJlbmRlclRhcmdldC0+bnVtYmVy
T2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSk7CkBAIC02Niw4ICs2Niw4IEBAIHZvaWQg
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAgICBtX3JlbmRlclRocmVhZCA9IDA7Cisg
ICAgICAgIG1fcmVuZGVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3Jl
bmRlclRocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxp
emUoKTsKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6
OnN0YXJ0UmVuZGVyaW5nKCkKICAgICBpZiAoIW1fc3RhcnRlZFJlbmRlcmluZykgewogICAgICAg
ICBtX3N0YXJ0ZWRSZW5kZXJpbmcgPSB0cnVlOwogICAgICAgICByZWYoKTsgLy8gU2VlIGNvcnJl
c3BvbmRpbmcgZGVyZWYoKSBjYWxsIGluIG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2goKS4KLSAgICAg
ICAgbV9yZW5kZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAg
ICAgIG1fcmVuZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoT2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRleCA3NTU2MDQ2NDcyMzJjNGJj
NTEzY2M5ZTM5ZGQ0NDVmMzhiNjJjZWY0Li41NjkwMTM4YjE2NTcwYjNmOWQyMzdmOWRkNGE4ZWEy
M2Q3M2ZmYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTYzLDcgKzYzLDcgQEAg
Y2xhc3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRp
b25Ob2RlIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwogICAgIAogICAgIC8v
IFJlbmRlcmluZyB0aHJlYWQuCi0gICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX3JlbmRl
clRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3JlbmRlclRocmVhZDsKICAgICBib29sIG1f
c3RhcnRlZFJlbmRlcmluZzsKICAgICBzdGF0aWMgdm9pZCBvZmZsaW5lUmVuZGVyRW50cnkodm9p
ZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBvZmZsaW5lUmVuZGVyKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IDg4NjlmNmJmMjIz
MjMyZTYzY2MzZmI1MmUxNmFlMWRiM2ViNDFiZTYuLjhjOTJkNmU1Mzk2YWRmMTJmYmRkNjhkN2Fj
OTdmOWVkMTlhZGMwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCkBAIC03NzAsOCArNzcwLDcgQEAgU2VjdXJpdHlPcmlnaW5EYXRhIERh
dGFiYXNlOjpzZWN1cml0eU9yaWdpbigpCiB7CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRh
dGE6OmZyb21TZWN1cml0eU9yaWdpbihtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQo
KSk7Ci0gICAgYXV0byYgdGhyZWFkID0gZGF0YWJhc2VUaHJlYWQoKTsKLSAgICBpZiAoY3VycmVu
dFRocmVhZCgpID09IHRocmVhZC5nZXRUaHJlYWRJRCgpKQorICAgIGlmIChjdXJyZW50VGhyZWFk
KCkgPT0gZGF0YWJhc2VUaHJlYWQoKS5nZXRUaHJlYWRJRCgpKQogICAgICAgICByZXR1cm4gU2Vj
dXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9kYXRhYmFzZVRocmVhZFNlY3Vy
aXR5T3JpZ2luLmdldCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRo
cmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhy
ZWFkLmNwcAppbmRleCAwZGRlNWY3MjY4ZWU2NDJjMDA0MzA1Y2VmZTM2YjFjOWU0NGI4N2QzLi5k
NzA4MTRmOWI1NWIyNDhmZDY0ZTFhZmY0M2UzNzY3NGYxNjkyZDRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAt
NjAsMTIgKzYwLDEyIEBAIGJvb2wgRGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElE
KQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVh
ZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0
aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRl
KERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0
YWJhc2UiKTsKIAotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsK
IH0KIAogdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciogY2xlYW51cFN5bmMpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9m
IGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGRhdGFiYXNlIHRocmVhZAogICAgIG1f
dHJhbnNhY3Rpb25Db29yZGluYXRvci0+c2h1dGRvd24oKTsKIAotICAgIExPRyhTdG9yYWdlQVBJ
LCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFz
ZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0
aGlzLCByZWZDb3VudCgpKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0
aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1
cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWQtPmlkKCksIHRoaXMsIHJlZkNvdW50KCkp
OwogCiAgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlcyB0aGF0IHdlIHJhbiB0cmFuc2FjdGlvbnMg
b24uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFueSB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsIG9wZW4s
IHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3ZSBkb24ndCBsZWF2ZSB0aGUgZGF0YWJhc2UgaW4g
YW4KICAgICAvLyBpbmNvbnNpc3RlbnQgb3IgbG9ja2VkIHN0YXRlLgpAQCAtMTI3LDcgKzEyNyw3
IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgb3BlbkRh
dGFiYXNlLT5wZXJmb3JtQ2xvc2UoKTsKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0
cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQot
ICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAK
ICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jID0gbV9jbGVhbnVwU3lu
YzsKIApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFi
YXNlT3BlbihEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fb3Bl
bkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3Ro
cmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkLT5pZCgpKTsK
ICAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAg
IG1fb3BlbkRhdGFiYXNlU2V0LmFkZCgmZGF0YWJhc2UpOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBA
IHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlJiBkYXRh
YmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0YWJhc2VTZXRNdXRleCk7CiAK
LSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChj
dXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPmlkKCkpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtp
bGxlZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1f
b3BlbkRhdGFiYXNlU2V0LnJlbW92ZSgmZGF0YWJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCmluZGV4IGVjMDQxZTMx
ODE3MjQ5MmVjYTZiY2VmZThmMWRhMjVlYzkyZWQyNmMuLmE1MjEyZGZiOGIxNzJjZTJmZjZhOTg4
OGRlMGE5ZGI5NzdhZTJkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgRGF0YWJh
c2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsK
IAogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlJik7CiAgICAgdm9pZCByZWNv
cmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYpOwotICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhy
ZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmllciBnZXRU
aHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAKICAg
ICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgeyBy
ZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAKQEAgLTY5LDcgKzY5LDcg
QEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0
YWJhc2VUaHJlYWQ+IHsKICAgICB2b2lkIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICBMb2NrIG1f
dGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAw
IH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgUmVmUHRy
PERhdGFiYXNlVGhyZWFkPiBtX3NlbGZSZWY7CiAKICAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VU
YXNrPiBtX3F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0ND
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5j
cHAKaW5kZXggNmY5ZmNhNjdmM2M0N2FkZGM4M2RlYzhjYjBkNWViOGNjYjQwZDc0My4uMTM5YWE5
OTFhMTZlYWQyMmY2OGY1MDFiZTdiOTQ1OTYzMjIxMzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCB2b2lkIEdD
Q29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiAKIHZvaWQg
R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5n
KGJvb2wgd2FpdFVudGlsRG9uZSkKIHsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0g
Y3JlYXRlVGhyZWFkKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xsZXIiKTsKKyAgICBS
ZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShjb2xsZWN0LCAwLCAiV2ViQ29y
ZTogR0NDb250cm9sbGVyIik7CiAKICAgICBpZiAod2FpdFVudGlsRG9uZSkgewotICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgICAgIHRocmVhZC0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRldGFjaFRocmVh
ZCh0aHJlYWRJRCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xs
ZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCmluZGV4IDE2OGU0
ZTI3Nzk1ZDQyNWY0MDRmMTc1YzliY2JhOTNmNzM2ODA3NGMuLjU1YzdjYjAyMzk4NTk5Yzk3MWU2
YTM3YTBmOWE3MjQ4NDg0MmU2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
QXN5bmNGaWxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmls
ZVN0cmVhbS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVh
ZChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogCiAgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0ZUZpbGVU
aHJlYWRPbmNlLCBbXSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5bmNGaWxl
U3RyZWFtIiwgW10geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiV2ViQ29yZTogQXN5bmNGaWxl
U3RyZWFtIiwgW10gewogICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgIEF1
dG9kcmFpbmVkUG9vbCBwb29sOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlLmNwcAppbmRleCA0Y2RjZmFhZDZlODMyYTM5YTVjMzUyNjU4MDU4NTA4NmIzZDlmNzJm
Li5hNDhiZmY2MDUxZjBmMTc0ZGExOGQyZmY5ZDM3YWIzYmM2Njg0ZmExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNk
ZWZpbmUgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpIEFTU0VSVCghbV9zeW5jVGhyZWFkUnVubmlu
ZyB8fCAhSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAvLyBGb3IgbWV0aG9kcyB0aGF0IGFyZSBt
ZWFudCB0byBzdXBwb3J0IHRoZSBzeW5jIHRocmVhZCBPTkxZCi0jZGVmaW5lIElTX0lDT05fU1lO
Q19USFJFQUQoKSAobV9zeW5jVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSkKKyNkZWZpbmUgSVNf
SUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5bmNUaHJlYWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgp
KQogI2RlZmluZSBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpIEFTU0VSVChJU19JQ09OX1NZTkNf
VEhSRUFEKCkpCiAKICNpZiBQTEFURk9STShHVEspCkBAIC0xNDEsNyArMTQxLDcgQEAgYm9vbCBJ
Y29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpCiAgICAgLy8gTG9jayBoZXJlIGFzIHdlbGwgYXMgZmlyc3QgdGhpbmcgaW4gdGhl
IHRocmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNuJ3QgYWN0dWFsbHkgY29tbWVuY2UgdW50aWwgdGhl
IGNyZWF0ZVRocmVhZCgpIGNhbGwgCiAgICAgLy8gY29tcGxldGVzIGFuZCBtX3N5bmNUaHJlYWRS
dW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3luY0xvY2subG9jaygpOwotICAgIG1fc3lu
Y1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNUaHJl
YWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIpOworICAgIG1fc3luY1RocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0
YXJ0LCB0aGlzLCAiV2ViQ29yZTogSWNvbkRhdGFiYXNlIik7CiAgICAgbV9zeW5jVGhyZWFkUnVu
bmluZyA9IG1fc3luY1RocmVhZDsKICAgICBtX3N5bmNMb2NrLnVubG9jaygpOwogICAgIGlmICgh
bV9zeW5jVGhyZWFkKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpjbG9z
ZSgpCiAgICAgICAgIHdha2VTeW5jVGhyZWFkKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXYWl0
IGZvciB0aGUgc3luYyB0aHJlYWQgdG8gdGVybWluYXRlCi0gICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKG1fc3luY1RocmVhZCk7CisgICAgICAgIG1fc3luY1RocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICB9CiAKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gZmFsc2U7ICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAppbmRleCAwNjFhZjRh
MTI1NTc3MWRlMTFhMzJmNTY4M2MwZWZkYTU5MjkzYjlkLi44NjQwOTU1NDc1MzNmZDg5MGYwM2Fm
ZTkyYmIwNmY2MDg3ZWU3MzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0
YWJhc2UuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIEljb25EYXRhYmFzZSBmaW5hbCA6IHB1
YmxpYyBJY29uRGF0YWJhc2VCYXNlIHsKICAgICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7CiAgICAg
CiAgICAgVGltZXIgbV9zeW5jVGltZXI7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3N5bmNUaHJl
YWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9zeW5jVGhyZWFkOwogICAgIGJvb2wgbV9zeW5jVGhy
ZWFkUnVubmluZzsKICAgICAKICAgICBIYXNoU2V0PFJlZlB0cjxEb2N1bWVudExvYWRlcj4+IG1f
bG9hZGVyc1BlbmRpbmdEZWNpc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VUaHJlYWQuY3BwCmluZGV4IDkxMjAwYzM0NWY0NTVmOTZkNDk0YmZkMmFkNzAzZjI4YzVjNjI5
ZDEuLmQ5YjZmNzJmYTM2ZmE3MDBjODI2ZjNjOTdkNmJhYTAyZDQyZThiNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcApAQCAtOTYsMTEgKzk2LDExIEBA
IHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6bm90aWZ5T2JzZXJ2ZXJzKFJlc291cmNlVXNhZ2VE
YXRhJiYgZGF0YSkKIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5l
ZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdm0gPSAmY29tbW9uVk0oKTsKLSAgICBtX3RocmVh
ZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3Jl
OiBSZXNvdXJjZVVzYWdlIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRD
YWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0KIAogdm9pZCBSZXNv
dXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiByZXNvdXJjZVVzYWdlVGhyZWFk
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAppbmRleCAxOGExZTY3
NTQzZDIyMDljMTc5NTc0NzM2NjIyYTc4YjM4NGJiOGZjLi5lZmRlMjdlZmU2YjBhYzQ1NDY0ZGU4
OTFjNjdjZTc5ZjljZjJlMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291
cmNlVXNhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VU
aHJlYWQuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBSZXNvdXJjZVVzYWdlVGhyZWFkIHsKICAg
ICB2b2lkIHRocmVhZEJvZHkoKTsKICAgICB2b2lkIHBsYXRmb3JtVGhyZWFkQm9keShKU0M6OlZN
KiwgUmVzb3VyY2VVc2FnZURhdGEmKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJ
ZGVudGlmaWVyIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9
OwogICAgIExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBIYXNo
TWFwPHZvaWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJik+
PiBtX29ic2VydmVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUaHJlYWQuY3BwCmluZGV4IDczMGMwYTZiZDkzZjQ1NzhkMWVkYmY5YWNlMWNkODY1NjZl
NmM5ODguLmQyMDc4NDA1NjBkZGY5MDU5MGEwZGFkZDI3MzA4NGM5MWM5ZmIxMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAt
MzUsMTQgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcm9sbGluZ1RocmVhZDo6
U2Nyb2xsaW5nVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgIDogbV90
aHJlYWQobnVsbHB0cikKIHsKIH0KIAogYm9vbCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRo
cmVhZCgpCiB7Ci0gICAgYXV0byB0aHJlYWRJZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpz
aW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZpZXI7Ci0gICAgcmV0dXJuIHRocmVhZElkZW50aWZp
ZXIgJiYgY3VycmVudFRocmVhZCgpID09IHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRo
cmVhZD4gdGhyZWFkID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZDsKKyAg
ICByZXR1cm4gdGhyZWFkICYmIHRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7CiB9CiAK
IHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0
aW9uKQpAQCAtNzQsMTQgKzc0LDE0IEBAIFNjcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFk
OjpzaW5nbGV0b24oKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVk
ZWQoKQogewotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGluaXRpYWxp
emUgdGhlIHJ1biBsb29wLgogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBs
b2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKLSAgICAgICAgbV90aHJlYWRJZGVudGlm
aWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xs
aW5nIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ss
IHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxv
Y2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFkUnVuTG9vcDsgfSk7CkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiAKIHZvaWQgU2Ny
b2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpCiB7Ci0g
ICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKKyAgICBXVEY6OlRo
cmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCk7CiAgICAgc3RhdGljX2Nh
c3Q8U2Nyb2xsaW5nVGhyZWFkKj4oc2Nyb2xsaW5nVGhyZWFkKS0+dGhyZWFkQm9keSgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmlu
ZGV4IGRlMDYyZDc3YWMwMWRmOWQyYTA5ODYwZWJlNmI4ZTlmZDNjZmY1YzAuLmQ4ODkyZjA1YmU2
NDM3ZDRhYWNjMGE3NTFhN2NhN2U5M2JlZTBkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIFNj
cm9sbGluZ1RocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2soKTsK
ICNlbmRpZgogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7CisgICAg
UmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVu
TG9vcENvbmRpdGlvblZhcmlhYmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11dGV4
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxv
YWRlci5jcHAKaW5kZXggZjcxMzMzYzVhMzdhOTk4OTY0ZjNhNzQxYzczMTUyZTk1MTQ2NmNmNi4u
ZGRiZTNiYTk4MGU0NTBhNDk0Y2QwNjQ4ZjQxYjVlMzZhZmVlYjVmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCkBAIC02
NCw3ICs2NCw3IEBAIFBhc3NSZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVyPiBIUlRGRGF0YWJhc2VM
b2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hyb25vdXNseUlmCiB9CiAKIEhSVEZEYXRhYmFzZUxv
YWRlcjo6SFJURkRhdGFiYXNlTG9hZGVyKGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2RhdGFi
YXNlTG9hZGVyVGhyZWFkKDApCisgICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKG51bGxwdHIp
CiAgICAgLCBtX2RhdGFiYXNlU2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2Fk
ZXI6OmxvYWRBc3luY2hyb25vdXNseSgpCiAgICAgCiAgICAgaWYgKCFtX2hydGZEYXRhYmFzZS5n
ZXQoKSAmJiAhbV9kYXRhYmFzZUxvYWRlclRocmVhZCkgewogICAgICAgICAvLyBTdGFydCB0aGUg
YXN5bmNocm9ub3VzIGRhdGFiYXNlIGxvYWRpbmcgcHJvY2Vzcy4KLSAgICAgICAgbV9kYXRhYmFz
ZUxvYWRlclRocmVhZCA9IGNyZWF0ZVRocmVhZChkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlzLCAi
SFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNl
IGxvYWRlciIpOwogICAgIH0KIH0KIApAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgSFJURkRhdGFi
YXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbigpCiAgICAgCiAgICAgLy8g
d2FpdEZvclRocmVhZENvbXBsZXRpb24oKSBzaG91bGQgbm90IGJlIGNhbGxlZCB0d2ljZSBmb3Ig
dGhlIHNhbWUgdGhyZWFkLgogICAgIGlmIChtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKQotICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKLSAgICBt
X2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVh
ZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gbnVs
bHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAppbmRleCBjODY5ZDEzN2ExZGIy
ZjUyNDk4ZDBlMWI2NWQ1ODdlNmM4MTliMzgxLi4zYWQyNTFmMjE5OTA5ZjRiYzY0NTRkMDEzMjAx
YjZhN2NhNzAyNjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGRGF0YWJhc2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGRGF0YWJhc2VMb2FkZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBIUlRGRGF0YWJhc2VM
b2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxIUlRGRGF0YWJhc2VMb2FkZXI+IHsKIAogICAgIC8v
IEhvbGRpbmcgYSBtX3RocmVhZExvY2sgaXMgcmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgbV9kYXRh
YmFzZUxvYWRlclRocmVhZC4KICAgICBMb2NrIG1fdGhyZWFkTG9jazsKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9kYXRh
YmFzZUxvYWRlclRocmVhZDsKIAogICAgIGZsb2F0IG1fZGF0YWJhc2VTYW1wbGVSYXRlOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3Bw
CmluZGV4IDk2ZjMzMDgyODA3OWE3OWFkNjQ4MjBkMDcyMWM1OWM1ZWExNmZkYjEuLjIxYmU5OTZl
ZjM3ZTUzZGI3MDMxMDAxOTYyN2MwYzQwZDJiMjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBA
IFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJl
c3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgLy8gU3RhcnQgdXAgYmFja2dyb3VuZCB0aHJl
YWQKICAgICAvLyBGSVhNRTogd291bGQgYmUgYmV0dGVyIHRvIHVwIHRoZSB0aHJlYWQgcHJpb3Jp
dHkgaGVyZS4gIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZWFsLXRpbWUsIGJ1dCBoaWdoZXIgdGhh
biB0aGUgZGVmYXVsdC4uLgogICAgIGlmICh0aGlzLT51c2VCYWNrZ3JvdW5kVGhyZWFkcygpICYm
IG1fYmFja2dyb3VuZFN0YWdlcy5zaXplKCkgPiAwKQotICAgICAgICBtX2JhY2tncm91bmRUaHJl
YWQgPSBjcmVhdGVUaHJlYWQoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAi
Y29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhy
ZWFkID0gVGhyZWFkOjpjcmVhdGUoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlz
LCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKIH0KIAogUmV2ZXJiQ29udm9sdmVy
Ojp+UmV2ZXJiQ29udm9sdmVyKCkKQEAgLTE0Niw3ICsxNDYsNyBAQCBSZXZlcmJDb252b2x2ZXI6
On5SZXZlcmJDb252b2x2ZXIoKQogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgICAgIH0KIAotICAgICAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbihtX2JhY2tncm91bmRUaHJlYWQpOworICAgICAgICBtX2JhY2tncm91bmRU
aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4IDZiYWViN2NjZTI5ODk2
Yzk4OTYzNTEyZjQxYjQzYTJmMTI4ODU0MWMuLjA1OTYzMzY3YWUyODM0OTQ4NzkwYmE3Y2NiNzIw
NjBlYzU5ODEwNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Jl
dmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlci5oCkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlciB7CiAK
ICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBhbmQgc3luY2hyb25pemF0aW9uCiAgICAgYm9vbCBt
X3VzZUJhY2tncm91bmRUaHJlYWRzOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9iYWNrZ3JvdW5k
VGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29s
IG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBtX21vcmVJbnB1dEJ1ZmZlcmVkOwogICAgIG11dGFi
bGUgTG9jayBtX2JhY2tncm91bmRUaHJlYWRNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRl
ckdTdHJlYW1lci5jcHAKaW5kZXggNmNkOGJkN2Y4MWJmZjIyMjdmZTE0ZmJjYTBmYmZkMDU1ZDA5
YzU3MS4uMWYyNWU4ZTU0ZTllZTg1ZmEwY2NhNmEzMWI5MmUxMTFlNmRmMGNhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRl
ckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKQEAgLTM3MCwyMCArMzcwLDIwIEBAIFBh
c3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBs
ZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9t
QXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2Ft
cGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8g
dGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUs
IGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwg
bWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxl
UmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9
KTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53
YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGFzc1Jl
ZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQq
IGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUp
CiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElE
ID0gY3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBk
YXRhU2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNp
emUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlv
RmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9u
byk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAg
IHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMWM1
YzMwZjM3N2E0MmJlMDAxNzcxNjUxZTg3ZjcwNDNhNWQ2NWM5MC4uMjY0NjZmNTNiNDgyMThkMzM3
YTVhODk0ZjFkYjcyOGRmNGM0N2M4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRsZVN0
cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIFN0cmVh
bQogICAgICAgICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKICAg
ICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAKLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZCB7IDAgfTsKKyAgICAgICAgUmVmUHRyPFRo
cmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgICAgIExvY2sgbV9pbml0aWFsaXplUnVu
TG9vcENvbmRpdGlvbk11dGV4OwogICAgICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9v
cENvbmRpdGlvbjsKICAgICAgICAgUnVuTG9vcCogbV9ydW5Mb29wIHsgbnVsbHB0ciB9OwpAQCAt
MTA3Nyw3ICsxMDc3LDcgQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogICAgIDogU3RyZWFtaW5n
Q2xpZW50KHNyYykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29w
Q29uZGl0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKCJSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KV0g
eworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIlJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRp
b25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwpA
QCAtMTExMyw4ICsxMTEzLDggQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogUmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCgpCiB7CiAg
ICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3RocmVhZCk7Ci0gICAg
ICAgIG1fdGhyZWFkID0gMDsKKyAgICAgICAgbV90aHJlYWQtPmRldGFjaCgpOworICAgICAgICBt
X3RocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKG1fcnVuTG9vcCA9PSAmUnVuTG9v
cDo6Y3VycmVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCmluZGV4IDQ2Yjg5OTRhODQxZWY3MWVhMjc5Y2U3N2Ni
YzhmYjQzYzI5ZjBhNjIuLmZmYmZkYTliODkzNDgzNTQ5MGM5YTQwYmExZjQ4MzM2ZTQ3NjBjOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVu
TG9vcENGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRl
clJ1bkxvb3BDRi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxv
b3AoKQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5Mb29w
TXV0ZXgpOwogCiAgICAgaWYgKCFsb2FkZXJSdW5Mb29wT2JqZWN0KSB7Ci0gICAgICAgIGNyZWF0
ZVRocmVhZChydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7
CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKHJ1bkxvYWRlclRocmVhZCwgMCwgIldlYkNvcmU6IENG
TmV0d29yayBMb2FkZXIiKTsKIAogICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFi
bGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuY3BwCmluZGV4IDQ0MDhjZDE5ODcwNWJhODZjYzhjMTk4NmZiM2UyY2FkZTc5NmRjYzYu
LmYxMDU3MTVlZDhkODc5MzczYjYzMzFjYjI2ZTA4MmMzZTFhYjhiMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBA
IC05NCwxMCArOTQsMTAgQEAgaW50IEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdEb3du
bG9hZENvdW50KCkgY29uc3QKIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJlYWRJ
Zk5lZWRlZCgpCiB7CiAgICAgaWYgKCFydW5UaHJlYWQoKSkgewotICAgICAgICBpZiAobV90aHJl
YWRJZCkKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOwor
ICAgICAgICBpZiAobV90aHJlYWQpCisgICAgICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKICAgICAgICAgc2V0UnVuVGhyZWFkKHRydWUpOwotICAgICAgICBtX3RocmVhZElk
ID0gY3JlYXRlVGhyZWFkKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQiKTsK
KyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3dubG9hZFRocmVhZCwgdGhpcywg
ImRvd25sb2FkVGhyZWFkIik7CiAgICAgfQogfQogCkBAIC0xMDUsOSArMTA1LDkgQEAgdm9pZCBD
dXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKIHsKICAgICBzZXRSdW5UaHJlYWQoZmFs
c2UpOwogCi0gICAgaWYgKG1fdGhyZWFkSWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV90aHJlYWRJZCk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSAwOworICAgIGlmIChtX3Ro
cmVhZCkgeworICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAg
bV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCmluZGV4IDAyY2U3MzFiZDEwYTgw
MTliN2ViZTFmYWM1MmI0NWU0MDkyNTYyMzEuLmY2YmJjNzdmNGQzY2UwYjk2ODdkMWQ4ZmNhNjA5
MTU4N2M5YWU0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgQ3VybERvd25sb2Fk
TWFuYWdlciB7CiAKICAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVhZCh2b2lkKiBkYXRhKTsK
IAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBt
X3RocmVhZDsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7CiAgICAgVmVjdG9yPENVUkwq
PiBtX3BlbmRpbmdIYW5kbGVMaXN0OwogICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5kbGVM
aXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKaW5kZXggNWY5ZTA5NTQwNDcxN2QzMGJkODk5
NDFlNWYyNTJmMTdiMGE4NjdiOS4uNjhlMjFmNDc0NDUxYWMzODc1MmI5YmM4OTQzYzM1ZDIzYjY5
NjliYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCkBAIC05Miw3ICs5Miw3IEBAIGNsYXNz
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsKICAg
ICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgfTsKIAotICAgIFRocmVhZElkZW50aWZpZXIg
bV93b3JrZXJUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrZXJUaHJlYWQg
eyBudWxscHRyIH07CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFsc2Ug
fTsKICAgICBMb2NrIG1fbXV0ZXhTZW5kOwogICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbEN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAppbmRleCAxZTM3OWQxYjAwZDA5NTVmYzJk
YTAwYmUzZjk2Zjk5MmE5MWI5NDNmLi5lY2I5ZjU0YjY1YTMzNTI0ZTNhMzU2YTNiYzEzZDBlMmY2
ZjZhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKQEAgLTE5OSw3
ICsxOTksNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIAog
ICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVmKCkuCiAKLSAgICBtX3dv
cmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7Cisg
ICAgbV93b3JrZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV2ViU29ja2V0IHRocmVhZCIsIFt0
aGlzXSB7CiAKICAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTI0OSw4ICsy
NDksOCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOwotICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKLSAgICBtX3dvcmtlclRocmVhZCA9IDA7CisgICAg
bV93b3JrZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV93b3JrZXJUaHJlYWQg
PSBudWxscHRyOwogICAgIGRlcmVmKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmNwcAppbmRleCA3YWQ1YjU3OTEzYTE2NzJkZjkxOTZlOWViMDEzM2UyM2UyMzI5ODVk
Li5kZWU2Y2U2ZDY3M2Q3NmI0MWYyNzQ1NDA0ZmIwNzlmMjE5NjUzYjYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFdvcmtlclRocmVh
ZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyCiB9CiAKIFdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVSTCYg
c2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJM
b2FkZXJQcm94eSwgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5LCBX
b3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lSZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycywg
Ym9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0IFNl
Y3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwgSURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGNvbm5lY3Rpb25Qcm94eSwgU29ja2V0UHJvdmlkZXIq
IHNvY2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRpbWVGbGFncyBydW50aW1lRmxhZ3MpCi0gICAgOiBt
X3RocmVhZElEKDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICwgbV93b3JrZXJMb2Fk
ZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAsIG1fd29ya2VyUmVwb3J0aW5nUHJveHko
d29ya2VyUmVwb3J0aW5nUHJveHkpCiAgICAgLCBtX3J1bnRpbWVGbGFncyhydW50aW1lRmxhZ3Mp
CkBAIC0xMzMsMTUgKzEzMywxNSBAQCBXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQogCiBi
b29sIFdvcmtlclRocmVhZDo6c3RhcnQoKQogewotICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMg
bmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0
aGUgdGhyZWFkIHN0YXJ0cy4KKyAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0
byBlbnN1cmUgdGhhdCBtX3RocmVhZCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3Rh
cnRzLgogICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAg
aWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJl
YWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6
IFdvcmtlciIpOwogCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFk
OwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhyZWFk
KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQog
ICAgIGdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQoKSk7
CiAjZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBtX3RocmVhZElEOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IHByb3RlY3RvciA9IG1fdGhyZWFkOwogCiAgICAgQVNTRVJUKG1f
d29ya2VyR2xvYmFsU2NvcGUtPmhhc09uZVJlZigpKTsKIApAQCAtMjA1LDcgKzIwNSw3IEBAIHZv
aWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIHRocmVhZEdsb2JhbERhdGEoKS5k
ZXN0cm95KCk7CiAKICAgICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBkZXN0
cm95ZWQgZnJvbSBub3RpZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlzIi4K
LSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHByb3RlY3Rvci0+ZGV0YWNoKCk7CiB9
CiAKIHZvaWQgV29ya2VyVGhyZWFkOjpzdGFydFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmggYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCmluZGV4IDA3YWQzY2U3ODRmOTE5ZjcwYzQ1Njgx
Yjk1NGMwMDk5OTZmNTU3ZjIuLmY4MDllZTY2NzI3ZWUxMzlkYzRmMTlkMmNiNjFiMjI2NWU0ZWE0
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApAQCAtNjAsNyArNjAsNyBA
QCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsK
ICAgICBib29sIHN0YXJ0KCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJRDsgfQorICAgIFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZCA/IG1fdGhyZWFkLT5p
ZCgpIDogMDsgfQogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AoKSB7IHJldHVybiBtX3J1bkxv
b3A7IH0KICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHkoKSBjb25zdCB7
IHJldHVybiBtX3dvcmtlckxvYWRlclByb3h5OyB9CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkm
IHdvcmtlclJlcG9ydGluZ1Byb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRpbmdQ
cm94eTsgfQpAQCAtOTgsNyArOTgsNyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVm
Q291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRTdGFy
dCh2b2lkKik7CiAgICAgdm9pZCB3b3JrZXJUaHJlYWQoKTsKIAotICAgIFRocmVhZElkZW50aWZp
ZXIgbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBXb3JrZXJS
dW5Mb29wIG1fcnVuTG9vcDsKICAgICBXb3JrZXJMb2FkZXJQcm94eSYgbV93b3JrZXJMb2FkZXJQ
cm94eTsKICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgbV93b3JrZXJSZXBvcnRpbmdQcm94eTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAppbmRleCBiYjY2ZmNlYTdlNTI4
YmMyN2Y2MzNhM2U1Mjg3OGI1MDFlZjBlMTg3Li4zNTc2Nzk0NmFkZTM3MmE0Nzk0NWY4NWQzZjg5
NThiNTI1NGFiZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRo
cmVhZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCkBA
IC00MCw3ICs0MCw3IEBAIHN0YXRpYyBIYXNoU2V0PFN0b3JhZ2VUaHJlYWQqPiYgYWN0aXZlU3Rv
cmFnZVRocmVhZHMoKQogfQogCiBTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKLSAgICA6
IG1fdGhyZWFkSUQoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIH0KQEAgLTQ4LDE2ICs0OCwxNiBAQCBTdG9yYWdlVGhyZWFkOjpTdG9y
YWdlVGhyZWFkKCkKIFN0b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgQVNTRVJU
KCFtX3RocmVhZCk7CiB9CiAKIGJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3Ro
cmVhZElEID0gY3JlYXRlVGhyZWFkKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxs
YmFjaywgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOworICAgIGlmICghbV90aHJlYWQp
CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoU3RvcmFnZVRocmVhZDo6dGhyZWFk
RW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CiAgICAg
YWN0aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7
CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVu
dHJ5UG9pbnRDYWxsYmFjayh2b2lkKiB0aHJlYWQpCkBAIC03OCwyNSArNzgsMjUgQEAgdm9pZCBT
dG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKIHZvaWQgU3RvcmFnZVRocmVhZDo6ZGlz
cGF0Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsK
KyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIG1fcXVldWUu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFdURk1vdmUoZnVuY3Rp
b24pKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3Ro
cmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAg
IGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwogICAgIC8vIEV2ZW4gaW4gd2Vp
cmQsIGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhyZWFk
IHRvIHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgaWYgKCFtX3RocmVhZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxG
dW5jdGlvbjx2b2lkICgpPj4oW3RoaXNdIHsKICAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwog
ICAgIH0pKTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKKyAgICBt
X3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQo
KSk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2
b2lkIFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9T
dG9yYWdlVGhyZWFkLmgKaW5kZXggOTU2NGI4YWEwNmU1MjQzZTMwZTQ2N2M1ZmJmZTJjZGFkYjI0
MGM1Ni4uOGNmMWIzZDRhZGM1YTMwNmE3N2VjNzdjOWMzMjY2NjE2ODdiZWM1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFN0b3Jh
Z2VUaHJlYWQgewogICAgIC8vIEJhY2tncm91bmQgdGhyZWFkIHBhcnQgb2YgdGhlIHRlcm1pbmF0
ZSBwcm9jZWR1cmUuCiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAg
TWVzc2FnZVF1ZXVlPEZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVlOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNiODVm
MjJmZmFlMDFlMjhhYWI5OTgxNjY5OGFkYWQ3YTM4NDNjNWYuLmIwNGFjYzhjMzFjNWVjYTgyYTUx
NzQxNjY3ZGI3MGUwNTNmMWQyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmJgogewogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFt
ZXRlcnMpOwogCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7Cisg
ICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKIAogICAg
IG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0ZXJzLnNob3VsZFN1cHBy
ZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIG1fbG9hZFRocm90dGxlTGF0ZW5jeSA9IHBh
cmFtZXRlcnMubG9hZFRocm90dGxlTGF0ZW5jeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291
cC5jcHAKaW5kZXggZWY3YmE4OTk4MjAyMzI1ODllNzM5MWYyN2ZjZDNkNmUxNjlmNjg5NC4uZmEw
MzBmYjNhMmEwZjgyZDZhMjQ1YmY4NTZiMzZhYTI3MzIwMDcxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
SU9DaGFubmVsU291cC5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVh
ZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1
ZSwgcwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUmVmUHRyPElPQ2hhbm5l
bD4gY2hhbm5lbCh0aGlzKTsKLSAgICBkZXRhY2hUaHJlYWQoY3JlYXRlVGhyZWFkKCJJT0NoYW5u
ZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0g
eworICAgIFRocmVhZDo6Y3JlYXRlKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNp
emUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0gewogICAgICAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUpOwogICAgICAgICB1aW50
OF90KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2MoYnVmZmVy
U2l6ZSkpOwogICAgICAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9wdEdS
ZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwgYnVm
ZmVyRGF0YSwgZmFzdEZyZWUpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIElPQ2hhbm5lbDo6
cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBx
dWV1ZSwgcwogICAgICAgICAgICAgRGF0YSBkYXRhID0geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEsIDApOwogICAgICAgICB9LCBxdWV1ZSk7
Ci0gICAgfSkpOworICAgIH0pLT5kZXRhY2goKTsKIH0KIAogc3RydWN0IFdyaXRlQXN5bmNEYXRh
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBiYWY1
MzA2NmJlMjAwOWUyNmRiZWI3YWM4ODhjNDA1ZTNiZGJhNmZmLi5iMzg3YjZiNDQ1ZTM3ZDNkYTNl
OGE3MmM3YzBiYTM1Yzg2M2YyNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uY3BwCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNz
SW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBtZXNzYWdlKQogCiAjaWYg
SEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpICYmIG1f
c2hvdWxkQm9vc3RNYWluVGhyZWFkT25TeW5jTWVzc2FnZSkgewotICAgICAgICBwdGhyZWFkX292
ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFzc19zdGFydF9ucCht
X21haW5UaHJlYWQsIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUp
LCAwKTsKKyAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9vdmVy
cmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBUaHJlYWQ6OmFkanVzdGVkUU9T
Q2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAwKTsKICAgICAgICAgbWVzc2FnZS0+
c2V0UU9TQ2xhc3NPdmVycmlkZShvdmVycmlkZSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2Vydmlj
ZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9p
bnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAppbmRleCAz
YmI3YzZkNDdkNDNjNjk3NmIwM2NmZjc3MzY0NGY0ODc4NDkzZDQxLi5mMjNkYjQzYzAyMzRkYzdj
ODEwNDk1M2YwNGVmODc5NTJmOWI4NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2lu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9Y
UENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lk
IFhQQ1NlcnZpY2VJbml0aWFsaXplcihPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiBjb25u
ZWN0aW9uLCB4cGNfb2JqZWN0XwogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAocGFy
YW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5jb250YWlucyhBU0NJSUxpdGVyYWwoImFs
d2F5cy1ydW5zLWF0LWJhY2tncm91bmQtcHJpb3JpdHkiKSkpCi0gICAgICAgIHNldEdsb2JhbE1h
eFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAgICAgICAgVGhyZWFkOjpzZXRHbG9iYWxN
YXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7CiAjZW5kaWYKIAogICAgIFhQQ1NlcnZpY2VU
eXBlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcApp
bmRleCAwNjA4YWI3MmY5OTI0OGVmMjRjZDJkNTI0NWVlNTMzM2EwMGQ5ZDBkLi40OGQxMDY5Nzc2
NWE5NWE4YjM1ODcyMzBlMTAyZDgwM2FkNThjMGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcApAQCAtMjQ4
LDcgKzI0OCw3IEBAIE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9y
KCkKICAgICBpZiAobV9ldmVudEZEID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoIk1lbW9yeVByZXNz
dXJlTW9uaXRvciIsIFt0aGlzXSB7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7CiAgICAgICAgIGRvdWJs
ZSBwb2xsSW50ZXJ2YWwgPSBzX21heFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kczsKICAgICAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIHNsZWVwKHBvbGxJbnRlcnZhbCk7CkBAIC0yNzEs
NyArMjcxLDcgQEAgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3Io
KQogICAgICAgICB9CiAgICAgICAgIGNsb3NlKG1fZXZlbnRGRCk7CiAgICAgfSk7Ci0gICAgZGV0
YWNoVGhyZWFkKHRocmVhZElkZW50aWZpZXIpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAK
IElQQzo6QXR0YWNobWVudCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6OmNyZWF0ZUhhbmRsZSgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCAxZDUwMjE1
YTIwMzExNGI0ZjIzZDVkNThmMmQyNTNmZjc5MDU2ZDVlLi40Zjk2YWJiZjBkYzk3MmY4YjljMmM2
Y2Y2ZTgyNjQ2OWUyNWZiZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQ
cm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAKICAgICAv
LyBNYXRjaCB0aGUgUW9TIG9mIHRoZSBVSVByb2Nlc3MgYW5kIHRoZSBzY3JvbGxpbmcgdGhyZWFk
IGJ1dCB1c2UgYSBzbGlnaHRseSBsb3dlciBwcmlvcml0eS4KLSAgICBXVEY6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxl
cjsKICAgICBpZiAoIW1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIpIHsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMzVhZWQ4NzE1MGRl
ZTQxMTk3MTQ2ZmVlZjBiMDlmZjQ2ZTg0MDYwLi5lYTI3MDVjY2M0ZDFlYTM3NmUzY2I1ZWI0OWYx
NDg1NTZiNGRiY2U1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFz
cyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBs
ZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRo
cmVhZGluZy5jcHA6CisgICAgICAgIChydW5KYXZhU2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0
YXJ0SmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAgICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAg
ICh0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9M
b2NrLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcDoKKwogMjAxNy0wNC0wNiAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ug
Rm9udFdpdGhGZWF0dXJlcyB0ZXN0IGZvbnQgcGFzcyBPVFMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKaW5kZXggZTJmOWJhZGU2Y2E3YzI2OTQ4NWE0Y2Rj
YmU2MDk5YzM2YmEwMjE5OC4uNzEwZDJhNTlkYTkyOTAxNmU2MDhhNGNmN2Q5NDZmYTg3ZmFkOTMy
YyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5j
cHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKQEAg
LTUxLDcgKzUxLDcgQEAgc3RhdGljIExvY2smIGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKQogICAg
IHJldHVybiBzdGF0aWNNdXRleDsKIH0KIAotdHlwZWRlZiBIYXNoU2V0PFRocmVhZElkZW50aWZp
ZXI+IFRocmVhZFNldDsKK3R5cGVkZWYgSGFzaFNldDxSZWZQdHI8VGhyZWFkPj4gVGhyZWFkU2V0
Owogc3RhdGljIFRocmVhZFNldCYgamF2YVNjcmlwdFRocmVhZHMoKQogewogICAgIERFUFJFQ0FU
RURfREVGSU5FX1NUQVRJQ19MT0NBTChUaHJlYWRTZXQsIHN0YXRpY0phdmFTY3JpcHRUaHJlYWRz
LCAoKSk7CkBAIC0xMDgsMTAgKzEwOCwxMCBAQCB2b2lkIHJ1bkphdmFTY3JpcHRUaHJlYWQodm9p
ZCopCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihq
YXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSAgICAgICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7Ci0gICAg
ICAgIGphdmFTY3JpcHRUaHJlYWRzKCkucmVtb3ZlKHRocmVhZCk7Ci0gICAgICAgIGphdmFTY3Jp
cHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkp
OworICAgICAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOworICAgICAgICB0
aHJlYWQuZGV0YWNoKCk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkucmVtb3ZlKCZ0aHJl
YWQpOworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVu
SmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEy
OCw3ICsxMjgsNyBAQCB2b2lkIHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMoKQogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgamF2YVNjcmlw
dFRocmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7
CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6Y3JlYXRlKCZydW5KYXZh
U2NyaXB0VGhyZWFkLCAwLCAwKSk7CiB9CiAKIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkK
QEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgICAg
IGphdmFTY3JpcHRUaHJlYWRzU2hvdWxkVGVybWluYXRlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBW
ZWN0b3I8VGhyZWFkSWRlbnRpZmllciwgamF2YVNjcmlwdFRocmVhZHNDb3VudD4gdGhyZWFkczsK
KyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4sIGphdmFTY3JpcHRUaHJlYWRzQ291bnQ+IHRocmVh
ZHM7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011
dGV4KCkpOwogICAgICAgICBjb3B5VG9WZWN0b3IoamF2YVNjcmlwdFRocmVhZHMoKSwgdGhyZWFk
cyk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQogICAg
IH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsg
KytpKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW2ldKTsKKyAgICAg
ICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBmYjRkMjZmY2NlYjcwYzRiNTMyMDEw
ZGE4NWZiOWNlNzg1NWMxMzg0Li4zY2VhYTZmM2U2NTczNWQzMGVmMWE0Zjg5N2Q1ZTY5YzRmYTVm
ZjA2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0x
MDcyLDggKzEwNzIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCgpCiAg
ICAgcHRocmVhZF9qb2luKHB0aHJlYWQsIDApOwogCiAgICAgLy8gTm93IGNyZWF0ZSBhbm90aGVy
IHRocmVhZCB1c2luZyBXVEYuIE9uIE9TWCwgaXQgd2lsbCBoYXZlIHRoZSBzYW1lIHB0aHJlYWQg
aGFuZGxlCi0gICAgLy8gYnV0IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQgVGhyZWFkSWRlbnRpZmll
ci4KLSAgICBjcmVhdGVUaHJlYWQocnVuVGhyZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3Qi
KTsKKyAgICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBSZWZQdHI8VGhyZWFkPi4KKyAg
ICBUaHJlYWQ6OmNyZWF0ZShydW5UaHJlYWQsIDAsICJEdW1wUmVuZGVyVHJlZTogdGVzdCIpOwog
fQogCiBzdGF0aWMgdm9pZCBhbGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJzKCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCmluZGV4IDg0ODUyNzM1MWY2MDYzZmMy
NjM2ODc4MDU2ZDljMjRkYmFiZTgzZGMuLjc3MjE2MzZiNzc4MDdmMTM5NTFlYTExMmZiZDQxM2U4
ZmFjNDYwYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRp
dGlvbi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cApAQCAtODksMTQgKzg5LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAgICBDb25kaXRpb24gZW1wdHlD
b25kaXRpb247CiAgICAgQ29uZGl0aW9uIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhy
ZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlm
aWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1l
clRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAK
ICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2sgcmVjZWl2ZWRMb2NrOwog
ICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAg
ICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAg
ICAgICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBydW5UZXN0KAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrZXIsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1bXB0
aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIs
IHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCks
ICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0g
Iiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJc
biIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRDb250
aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xMzEsNyArMTMxLDcg
QEAgdm9pZCBydW5UZXN0KAogICAgIHNsZWVwKGRlbGF5KTsKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IG51bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJl
YWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xNDIsNyArMTQy
LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25k
aXRpb24sIGxvY2tlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwg
c2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
VGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGgg
c2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIs
IHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xNTUs
OCArMTU1LDggQEAgdm9pZCBydW5UZXN0KAogICAgICAgICBwcm9kdWNlclRocmVhZHMuYXBwZW5k
KHRocmVhZElkZW50aWZpZXIpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRo
cmVhZElkZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCisgICAgICAgIHRocmVhZElkZW50aWZp
ZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrZXIobG9jayk7CkBAIC0xNjQsOCArMTY0LDggQEAgdm9pZCBydW5UZXN0KAog
ICAgIH0KICAgICBlbXB0eUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKIAotICAgIGZvciAoVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogY29uc3VtZXJUaHJlYWRzKQotICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0
cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCisgICAgICAgIHRo
cmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBFWFBFQ1RfRVEobnVt
UHJvZHVjZXJzICogbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwgcmVjZWl2ZWQuc2l6ZSgpKTsKICAg
ICBzdGQ6OnNvcnQocmVjZWl2ZWQuYmVnaW4oKSwgcmVjZWl2ZWQuZW5kKCkpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAppbmRleCA1NTc2MzAyZDY5MGRmY2EzNTk5MjkyOGIx
Yzg1M2M3NjIyZTQ1ZmI5Li42YTRlNTM4ZjU2ZjQ2ZDE3N2EzZjYyZjFkZGViM2E0ZDBhZjJhZjA4
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcApAQCAtNDYsMTMgKzQ2LDEz
IEBAIHZvaWQgcnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBu
dW1UaHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVkCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExvY2tU
eXBlW10+IGxvY2tzID0gc3RkOjptYWtlX3VuaXF1ZTxMb2NrVHlwZVtdPihudW1UaHJlYWRHcm91
cHMpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gd29yZHMgPSBzdGQ6Om1ha2VfdW5p
cXVlPGRvdWJsZVtdPihudW1UaHJlYWRHcm91cHMpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJl
YWRJZGVudGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZp
ZXJbXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVm
UHRyPFRocmVhZD5bXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKIAog
ICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhy
ZWFkR3JvdXBJbmRleC0tOykgewogICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7
CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91
cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRl
eCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCAr
IHRocmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJMb2NrIHRl
c3QgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAm
d29yZHMsIG51bUl0ZXJhdGlvbnMsIHdvcmtQZXJDcml0aWNhbFNlY3Rpb25dICgpIHsKICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSXRlcmF0aW9uczsgaS0tOykgewpA
QCAtNjYsNyArNjYsNyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3Vw
cywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAogICAgIH0KIAogICAgIGZv
ciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVy
R3JvdXA7IHRocmVhZEluZGV4LS07KQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0
aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0
Rm9yQ29tcGxldGlvbigpOwogCiAgICAgZG91YmxlIGV4cGVjdGVkID0gMDsKICAgICBmb3IgKHVp
bnQ2NF90IGkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obnVtSXRlcmF0aW9ucykgKiB3b3JrUGVy
Q3JpdGljYWxTZWN0aW9uICogbnVtVGhyZWFkc1Blckdyb3VwOyBpLS07KQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAppbmRleCBjNjdlMWUwODE1YTgzYWZh
OTMzM2UyYWM5YTJiZDc4YjY3YjE2NDViLi41YWY5YzdjODI3YjIxZTIxZDhkZjkzMDUyNjBkNmZm
ZWU2OGZiZDFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJr
aW5nTG90LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90
LmNwcApAQCAtNDgsMTYgKzQ4LDE0IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtVGhyZWFkczsgaS0tOykgewogICAgICAg
ICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAg
ICAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAiUGFya2lu
ZyBUZXN0IFRocmVhZCIsCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGN1cnJlbnRUaHJlYWQoKSk7Ci0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvd24oKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF3YWtlLmFkZChjdXJyZW50VGhyZWFkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdEF3b2tlbiA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3
YWtlLmFkZChUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
QXdva2VuID0gJlRocmVhZDo6Y3VycmVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZGl0aW9uLm5vdGlmeV9vbmUoKTsKICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICB9
CkBAIC02NSwxNiArNjMsMTYgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICB2b2lk
IHVucGFya09uZSh1bnNpZ25lZCBzaW5nbGVVbnBhcmtJbmRleCkKICAgICB7Ci0gICAgICAgIEVY
UEVDVF9FUSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgPT0g
bGFzdEF3b2tlbik7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRy
ZXNzID0gMDsKLSAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIDg+IHF1ZXVlOworICAg
ICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4sIDg+IHF1ZXVlOwogICAgICAgICBQYXJraW5nTG90
Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50
aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiB0
aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOworICAgICAg
ICAgICAgICAgIHF1ZXVlLmFwcGVuZCgmdGhyZWFkSWRlbnRpZmllcik7CiAKICAgICAgICAgICAg
ICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7CiAgICAgICAgICAgICB9KTsKQEAgLTg3LDEyICs4
NSwxMiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwogICAgICAgICAgICAgd2hpbGUgKGF3YWtl
LnNpemUoKSA8IHNpbmdsZVVucGFya0luZGV4ICsgMSkKICAgICAgICAgICAgICAgICBjb25kaXRp
b24ud2FpdChsb2NrZXIpOwotICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBsYXN0QXdva2VuKTsK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgIT0gbGFzdEF3b2tlbik7CiAgICAgICAg
ICAgICBpZiAoIXF1ZXVlLmlzRW1wdHkoKSAmJiBxdWV1ZVswXSAhPSBsYXN0QXdva2VuKSB7CiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiV29rZSB1cCB3cm9uZyB0aHJlYWQ6IHF1ZXVlID0gIiwg
bGlzdER1bXAocXVldWUpLCAiLCBsYXN0IGF3b2tlbiA9ICIsIGxhc3RBd29rZW4sICJcbiIpOwog
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUShxdWV1ZVswXSwgbGFzdEF3b2tlbik7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBsYXN0QXdva2VuID0gMDsKKyAgICAgICAgICAgIGxhc3RBd29r
ZW4gPSBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDAsNyArOTgsNyBAQCBzdHJ1
Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdP
bkFkZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAg
WyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAg
ICBbJl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBp
ZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgCkBAIC0xMTQsNyArMTEyLDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVz
dCB7CiAKICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdM
b3Q6OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZv
aWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRk
cmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIApAQCAtMTI5LDggKzEyNyw4IEBA
IHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0
KGxvY2tlcik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllciA6IHRocmVhZHMpCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJl
YWRJZGVudGlmaWVyIDogdGhyZWFkcykKKyAgICAgICAgICAgIHRocmVhZElkZW50aWZpZXItPndh
aXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgLy8gU2VtYXBob3JlIG9wZXJhdGlvbnMu
CkBAIC0xNzksOSArMTc3LDkgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgQXRvbWlj
PGludD4gc2VtYXBob3JlOwogICAgIHN0ZDo6bXV0ZXggbG9jazsKICAgICBzdGQ6OmNvbmRpdGlv
bl92YXJpYWJsZSBjb25kaXRpb247Ci0gICAgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBhd2Fr
ZTsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIGxhc3RBd29rZW4geyAwIH07CisgICAgSGFzaFNldDxSZWY8VGhyZWFkPj4gYXdha2U7
CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOworICAgIFJlZlB0cjxUaHJlYWQ+
IGxhc3RBd29rZW4geyBudWxscHRyIH07CiB9OwogCiB2b2lkIHJ1blBhcmtpbmdUZXN0KHVuc2ln
bmVkIG51bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBudW1UaHJlYWRzLCB1bnNp
Z25lZCBudW1TaW5nbGVVbnBhcmtzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306513</attachid>
            <date>2017-04-07 09:51:04 -0700</date>
            <delta_ts>2017-04-07 11:46:20 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170408015102.patch</filename>
            <type>text/plain</type>
            <size>216833</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi4xNDhmZTAxNWI1OTg1ZTNj
MTE1YWI4NWEzYmMzOGU1NGIxZjdkYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1BsYXRmb3JtVGhyZWFkLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6Omlz
VmFsaWRGcmFtZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1w
bGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6Y3JlYXRlVGhy
ZWFkSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2Ft
cGxlKToKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpvd25lclRocmVhZCk6CisgICAgICAgICog
cnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6ZmluZEFjdGl2ZVZNQW5kU3RhY2tC
b3VuZHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAg
ICAgICAoSlNDOjpWTVRyYXBzOjpmaXJlVHJhcCk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0
aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNWMwYmI1
MGQ4NTBjY2Q1ZmQ0ZWM1MGRjOTQ0ODgzNGNmYzZjY2MzZC4uZjU3MjA2YjIyMmI3M2NmNzFjZmU2
OTdhZjA0MzRmNDZkOWZmMTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTcgQEAKKzIwMTctMDQtMDcgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5k
b3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVl
ZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6Cisg
ICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0
b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFk
LmNwcDoKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3Ip
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUp
OgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChX
VEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9SZWZQdHIuaDoKKyAgICAg
ICAgKFdURjo6UmVmUHRyOjpSZWZQdHIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uaDoKKyAgICAgICAgKFdURjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uOjpUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24pOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJQdGhyZWFk
cy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuY3BwLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAg
ICAgICogd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYv
d3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFk
SG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRl
cik6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVu
dCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
VEY6OlRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJX
aW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAo
V1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAgICogd3RmL1RocmVhZGlu
Zy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAg
ICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0
aXZlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlh
dGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6ZHVtcCk6CisgICAgICAgIChXVEY6Om5vcm1hbGl6ZVRocmVhZE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRD
dXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
c2V0R2xvYmFsTWF4UU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjphZGp1c3RlZFFP
U0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChX
VEY6OlRocmVhZDo6aWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkZE9uRXhpdENhbGxiYWNr
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6ZGlkSm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAg
IChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAg
ICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNy
ZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRo
cmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Z2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0
aHJlYWRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFi
bGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0
YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OnRocmVhZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OmVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50
ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZElu
dGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmRldGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRo
cmVhZERpZEV4aXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6c2lnbmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKToKKyAgICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5n
ZVByaW9yaXR5KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1
bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3Rh
Ymxpc2gpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhh
bmRsZUJ5SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5h
bCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50
VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAg
KFdURjo6V29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVl
dWUuaDoKKyAgICAgICAgKiB3dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAo
V1RGOjpkaXNwYXRjaFFPU0NsYXNzKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVH
ZW5lcmljLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGlu
dXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAo
V1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVy
KToKKyAgICAgICAgKiB3dGYvd2luL01haW5UaHJlYWRXaW4uY3BwOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRlIHRo
ZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGUwZDQzYjFhY2Y3NGNjZjA5OWM2ZGNjOGQ4ZDc0ZjI1NzlhZjUyOGUuLmEyMTAzYzQzYzA1N2Uz
ZmZkNjA3YjEwYzMwYjgyZGU5MTkwYmQ0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAor
MjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAg
ICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4g
YW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQ
dGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpJREJTZXJ2ZXIpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9E
ZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0F1ZGlv
RGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVk
aW9EZWNvZGVyOjpydW5Mb29wKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVk
aW9EZWNvZGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZyk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVh
ZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xv
c2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6Z2V0VGhyZWFkSUQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRy
b2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcpOgorICAg
ICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
bGxPbkZpbGVUaHJlYWQpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SWNvbkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmg6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAg
ICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhy
ZWFkOjpTY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFk
Ojppc0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpj
cmVhdGVUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6
OnRocmVhZENhbGxiYWNrKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjpIUlRGRGF0YWJhc2VMb2FkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5bmNocm9ub3Vz
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVy
VGhyZWFkQ29tcGxldGlvbik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQp
OgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJS
dW5Mb29wQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVyUnVuTG9vcCk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdGFydFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdG9wVGhyZWFkKToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0YXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKToKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
Ojp0aHJlYWRJRCk6CisKIDIwMTctMDQtMDcgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdIEZpeCBjb2RlYyBuYW1lIGluIE9XUiBBU1NFUlQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggMmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1ODA5NzdmMTI5NWQxZmJmZS4uNzg1MzgxNDg2NDNi
NTY4NjIzNmIxMGFlZDI3ODY2OWFmZWFlYWRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAg
ICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4g
YW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQ
dGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVRocmVhZDo6U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFk
Ojp+U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaCk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUpOgorICAgICAgICAqIFN0b3JhZ2Uv
U3RvcmFnZVRocmVhZC5oOgorCiAyMDE3LTA0LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogT25seSBDYXB0dXJlIEV4dHJh
IE5ldHdvcmsgTG9hZCBNZXRyaWNzIHdoZW4gdGhlcmUgaXMgYSBXZWIgSW5zcGVjdG9yIEZyb250
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggYTUyY2Q3YWNkZDEyMjYzZTY1YWYxOTZiYTAwMzMwMjEzOGI5MWU2
Ni4uNTQxZWMxMjRjMDE2NDRiZjliYmRmNjYxYjBlYmNmMWE2MmUyNjQ0OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIzIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVz
ZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRp
b24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVs
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFk
U3luY0luVGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6Cisg
ICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAg
ICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VF
bnRyeVBvaW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0aWFsaXplcik6Cisg
ICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9y
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTctMDQtMDcgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVw
ZGF0ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcAppbmRleCBlNzgwODZjM2E5NjEyYTJmMGI0ZDdhYWYxYWRjN2JhMWExMDFjNTQ3Li40M2Fl
ZjA3Nzk3MGNmZWRiMmNhYzA0NjNmY2Q5ZWNjYTI5ZDE1MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwCkBAIC05
Niw3ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkKIHsKICAgICBCaXRtYXAgYml0
bWFwOwogICAgIGNvbnN0IGludCBudW1UaHJlYWRzID0gNTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEc1tudW1UaHJlYWRzXTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRzW251bVRo
cmVhZHNdOwogICAgIERhdGEgZGF0YVtudW1UaHJlYWRzXTsKIAogICAgIFdURjo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOwpAQCAtMTA3LDEyICsxMDcsMTIgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3
YXAoKQogICAgICAgICBkYXRhW2ldLmlkID0gaTsKICAgICAgICAgZGF0YVtpXS5udW1UaHJlYWRz
ID0gbnVtVGhyZWFkczsKICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRocmVhZEZ1bmMg
PSBzdGQ6OmJpbmQoc2V0Qml0VGhyZWFkRnVuYywgJmRhdGFbaV0pOwotICAgICAgICB0aHJlYWRJ
RHNbaV0gPSBjcmVhdGVUaHJlYWQoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRGdW5jKTsKKyAg
ICAgICAgdGhyZWFkc1tpXSA9IFRocmVhZDo6Y3JlYXRlKCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhy
ZWFkRnVuYyk7CiAgICAgfQogCiAgICAgcHJpbnRmKCJXYWl0aW5nIGZvciAlZCB0aHJlYWRzIHRv
IGpvaW5cbiIsIG51bVRocmVhZHMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFk
czsgaSsrKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRHNbaV0pOwor
ICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgcHJpbnRmKCJQ
QVNTOiBDb21wYXJlQW5kU3dhcCB0ZXN0IGNvbXBsZXRlZCB3aXRob3V0IGEgaGFuZ1xuIik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyMTdiNWM4NTUxYTU4ZTZjZmQwMGM1
YmQxZjJkYWExMDI1ZjQwOGUuLjdkMjAzNmJlODYxNmZmNTM4NjdlNWUwNzk1NjVmZGE1YTc4ODUx
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDY3LDcgKzI0NjcsNiBAQAog
CQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2
MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZFRTQzRkNFMUU2NjQx
NzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3Jt
VGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2
NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYx
RDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpT
U3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KQEAgLTUwOTMsNyArNTA5Miw2
IEBACiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93
VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQaW5nUG9uZ1N0
YWNrT3ZlcmZsb3dUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZs
b3dUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDUxQjk3RjRE
OTAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBwYXRoID0gQVBJ
L3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJl
QW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4
QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2Fw
VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZENkZDNTFENUU3OTcwMDA4
RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg1
NCw3ICs2ODUyLDYgQEAKIAkJCQlGNjkyQTg3ODAyNTU1OTdEMDFGRjYwRjcgLyogT3BlcmF0aW9u
cy5oICovLAogCQkJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLywK
IAkJCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovLAotCQkJCUZFRTQz
RkNEMUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oICovLAogCQkJCTg2ODkxNkE5
MTU1RjI4NTQwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oICovLAogCQkJCTE0NzM0MURGMURDMkNF
OTYwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJMTQ3MzQxRDMxREMw
MkU2RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmggKi8sCkBAIC05MzM0LDcgKzkzMzEs
NiBAQAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwNUI0MUFFMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVFNDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBs
YXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFC
ODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFC
MDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCmluZGV4IDg3YjM1M2Fh
Mzc5MjVjYTFlMmZhODQxMTk5NzZhZGYwYjFlMDdiYWEuLmM5MTc3MDc5NTg4Zjg2ZDQzMWEyOGJj
MDc0ZDRmZTJlM2YxM2RjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvdGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWly
LmNwcApAQCAtMTkxMywxMCArMTkxMywxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
CiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFk
czsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7
CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAg
ICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQi
LAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKQEAgLTE5MzMsOCArMTkzMyw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAg
ICAgICAgICAgICAgICB9KSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7
CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJl
YWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAwMTk5NmFmNzFhYjRmMDllYjQ5YjcwMTFj
MTdkYmM5M2M0MGNlODdhLi45MDQ2NTY0ODg3YjZiM2E0YWZhYzM1OWRjMTBjNTAzODRkNzRkZWZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAtMTY4NTAsMTAgKzE2ODUwLDEw
IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAgIExvY2sgbG9jazsKIAotICAg
IFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhy
ZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpu
dW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAgICAgICAgdGhyZWFkcy5hcHBlbmQo
Ci0gICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgK
ICAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAgICAgICAgICAgICAgICAgWyZdICgp
IHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTY4NzAsOCArMTY4NzAsOCBA
QCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAg
IH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVh
ZD4gdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKaW5kZXggYTRlMjFmOWZhM2NkNDcyMWVhMjY3NWUw
NmU0ZDUzMGM1YmE5NWIzNS4uZTliMWY1YzJmMGJjMjdiMDI5MzEwYzU1ODE1MjBiMWI1NTIyNTk3
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbml0aWFsaXplU3VwZXJTYW1wbGVyKCkKICAgICBp
ZiAoIU9wdGlvbnM6OnVzZVN1cGVyU2FtcGxlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
cmVhdGVUaHJlYWQoCisgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgU3VwZXIgU2Ft
cGxlciIsCiAgICAgICAgIFtdICgpIHsKICAgICAgICAgICAgIGNvbnN0IGludCBzbGVlcFF1YW50
dW0gPSAxMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKaW5kZXgg
Y2VmOTkwY2I0ODMzYTZiYjk0NzFiZDA4YTUwNGU1NWZiNDdkZjQ1OC4uYWQwZWNjNjlhNzdkMTcy
Y2Y0YmMxZWZhYzkzZGY5MzAyN2MwMDllNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBjbGFzcyBXb3JrbGlzdDo6VGhyZWFk
Qm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogICAgICAgICAgICAgZGF0YUxvZyhtX3dv
cmtsaXN0LCAiOiBUaHJlYWQgc3RhcnRlZFxuIik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9y
ZWxhdGl2ZVByaW9yaXR5KQotICAgICAgICAgICAgY2hhbmdlVGhyZWFkUHJpb3JpdHkoY3VycmVu
dFRocmVhZCgpLCBtX3JlbGF0aXZlUHJpb3JpdHkpOworICAgICAgICAgICAgVGhyZWFkOjpjdXJy
ZW50KCkuY2hhbmdlUHJpb3JpdHkobV9yZWxhdGl2ZVByaW9yaXR5KTsKICAgICAgICAgCiAgICAg
ICAgIG1fY29tcGlsYXRpb25TY29wZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb25TY29w
ZT4oKTsKICAgICAgICAgbV9sb25nTGl2ZWRTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TG9uZ0xp
dmVkU3RhdGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L0Rpc2Fzc2VtYmxlci5jcHAKaW5kZXggNzg4YTZjMzYyMzY5YzU4ZGFkMjlhNjBhMzg3MTA0NGU0
NjRlZDMwNS4uMmI4MjRlY2ZkZTU4OTNiMmM2YjcwNmY0NzAyZWNkMjI5NWQyMzU1NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNw
cApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBBc3luY2hyb25vdXNEaXNhc3NlbWJsZXIgewogcHVi
bGljOgogICAgIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpCiAgICAgewotICAgICAgICBjcmVh
dGVUaHJlYWQoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7
CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJBc3luY2hyb25vdXMgRGlzYXNzZW1ibGVyIiwgWyZd
ICgpIHsgcnVuKCk7IH0pOwogICAgIH0KICAgICAKICAgICB2b2lkIGVucXVldWUoc3RkOjp1bmlx
dWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKaW5kZXggM2FlZTMwMTA0ZjUyOTFhMjg3NjRhNWNkZWU1YWE4ZjBjYTcyYWQzMS4uNzIyM2Iy
MGM5ZGZiYTEwNDMwOThhNzg1NzRiYTI4YTY5NGMwNDViZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0Zp
bmFsaXplKCkKICAgICAgICAgICAgIG1fc2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3VzbHkg
PSB0cnVlOwogICAgICAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uLm5vdGlm
eU9uZSgpOwogICAgICAgICB9Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fY29s
bGVjdENvbnRpbnVvdXNseVRocmVhZCk7CisgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQCB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRv
Q29sbGVjdCgpCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOwogICAgIAogICAgIGlmIChP
cHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKLSAgICAgICAgbV9jb2xsZWN0Q29udGlu
dW91c2x5VGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBtX2NvbGxlY3RDb250aW51b3Vz
bHlUaHJlYWQgPSBXVEY6OlRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkpTQyBERUJVRyBD
b250aW51b3VzIEdDIiwKICAgICAgICAgICAgIFt0aGlzXSAoKSB7CiAgICAgICAgICAgICAgICAg
TW9ub3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDE2YmVlZjlhODlkMDZkZjI3OTcxN2U3NzBi
MTY0YTQ3MTQuLmQ2NzgzN2FmZWYxMzAxZjk2NzJmNjBlYTI5YzQzZmM4NTk3ZGViOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEhlbHBlclBvb2wuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC02NjYsNyArNjY3LDcgQEAgY2xhc3MgSGVhcCB7CiAgICAgTG9j
ayBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbGxlY3RDb250
aW51b3VzbHlDb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29udGlu
dW91c2x5IHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fY29sbGVjdENvbnRpbnVv
dXNseVRocmVhZCB7IDAgfTsKKyAgICBSZWZQdHI8V1RGOjpUaHJlYWQ+IG1fY29sbGVjdENvbnRp
bnVvdXNseVRocmVhZCB7IG51bGxwdHIgfTsKICAgICAKICAgICBNb25vdG9uaWNUaW1lIG1fbGFz
dEdDU3RhcnRUaW1lOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NFbmRUaW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXgg
Yjg1Yjc2NDhlMmY1ZDE5ZmEyMmQ3NjNmN2JjZGVmOGY0NGM0MmM4OC4uNGZmZGY5Y2M0ZTNjMzYw
NmIxZGE5YTk0MDc3ZmM3NGM4ODZlYzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBAIC02NCw2MyArNjQsMTMgQEAKICNpbmNs
dWRlIDxwdGhyZWFkX25wLmg+CiAjZW5kaWYKIAotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJ
TkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBT
SUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlw
dENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1Iy
Owotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFsTG9jazsKLXRocmVhZF9sb2NhbCBzdGF0
aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSo+IHRocmVhZExv
Y2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQotc3RhdGljIHZvaWQgcHRocmVhZFNpZ25h
bEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCi17
Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBo
YW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEq
IHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQubG9hZCgpOwotCi0gICAgaWYg
KHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7
Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGlu
dGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCi0gICAgICAgIC8vIFNvIHRo
aXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxs
cyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4g
U2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCi0gICAgICAgIC8vIFNv
LCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4u
Likgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgotICAgICAg
ICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0
aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVjb250
ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsK
LSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0g
KnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOwotI2Vsc2UKLSAgICB0aHJlYWREYXRh
LT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKLSNl
bmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJl
YWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1
bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5k
bGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUz
OTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKLSAgICAvLwotICAg
IC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBz
dXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDov
L3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hh
cDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5
IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3Bl
bmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRo
aXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4K
LSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OwotICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRT
aWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0KLSAgICAv
LyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQu
Ci0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwot
fQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4p
Ci0KICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAot
dXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRocmVhZDsKK3VzaW5nIEpTVGhyZWFkID0g
TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFzcyBBY3RpdmVNYWNoaW5lVGhyZWFkc01h
bmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5l
VGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTQ0LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+
TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3Bl
Y2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBMb2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJl
YWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIGZvciAoVGhyZWFkKiB0ID0g
bV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4
dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKKyAg
ICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0OwogICAgICAgICBkZWxldGUgdDsKICAgICAg
ICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMgTWFjaGluZVRocmVhZHM6OlRocmVhZERh
dGEqIHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVj
aWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRo
cmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEuZ2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJl
YWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0aHJlYWREYXRhKQotICAgIDogZGF0YSh0
aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWREYXRhKTsKLX0KLQotVGhyZWFkKiBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCkKLXsKLSAgICByZXR1
cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQotCi1ib29sIE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdAotewot
I2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAgICByZXR1cm4gZGF0YS0+cGxhdGZvcm1U
aHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuICEhcHRocmVh
ZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3RoZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVk
IGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQog
dm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiB7CiAgICAgaWYgKHRocmVh
ZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcykpIHsKQEAgLTIz
OSw3ICsxNjEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjcmVh
dGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJlYWQqIHRocmVhZCA9IG5ldyBKU1RocmVh
ZCh0aGlzKTsKICAgICB0aHJlYWRTcGVjaWZpY1NldChtX3RocmVhZFNwZWNpZmljRm9yTWFjaGlu
ZVRocmVhZHMsIHRoaXMpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVh
ZHNNdXRleCk7CkBAIC0yNDgsMTIgKzE3MCwxMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRD
dXJyZW50VGhyZWFkKCkKICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gdGhyZWFkOwogfQogCi1U
aHJlYWQqIE1hY2hpbmVUaHJlYWRzOjptYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpCitK
U1RocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkK
IHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBQ
bGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwot
ICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRo
cmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCA9PSBwbGF0Zm9ybVRo
cmVhZCkKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gY3VycmVudFRocmVhZCgpOworICAgIGZv
ciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgPT0gaWQp
CiAgICAgICAgICAgICByZXR1cm4gdGhyZWFkOwogICAgIH0KIApAQCAtMjgzLDIyICsyMDUsMjEg
QEAgdm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFk
KHZvaWQqIHApCiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgICAgICBtYWNoaW5l
VGhyZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSk7Cisg
ICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRUaHJlYWQo
KSk7CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLXZvaWQg
TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQgcGxhdGZv
cm1UaHJlYWQpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVh
ZElkZW50aWZpZXIgaWQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVh
ZHNNdXRleCk7Ci0gICAgVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKLSAgICBpZiAo
KnQgPT0gcGxhdGZvcm1UaHJlYWQpIHsKKyAgICBKU1RocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRo
cmVhZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgbV9yZWdpc3Rl
cmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7CisgICAgICAgIEpTVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICAg
ICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsK
LSAgICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgICAgICAgICAgaWYg
KHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgICAgICAgICBsYXN0LT5uZXh0ID0gdC0+
bmV4dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMyMCwxODIg
KzI0MSwyMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tQ3VycmVudFRocmVhZChD
b25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdAogICAgIGNvbnNlcnZhdGl2ZVJvb3Rz
LmFkZChjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tUb3AsIGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFj
a09yaWdpbiwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKIH0KIAotTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEoKQorTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpK
U1RocmVhZChNYWNoaW5lVGhyZWFkcyopCisgICAgOiBuZXh0KG51bGxwdHIpCisgICAgLCBtX3Ro
cmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3
dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0
Zm9ybVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAg
IHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEFT
U0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAgYm9vbCBp
c1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3Mo
KSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLAotICAgICAgICAgICAg
JnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5zdG9yZSh0aGlzKTsK
LQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlv
bi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXI7Ci0g
ICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXIsIFtdIHsKLSAgICAgICAg
Ly8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5k
bGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBp
biB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFj
dGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgc2ln
YWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAg
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVuZFJlc3Vt
ZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87Ci0g
ICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAwKTsKLSAg
ICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAgc2lnZW1wdHlzZXQoJm1hc2spOwotICAg
IHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgcHRocmVhZF9z
aWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0KLSAgICBzZW1faW5pdCgmc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAw
LCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKLSNlbmRpZgorICAg
IG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7CisgICAgbV9zdGFja0VuZCA9IHN0
YWNrQm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVh
ZERhdGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Z2V0UmVnaXN0ZXJzKEpT
VGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgIENs
b3NlSGFuZGxlKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYg
IU9TKERBUldJTikKLSAgICBzZW1fZGVzdHJveSgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
Ci0jZW5kaWYKKyAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJl
Z3M7CisgICAgcmV0dXJuIG1fdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVncyk7CiB9CiAKLWJvb2wg
TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnN1c3BlbmQoKQotewotI2lmIE9TKERBUldJTikK
LSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFk
KTsKLSAgICByZXR1cm4gcmVzdWx0ID09IEtFUk5fU1VDQ0VTUzsKLSNlbGlmIE9TKFdJTkRPV1Mp
Ci0gICAgYm9vbCB0aHJlYWRJc1N1c3BlbmRlZCA9IChTdXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhy
ZWFkSGFuZGxlKSAhPSAoRFdPUkQpLTEpOwotICAgIEFTU0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7
Ci0gICAgcmV0dXJuIHRocmVhZElzU3VzcGVuZGVkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoY3VycmVudFBsYXRmb3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1U
aHJlYWQsICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRo
cmVhZCBpdHNlbGYuIik7Ci0gICAgewotICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVu
ZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRz
LgotICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxv
Y2suCi0gICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRo
cmVhZHMgQSBhbmQgQi4KLSAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5k
IEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCi0gICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxz
LiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgotICAgICAgICAv
LyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCi0gICAgICAgIExvY2tIb2xk
ZXIgbG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKCFzdXNwZW5kQ291bnQpIHsK
LSAgICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2ln
cXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhh
bmRsZXIuCi0gICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZv
cm1zLCBsaWtlIExpbnV4LgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCog
c3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KLSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQs
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1l
KTsKLSAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVy
YXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBp
cyBkb25lLgotICAgICAgICAgICAgc3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgICsrc3VzcGVuZENvdW50OwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBzdXNwZW5kIHRo
cmVhZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KLXZvaWQgTWFjaGluZVRocmVhZHM6
OlRocmVhZERhdGE6OnJlc3VtZSgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHRocmVhZF9yZXN1
bWUocGxhdGZvcm1UaHJlYWQpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBSZXN1bWVUaHJlYWQo
cGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHsKLSAgICAg
ICAgLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVj
dXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICBMb2NrSG9sZGVyIGxvY2soZ2xv
YmFsU2lnbmFsTG9jayk7Ci0gICAgICAgIGlmIChzdXNwZW5kQ291bnQgPT0gMSkgewotICAgICAg
ICAgICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBp
biB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSBpcyBhY3R1YWxseSBpc3N1ZWQsCi0gICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRs
ZXIgaXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCi0gICAgICAgICAgICAvLyBUaGVy
ZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24g
Zm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAgICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQg
c2lnbmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxl
ci4KLSAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBz
dXNwZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2Fu
IGJlIHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCi0gICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFk
IGxvY2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxl
ci4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBz
dXNwZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgotICAgICAgICAgICAgaWYg
KHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0g
RVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNl
bWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVy
IGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxs
IHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3Rv
cmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAg
IC0tc3VzcGVuZENvdW50OwotICAgIH0KLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byByZXN1
bWUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotc2l6ZV90IE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWREYXRhOjpnZXRSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiBy
ZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIE9TKERBUldJTikKLSNpZiBDUFUoWDg2KQot
ICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBzaXplb2YocmVncykvc2l6ZW9mKGludCk7Ci0gICAg
dGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOwotI2VsaWYg
Q1BVKFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0
X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NU
QVRFNjQ7Ci0jZWxpZiBDUFUoUFBDKSAKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RI
UkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBD
X1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShQUEM2NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50
ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBm
bGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUoQVJNKQotICAgIHVuc2lnbmVk
IHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKEFSTTY0KQotICAg
IHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKLSNlbHNlCi0j
ZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgotCi0gICAga2Vybl9yZXR1cm5fdCBy
ZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKHBsYXRmb3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRf
c3RhdGVfdCkmcmVncywgJnVzZXJfY291bnQpOwotICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUND
RVNTKSB7Ci0gICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBX
VEZfUFJFVFRZX0ZVTkNUSU9OLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmF2YVNj
cmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSBy
ZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVu
bmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOwot
ICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICByZXR1cm4gdXNlcl9jb3VudCAqIHNpemVvZih1
aW50cHRyX3QpOwotLy8gZW5kIE9TKERBUldJTikKLQotI2VsaWYgT1MoV0lORE9XUykKLSAgICBy
ZWdzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsKLSAg
ICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxlLCAmcmVncyk7Ci0gICAgcmV0
dXJuIHNpemVvZihDT05URVhUKTsKLSNlbGlmICgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dM
SUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICByZWdzID0gc3VzcGVuZGVkTWFjaGluZUNvbnRl
eHQ7Ci0gICAgcmV0dXJuIHNpemVvZihSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzKTsKLSNl
bGlmIFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmcmVncy5hdHRyaWJ1dGUp
OwotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhORVRCU0QpCi0jaWYgIU9TKE9QRU5CU0Qp
Ci0gICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZwotICAgIHB0aHJl
YWRfYXR0cl9nZXRfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYK
LSNlbHNlCi0gICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhl
ciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICBw
dGhyZWFkX2dldGF0dHJfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhyZWFk
IHJlZ2lzdGVycyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKK3ZvaWQq
IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25z
dAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKChPUyhGUkVFQlNEKSB8fCBk
ZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQogICAgIHJldHVybiBNYWNoaW5lQ29u
dGV4dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwpAQCAtNTE5LDcgKzI4MCw3IEBAIHZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB9
CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGlu
ZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiB7CiAj
aWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChf
X0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ3Mp
OwpAQCAtNTI4LDcgKzI4OSw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29u
c3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlv
blBvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKE9T
KEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkKICAgICByZXR1cm4gTWFjaGluZUNvbnRl
eHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdzKTsKQEAgLTUzNyw3ICsyOTgsNyBAQCB2b2lkKiBN
YWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIo
KSBjb25zdAogI2VuZGlmCiB9CiAKLXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpS
ZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewogICAgIC8vIExMSW50IHVzZXMgcmVnVDQg
YXMgUEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwg
ZGVmaW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICszMDksNiBAQCB2b2lkKiBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKIH0KICNlbmRpZiAv
LyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVh
ZERhdGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17
Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJl
Z2lzdGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhE
QVJXSU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxF
KEpJVCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50
IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGludCByZWRab25lQWRqdXN0bWVudCA9IDA7
CkBAIC01NzMsMTcgKzMyNCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3Rt
ZW50KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1lbnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lk
Kiwgc2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQq
IHN0YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpKU1Ro
cmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQogewotICAgIGNoYXIqIGJlZ2luID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSk7CisgICAgY2hhciogYmVnaW4g
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jhc2UpOwogICAgIGNoYXIqIGVu
ZCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2
b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFja1RvcCkpKTsKICAgICBBU1NF
UlQoYmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVuZFdpdGhSZWRab25lID0gZW5kICsgb3NS
ZWRab25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8
c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25l
KSkgPT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSk7CiAKLSAg
ICBpZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFja0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUg
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQpOworICAgIGlmIChlbmRXaXRo
UmVkWm9uZSA8IG1fc3RhY2tFbmQpCisgICAgICAgIGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tFbmQpOwogCiAgICAgc3RkOjpzd2FwKGJlZ2luLCBl
bmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJlZ2luLCBlbmRXaXRo
UmVkWm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5ICszNjcsOSBAQCBzdGF0aWMgdm9pZCBjb3B5TWVt
b3J5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKIC8vIHNpZ25pZmlj
YW50IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2sgaXMgb25seSBj
YWxsZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBzaXplKQogLy8gb3BlcmF0aW9uLiBBcyB0aGUgaGVh
cCBpcyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIgdGhhbiB0aGUgc3RhY2sgdGhlIHBlcmZvcm1hbmNl
IGhpdCBpcyBtaW5pbWFsLgogLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRT
dGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVf
dCogc2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpT
VGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNp
emUpCiB7Ci0gICAgVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIEpTVGhyZWFkOjpS
ZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCByZWdpc3RlcnNTaXplID0gdGhyZWFkLT5n
ZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gc3Rh
Y2sgPSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3RlcnMuc3RhY2tQb2ludGVyKCkpOwogCkBA
IC02MzEsOCArMzgyLDYgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFk
U3RhY2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV8KICAgICBpZiAoY2FuQ29w
eSkKICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyKSArICpzaXpl
LCBzdGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAgICAqc2l6ZSArPSBzdGFjay5zZWNvbmQ7
Ci0KLSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKIH0KIAogYm9vbCBNYWNo
aW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKQEAgLTY0NCwz
NiArMzkzLDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNr
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAKICAgICAqc2l6ZSA9IDA7CiAK
LSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVh
ZCgpOworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CiAgICAgaW50
IG51bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAgdG8gZGVub3RlIHRoYXQgd2UgaGF2ZW4n
dCBjb3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5ZXQuCiAgICAgaW50IGluZGV4ID0gMTsK
LSAgICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CisgICAgSlNUaHJlYWQq
IHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CiAKLSAgICBUaHJlYWQqIHByZXZpb3VzVGhy
ZWFkID0gbnVsbHB0cjsKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3Jt
VGhyZWFkKSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aHJlYWQtPnN1c3BlbmQoKTsK
KyAgICBKU1RocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOworICAgIGZvciAoSlNUaHJl
YWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgaW5kZXgrKykgeworICAg
ICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKSB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lmIE9TKERBUldJTikKLSAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIW51bWJlck9mVGhyZWFkcykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKFRocmVh
ZCogY291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNv
dW50ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5uZXh0KQorICAgICAgICAgICAgICAgICAgICBm
b3IgKEpTVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRl
ZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1iZXJPZlRocmVhZHMrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gUmUtZG8gdGhlIHN1c3BlbnNpb24gdG8g
Z2V0IHRoZSBhY3R1YWwgZmFpbHVyZSByZXN1bHQgZm9yIGxvZ2dpbmcuCi0gICAgICAgICAgICAg
ICAga2Vybl9yZXR1cm5fdCBlcnJvciA9IHRocmVhZF9zdXNwZW5kKHRocmVhZC0+cGxhdGZvcm1U
aHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVycm9yICE9IEtFUk5fU1VDQ0VTUyk7
CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmVycm9yKCkgIT0gS0VSTl9TVUNDRVNT
KTsKIAogICAgICAgICAgICAgICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywg
V1RGX1BSRVRUWV9GVU5DVElPTiwKLSAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2Fy
YmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6
IFRocmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVhZCAlcC4iLAotICAgICAgICAgICAgICAg
ICAgICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9j
YXN0PHZvaWQqPih0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQg
dGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBpZCAlcC4iLAorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuZXJyb3IoKSwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFk
LCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnRocmVhZElEKCkpKTsKIAogICAgICAg
ICAgICAgICAgIC8vIFB1dCB0aGUgaW52YWxpZCB0aHJlYWQgb24gdGhlIHRocmVhZHNUb0JlRGVs
ZXRlZCBsaXN0LgogICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgZGVsZXRlIGl0IGhl
cmUgYmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRlZCBvdGhlcgogICAgICAgICAgICAgICAgIC8vIHRo
cmVhZHMsIGFuZCB0aGV5IG1heSBzdGlsbCBiZSBob2xkaW5nIHRoZSBDIGhlYXAgbG9jayB3aGlj
aAogICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgZm9yIGRlbGV0aW5nIHRoZSBpbnZhbGlkIHRo
cmVhZC4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAvLyBkZWZlciB0aGUgZGVs
ZXRpb24gdGlsbCBhZnRlciB3ZSBoYXZlIHJlc3VtZWQgYWxsIHRocmVhZHMuCi0gICAgICAgICAg
ICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgICAgICAgICAgICAg
IEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICAgICAgICAgIHRo
cmVhZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsKICAgICAgICAgICAgICAgICB0aHJlYWRz
VG9CZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4NywyNSArNDM0LDI1IEBAIGJvb2wgTWFjaGlu
ZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IHZvaWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mVGhy
ZWFkcyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJldmlvdXNUaHJlYWQpOwotICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcHJl
dmlvdXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IHRocmVhZC0+bmV4dDsKICAg
ICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhy
ZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxh
dGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVh
ZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRyeUNvcHlPdGhlclRocmVhZFN0YWNr
KHRocmVhZCwgYnVmZmVyLCBjYXBhY2l0eSwgc2l6ZSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJl
YWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFk
LT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKQorICAgIGZv
ciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQp
CiAgICAgICAgICAgICB0aHJlYWQtPnJlc3VtZSgpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFk
KiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7Ci0gICAgICAgIFRocmVh
ZCogbmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQg
PSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0
VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICBkZWxldGUgdGhyZWFkOwogICAgICAgICB0
aHJlYWQgPSBuZXh0VGhyZWFkOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggZDE5NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNk
ODdmNzk5NDQ4N2YyMi4uOTE5N2M0NDA4Y2UyZmQ0ZWU2YWEzZDE0YTdjNjllNmY4Y2ExMDk0NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgK
QEAgLTIyLDI1ICsyMiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYWNoaW5lQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJT
dGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
cGVjaWZpYy5oPgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERB
UldJTikKLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLS8vIFVz
aW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxh
YmxlIG9uIEZyZWVCU0QuCi0vLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDEx
LjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQotLy8gcmVtb3ZlZCBhZnRlciBG
cmVlQlNEIDEwLnggZ29lcyBFT0wuCi0vLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemls
bGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQotI2lmIE9TKEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNv
bnRleHQuaD4KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2Rl
QmxvY2tTZXQ7CkBAIC02NCwxMyArNTEsMTAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCk7IC8vIE9ubHkgbmVl
ZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJv
bSBtdWx0aXBsZSB0aHJlYWRzLgogCi0gICAgY2xhc3MgVGhyZWFkRGF0YSB7CisgICAgY2xhc3Mg
SlNUaHJlYWQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFRocmVhZERhdGEoKTsKLSAgICAgICAgflRocmVhZERhdGEoKTsKLQotICAgICAg
ICBzdGF0aWMgVGhyZWFkRGF0YSogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICBK
U1RocmVhZChNYWNoaW5lVGhyZWFkcyopOwogCiAgICAgICAgIHN0cnVjdCBSZWdpc3RlcnMgewog
ICAgICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVyKCkgY29uc3Q7CkBAIC03OSw4NCArNjMsNDAg
QEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAgICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Q
b2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5k
aWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICAgICAgCi0jaWYgT1MoREFS
V0lOKSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMg
PSBNYWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdpc3RlcnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkg
fHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKQotICAgICAgICAgICAgdXNpbmcg
UGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAg
ICAgICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKLSAgICAgICAgICAgICAgICBwdGhy
ZWFkX2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAgICAgICB9OwotI2Vsc2UKLSNlcnJvciBOZWVk
IGEgdGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3IgdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAg
ICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CisgICAgICAgICAgICBXVEY6OlBsYXRm
b3JtUmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBzdXNwZW5kKCk7
Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVn
aXN0ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJlZ2lzdGVycyhSZWdpc3RlcnMmKTsKKyAgICAg
ICAgRXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgp
IHsgcmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7IH0KKyAgICAgICAgdm9pZCByZXN1bWUoKSB7
IG1fdGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lz
dGVycyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3Rh
Y2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhy
ZWFkOwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kOwot
I2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRMRSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNl
bGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNvbnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29u
dGV4dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3VudCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9t
aWM8Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFz
cyBUaHJlYWQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgVGhy
ZWFkKFRocmVhZERhdGEqKTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgUmVnaXN0ZXJz
ID0gVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0
ZUZvckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxh
dGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KLQotICAgICAgICBib29sIHN1c3BlbmQoKSB7IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0K
LSAgICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEtPnJlc3VtZSgpOyB9Ci0gICAgICAgIHNpemVf
dCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3Rl
cnMocmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykg
eyBkYXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9Ci0gICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1
cmVTdGFjayhzdGFja1RvcCk7IH0KLQotICAgICAgICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxh
dGZvcm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVhZDsgfQotICAgICAgICB2
b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0Jhc2U7IH0KLSAgICAg
ICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0VuZDsgfQorICAg
ICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3Ro
cmVhZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBt
X3N0YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhY2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQqIG5leHQ7Ci0gICAgICAgIFRocmVhZERhdGEq
IGRhdGE7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0OworICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+
IG1fdGhyZWFkOworICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKKyAgICAgICAgdm9pZCogbV9z
dGFja0VuZDsKICAgICB9OwogCiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fcmVnaXN0
ZXJlZFRocmVhZHNNdXRleDsgfQotICAgIFRocmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4Lmlz
TG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQotICAgIFRocmVhZCogbWFj
aGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkc0xpc3RI
ZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhy
ZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQorICAg
IEpTVGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOwogCiBwcml2YXRlOgog
ICAgIHZvaWQgZ2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRT
dHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0g
ICAgdm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNh
cGFjaXR5LCBzaXplX3QqKTsKKyAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhy
ZWFkKiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7CiAgICAgYm9vbCB0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNh
cGFjaXR5LCBzaXplX3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxM
IHJlbW92ZVRocmVhZCh2b2lkKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRo
cmVhZD4KLSAgICB2b2lkIHJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQpOworICAg
IHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJlYWRJZGVudGlmaWVyKTsKIAogICAgIExvY2sg
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwotICAgIFRocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFk
czsKKyAgICBKU1RocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNw
ZWNpZmljS2V5IG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkczsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCmluZGV4IDIwODBjZDkzNDU4MzNkMmQyMzJiOGE5
Y2Q2ZjNkYmZlYmUwNWNiMjMuLmUwYWJmMjk4YmZiZTJlZWVjMzQyNWI2NjA5Y2U3MjEzM2M0MWNk
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcApAQCAtNTgsNyArNTgsNyBA
QCBBdG9taWM8SUNTdGF0cyo+IElDU3RhdHM6OnNfaW5zdGFuY2U7CiAKIElDU3RhdHM6OklDU3Rh
dHMoKQogewotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgSUNTdGF0cyIsCiAgICAgICAgIFt0aGlzXSAoKSB7
CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwpAQCAtODQsNyArODQsNyBA
QCBJQ1N0YXRzOjp+SUNTdGF0cygpCiAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwog
ICAgIH0KICAgICAKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZCk7CisgICAg
bV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiB9CiAKIHZvaWQgSUNTdGF0czo6YWRkKGNv
bnN0IElDRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAppbmRleCBl
NzVjZmRmNGQ0ZDlkN2RjYmYxYTMxYTk4Mjk0MTkyZTU1YjljZmIwLi5lYjdlMWU5MmNlOTdkZDFk
OTUwODk3MjdjODRhOWM1ZWM3ZjU3YzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMu
aApAQCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIElDU3RhdHMgewogcHJpdmF0ZToKIAogICAgIFNw
ZWN0cnVtPElDRXZlbnQsIHVpbnQ2NF90PiBtX3NwZWN0cnVtOwotICAgIFRocmVhZElkZW50aWZp
ZXIgbV90aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX2xv
Y2s7CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIGJvb2wgbV9zaG91bGRTdG9wIHsg
ZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTliNjI3M2RlYWIxZGQ1OWZkNzU5NDFj
ZDZlNjExNDkyODc5MjQ3MC4uNzVhYzYwZDliMzQ2MDgxY2I2NzA2OWVkZWQzNTI4NTQzZmJkM2Q4
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI1NDQsNyArMjU0NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhl
YykKICAgICBDb25kaXRpb24gZGlkU3RhcnRDb25kaXRpb247CiAgICAgYm9vbCBkaWRTdGFydCA9
IGZhbHNlOwogICAgIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkID0gY3JlYXRlVGhyZWFk
KAorICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAi
SlNDIEFnZW50IiwKICAgICAgICAgW3NvdXJjZUNvZGUsICZkaWRTdGFydExvY2ssICZkaWRTdGFy
dENvbmRpdGlvbiwgJmRpZFN0YXJ0XSAoKSB7CiAgICAgICAgICAgICBDb21tYW5kTGluZSBjb21t
YW5kTGluZSgwLCBudWxscHRyKTsKQEAgLTI1NzEsNyArMjU3MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0
YWNoKCk7CiAgICAgCiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpZFN0
YXJ0TG9jayk7CkBAIC0zMzExLDcgKzMzMTEsNyBAQCBzdGF0aWMgdm9pZCBzdGFydFRpbWVvdXRU
aHJlYWRJZk5lZWRlZCgpCiAgICAgICAgICAgICBkYXRhTG9nKCJXQVJOSU5HOiB0aW1lb3V0IHN0
cmluZyBpcyBtYWxmb3JtZWQsIGdvdCAiLCB0aW1lb3V0U3RyaW5nLAogICAgICAgICAgICAgICAg
ICIgYnV0IGV4cGVjdGVkIGEgbnVtYmVyLiBOb3QgdXNpbmcgYSB0aW1lb3V0LlxuIik7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKHRpbWVvdXRUaHJlYWRNYWluLCAw
LCAianNjIFRpbWVvdXQgVGhyZWFkIik7CisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSh0aW1l
b3V0VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggMDFiMWZlMTI3ZThiNzMx
ZmI1M2I3YzJjZGI5OWVlMTlkZDVhZGE2OC4uNjMyMmU3MzMyMjkyMTE0ZjBlMjU0YThlMWVmMTNk
YTVjNDE5NTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBKU0xvY2s6OmxvY2soaW50cHRyX3QgbG9ja0NvdW50KQog
ICAgICAgICBtX2xvY2subG9jaygpOwogICAgIH0KIAotICAgIG1fb3duZXJUaHJlYWQgPSBjdXJy
ZW50VGhyZWFkKCk7CisgICAgbV9vd25lclRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1faGFzT3duZXJUaHJlYWQgPSB0cnVlOwog
ICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suaAppbmRleCAwYzM1ODQ3ZTQyM2U2NGJjNzA1MDNkNWUxZDg1ZDQ4MDUwOWRiZTc0Li4xYWNh
NGI5YTdiYjRkY2FmMDRkZjEyMTcxMDk3MjBlYzhlMmQ2OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suaApAQCAtOTIsMTMgKzkyLDEzIEBAIGNsYXNzIEpTTG9jayA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKIAogICAgIFZNKiB2bSgpIHsgcmV0
dXJuIG1fdm07IH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8VGhyZWFkSWRlbnRpZmllcj4gb3duZXJU
aHJlYWQoKSBjb25zdAorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVyVGhy
ZWFkKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2hhc093bmVyVGhyZWFkKQogICAgICAg
ICAgICAgcmV0dXJuIG1fb3duZXJUaHJlYWQ7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAgICAgfQotICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB7IHJldHVybiBt
X2hhc093bmVyVGhyZWFkICYmIG1fb3duZXJUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpOyB9Cisg
ICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsgcmV0dXJuIG1faGFzT3duZXJU
aHJlYWQgJiYgbV9vd25lclRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7IH0KIAogICAg
IHZvaWQgd2lsbERlc3Ryb3lWTShWTSopOwogCkBAIC0xMzUsNyArMTM1LDcgQEAgY2xhc3MgSlNM
b2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogICAgIC8vIGRpZmZl
cmVudCB0aHJlYWQsIGFuZCBhbiBvcHRpb25hbCBpcyB2dWxuZXJhYmxlIHRvIHJhY2VzLgogICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MDQyI2M2
CiAgICAgYm9vbCBtX2hhc093bmVyVGhyZWFkIHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlm
aWVyIG1fb3duZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9vd25lclRocmVhZDsKICAg
ICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX2xvY2tEcm9wRGVwdGg7CiAg
ICAgYm9vbCBtX3Nob3VsZFJlbGVhc2VIZWFwQWNjZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU0MTk3ZTczYzg0MTJhODBmMzYxNDBjN2FkODZlYzc2NGZhYzI5MzcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIE9TKERBUldJTikgfHwgT1MoVU5JWCkKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0j
ZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4p
Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lmIE9TKERBUldJTikKLSNpbmNsdWRl
IDxtYWNoL3RocmVhZF9hY3QuaD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgT1MoREFSV0lOKQotdHlwZWRl
ZiBtYWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIE9TKFdJTkRPV1MpCi10eXBlZGVm
IERXT1JEIFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhy
ZWFkX3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZW5kaWYgLy8gT1MoREFSV0lOKQotICAgIAotaW5saW5l
IFBsYXRmb3JtVGhyZWFkIGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpCi17Ci0jaWYgT1MoREFSV0lO
KQotICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhyZWFkX25wKHB0aHJlYWRfc2VsZigpKTsKLSNl
bGlmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIHJldHVybiBwdGhyZWFkX3NlbGYoKTsKLSNlbmRpZgotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXggN2QzN2E2NzRhYmEwOTQ3MjMxODQ5M2IzM2JjODlm
ZTNmYWQ5OGE5ZC4uNjdmMjBkOTJjZWNkZjBhYjNiZmY3ZjZmZDEyNjYwMGFhMTViZjFhZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBGcmFtZVdhbGtlciB7CiAgICAgYm9vbCBpc1Zh
bGlkRnJhbWVQb2ludGVyKHZvaWQqIGV4ZWMpCiAgICAgewogICAgICAgICB1aW50OF90KiBmcENh
c3QgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGV4ZWMpOwotICAgICAgICBmb3IgKE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVh
ZHNMaXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJl
YWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVh
ZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVU
aHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAg
ICAgIHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0
YWNrQmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrTGltaXQgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YWNrQmFzZSk7CkBAIC0yNzksNyArMjc5LDcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2Ft
cGxpbmdQcm9maWxlcihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAg
ICwgbV93ZWFrUmFuZG9tKCkKICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkK
ICAgICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhPcHRpb25z
OjpzYW1wbGVJbnRlcnZhbCgpKSkKLSAgICAsIG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgICwg
bV90aHJlYWQobnVsbHB0cikKICAgICAsIG1fanNjRXhlY3V0aW9uVGhyZWFkKG51bGxwdHIpCiAg
ICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pc1NodXREb3duKGZhbHNlKQpAQCAtMzAw
LDExICszMDAsMTEgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vz
c2FyeShjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tl
ZCgpKTsKIAotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQog
ICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8U2FtcGxpbmdQcm9maWxlcj4gcHJvZmlsZXIg
PSB0aGlzOwotICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgianNjLnNhbXBs
aW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0geworICAgIG1fdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci50aHJlYWQiLCBbcHJvZmlsZXJdIHsKICAg
ICAgICAgcHJvZmlsZXItPnRpbWVyTG9vcCgpOwogICAgIH0pOwogfQpAQCAtMzQ0LDcgKzM0NCw3
IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tl
ciYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAgICAgIExvY2tIb2xkZXIgY29kZUJsb2Nr
U2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwogICAgICAgICBM
b2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6
c2luZ2xldG9uKCkuZ2V0TG9jaygpKTsKIAotICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOworICAgICAgICBhdXRvIGRpZFN1c3BlbmQgPSBt
X2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkg
ewogICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBj
YW4ndCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVzZSB0aGUgSlNDIHRocmVhZAogICAgICAg
ICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgpAQCAtMzU0LDEzICszNTQs
MTIgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJ
c0xMSW50ID0gZmFsc2U7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdp
c3RlcnM7CisgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3Rl
cnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRS
ZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICBtYWNoaW5lRnJhbWUgPSByZWdp
c3RlcnMuZnJhbWVQb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGlj
X2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAgICAgICAgICAgICAgICBtYWNoaW5l
UEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgbGxp
bnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRp
b25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUg
cGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0N2Y5ZTY3NjhhZDQzN2JiMThlMGE4YWJj
Nzk1YmQ2Y2YuLjA0M2RhZGJhNDA3MGI2ZjkxODA3YmQ0Y2ExMzI2OTRjM2NlYmFjNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAg
LTE5NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1fbGFzdFRpbWU7CiAgICAgTG9j
ayBtX2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7Ci0gICAg
TWFjaGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVjdXRpb25UaHJlYWQ7CisgICAgUmVmUHRy
PFRocmVhZD4gbV90aHJlYWQ7CisgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkKiBtX2pzY0V4
ZWN1dGlvblRocmVhZDsKICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lzU2h1dERv
d247CiAgICAgYm9vbCBtX25lZWRzUmVwb3J0QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5
NWY0NmUuLmU5N2MzMTg1ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2Rl
PFZNPiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENv
ZGVCbG9jayosIGNvbnN0IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAg
c3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRy
PFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRo
cmVhZCgpOyB9CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNk
NDYzYjcyZjMzZTQ2NGI3YjVhNTlkMDExOTM4ZjY5Li4yNzJjNGRlZmE4NTVmYzM5YjBjZDQxMDFl
NWU3ZTRiMmJkYzBkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8Vk0qLCBT
dGFja0JvdW5kcz4sIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAgICAgICAg
ICAgICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBUcnkg
bmV4dCBWTS4KICAgICAgICAgfQogCi0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OlRocmVh
ZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRz
TG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1hY2hpbmVUaHJlYWRzLnRocmVhZHNM
aXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5u
ZXh0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPnN0YWNrQmFzZSgpKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tFbmQoKSk7CiAgICAgICAg
ICAgICBpZiAoc3RhY2tQb2ludGVyIDw9IHRocmVhZC0+c3RhY2tCYXNlKCkgJiYgc3RhY2tQb2lu
dGVyID49IHRocmVhZC0+c3RhY2tFbmQoKSkgewpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgVk1U
cmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwog
ICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsK
ICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAg
c2lnbmFsVGhyZWFkKG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKSwgU0lHVVNSMSk7CisgICAg
ICAgICAgICAgICAgb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLT5zaWduYWwoU0lHVVNSMSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQ5Myw3ICs0OTMs
NyBAQCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6OkV2ZW50VHlwZSBldmVudFR5cGUp
CiAgICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3QgYmxvY2suCiAgICAgICAgIFJlZlB0cjxT
aWduYWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5ldyBTaWduYWxTZW5kZXIodm0oKSwgZXZl
bnRUeXBlKSk7CiAgICAgICAgIGFkZFNpZ25hbFNlbmRlcihzZW5kZXIuZ2V0KCkpOwotICAgICAg
ICBjcmVhdGVUaHJlYWQoImpzYy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0g
eworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQi
LCBbc2VuZGVyXSB7CiAgICAgICAgICAgICBzZW5kZXItPnNlbmQoKTsKICAgICAgICAgfSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU4ZjE5
YjU2ZDMzY2I4OGE2ZmI0OWQ2ZTVmM2I2MDk3ODZiYzBjYy4uNzQxNDhhODAxNGIyZWUwY2U1MTEy
NjZjYmE0YThhNzRlZWQyNjg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zMjUsOCArMzI1LDggQEAKIAkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEE0NzMyRDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJ
QThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5oICovOyB9OwogCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uLmggKi87IH07Ci0JCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVy
RGF0YVB0aHJlYWRzLmNwcCAqLzsgfTsKLQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmggKi87IH07CisJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVy
UHRocmVhZHMuY3BwICovOyB9OworCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
SG9sZGVyUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5o
ICovOyB9OwogCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMyMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0QjE1MUE4MjVCMDA0
MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi87IH07
CiAJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNTE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovOyB9OwpAQCAtNzI4LDggKzcy
OCw4IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
aHJlYWRGdW5jdGlvbkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmll
ckRhdGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMx
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTE2NCw4ICsxMTY0LDggQEAKIAkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2
NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgw
MDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovLAotCQkJCUE4QTQ3MzMwMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywKLQkJ
CQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhy
ZWFkcy5jcHAgKi8sCisJCQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRl
clB0aHJlYWRzLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Zy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICov
LAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
Ki8sCkBAIC0xNjE4LDcgKzE2MTgsNyBAQAogCQkJCTFDQ0RCMTRGMUU1NjY4OTgwMDZDNzNDMCAv
KiBUZXh0QnJlYWtJdGVyYXRvcklDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NDcxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJE
YXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xODQzLDcgKzE4NDMsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1
MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4
MUM3RjFEMzA3OERBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50
ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEEx
RDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291
cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4
NTY1MjllOGFhZWE2YWJmNjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2Mjcy
MGRiOGMwYjk5YWJjM2I3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRp
dGlvblNwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNw
ZWVkVGVzdC5jcHAKQEAgLTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0
aW9uVHlwZSBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247
CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZl
Y3RvcjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0
cjxUaHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBw
cm9kdWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExv
Y2tUeXBlIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25z
dW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZd
ICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQg
cnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBj
b25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRp
bnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250
aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6
ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hv
dWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYg
cXVldWUuaXNFbXB0eSgpKQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAg
IGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAog
ICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAg
dm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24s
IGxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tp
bmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENv
bnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6
Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENv
bnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5z
aXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1
ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7
CkBAIC0xMzgsMTEgKzEzOCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAg
IG5vdGlmeShlbXB0eUNvbmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRl
bnRpZmllcik7CisgICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9
CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2Vy
VGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmll
cik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQor
ICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3
NTExODQ4YmI1MmQ5NGYuLjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcg
KzYyLDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2Nr
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtl
X3VuaXF1ZTx1bnNpZ25lZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRl
bnRpZmllcltdPihudW1UaHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxU
aHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51
bVRocmVhZHMpOwogICAgIAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7
CiAgICAgCkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTsp
IHsKICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhy
ZWFkc1t0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3Ro
cmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsg
VGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3
LDcgKzEwNyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9j
aygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhy
ZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRz
W3RocmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNo
bWFya3MvTG9ja1NwZWVkVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVk
VGVzdC5jcHAKaW5kZXggNTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4u
ODJkMzlmODdjNmM3MDZjMTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVu
Y2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2ht
YXJrIHsKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlw
ZT5bXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihu
dW1UaHJlYWRHcm91cHMpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91
YmxlPltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihu
dW1UaHJlYWRHcm91cHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmll
cltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRo
cmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhy
ZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAg
IHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1
Y3QgQmVuY2htYXJrIHsKICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVl
ID0gMDsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVh
ZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3Ro
cmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVh
dGVUaHJlYWQoCisgICAgICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVt
VGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAg
ICAgICAgICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3Ro
cmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9u
c0xvY2ssICZudW1JdGVyYXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgbG9jYWxXb3JkID0gMDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsK
ICAgICAgICAga2VlcEdvaW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQg
dGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVh
ZEluZGV4LS07KQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0
aHJlYWRJbmRleF0pOworICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JD
b21wbGV0aW9uKCk7CiAKICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNU
aHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdj
NmUyNWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJk
ZmJkMGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0
aWNUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAg
LTE1NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKQogICAgIAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAg
Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRy
PFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRp
Y1RocmVhZCIsCiAgICAgICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAg
LTIyMCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3Jr
UmVzdWx0OjpDb250aW51ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFj
aFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21h
dGljVGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5
MTE5Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1NWZlYmEyYzcuLmI1MGJiYmMzYmYzYWQyYjFmZGQx
MzQ1MzQ4NjU0YWIxZDQxOGNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xMjgsNyArMTI4
LDYgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmlu
dFN0cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5oCiAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmlj
LmgKICAgICBUaHJlYWRpbmcuaApAQCAtMzI5LDE2ICszMjgsMTQgQEAgbGlzdChBUFBFTkQgV1RG
X0xJQlJBUklFUwogaWYgKFdJTjMyKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAg
ICAgIE9TQWxsb2NhdG9yV2luLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAg
ICAgIFRocmVhZFNwZWNpZmljV2luLmNwcAogICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAg
KQogZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9IRUFERVJTCi0gICAgICAgIFRocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuaAotICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwogICAgICAgICBPU0FsbG9jYXRvclBvc2l4LmNwcAotICAgICAgICBUaHJlYWRJZGVudGlmaWVy
RGF0YVB0aHJlYWRzLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAg
ICAgVGhyZWFkaW5nUHRocmVhZHMuY3BwCiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5j
cHAKaW5kZXggMDI0OTU0NGM1MThlODJhZmYxNzA1ZGUxOWVjOTY1YWI5OGIxZDEwNi4uMzRiOTQy
NTU1YWI1NjE4MzIxMDE4YjRmMDc5MGYyODI1MGE3ZGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvTWFpblRocmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAK
QEAgLTE4Niw5ICsxODYsOSBAQCBib29sIGlzTWFpblRocmVhZCgpCiAjZW5kaWYKIAogI2lmICFV
U0UoV0VCX1RIUkVBRCkKLWJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCitib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCkKIHsKLSAgICByZXR1cm4gdGhyZWFkSWQg
PT0gY3VycmVudFRocmVhZCgpOworICAgIHJldHVybiB0aHJlYWQgPT0gY3VycmVudFRocmVhZCgp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBi
L1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3Njgz
Y2U1NTA4ZGQ4ZDdmMWQ3N2FmLi4wZTc4ZThlNTFhYmU4ZDk1NTQ3MmM3OWRkMzQ2OTJmMTU0NmRi
MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5oCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlIDxzdGRp
bnQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFz
cyBQcmludFN0cmVhbTsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotCiAv
LyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1
cmVIYW5kbGVyLmgKaW5kZXggZGZkZGYwYTk1NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2Yzdi
ZC4uNDEyOGY1Y2Q3MWE3ZGIyZjRmZDcwMzI5NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93
dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1v
cnlQcmVzc3VyZUhhbmRsZXIgewogI2lmIFVTRShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3Vy
Y2U+IG1fc291cmNlOwogI2Vsc2UKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElE
OworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIv
U291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIw
YTM4ZTEwM2U3YzlhMmU0ZjBmN2UwNjEwNTcxNC4uY2NlMTEwNmQ0NjdiNzIwODNjMWVkYjIxM2Fk
NTljNDQwMzE3YTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2Vu
ZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAg
LTkzLDE0ICs5MywxNCBAQCBib29sIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6
OnRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCogcGFyZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElE
ID0gY3JlYXRlVGhyZWFkKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQor
ICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCZQYXJhbGxlbEVudmlyb25tZW50OjpU
aHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKIAot
ICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgbV9wYXJlbnQg
PSBwYXJlbnQ7CiAKICAgICBtX211dGV4LnVubG9jaygpOwotICAgIHJldHVybiBtX3RocmVhZElE
OworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpU
aHJlYWRQcml2YXRlOjpleGVjdXRlKFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lk
KiBwYXJhbWV0ZXJzKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVu
dDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEpCiAgICAgVGhy
ZWFkUHJpdmF0ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWRQcml2YXRl
Kj4odGhyZWFkRGF0YSk7CiAgICAgTG9ja0hvbGRlciBsb2NrKHNoYXJlZFRocmVhZC0+bV9tdXRl
eCk7CiAKLSAgICB3aGlsZSAoc2hhcmVkVGhyZWFkLT5tX3RocmVhZElEKSB7CisgICAgd2hpbGUg
KHNoYXJlZFRocmVhZC0+bV90aHJlYWQpIHsKICAgICAgICAgaWYgKHNoYXJlZFRocmVhZC0+bV9y
dW5uaW5nKSB7CiAgICAgICAgICAgICAoKnNoYXJlZFRocmVhZC0+bV90aHJlYWRGdW5jdGlvbiko
c2hhcmVkVGhyZWFkLT5tX3BhcmFtZXRlcnMpOwogICAgICAgICAgICAgc2hhcmVkVGhyZWFkLT5t
X3J1bm5pbmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9i
c0dlbmVyaWMuaCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCA0
NTg0MDdjNGNiNGEzZjk5NWM5MGM1NTU2MjdjMWNiZDIyYjQxYjVjLi43ZDY4ZWYwNzBmNjdhNjUz
M2MwYjg3NTgzZDJhNTdhMTE4ZDA1NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEpvYnNHZW5lcmljLmgKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJp
Yy5oCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgIGNs
YXNzIFRocmVhZFByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7CiAg
ICAgcHVibGljOgogICAgICAgICBUaHJlYWRQcml2YXRlKCkKLSAgICAgICAgICAgIDogbV90aHJl
YWRJRCgwKQorICAgICAgICAgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICAgICAgICAgLCBt
X3J1bm5pbmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGFyZW50KDApCiAgICAgICAgIHsKQEAg
LTc0LDcgKzc0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHdvcmtlclRocmVhZCh2b2lkKik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBUaHJl
YWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFk
OwogICAgICAgICBib29sIG1fcnVubmluZzsKICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCog
bV9wYXJlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIv
U291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5
YWRkYjJjYzU4MTBiNTZlMWMxNC4uY2MxYTIxYjllYTVjY2NjNmYxYWNlNGM5NzQ5ODk5YmJkYTVk
N2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVh
ZERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRo
cmVhZERhdGEoKTsKICAgICB+VGhyZWFkRGF0YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJZGVudGlmaWVyOworICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKICAgICAKICAgICBNdXRl
eCBwYXJraW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKQEAg
LTQyMyw3ICs0MjMsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhy
ZWFkcykKIH0KIAogVGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCi0gICAgOiB0aHJlYWRJZGVudGlm
aWVyKGN1cnJlbnRUaHJlYWQoKSkKKyAgICA6IHRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKSkKIHsK
ICAgICB1bnNpZ25lZCBjdXJyZW50TnVtVGhyZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC03OTMs
NyArNzkzLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0
IHZvaWQqIGFkZHJlc3MpCiAgICAgdW5wYXJrQ291bnQoYWRkcmVzcywgVUlOVF9NQVgpOwogfQog
Ci1ORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRM
YW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKK05F
VkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQogewogICAgIFZlY3RvcjxC
dWNrZXQqPiBidWNrZXRzVG9VbmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CiAKQEAgLTgwMyw3ICs4
MDMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBT
Y29wZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaQogICAgICAgICBpZiAoIWJ1Y2tldCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJl
YWREYXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhy
ZWFkRGF0YSA9IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKLSAgICAgICAgICAgIGNh
bGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLCBjdXJyZW50VGhyZWFk
RGF0YS0+YWRkcmVzcyk7CisgICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+
dGhyZWFkLmdldCgpLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAgIAog
ICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmluZGV4
IDdkNWZiMTdlZmEwMmFiNzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTljN2I3
ZmQ0Y2M2YWNhZTM2MmFlYTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bh
cmtpbmdMb3QuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3ICsx
NTgsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
ICAgIHN0YXRpYyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAg
IGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0
IHZvaWQqKT4oZnVuYykpOworICAgICAgICBmb3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9p
ZChUaHJlYWQmLCBjb25zdCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0x
NzEsNyArMTcxLDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3Ms
IGNvbnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwog
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNj
b3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFt
YmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3Rm
L1JlZlB0ci5oCmluZGV4IGZlMTYzMGM5NzM1YjVmZjUzNTNjYjJjNTU4ZTMxMDU4MTI0Nzg3ZDgu
LjI3N2U2NzVkYjNjNTU1ZDVlNGM2Y2UwNDk0Njg4NzRkMzY3Njk1OWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC00
Miw3ICs0Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0ciB7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNSZWZQdHIgPSB0cnVlOwogCi0gICAgQUxXQVlTX0lOTElO
RSBSZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3Rl
eHByIFJlZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQ
dHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyByZWZJZk5vdE51bGwocHRyKTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgUmVmUHRyKGNvbnN0IFJlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IHJlZklm
Tm90TnVsbChtX3B0cik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29uc3Qg
UmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0KCkpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAppbmRleCA5NDNmZDZkNzlk
MDk0NDI1NTAzYWM4OTczMWIwYTA2YTZhYzQwZmZkLi5jYjI3NWY3MDEyY2ZlNTY2MWU0OWUwYjRm
ZjBkOWM2MjFiMGU0OTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlv
bkludm9jYXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaApAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25f
aAogI2RlZmluZSBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAogCisjaW5jbHVkZSAiVGhyZWFk
aW5nLmgiCisKIG5hbWVzcGFjZSBXVEYgewogCiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlv
bikodm9pZCogYXJndW1lbnQpOwpAQCAtMzYsMTMgKzM4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKlRo
cmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEp
CisgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCBS
ZWZQdHI8VGhyZWFkPiYmIHRocmVhZCwgdm9pZCogZGF0YSkKICAgICAgICAgOiBmdW5jdGlvbihm
dW5jdGlvbikKKyAgICAgICAgLCB0aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQogICAgICAgICAsIGRh
dGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb247Cisg
ICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkOwogICAgIHZvaWQqIGRhdGE7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FjMjNiMGFmZTk2MTI0
ZDJmZDBjNTYxMTdmMDBmMzA5NGIwZWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJlYWRzLmgiCisKKyNpbmNs
dWRlICJUaHJlYWRpbmcuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2lmIE9TKEhVUkQpCisv
LyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwg
c28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVyZS4KKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAx
MDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYg
eworCitwdGhyZWFkX2tleV90IFRocmVhZEhvbGRlcjo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFY
OworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFk
SG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2Ny
ZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIENSQVNIKCk7
Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICBBU1NF
UlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRo
cmVhZEhvbGRlcio+KHB0aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkpKTsKK30KKwordm9pZCBUaHJl
YWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50
KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNz
ZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAg
Ly8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0
Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNv
b24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMo
bV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVh
ZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVh
ZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAg
QVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVy
RGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZp
ZXJEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRh
dGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1
ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgorICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
UHRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTNjZWRmMTU4MDM1ZmNjNjQzZDMyZjVlMmVkMjI1Njdl
NzBlYzNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRo
cmVhZHMuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRocmVhZEhvbGRlclB0aHJlYWRz
X2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJl
YWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3Mg
ZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlCisvLyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAu
IEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlw
bGUtcGFzcyBkZXN0cnVjdGlvbi4KK2NsYXNzIFRocmVhZEhvbGRlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVGhyZWFkSG9sZGVyKTsKK3B1YmxpYzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7
CisKKyAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdo
b2xlLgorICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXpl
KCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
T25jZSgpOworCisgICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRI
b2xkZXIgaW50byB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKFRocmVhZCYpOworCisgICAgLy8gUmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBz
dG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIFRocmVhZEhvbGRlciogY3Vy
cmVudCgpOworCisgICAgVGhyZWFkJiB0aHJlYWQoKSB7IHJldHVybiBtX3RocmVhZC5nZXQoKTsg
fQorCitwcml2YXRlOgorICAgIFRocmVhZEhvbGRlcihUaHJlYWQmIHRocmVhZCkKKyAgICAgICAg
OiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMg
Y2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKKyAgICAvLyAtIGZpcnN0LCB3
aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQs
IGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKKyAgICAvLyBhbmQg
cmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhy
ZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQg
YWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0aGUg
dGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIGRlc3Ry
dWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90aHJlYWQ7CisgICAgYm9vbCBt
X2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyUHRocmVhZHNfaAor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5YzA5NTkzYjk1ZDc2
MGU4MjEwODU0MzIyYmNjYTI5NjY4MjU4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyV2luLmgiCisKKyNpbmNsdWRlICJUaHJl
YWRpbmcuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK0RXT1JEIFRocmVhZEhvbGRlcjo6bV9rZXkg
PSAwOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhy
ZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVh
ZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIERXT1JEIG1fa2V5ID0gRmxzQWxsb2Mo
ZGVzdHJ1Y3QpOworICAgIGlmIChtX2tleSA9PSBGTFNfT1VUX09GX0lOREVYRVMpCisgICAgICAg
IENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oRmxzR2V0VmFsdWUobV9rZXkp
KTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFkJiB0aHJlYWQpCit7
CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3ZSdkIGhhdmUgdGhp
cyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVy
Zm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFu
cyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8vIFdURjo6aW5pdGlh
bGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KKyAgICAg
ICAgRmxzU2V0VmFsdWUobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7CisgICAgfQor
fQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBUaHJl
YWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVy
Kj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKKworICAgIGlmICh0
aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgZGVsZXRl
IHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhy
ZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1z
ZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBh
ZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgor
ICAgIEZsc1NldFZhbHVlKG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2lu
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmQ3MDM1
YWQwOGRkNzE4NTFlZTNiOGU0YWQ3ZTkxNmRjZDEyMjYzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBUaHJlYWRIb2xkZXJXaW5faAorI2RlZmluZSBUaHJlYWRIb2xkZXJXaW5faAorCisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMg
c3RvcmFnZSBhbmQgZW1wbG95cyBGTFMgMi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJl
bW92ZQorLy8gVGhyZWFkIGZyb20gdGhyZWFkTWFwLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFk
U3BlY2lmaWMgdHlwZXMgZG9uJ3QgdXNlIG11bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFz
cyBUaHJlYWRIb2xkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEhvbGRlcik7
CitwdWJsaWM6CisgICAgflRocmVhZEhvbGRlcigpOworCisgICAgLy8gT25lIHRpbWUgaW5pdGlh
bGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9sZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBt
dXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgpIGFuZCBpdCBpcyBub3QgdGhyZWFkLXNh
ZmUuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKKworICAgIC8vIENyZWF0ZXMg
YW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkSG9sZGVyIGludG8gdGhyZWFkLXNwZWNpZmlj
IHN0b3JhZ2UuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWQmKTsKKworICAgIC8v
IFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVk
LgorICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIqIGN1cnJlbnQoKTsKKworICAgIFRocmVhZCYgdGhy
ZWFkKCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRI
b2xkZXIoVGhyZWFkJiB0aHJlYWQpCisgICAgICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgICAg
ICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGlz
IHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNhbGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFk
IHRlcm1pbmF0ZXM6CisgICAgLy8gLSBmaXJzdCwgd2hlbiBhbGwgdGhlIG90aGVyIHRocmVhZC1z
cGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBpdCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdh
cyAnZGVzdHJveWVkIG9uY2UnCisgICAgLy8gYW5kIHJlLXNldHMgaXRzZWxmIGludG8gdGhlIHRo
cmVhZC1zcGVjaWZpYyBzbG90IHRvIG1ha2UgV2luIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisg
ICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2Vy
ZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRo
ZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFu
dXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgZGVzdHJ1Y3Qodm9pZCog
ZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBib29sIG1faXNEZXN0cm95
ZWRPbmNlOworICAgIHN0YXRpYyBEV09SRCBtX2tleTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyV2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBiZWJmZTkzYmE1YzcwYTliNGY0YjVmMjY1NzIxZGQxNjliZmYxNDMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFBUSFJFQURTKQotCi0jaW5jbHVk
ZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIgotCi0jaW5jbHVkZSAiVGhyZWFkaW5n
LmgiCi0KLSNpZiBPUyhIVVJEKQotLy8gUFRIUkVBRF9LRVlTX01BWCBpcyBub3QgZGVmaW5lZCBp
biBiaW9uaWMgbm9yIGluIEh1cmQsIHNvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUuCi0jZGVm
aW5lIFBUSFJFQURfS0VZU19NQVggMTAyNAotI2Vsc2UKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotcHRocmVhZF9rZXlfdCBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOwotCi12b2lkIHRocmVhZERpZEV4aXQoVGhy
ZWFkSWRlbnRpZmllcik7Ci0KLVRocmVhZElkZW50aWZpZXJEYXRhOjp+VGhyZWFkSWRlbnRpZmll
ckRhdGEoKQotewotICAgIHRocmVhZERpZEV4aXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2UoKQotewotICAgIGludCBlcnJvciA9
IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKLSAgICBpZiAoZXJyb3IpCi0g
ICAgICAgIENSQVNIKCk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgVGhyZWFkSWRlbnRpZmllckRh
dGE6OmlkZW50aWZpZXIoKQotewotICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFY
KTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0
aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkp
KTsKLQotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyRGF0YSA/IHRocmVhZElkZW50aWZpZXJE
YXRhLT5tX2lkZW50aWZpZXIgOiAwOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpp
bml0aWFsaXplKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVy
KCkpOwotICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBl
dmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZvcm1hbmUuCi0gICAgLy8gSGF2aW5n
IHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4n
dCBjYWxsCi0gICAgLy8gV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1
Z3MgaW4gcmVsZWFzZSBtb2RlLgotICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5ICE9IFBUSFJFQURf
S0VZU19NQVgpOwotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRJZGVu
dGlmaWVyRGF0YShpZCkpOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpkZXN0cnVj
dCh2b2lkKiBkYXRhKQotewotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKiB0aHJlYWRJZGVudGlm
aWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXJEYXRhKj4oZGF0YSk7Ci0gICAg
QVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKLQotICAgIGlmICh0aHJlYWRJZGVudGlmaWVy
RGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKLSAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZp
ZXJEYXRhOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhyZWFkSWRlbnRpZmllckRh
dGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKLSAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1
ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgotICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg0MzQ5YTBjZGRhYWVjODYwYmNiZTRiYzBhNzI1YmQyNzVlNzJlYmQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0jZGVmaW5lIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHNfaAotCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotLy8gSG9sZHMgVGhyZWFkSWRlbnRpZmllciBpbiB0aGUgdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgcHRocmVhZHMtc3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0
aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQotLy8gVGhyZWFkSWRlbnRpZmllciBmcm9tIHRocmVhZE1h
cC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmljIHR5cGVzIGRvbid0IHVzZSBtdWx0
aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhyZWFkSWRlbnRpZmllckRhdGEgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZElkZW50aWZpZXJEYXRhKTsKLXB1YmxpYzoKLSAg
ICB+VGhyZWFkSWRlbnRpZmllckRhdGEoKTsKLQotICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0
aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCi0gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBi
ZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgot
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBw
dXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZElkZW50aWZpZXJEYXRhIGludG8gdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UuCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVy
IGlkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9y
YWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRl
bnRpZmllcigpOwotCi1wcml2YXRlOgotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKFRocmVhZElk
ZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikK
LSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
Ly8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVu
IHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0
aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVy
cyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwotICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRv
IHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdh
aW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVz
dHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwg
d2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aGUgdGhyZWFkTWFw
LCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgotICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQq
IGRhdGEpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgYm9vbCBt
X2lzRGVzdHJveWVkT25jZTsKLSAgICBzdGF0aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkc19oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXggYzFkYzM1MDE5MDNhYjc2YjM3MDQ2ZDkz
MzNmOTMyYTNlZjBjNmM2ZS4uNzE4NzgxNDEwMThlNjgwM2MwMDcwNzFhMmY2ZmE2MGVjMjAzY2U1
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBOZXdUaHJlYWRD
b250ZXh0IHsKICAgICBNdXRleCBjcmVhdGlvbk11dGV4OwogfTsKIAotY29uc3QgY2hhciogbm9y
bWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorY29uc3QgY2hhciogVGhy
ZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYg
SEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcmV0dXJuIHRocmVhZE5hbWU7CkBAIC04Miw3
ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEp
CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsKICAg
ICB9CiAKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUp
OworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5u
YW1lKTsKIAogICAgIGF1dG8gZW50cnlQb2ludCA9IFdURk1vdmUoY29udGV4dC0+ZW50cnlQb2lu
dCk7CiAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZv
aWQqIGNvbnRleHREYXRhKQogICAgIGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVu
dHJ5UG9pbnQpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludCkKIHsKICAgICBOZXdUaHJlYWRDb250
ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5
UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhl
Y3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAg
ICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAKLSAgICByZXR1
cm4gY3JlYXRlVGhyZWFkSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7
CisgICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29u
dGV4dCwgbmFtZSk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCitSZWZQdHI8
VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBk
YXRhLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBjcmVhdGVUaHJlYWQobmFtZSwg
W2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUobmFtZSwgW2Vu
dHJ5UG9pbnQsIGRhdGFdIHsKICAgICAgICAgZW50cnlQb2ludChkYXRhKTsKICAgICB9KTsKIH0K
IAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGlu
dCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgQVNTRVJU
KHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiAjZW5kaWYK
IH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVBy
aW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50
IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBBU1NFUlQo
cmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgc2V0Q3Vy
cmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKICNpZiBIQVZF
KFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1heFFPU2NsYXNzIHsgUU9T
X0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRR
T1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3MgPSBtYXhDbGFzczsKIH0K
IAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNz
KQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdp
bmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9IFFPU19DTEFTU19VTlNQ
RUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFsQ2xhc3MsIGdsb2JhbE1h
eFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0Ns
YXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9pZCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2YjU1OGIzZTFkNTE3ZTgx
MGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi41OTk1NmM2NTY1N2E3ODlhNTU0NGJmODM1MmM2ZmJj
MDI3ZWVhMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFr
dGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RA
cmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3
MiArMzksMjI4IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5o
PgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMpCisjaWYgT1MoREFSV0lOKQorI2luY2x1
ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNp
bmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0
X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCisvLyBUaGlzIGJ1ZyBoYXMg
YmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNh
biBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wuCisvLyBodHRwczov
L2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQorI2lmIE9T
KEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgorCisjaWYgT1MoTElOVVgp
CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIUNPTVBJTEVS
KE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRl
IDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVk
ZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBDUFUo
WDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vs
aWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdp
c3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFkX3N0YXRlX3QgUGxhdGZv
cm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBwY190aHJlYWRfc3RhdGU2
NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5cGVkZWYgYXJtX3RocmVh
ZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTTY0KQordHlwZWRlZiBh
cm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbHNlCisjZXJyb3IgVW5r
bm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5ET1dTKQorCit1c2luZyBQ
bGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8
fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBt
Y29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgeworICAgIHZv
aWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit1c2luZyBUaHJlYWRJZGVudGlmaWVy
ID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1l
bnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhy
ZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8vIERhcndpbiBpcyBhbiBl
eGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVh
ZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBjYWxscyBhcmUgbm90IHJl
ZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
K2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFzcyBUaHJlYWQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CitwdWJsaWM6CisgICAgZnJp
ZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlv
biBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24g
c29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRf
UFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiB0aHJlYWRO
YW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+VGhy
ZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNw
b25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ug
Wy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4K
LVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2
ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwor
ICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgorICAgIC8v
IFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3Jt
cyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8
VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29u
c3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGN1
cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRocmVhZFByaW9y
aXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAgIC8vIFJldHVybnMgVGhy
ZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNhbiBiZSAoYSBiaXQpIGNvc3RseSBpbiBXaW5kb3dz
LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7CiAKLS8v
IERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQgY3JlYXRpb24uCi1XVEZf
RVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rp
b24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICAvLyBSZXR1cm5zIFRocmVh
ZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVz
IGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFkcyBhbmQgZW5zdXJlIHRoZSB0aHJlYWQg
bGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJl
YWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFs
KFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHkoaW50KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFs
aXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUg
bXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6ZUN1cnJl
bnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyNpZiBPUyhEQVJXSU4p
CisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBrZXJuX3JldHVybl90OworI2VsaWYg
VVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9yID0gaW50OworI2Vs
aWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IERXT1JEOwor
I2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPHZvaWQsIFBsYXRmb3Jt
U3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVz
dW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLWJvb2wgc2lnbmFsVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNlbmRpZgogCisgICAgLy8gTWFyayB0
aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3BvbnNpdmVuZXNzLgorICAgIC8v
IHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUg
YSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGlu
dCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkg
PSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgcW9z
X2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3Mo
cW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdURgorICAgIC8vIEludGVy
bmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgorICAg
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11c2luZyBXVEY6OlRocmVhZElkZW50aWZp
ZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVzaW5nIFdURjo6Y3VycmVudFRocmVhZDsK
LXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7Ci11c2luZyBXVEY6OmRldGFjaFRocmVh
ZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247CisgICAgLy8gQ2FsbGVkIGlu
IHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgIC8vIEhlbHBmdWwgZm9yIHBs
YXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhl
IHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3JtYWxp
emVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCiAjaWYgVVNFKFBUSFJFQURT
KQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgdm9pZCBlc3RhYmxpc2gocHRocmVhZF90
KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJlYWRJZGVudGlmaWVyKTsK
ICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisjaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lO
KQorICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5m
b190Kiwgdm9pZCogdWNvbnRleHQpOwogI2VuZGlmCiAKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgdm9pZCBhZGRPbkV4aXRDYWxsYmFjayhz
dGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbV9v
bkV4aXRDYWxsYmFjay5hcHBlbmQoY2FsbGJhY2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpZCgpID09
IHRocmVhZC5pZCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUaHJlYWQm
IHRocmVhZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpZCgpICE9IHRocmVhZC5pZCgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQoKTsKKworICAgIGVudW0gSm9pbmFibGVTdGF0ZSB7
CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUg
am9pbmVkIG9uLgorICAgICAgICBKb2luYWJsZSwKKworICAgICAgICAvLyBTb21lYm9keSB3YWl0
ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0aHJlYWQgZmluYWxseSBleGl0ZWQu
IFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBhCisgICAgICAgIC8vIHBl
cmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMg
cHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQgdGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRD
b21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBj
YWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRo
ZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdzCisgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBp
Y2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlv
biBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisgICAgICAgIEpvaW5lZCwKKworICAgICAgICAvLyBU
aGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBv
bi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1
cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERldGFjaGVkLAorICAgIH07CisKKyAgICBKb2luYWJs
ZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KKyAgICB2
b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBEZXRhY2hlZDsgfQor
ICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZvaWQgZGlkSm9pbigpIHsgbV9qb2luYWJsZVN0YXRl
ID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNFeGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4aXQ7IH0K
KworICAgIFdvcmRMb2NrIG1fbXV0ZXg7CisgICAgVGhyZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9
OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKKyAgICBi
b29sIG1fZGlkRXhpdCB7IGZhbHNlIH07CisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZChU
aHJlYWQmKT4+IG1fb25FeGl0Q2FsbGJhY2s7CisjaWYgVVNFKFBUSFJFQURTKQorICAgIHB0aHJl
YWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbV9wbGF0Zm9y
bVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3QgbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOwor
ICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKKyAgICB1bnNpZ25lZCBt
X3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBzdGQ6OmF0b21pYzxib29sPiBtX3N1c3BlbmRlZCB7
IGZhbHNlIH07CisjZW5kaWYKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAgSEFORExFIG1faGFuZGxl
OworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5c3RlbQorI2VuZGlmCit9OworCisvLyBUaGlzIGZ1
bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRv
IGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERhcndpbiBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBy
dWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwgdGhlIG9ubHkKKy8vIHJl
cXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRyYW50LgorV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOworCitpbmxpbmUgVGhyZWFkSWRl
bnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gVGhyZWFkOjpjdXJyZW50SUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmll
cjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOworCiAjZW5k
aWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0
aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCBm
NWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZjYTFkYTVhNjkyZDBmLi45MzdkNTVhYjNkOTJhYWRl
MTE3YmM1NWVlMWU4YzNjNGUwMTczZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICogQ29weXJpZ2h0IChDKSAy
MDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFrdGl4LmNvbT4KICAqIENvcHlyaWdodCAo
QykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDE0MSArNDIsMTM0IEBA
CiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5o
IgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgotI2luY2x1ZGUgIlRocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgor
I2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJlYWRzLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KICNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgog
I2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEu
aD4KLSNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCi0jaWYg
IUNPTVBJTEVSKE1TVkMpCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2NoZWQuaD4K
LSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCituYW1lc3BhY2UgV1RGIHsKIAotI2lmIE9T
KExJTlVYKQotI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorVGhyZWFkOjpUaHJlYWQoKQoreworI2lm
ICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwg
LyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVl
IGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKICNlbmRpZgorfQogCitUaHJlYWQ6On5UaHJlYWQo
KQorewogI2lmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+CisgICAgc2VtX2Rlc3Ry
b3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CiAjZW5kaWYKK30KIAotbmFtZXNwYWNl
IFdURiB7Ci0KLWNsYXNzIFB0aHJlYWRTdGF0ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBKb2luYWJsZVN0YXRlIHsKLSAgICAgICAgSm9pbmFibGUs
IC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9pbmVkIG9u
LgotCi0gICAgICAgIEpvaW5lZCwgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRv
IGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUg
YmVjYXVzZSB0aGVyZSBjYW4gYmUgYSAKLSAgICAgICAgICAgICAgICAvLyBwZXJpb2Qgb2YgdGlt
ZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9p
biB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0
byBydW4pIAotICAgICAgICAgICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERpZEV4aXQgaXMgY2Fs
bGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUg
dGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncyAKLSAgICAgICAgICAgICAgICAvLyBub2JvZHkgZWxz
ZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVhZENv
bXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgotCi0gICAgICAgIERldGFjaGVkIC8vIFRo
ZSB0aHJlYWQgaGFzIGJlZW4gZGV0YWNoZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgam9pbmVkIG9u
LiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkIG11c3QgdGFrZSBjYXJlIG9mIGNsZWFuaW5nIHVw
IGFmdGVyIGl0c2VsZi4KLSAgICB9OwotCi0gICAgLy8gQ3VycmVudGx5IGFsbCB0aHJlYWRzIGNy
ZWF0ZWQgYnkgV1RGIHN0YXJ0IG91dCBhcyBqb2luYWJsZS4gCi0gICAgUHRocmVhZFN0YXRlKHB0
aHJlYWRfdCBoYW5kbGUpCi0gICAgICAgIDogbV9qb2luYWJsZVN0YXRlKEpvaW5hYmxlKQotICAg
ICAgICAsIG1fZGlkRXhpdChmYWxzZSkKLSAgICAgICAgLCBtX3B0aHJlYWRIYW5kbGUoaGFuZGxl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJl
dHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSgpIHsg
cmV0dXJuIG1fcHRocmVhZEhhbmRsZTsgfQotICAgIHZvaWQgZGlkQmVjb21lRGV0YWNoZWQoKSB7
IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVkOyB9Ci0gICAgdm9pZCBkaWRFeGl0KCkgeyBtX2Rp
ZEV4aXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBkaWRKb2luKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBK
b2luZWQ7IH0KLSAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1fZGlkRXhpdDsgfQotCi1w
cml2YXRlOgotICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlOwotICAgIGJvb2wgbV9k
aWRFeGl0OwotICAgIHB0aHJlYWRfdCBtX3B0aHJlYWRIYW5kbGU7Ci19OwotCi10eXBlZGVmIEhh
c2hNYXA8VGhyZWFkSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFB0aHJlYWRTdGF0ZT4+IFRo
cmVhZE1hcDsKKyNpZiAhT1MoREFSV0lOKQogCi12b2lkIHVuc2FmZVRocmVhZFdhc0RldGFjaGVk
KFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIp
Owotdm9pZCB0aHJlYWRXYXNKb2luZWQoVGhyZWFkSWRlbnRpZmllcik7CisvLyBXZSB1c2UgU0lH
VVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUgbWFjaGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRD
b3JlLgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9
IFNJR1VTUjI7CitzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkKj4gdGFyZ2V0VGhyZWFkIHsgbnVs
bHB0ciB9Oworc3RhdGljIFN0YXRpY1dvcmRMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOwogCi1zdGF0
aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKK3ZvaWQgVGhyZWFkOjpzaWduYWxIYW5kbGVyU3Vz
cGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVjb250ZXh0KQogewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCi12
b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQotewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6
ZWQ7Ci0KLSAgICBpZiAoaXNJbml0aWFsaXplZCkKKyAgICAvLyBUb3VjaGluZyB0aHJlYWQgbG9j
YWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRsZXJzIGlzIGFsbG93ZWQuCisgICAgVGhy
ZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQubG9hZCgpOworCisgICAgaWYgKHRocmVhZC0+bV9z
dXNwZW5kZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkgeworICAgICAgICAvLyBU
aGlzIGlzIHNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gdGhhdCBpcyBpbnRlbmRlZCB0byBiZSB1
c2VkIHRvIHJlc3VtZSBzaWdzdXNwZW5kLgorICAgICAgICAvLyBTbyB0aGlzIGhhbmRsZXIgaW52
b2NhdGlvbiBpdHNlbGYgc2hvdWxkIG5vdCBwcm9jZXNzLgorICAgICAgICAvLworICAgICAgICAv
LyBXaGVuIHNpZ25hbCBjb21lcywgZmlyc3QsIHRoZSBzeXN0ZW0gY2FsbHMgc2lnbmFsIGhhbmRs
ZXIuIEFuZCBsYXRlciwgc2lnc3VzcGVuZCB3aWxsIGJlIHJlc3VtZWQuIFNpZ25hbCBoYW5kbGVy
IGludm9jYXRpb24gYWx3YXlzIHByZWNlZGVzLgorICAgICAgICAvLyBTbywgdGhlIHByb2JsZW0g
bmV2ZXIgaGFwcGVucyB0aGF0IHN1c3BlbmRlZC5zdG9yZSh0cnVlLCAuLi4pIHdpbGwgYmUgZXhl
Y3V0ZWQgYmVmb3JlIHRoZSBoYW5kbGVyIGlzIGNhbGxlZC4KKyAgICAgICAgLy8gaHR0cDovL3B1
YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvc2lnc3VzcGVu
ZC5odG1sCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpc0luaXRpYWxpemVkID0gdHJ1
ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKLSAgICAvLyBT
dHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmluZyBp
biBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5p
dGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgdGhyZWFk
TWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAg
VGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCk7Ci0gICAgd3RmVGhyZWFkRGF0
YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQorICAgIHVjb250ZXh0X3QqIHVzZXJDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKKyNpZiBDUFUoUFBDKQor
ICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9ICp1c2VyQ29udGV4dC0+dWNf
bWNvbnRleHQudWNfcmVnczsKKyNlbHNlCisgICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1hY2hpbmVD
b250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OworI2VuZGlmCiAKLXN0YXRpYyBUaHJl
YWRNYXAmIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZE1h
cD4gbWFwOwotICAgIHJldHVybiBtYXA7CisgICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8g
c2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgorICAgIC8vIHNlbV9wb3N0IGlzIGFz
eW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMg
ZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgorICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcv
b25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJf
MDRfMDMKKyAgICAvLworICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0
aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2
ZWQuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3
OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCisgICAgc2VtX3Bvc3QoJnRocmVh
ZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKworICAgIC8vIFJlYWNoaW5nIGhlcmUs
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYmxvY2tlZCBpbiB0aGlzIGhhbmRsZXIgKHRoaXMg
aXMgY29uZmlndXJlZCBieSBzaWdhY3Rpb24ncyBzYV9tYXNrKS4KKyAgICAvLyBTbyBiZWZvcmUg
Y2FsbGluZyBzaWdzdXNwZW5kLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHRvIHRoaXMgdGhyZWFk
IGlzIGRlZmVycmVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgZXhlY3V0
ZWQgcmVjdXJzaXZlbHkuCisgICAgc2lnc2V0X3QgYmxvY2tlZFNpZ25hbFNldDsKKyAgICBzaWdm
aWxsc2V0KCZibG9ja2VkU2lnbmFsU2V0KTsKKyAgICBzaWdkZWxzZXQoJmJsb2NrZWRTaWduYWxT
ZXQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHNpZ3N1c3BlbmQoJmJsb2NrZWRTaWdu
YWxTZXQpOworCisgICAgLy8gQWxsb3cgcmVzdW1lIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRo
cmVhZCBpcyByZXN1bWVkLgorICAgIHNlbV9wb3N0KCZ0aHJlYWQtPm1fc2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7CiB9CiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0
aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQotewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIFRocmVhZE1hcDo6aXRlcmF0
b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCku
ZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT52YWx1ZS0+cHRocmVh
ZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+dmFsdWUtPmhhc0V4aXRlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGktPmtleTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KKyNlbmRp
ZiAvLyAhT1MoREFSV0lOKQogCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBlc3RhYmxpc2hJZGVu
dGlmaWVyRm9yUHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCit2
b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UHRo
cmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVh
ZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJDb3Vu
dCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgc3RkOjptYWtlX3Vu
aXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRIYW5kbGUpKTsKLSAgICByZXR1cm4gaWRlbnRpZmll
ckNvdW50Kys7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAg
c3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9j
b252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1
Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8v
IHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0
cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0
b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMo
KTsKKworI2lmICFPUyhEQVJXSU4pCisgICAgICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJv
Y2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KKyAgICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9j
ayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVyLgorICAgICAgICAvLyBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdz
dXNwZW5kLgorICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICAgICAgc2lnZW1w
dHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFz
aywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisKKyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlv
biA9IFRocmVhZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWU7CisgICAgICAgIGFjdGlvbi5z
YV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOworICAgICAgICBzaWdhY3Rpb24oU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlvbiwgMCk7CisjZW5kaWYKKyAgICB9KTsKIH0KIAot
c3RhdGljIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFk
eUhlbGQoVGhyZWFkSWRlbnRpZmllciBpZCkKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50
VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCiB7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdl
dChpZCktPnB0aHJlYWRIYW5kbGUoKTsKKyNpZiAhT1MoREFSV0lOKQorICAgIHNpZ3NldF90IG1h
c2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhy
ZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFz
aywgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQqIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9p
ZCogcGFyYW0pCiB7Ci0gICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBjcmVhdGVUaHJl
YWRJbnRlcm5hbC4KKyAgICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIFRocmVhZDo6Y3Jl
YXRlSW50ZXJuYWwuCiAgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjp1bmlxdWVfcHRyPFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
Kj4ocGFyYW0pKTsKKworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+
dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRyOworCiAgICAgaW52b2Nh
dGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24g
ZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciopCitSZWZQdHI8VGhyZWFkPiBUaHJl
YWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEs
IGNvbnN0IGNoYXIqKQogewotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKKyAgICBSZWZQdHI8
VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOworICAgIGF1dG8gaW52b2Nh
dGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBv
aW50LCB0aHJlYWQuZ2V0KCksIGRhdGEpOwogICAgIHB0aHJlYWRfdCB0aHJlYWRIYW5kbGU7CiAg
ICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CkBA
IC0xODYsMTcgKzE4MCwxOCBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFs
KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbgogICAgIHB0aHJlYWRf
YXR0cl9kZXN0cm95KCZhdHRyKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVw
Iiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSk7Ci0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICAvLyBCYWxhbmNlZCBi
eSBzdGQ6OnVuaXF1ZV9wdHIgY29uc3RydWN0b3IgaW4gd3RmVGhyZWFkRW50cnlQb2ludC4KICAg
ICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGxlYWtlZEludm9jYXRpb24gPSBpbnZvY2F0aW9u
LnJlbGVhc2UoKTsKICAgICBVTlVTRURfUEFSQU0obGVha2VkSW52b2NhdGlvbik7CiAKLSAgICBy
ZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUodGhyZWFkSGFuZGxlKTsK
KyAgICB0aHJlYWQtPmVzdGFibGlzaCh0aHJlYWRIYW5kbGUpOworICAgIHJldHVybiB0aHJlYWQ7
CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0
aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwo
Y29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9OUCkK
ICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFkTmFtZSh0aHJlYWROYW1lKSk7
CkBAIC0yMDUsMTIzICsyMDAsMjM0IEBAIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRl
cm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odGhy
ZWFkTmFtZSk7CiAjZW5kaWYKLQotICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBpZGVudGlmaWVy
QnlQdGhyZWFkSGFuZGxlKHB0aHJlYWRfc2VsZigpKTsKLSAgICBBU1NFUlQoaWQpOwotICAgIFRo
cmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKGlkKTsKKyAgICBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0KLSAgICAKLXZvaWQgY2hhbmdlVGhyZWFk
UHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgaW50IGRlbHRhKQotewotICAgIHB0
aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJRCk7CiAKLSAgICB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICAgICAgcHRo
cmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVs
ZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKLSAgICB9Cit2b2lk
IFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRlbHRhKQoreworICAgIFdvcmRMb2NrSG9sZGVy
IGxvY2tlcihtX211dGV4KTsKIAogICAgIGludCBwb2xpY3k7CiAgICAgc3RydWN0IHNjaGVkX3Bh
cmFtIHBhcmFtOwogCi0gICAgaWYgKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxl
LCAmcG9saWN5LCAmcGFyYW0pKQorICAgIGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0obV9oYW5k
bGUsICZwb2xpY3ksICZwYXJhbSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHBhcmFtLnNjaGVk
X3ByaW9yaXR5ICs9IGRlbHRhOwogCi0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRI
YW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKKyAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0obV9oYW5k
bGUsIHBvbGljeSwgJnBhcmFtKTsKIH0KIAotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigp
CiB7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsK
LQorICAgIHB0aHJlYWRfdCBoYW5kbGU7CiAgICAgewotICAgICAgICAvLyBXZSBkb24ndCB3YW50
IHRvIGxvY2sgYWNyb3NzIHRoZSBjYWxsIHRvIGpvaW4sIHNpbmNlIHRoYXQgY2FuIGJsb2NrIG91
ciB0aHJlYWQgYW5kIGNhdXNlIGRlYWRsb2NrLgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxl
Rm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NF
UlQocHRocmVhZEhhbmRsZSk7CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4
KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7CiAgICAgfQogCi0gICAgaW50IGpvaW5SZXN1
bHQgPSBwdGhyZWFkX2pvaW4ocHRocmVhZEhhbmRsZSwgMCk7CisgICAgaW50IGpvaW5SZXN1bHQg
PSBwdGhyZWFkX2pvaW4oaGFuZGxlLCAwKTsKIAogICAgIGlmIChqb2luUmVzdWx0ID09IEVERUFE
TEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8g
YmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VS
Uk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWlu
ZyB0byBxdWl0IiwgbV9pZCk7CiAgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKLSAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwg
dGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVu
YWJsZSB0byBiZSBqb2luZWQuXG4iLCBtX2lkKTsKIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCku
Z2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+am9p
bmFibGVTdGF0ZSgpID09IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOworICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgpID09IEpvaW5h
YmxlKTsKIAotICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBzbyBjbGVhbiB1
cCBhZnRlciBpdC4KLSAgICBpZiAoc3RhdGUtPmhhc0V4aXRlZCgpKQotICAgICAgICB0aHJlYWRN
YXAoKS5yZW1vdmUodGhyZWFkSUQpOworICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhp
dGVkLCBkbyBub3RoaW5nLgogICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQsIHNv
IGRvbid0IGNsZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkg
am9pbmVkIG9uIGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBhZnRlciBpdHNlbGYuCi0gICAg
ZWxzZQotICAgICAgICBzdGF0ZS0+ZGlkSm9pbigpOworICAgIGlmICghaGFzRXhpdGVkKCkpCisg
ICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCi12b2lkIGRl
dGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJlYWQ6OmRldGFj
aCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIo
bV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKG1faGFuZGxl
KTsKKyAgICBpZiAoZGV0YWNoUmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50
aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwgbV9pZCk7CiAKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRI
YW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhy
ZWFkSUQpOwotICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKKyAgICBpZiAoIWhhc0V4aXRlZCgp
KQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOworfQogCi0gICAgaW50IGRldGFjaFJlc3Vs
dCA9IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRIYW5kbGUpOwotICAgIGlmIChkZXRhY2hSZXN1bHQp
Ci0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJl
IGRldGFjaGVkXG4iLCB0aHJlYWRJRCk7Ci0KLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhy
ZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIGlmIChzdGF0
ZS0+aGFzRXhpdGVkKCkpCi0gICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0g
ICAgZWxzZQotICAgICAgICB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpLT5kaWRCZWNvbWVEZXRh
Y2hlZCgpOworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQoreworICAgIFRocmVhZEhvbGRlciog
ZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAgICBy
ZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQs
IFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KKyAgICBSZWZQdHI8VGhy
ZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOworICAgIHRocmVhZC0+ZXN0YWJs
aXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKnRocmVh
ZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7Cisg
ICAgcmV0dXJuICp0aHJlYWQ7CiB9CiAKLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElEKQorVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiB7Ci0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIFB0aHJlYWRTdGF0
ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7
Ci0gICAgCi0gICAgc3RhdGUtPmRpZEV4aXQoKTsKKyAgICByZXR1cm4gY3VycmVudCgpLmlkKCk7
Cit9CiAKLSAgICBpZiAoc3RhdGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6Okpv
aW5hYmxlKQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOworYm9vbCBUaHJl
YWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tl
cihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25h
bE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3Mu
CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCithdXRvIFRocmVhZDo6c3Vz
cGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPgogewotICAgIFRo
cmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aWRlbnRpZmllcigpOwot
ICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJuIGlkOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
dGhpcyAhPSAmY3VycmVudCgpLCAiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgc3VzcGVuZCB0
aGUgY3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlciht
X211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJl
YWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFkKTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VD
Q0VTUykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7CisgICAgcmV0dXJu
IHsgfTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBv
ciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgor
ICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2su
CisgICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVh
ZHMgQSBhbmQgQi4KKyAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIg
YXR0ZW1wdCB0byBzdXNwZW5kIEEuCisgICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBB
bmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgorICAgICAgICAvLyBJ
biB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCisgICAgICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlmICghbV9zdXNwZW5kQ291
bnQpIHsKKyAgICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJl
YWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2ln
bmFsIGhhbmRsZXIuCisgICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcg
cGxhdGZvcm1zLCBsaWtlIExpbnV4LgorICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRo
cmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRo
ZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsK
KyAgICAgICAgICAgIGludCByZXN1bHQgPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAgICAgICAgICAgIHNlbV93YWl0KCZt
X3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJy
aWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIg
YWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCisgICAgICAgICAgICBtX3N1c3BlbmRl
ZC5zdG9yZSh0cnVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQorICAg
ICAgICArK21fc3VzcGVuZENvdW50OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRp
ZgorfQogCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVy
IGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9y
UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6
OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsKK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQor
eworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisg
ICAgdGhyZWFkX3Jlc3VtZShtX3BsYXRmb3JtVGhyZWFkKTsKKyNlbHNlCisgICAgeworICAgICAg
ICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1
dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tl
cihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlmIChtX3N1c3BlbmRDb3VudCA9PSAxKSB7
CisgICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50
ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwKKyAgICAgICAgICAgIC8vIHRoZSBzaWdu
YWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KKyAgICAgICAgICAg
IC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52
b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgorICAgICAgICAgICAgLy8gMS4gVXNlIGRp
ZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRo
ZSBoYW5kbGVyLgorICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rp
bmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdx
dWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KKyAgICAgICAgICAgIC8vIDMuIFVz
ZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25h
bCBoYW5kbGVyLgorICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFr
ZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgICAgICAg
ICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7CisgICAgICAgICAgICBpZiAocHRocmVhZF9r
aWxsKG1faGFuZGxlLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNw
ZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQg
dGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJv
Y2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9zdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAgICAgIC0tbV9zdXNwZW5k
Q291bnQ7CisgICAgfQorI2VuZGlmCiB9CiAKLWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQsIGludCBzaWduYWxOdW1iZXIpCitzaXplX3QgVGhyZWFkOjpnZXRSZWdp
c3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKK3sKKyAgICBXb3JkTG9ja0hvbGRl
ciBsb2NrZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorI2lmIENQVShYODYpCisgICAgdW5z
aWduZWQgdXNlckNvdW50ID0gc2l6ZW9mKHJlZ2lzdGVycykgLyBzaXplb2YoaW50KTsKKyAgICB0
aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7CisjZWxpZiBD
UFUoWDg2XzY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHg4Nl9USFJFQURfU1RBVEU2NF9D
T1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0geDg2X1RIUkVBRF9TVEFU
RTY0OworI2VsaWYgQ1BVKFBQQykKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFE
X1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhS
RUFEX1NUQVRFOworI2VsaWYgQ1BVKFBQQzY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQ
Q19USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9y
ID0gUFBDX1RIUkVBRF9TVEFURTY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICB1bnNpZ25lZCB1c2Vy
Q291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3Jf
dCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHVuc2ln
bmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3Rh
dGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OworI2Vsc2UKKyNlcnJvciBV
bmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9
IHRocmVhZF9nZXRfc3RhdGUobV9wbGF0Zm9ybVRocmVhZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRl
X3QpJnJlZ2lzdGVycywgJnVzZXJDb3VudCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NF
U1MpIHsKKyAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQg
YmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMg
cHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBu
b3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJl
dHVybiB1c2VyQ291bnQgKiBzaXplb2YodWludHB0cl90KTsKKyNlbGlmIChPUyhGUkVFQlNEKSB8
fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUo
QVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKyAgICByZWdpc3RlcnMgPSBtX3N1c3Bl
bmRlZE1hY2hpbmVDb250ZXh0OworICAgIHJldHVybiBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMp
OworI2Vsc2UKKyAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7CisgICAgcHRocmVhZF9hdHRy
X2luaXQoJmF0dHJpYnV0ZSk7CisjaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkK
KyNpZiAhT1MoT1BFTkJTRCkKKyAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBr
ZGUub3JnCisgICAgcHRocmVhZF9hdHRyX2dldF9ucChtX2hhbmRsZSwgJmF0dHJpYnV0ZSk7Cisj
ZW5kaWYKKyNlbHNlCisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxl
OyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMK
KyAgICBwdGhyZWFkX2dldGF0dHJfbnAobV9oYW5kbGUsICZhdHRyaWJ1dGUpOworI2VuZGlmCisK
KyAgICB2b2lkKiBzdGFja0Jhc2UgPSAwOworICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAg
IGludCByYyA9IHB0aHJlYWRfYXR0cl9nZXRzdGFjaygmYXR0cmlidXRlLCAmc3RhY2tCYXNlLCAm
c3RhY2tTaXplKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJjLCAhcmMpOworICAgIEFTU0VSVChzdGFj
a0Jhc2UpOworICAgIHJlZ2lzdGVycy5zdGFja1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
c3RhY2tCYXNlKSArIHN0YWNrU2l6ZTsKKworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRy
aWJ1dGUpOworCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4
aXQoKQogewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJ
RCk7CiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7
Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhM
b2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7
CisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9kaWRF
eGl0ID0gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fb25FeGl0Q2Fs
bGJhY2spCisgICAgICAgIGNhbGxiYWNrKCp0aGlzKTsKK30KKwordm9pZCBUaHJlYWQ6OmVzdGFi
bGlzaChwdGhyZWFkX3QgaGFuZGxlKQoreworICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihtX211
dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBpZiAoIW1faWQpIHsKKyAgICAgICAg
c3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZElkZW50aWZpZXI+IHByb3ZpZGVyIHsgMCB9OworICAg
ICAgICBtX2lkID0gKytwcm92aWRlcjsKKyNpZiBPUyhEQVJXSU4pCisgICAgICAgIG1fcGxhdGZv
cm1UaHJlYWQgPSBwdGhyZWFkX21hY2hfdGhyZWFkX25wKGhhbmRsZSk7CisjZW5kaWYKICAgICB9
Ci0gICAgaW50IGVyck5vID0gcHRocmVhZF9raWxsKHB0aHJlYWRIYW5kbGUsIHNpZ25hbE51bWJl
cik7Ci0gICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9CiAK
IE11dGV4OjpNdXRleCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4u
Y3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAppbmRleCA1NGI0M2VmZWYzNWNk
NjYzMmE3MDA4MTUwN2E1YjM3OTlkZWZiNmZiLi5iNmJiMGEwNTIxZGFkMjliYmE3YjA2NTg4NjNm
Nzc4YTY1MTlmNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKQEAgLTk0LDYgKzk0LDcgQEAK
IAogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9j
YXRpb24uaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJXaW4uaCIKICNpbmNsdWRlIDxwcm9jZXNz
Lmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpA
QCAtMTA5LDYgKzExMCwxNCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorVGhyZWFkOjpUaHJlYWQo
KQoreworfQorCitUaHJlYWQ6On5UaHJlYWQoKQoreworfQorCiAvLyBNU19WQ19FWENFUFRJT04s
IFRIUkVBRE5BTUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9t
IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4u
CiBzdGF0aWMgY29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAt
MTIxLDcgKzEzMCw3IEBAIHR5cGVkZWYgc3RydWN0IHRhZ1RIUkVBRE5BTUVfSU5GTyB7CiB9IFRI
UkVBRE5BTUVfSU5GTzsKICNwcmFnbWEgcGFjayhwb3ApCiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJl
bnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCit2b2lkIFRocmVhZDo6
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUp
CiB7CiAjaWYgQ09NUElMRVIoTUlOR1cpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aHJlYWQg
bmFtZSBzZXR0aW5nIHdpdGggTWluZ1cuCkBAIC0xMjksNyArMTM4LDcgQEAgdm9pZCBpbml0aWFs
aXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbHNl
CiAgICAgVEhSRUFETkFNRV9JTkZPIGluZm87CiAgICAgaW5mby5kd1R5cGUgPSAweDEwMDA7Ci0g
ICAgaW5mby5zek5hbWUgPSBub3JtYWxpemVUaHJlYWROYW1lKHN6VGhyZWFkTmFtZSk7CisgICAg
aW5mby5zek5hbWUgPSBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoc3pUaHJlYWROYW1lKTsK
ICAgICBpbmZvLmR3VGhyZWFkSUQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICAgICBpbmZvLmR3
RmxhZ3MgPSAwOwogCkBAIC0xNDAsNzAgKzE0OSwzOSBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50
VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQogI2VuZGlmCiB9CiAKLXN0
YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxNdXRleD4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCiB2b2lkIGluaXRpYWxpemVU
aHJlYWRpbmcoKQogewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQ7Ci0gICAgCi0gICAg
aWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlzSW5pdGlhbGl6ZWQg
PSB0cnVlOwotCi0gICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAg
IC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3Ry
aW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVl
biBpbml0aWFsaXplZCBmcm9tIGhlcmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0
aHJlYWRNYXBNdXRleCgpOwotICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsK
LSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlhbGl6ZURhdGVzKCk7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlh
bGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXpl
KCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8g
U3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcg
aW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVl
biBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Cisg
ICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhy
ZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICB9KTsKIH0KIAotc3Rh
dGljIEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4+IG1hcDsKLSAgICByZXR1cm4gbWFw
OwotfQotCi1zdGF0aWMgdm9pZCBzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcihEV09SRCB0
aHJlYWRJRCwgSEFORExFIHRocmVhZEhhbmRsZSkKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwg
d3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgQVNTRVJUKCF0aHJlYWRNYXAoKS5jb250YWlucyh0
aHJlYWRJRCkpOwotICAgIHRocmVhZE1hcCgpLmFkZCh0aHJlYWRJRCwgdGhyZWFkSGFuZGxlKTsK
LX0KKyAgICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJu
YWwuCisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0p
KTsKIAotc3RhdGljIEhBTkRMRSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50
aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwot
ICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQorICAgIFRocmVhZEhvbGRlcjo6aW5p
dGlhbGl6ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBu
dWxscHRyOwogCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhy
ZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0gICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgdGhyZWFk
TWFwKCkucmVtb3ZlKGlkKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJl
YWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24+IGludm9jYXRpb24oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uKj4ocGFyYW0pKTsKICAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9u
LT5kYXRhKTsKLQogICAgIHJldHVybiAwOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRo
cmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0
IGNoYXIqIHRocmVhZE5hbWUpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFs
KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUpCiB7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQo
KSk7CiAgICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJRCA9IDA7Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRhdGEpOworICAgIGF1dG8g
aW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihl
bnRyeVBvaW50LCB0aHJlYWQucHRyKCksIGRhdGEpOwogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUg
PSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFk
RW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKICAg
ICBpZiAoIXRocmVhZEhhbmRsZSkgewogI2lmICFIQVZFKEVSUk5PX0gpCkBAIC0yMTksNTUgKzE5
NywxMTkgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5j
dGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURfUEFSQU0obGVha2Vk
SW52b2NhdGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZp
ZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVy
KHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1cm4gdGhyZWFkSUQ7
CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsK
KyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlv
cml0eShpbnQgZGVsdGEpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIEhBTkRMRSB0
aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBp
ZiAoIXRocmVhZEhhbmRsZSkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1
IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCIsIHRocmVhZElEKTsKLQot
ICAgIFNldFRocmVhZFByaW9yaXR5KHRocmVhZEhhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1B
TCArIGRlbHRhKTsKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0
VGhyZWFkUHJpb3JpdHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7
CiB9CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEKQoraW50IFRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24oKQogewotICAgIEFTU0VSVCh0aHJl
YWRJRCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklk
ZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2
ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09SRCBq
b2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRFKTsK
KyAgICBIQU5ETEUgaGFuZGxlOworICAgIHsKKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBEV09S
RCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIElORklOSVRFKTsKICAg
ICBpZiAoam9pblJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJl
YWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0
IiwgdGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2Fz
IGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCBtX2lkKTsKIAotICAgIENs
b3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlm
aWVyKHRocmVhZElEKTsKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAg
QVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CisKKyAgICAvLyBUaGUgdGhyZWFk
IGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24n
dCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhh
dCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0
ZXIgaXRzZWxmLgorICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAog
ICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCi12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJlYWQ6OmRldGFjaCgpCit7CisgICAgLy8gV2UgZm9s
bG93IHRoZSBwdGhyZWFkIHNlbWFudGljczogZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNhbGxl
ZCwKKyAgICAvLyB3ZSBzdGlsbCBjYW4gcGVyZm9ybSBvcGVyYXRpb24gb250byB0aGUgdGhyZWFk
LiBUbyBkbyBzbywgd2UgZG8KKyAgICAvLyBub3RoaW5nIGhlcmUgaW4gV2luZG93cy4gQ2xvc2VI
YW5kbGUgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseQorICAgIC8vIGJ5IHRoZSBGTFMgZGVz
dHJ1Y3RvciBvbiB0aHJlYWQgdGVybWluYXRpb24uCisgICAgV29yZExvY2tIb2xkZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFj
aGVkKCk7Cit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8dm9pZCwgUGxh
dGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgIERXT1JEIHJlc3VsdCA9IFN1c3BlbmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlmIChy
ZXN1bHQgIT0gKERXT1JEKS0xKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChyZXN1bHQpOworfQorCisvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJl
c3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2b2lk
IFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7
CisgICAgUmVzdW1lVGhyZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90IFRocmVhZDo6Z2V0UmVn
aXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7CisgICAgV29yZExvY2tIb2xk
ZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIHJlZ2lzdGVycy5Db250ZXh0RmxhZ3MgPSBDT05URVhU
X0lOVEVHRVIgfCBDT05URVhUX0NPTlRST0w7CisgICAgR2V0VGhyZWFkQ29udGV4dChtX2hhbmRs
ZSwgJnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKK30KKworVGhyZWFk
JiBUaHJlYWQ6OmN1cnJlbnQoKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgVGhyZWFk
SG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7CisgICAgaWYgKGRhdGEpCisg
ICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKIAotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUg
PSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAodGhyZWFkSGFu
ZGxlKQotICAgICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhyZWFk
SGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQg
dGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVm
PFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CisKKyAgICBIQU5ETEUg
aGFuZGxlOworICAgIGJvb2wgaXNTdWNjZXNzZnVsID0gRHVwbGljYXRlSGFuZGxlKEdldEN1cnJl
bnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQoKSwgR2V0Q3VycmVudFByb2Nlc3MoKSwgJmhh
bmRsZSwgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1FX0FDQ0VTUyk7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNTdWNjZXNzZnVsKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNoKGhhbmRsZSwgY3VycmVu
dElEKCkpOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOworICAg
IHJldHVybiB0aHJlYWQuZ2V0KCk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVh
ZCgpCitUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKIHsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVhZElkKCkpOwogfQog
Cit2b2lkIFRocmVhZDo6ZGlkRXhpdCgpCit7CisgICAgeworICAgICAgICBXb3JkTG9ja0hvbGRl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIG1fZGlkRXhpdCA9IHRydWU7CisgICAgICAgIC8v
IEl0IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBldmVu
IGJlZm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRsZXMuCisgICAgICAgIC8vIFRoaXMgZWFz
aWx5IGVuc3VyZXMgdGhhdCBhbGwgdGhlIHRocmVhZCByZXNvdXJjZXMgYXJlIGF1dG9tYXRpY2Fs
bHkgY2xvc2VkLgorICAgICAgICBpZiAobV9oYW5kbGUpCisgICAgICAgICAgICBDbG9zZUhhbmRs
ZShtX2hhbmRsZSk7CisgICAgfQorICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX29uRXhpdENh
bGxiYWNrKQorICAgICAgICBjYWxsYmFjaygqdGhpcyk7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3Rh
Ymxpc2goSEFORExFIGhhbmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7Cisg
ICAgbV9pZCA9IHRocmVhZElEOworfQorCiBNdXRleDo6TXV0ZXgoKQogewogICAgIG1fbXV0ZXgu
bV9yZWN1cnNpb25Db3VudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRleCBiMmEwYTc5ZjRhYjVh
YWMyODliMTY5ZjkyYmJjMWE4MDU4NTJjYTMyLi45NzMwZmNmMGYwOTIxZmRlZDkwZjg5ZjEyOTBl
Nzc0OTBiNTM5NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBX
b3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9ucywgY29uc3Qgc3RkOjpm
dW5jdGlvbjx2b2lkIChzaXoKIAogICAgICAgICAgICAgbV93b3JrZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkodGhyZWFkQ291bnQpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX3dvcmtlcnMuYXBwZW5k
KGNyZWF0ZVRocmVhZChTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBpKS51
dGY4KCkuZGF0YSgpLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQo
VGhyZWFkOjpjcmVhdGUoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wgV29ya2VyICV1IiwgaSku
dXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgp
OwogICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb247
CiAgICAgICAgIERlcXVlPGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4qPiBtX3F1ZXVlOwog
Ci0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3dvcmtlcnM7CisgICAgICAgIFZl
Y3RvcjxSZWZQdHI8VGhyZWFkPj4gbV93b3JrZXJzOwogICAgIH07CiAKICAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPFRocmVhZFBvb2w+IHRocmVhZFBvb2w7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCmluZGV4
IGE0N2YyMWUyMGQzMWJjOGJmNzMxOGY0MWI5NTdhYjM2NmMxOTE1MDMuLjc2MzQ1YzA2OTMxNjRm
NjhjYTRiMWM2NjQ0ODRhMjczY2M2ZThiZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCkBAIC0xMDMsNyArMTAz
LDcgQEAgY2xhc3MgV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uRGlzcGF0Y2hlciB7
CiAKICAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwogI2VsaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkg
fHwgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1
ZXVlVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya1F1ZXVlVGhyZWFkOwogICAgIExv
Y2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgIENvbmRpdGlvbiBtX2lu
aXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgIFJ1bkxvb3AqIG1fcnVuTG9vcDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCAxYTcyMTlhZDI1OWVkNzU5NzJh
NWE0NThjNWM0ODQ5N2EzODhlNGQzLi41OWVlMWY4NWI0MzVjZTFhNzJmNTA1MGY0ZGY2MmVmY2Zi
YmM4MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCkBAIC00OSwx
NSArNDksMTUgQEAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFzc190IGRpc3BhdGNoUU9TQ2xhc3Mo
V29ya1F1ZXVlOjpRT1MgcW9zKQogewogICAgIHN3aXRjaCAocW9zKSB7CiAgICAgY2FzZSBXb3Jr
UXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlOgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1ND
bGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOwogICAgIGNhc2Ug
V29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKTsKICAgICBjYXNlIFdv
cmtRdWV1ZTo6UU9TOjpEZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhR
T1NfQ0xBU1NfREVGQVVMVCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX0RFRkFVTFQpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlV0aWxpdHk6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAg
ICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7
CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3VuZDoKLSAgICAgICAgcmV0dXJuIGFk
anVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOworICAgICAgICByZXR1cm4gVGhy
ZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsKICAgICB9CiB9CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmlj
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKaW5kZXgg
OTM0YTM4Y2JiZTY0YmJmZmFlYjRkMzdkZjFiOGQ5OTUyYjg4NTM0NC4uZGE4NzVkMWZhMDRjZWY1
MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0NDYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2Vu
ZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dv
cmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zNSw3ICszNSw3IEBACiB2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFPUykKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1f
d29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKG5hbWUsIFt0aGlzXSB7CisgICAgbV93b3Jr
UXVldWVUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbdGhpc10gewogICAgICAgICB7CiAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAg
LTUxLDggKzUxLDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAg
aWYgKG1fcnVuTG9vcCkKICAgICAgICAgbV9ydW5Mb29wLT5zdG9wKCk7CiAgICAgaWYgKG1fd29y
a1F1ZXVlVGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVhZCk7
Ci0gICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICAgICAgbV93b3JrUXVldWVUaHJl
YWQtPmRldGFjaCgpOworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IG51bGxwdHI7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhh
bmRsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXJMaW51eC5jcHAKaW5kZXggYjI5NDE5NDQ0ZTc0MjczNmE2N2RjMGMxYWE4NTFkZWMzYWU1ODdl
NC4uZmZkNDAwODU1YjgyOTNhOGI1YTNjM2FlYjIzYWI3N2FhZjVhN2VlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcApAQCAt
MTE5LDcgKzExOSwxMCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2
ZW50RkRQb2xsZXIoaW50IGZkLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKAogICAgIH0sIHRoaXMsIG51
bGxwdHIpOwogICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgbnVsbHB0cik7CiAj
ZWxzZQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIldURjogTWVtb3J5UHJlc3N1cmVI
YW5kbGVyIiwgW3RoaXNdIHsgcmVhZEFuZE5vdGlmeSgpOyB9CisgICAgbV90aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZSgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLAorICAgICAgICBbdGhpc10g
eworICAgICAgICAgICAgcmVhZEFuZE5vdGlmeSgpOworICAgICAgICB9KTsKICNlbmRpZgogfQog
CkBAIC0xMjksNyArMTMyLDcgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9sbGVy
Ojp+RXZlbnRGRFBvbGxlcigpCiAjaWYgVVNFKEdMSUIpCiAgICAgZ19zb3VyY2VfZGVzdHJveSht
X3NvdXJjZS5nZXQoKSk7CiAjZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAg
ICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL01haW5UaHJl
YWRXaW4uY3BwCmluZGV4IGYzMjRlOGI2MWRkNDFmYTA1NjA4NjNiNmM1ODE5MTBmODY3ZDM2ZWIu
LmE2NDczZDA3YjY3ZWFjYzg2YmU3YTRlYjY5NzQ5ODkzZWM2MTQ5N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93
aW4vTWFpblRocmVhZFdpbi5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBpbml0aWFsaXplTWFp
blRocmVhZFBsYXRmb3JtKCkKICAgICAgICAgQ1dfVVNFREVGQVVMVCwgMCwgQ1dfVVNFREVGQVVM
VCwgMCwgSFdORF9NRVNTQUdFLCAwLCAwLCAwKTsKICAgICB0aHJlYWRpbmdGaXJlZE1lc3NhZ2Ug
PSBSZWdpc3RlcldpbmRvd01lc3NhZ2VXKEwiY29tLmFwcGxlLldlYktpdC5NYWluVGhyZWFkRmly
ZWQiKTsKIAotICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoIk1haW4gVGhyZWFk
Iik7CisgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKCJNYWluIFRo
cmVhZCIpOwogfQogCiB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAppbmRleCA4NzQ3NjQzOGNhZTY1YTYzODdkOTAxYTc1Mjg4MTVlYzk1NDdmMjMy
Li45Y2QzZGI0ZDFiYzE0YTM2MTczMjFhYjAwNWEwMTk2MjA1Mjc4Mjc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApA
QCAtNTYsNyArNTYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihJREJCYWNraW5nU3RvcmVUZW1w
b3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2JhY2tpbmdTdG9yZVRlbXBv
cmFyeUZpbGVIYW5kbGVyKGZpbGVIYW5kbGVyKQogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIo
bV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jayk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRo
cmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJh
c2UgU2VydmVyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJTZXJ2ZXI6OmRh
dGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9CiAK
IElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCkBAIC02
Niw3ICs2Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VE
aXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhCiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgudXRm
OCgpLmRhdGEoKSk7CiAKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRD
cmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2VydmVyOjpk
YXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOworICAg
IG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5
LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiB2b2lkIElEQlNlcnZlcjo6
cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYgY29ubmVjdGlvbikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
aAppbmRleCAyNTZjZDUwN2U2ZTZkN2Y2NTZlZWNlMGMxMTk4OTQ4ZmQ5MjNkYTFkLi45MzRhMWQx
NzQ1MjkwODQyOGEzYWU2ZTBlZDdlNTEwYTlhOWNhNmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMjUsNyArMTI1
LDcgQEAgY2xhc3MgSURCU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURCU2VydmVyPiB7CiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1fY29u
bmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRlbnRpZmllciwgUmVmUHRyPFVu
aXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsKIAotICAgIFRocmVhZElk
ZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7
IG51bGxwdHIgfTsKICAgICBMb2NrIG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2s7CiAgICAg
TG9jayBtX21haW5UaHJlYWRSZXBseUxvY2s7CiAgICAgYm9vbCBtX21haW5UaHJlYWRSZXBseVNj
aGVkdWxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCmluZGV4IDI5MmYwNWI4Y2Q1MDZlMjI5YWU2Yjhi
ZDg2MjljMDk1NGQxODQ1OWIuLjdjZjdhZjhmZWEyZTFlNjdkNTIzN2M4NzFhMDE1YjNjNDkwMGEy
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRp
b0RlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNB
dWRpb0RlY29kZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjpBc3lu
Y0F1ZGlvRGVjb2RlcigpCiB7CiAgICAgLy8gU3RhcnQgd29ya2VyIHRocmVhZC4KICAgICBMb2Nr
SG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBtX3RocmVhZElEID0gY3Jl
YXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERl
Y29kZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKEFzeW5jQXVkaW9EZWNvZGVy
Ojp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKIH0KIAogQXN5bmNBdWRpb0Rl
Y29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCkBAIC00Nyw4ICs0Nyw4IEBAIEFzeW5jQXVkaW9E
ZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQogICAgIG1fcXVldWUua2lsbCgpOwogICAgIAog
ICAgIC8vIFN0b3AgdGhyZWFkLgotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFk
SUQpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlv
bigpOworICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBBc3luY0F1ZGlvRGVjb2Rl
cjo6ZGVjb2RlQXN5bmMoUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxl
UmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxiYWNrLCBSZWZQ
dHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQpAQCAtNzIsNyArNzIsNyBA
QCB2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKIAogICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3Ro
cmVhZElEIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgcnVuIGxvb3AuCisgICAgICAg
IC8vIFdhaXQgZm9yIHVudGlsIHdlIGhhdmUgbV90aHJlYWQgZXN0YWJsaXNoZWQgYmVmb3JlIHN0
YXJ0aW5nIHRoZSBydW4gbG9vcC4KICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3Jl
YXRpb25NdXRleCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKaW5kZXggYmI1YzVlMzM3YjVlY2YxZjhlNjE3NTNh
MjlmOGQwZjk3MTQxNTUzZC4uZjEyNTEwZDE5N2MzZGY5NmNjMDU2ODU0NmNiYzNmYjQ2ZWFhYThh
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlv
RGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRp
b0RlY29kZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBBc3luY0F1ZGlvRGVjb2RlciB7CiAg
ICAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBy
dW5Mb29wKCk7CiAKLSAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBS
ZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsK
ICAgICBNZXNzYWdlUXVldWU8RGVjb2RpbmdUYXNrPiBtX3F1ZXVlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcAppbmRleCA1MDUyMzA0MTk3Y2RlZGRlNDdmZGNiYjkxMmVjNDc0MDU1
Nzk3NDI4Li5lN2Q1NjdkZmVhZDQ0MmMzOTZhZjBmNzA1MTA5NzNmZmUxNDhhYjBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC00MSw3ICs0MSw3IEBAIGNvbnN0IHNpemVfdCBy
ZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsKIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6T2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgQXVkaW9CdWZm
ZXIqIHJlbmRlclRhcmdldCkKICAgICA6IEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJl
bmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQogICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFy
Z2V0KQotICAgICwgbV9yZW5kZXJUaHJlYWQoMCkKKyAgICAsIG1fcmVuZGVyVGhyZWFkKG51bGxw
dHIpCiAgICAgLCBtX3N0YXJ0ZWRSZW5kZXJpbmcoZmFsc2UpCiB7CiAgICAgbV9yZW5kZXJCdXMg
PSBBdWRpb0J1czo6Y3JlYXRlKHJlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5k
ZXJRdWFudHVtU2l6ZSk7CkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9y
ZW5kZXJUaHJlYWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJU
aHJlYWQpOwotICAgICAgICBtX3JlbmRlclRocmVhZCA9IDA7CisgICAgICAgIG1fcmVuZGVyVGhy
ZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IG51bGxw
dHI7CiAgICAgfQogCiAgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKQEAgLTgzLDcgKzgz
LDcgQEAgdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkK
ICAgICBpZiAoIW1fc3RhcnRlZFJlbmRlcmluZykgewogICAgICAgICBtX3N0YXJ0ZWRSZW5kZXJp
bmcgPSB0cnVlOwogICAgICAgICByZWYoKTsgLy8gU2VlIGNvcnJlc3BvbmRpbmcgZGVyZWYoKSBj
YWxsIGluIG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2goKS4KLSAgICAgICAgbV9yZW5kZXJUaHJlYWQg
PSBjcmVhdGVUaHJlYWQoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVy
RW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgICAgIG1fcmVuZGVyVGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVu
ZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaAppbmRleCA3NTU2MDQ2NDcyMzJjNGJjNTEzY2M5ZTM5ZGQ0NDVmMzhi
NjJjZWY0Li41NjkwMTM4YjE2NTcwYjNmOWQyMzdmOWRkNGE4ZWEyM2Q3M2ZmYWE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Ob2RlIHsKICAgICBSZWZQ
dHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwogICAgIAogICAgIC8vIFJlbmRlcmluZyB0aHJlYWQu
Ci0gICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX3JlbmRlclRocmVhZDsKKyAgICBSZWZQ
dHI8VGhyZWFkPiBtX3JlbmRlclRocmVhZDsKICAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsK
ICAgICBzdGF0aWMgdm9pZCBvZmZsaW5lUmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAg
ICAgdm9pZCBvZmZsaW5lUmVuZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IDg4NjlmNmJmMjIzMjMyZTYzY2MzZmI1MmUxNmFl
MWRiM2ViNDFiZTYuLjhjOTJkNmU1Mzk2YWRmMTJmYmRkNjhkN2FjOTdmOWVkMTlhZGMwMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBA
IC03NzAsOCArNzcwLDcgQEAgU2VjdXJpdHlPcmlnaW5EYXRhIERhdGFiYXNlOjpzZWN1cml0eU9y
aWdpbigpCiB7CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpCiAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9y
aWdpbihtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0gICAgYXV0byYgdGhy
ZWFkID0gZGF0YWJhc2VUaHJlYWQoKTsKLSAgICBpZiAoY3VycmVudFRocmVhZCgpID09IHRocmVh
ZC5nZXRUaHJlYWRJRCgpKQorICAgIGlmIChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VUaHJl
YWQoKS5nZXRUaHJlYWRJRCgpKQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tU2VjdXJpdHlPcmlnaW4obV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAwZGRl
NWY3MjY4ZWU2NDJjMDA0MzA1Y2VmZTM2YjFjOWU0NGI4N2QzLi5kNzA4MTRmOWI1NWIyNDhmZDY0
ZTFhZmY0M2UzNzY3NGYxNjkyZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtNjAsMTIgKzYwLDEyIEBAIGJv
b2wgRGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVh
ZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0
YWJhc2UiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKERhdGFiYXNlVGhyZWFkOjpk
YXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKIAotICAgIHJl
dHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBEYXRhYmFz
ZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xl
YW51cFN5bmMpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJh
c2VUaHJlYWQoKQogICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5z
YWN0aW9ucyBvbiB0aGlzIGRhdGFiYXNlIHRocmVhZAogICAgIG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvci0+c2h1dGRvd24oKTsKIAotICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNo
IHRocmVhZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2gg
Y3VycmVudGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsK
KyAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFy
IHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVm
KHMpIiwgbV90aHJlYWQtPmlkKCksIHRoaXMsIHJlZkNvdW50KCkpOwogCiAgICAgLy8gQ2xvc2Ug
dGhlIGRhdGFiYXNlcyB0aGF0IHdlIHJhbiB0cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0
aGF0IGlmIGFueSB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBi
YWNrIGFuZCB3ZSBkb24ndCBsZWF2ZSB0aGUgZGF0YWJhc2UgaW4gYW4KICAgICAvLyBpbmNvbnNp
c3RlbnQgb3IgbG9ja2VkIHN0YXRlLgpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgRGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgb3BlbkRhdGFiYXNlLT5wZXJmb3JtQ2xv
c2UoKTsKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5v
IGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQotICAgIGRldGFjaFRocmVhZCht
X3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAKICAgICBEYXRhYmFzZVRhc2tT
eW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jID0gbV9jbGVhbnVwU3luYzsKIApAQCAtMTQyLDcgKzE0
Miw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSYg
ZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgp
OwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkLT5pZCgpKTsKICAgICBBU1NFUlQoIW1fb3Bl
bkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0
LmFkZCgmZGF0YWJhc2UpOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2sobV9vcGVuRGF0YWJhc2VTZXRNdXRleCk7CiAKLSAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV90aHJlYWQtPmlkKCkpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRh
dGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJl
bW92ZSgmZGF0YWJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCmluZGV4IGVjMDQxZTMxODE3MjQ5MmVjYTZiY2VmZThm
MWRhMjVlYzkyZWQyNmMuLmE1MjEyZGZiOGIxNzJjZTJmZjZhOTg4OGRlMGE5ZGI5NzdhZTJkMmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
aHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VGhyZWFkLmgKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIAogICAgIHZvaWQgcmVjb3Jk
RGF0YWJhc2VPcGVuKERhdGFiYXNlJik7CiAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChE
YXRhYmFzZSYpOwotICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBt
X3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJu
IG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAKICAgICBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgeyByZXR1cm4gbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmdldCgpOyB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgRGF0YWJhc2VU
aHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKICAg
ICB2b2lkIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRl
eDsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRo
cmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBt
X3NlbGZSZWY7CiAKICAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNrPiBtX3F1ZXVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAKaW5kZXggNmY5ZmNhNjdm
M2M0N2FkZGM4M2RlYzhjYjBkNWViOGNjYjQwZDc0My4uMTM5YWE5OTFhMTZlYWQyMmY2OGY1MDFi
ZTdiOTQ1OTYzMjIxMzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFn
ZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJi
YWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJvb2wgd2FpdFVudGlsRG9u
ZSkKIHsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKGNvbGxl
Y3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xsZXIiKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZShjb2xsZWN0LCAwLCAiV2ViQ29yZTogR0NDb250cm9sbGVyIik7
CiAKICAgICBpZiAod2FpdFVudGlsRG9uZSkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbih0aHJlYWRJRCk7CisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJRCk7CisgICAg
dGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCmluZGV4IDE2OGU0ZTI3Nzk1ZDQyNWY0MDRmMTc1
YzliY2JhOTNmNzM2ODA3NGMuLjU1YzdjYjAyMzk4NTk5Yzk3MWU2YTM3YTBmOWE3MjQ4NDg0MmU2
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKQEAgLTc0
LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChGdW5jdGlvbjx2b2lkICgp
PiYmIGZ1bmN0aW9uKQogCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJl
YWRPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0ZUZpbGVUaHJlYWRPbmNlLCBbXSB7Ci0g
ICAgICAgIGNyZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10geworICAg
ICAgICBUaHJlYWQ6OmNyZWF0ZSgiV2ViQ29yZTogQXN5bmNGaWxlU3RyZWFtIiwgW10gewogICAg
ICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgIEF1dG9kcmFpbmVkUG9vbCBwb29s
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAppbmRleCA0
Y2RjZmFhZDZlODMyYTM5YTVjMzUyNjU4MDU4NTA4NmIzZDlmNzJmLi5hNDhiZmY2MDUxZjBmMTc0
ZGExOGQyZmY5ZDM3YWIzYmM2Njg0ZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25EYXRhYmFzZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNkZWZpbmUgQVNTRVJUX05PVF9T
WU5DX1RIUkVBRCgpIEFTU0VSVCghbV9zeW5jVGhyZWFkUnVubmluZyB8fCAhSVNfSUNPTl9TWU5D
X1RIUkVBRCgpKQogCiAvLyBGb3IgbWV0aG9kcyB0aGF0IGFyZSBtZWFudCB0byBzdXBwb3J0IHRo
ZSBzeW5jIHRocmVhZCBPTkxZCi0jZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5j
VGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSkKKyNkZWZpbmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgp
IChtX3N5bmNUaHJlYWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgpKQogI2RlZmluZSBBU1NFUlRf
SUNPTl9TWU5DX1RIUkVBRCgpIEFTU0VSVChJU19JQ09OX1NZTkNfVEhSRUFEKCkpCiAKICNpZiBQ
TEFURk9STShHVEspCkBAIC0xNDEsNyArMTQxLDcgQEAgYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4o
Y29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiAgICAgLy8g
TG9jayBoZXJlIGFzIHdlbGwgYXMgZmlyc3QgdGhpbmcgaW4gdGhlIHRocmVhZCBzbyB0aGUgdGhy
ZWFkIGRvZXNuJ3QgYWN0dWFsbHkgY29tbWVuY2UgdW50aWwgdGhlIGNyZWF0ZVRocmVhZCgpIGNh
bGwgCiAgICAgLy8gY29tcGxldGVzIGFuZCBtX3N5bmNUaHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5
IHNldAogICAgIG1fc3luY0xvY2subG9jaygpOwotICAgIG1fc3luY1RocmVhZCA9IGNyZWF0ZVRo
cmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldl
YkNvcmU6IEljb25EYXRhYmFzZSIpOworICAgIG1fc3luY1RocmVhZCA9IFRocmVhZDo6Y3JlYXRl
KEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29y
ZTogSWNvbkRhdGFiYXNlIik7CiAgICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IG1fc3luY1RocmVh
ZDsKICAgICBtX3N5bmNMb2NrLnVubG9jaygpOwogICAgIGlmICghbV9zeW5jVGhyZWFkKQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpjbG9zZSgpCiAgICAgICAgIHdha2VT
eW5jVGhyZWFkKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXYWl0IGZvciB0aGUgc3luYyB0aHJl
YWQgdG8gdGVybWluYXRlCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fc3luY1Ro
cmVhZCk7CisgICAgICAgIG1fc3luY1RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9
CiAKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gZmFsc2U7ICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAppbmRleCAwNjFhZjRhMTI1NTc3MWRlMTFhMzJmNTY4
M2MwZWZkYTU5MjkzYjlkLi44NjQwOTU1NDc1MzNmZDg5MGYwM2FmZTkyYmIwNmY2MDg3ZWU3MzYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaApAQCAtMTE5LDcg
KzExOSw3IEBAIGNsYXNzIEljb25EYXRhYmFzZSBmaW5hbCA6IHB1YmxpYyBJY29uRGF0YWJhc2VC
YXNlIHsKICAgICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7CiAgICAgCiAgICAgVGltZXIgbV9zeW5j
VGltZXI7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3N5bmNUaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV9zeW5jVGhyZWFkOwogICAgIGJvb2wgbV9zeW5jVGhyZWFkUnVubmluZzsKICAgICAK
ICAgICBIYXNoU2V0PFJlZlB0cjxEb2N1bWVudExvYWRlcj4+IG1fbG9hZGVyc1BlbmRpbmdEZWNp
c2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCmluZGV4
IDkxMjAwYzM0NWY0NTVmOTZkNDk0YmZkMmFkNzAzZjI4YzVjNjI5ZDEuLmQ5YjZmNzJmYTM2ZmE3
MDBjODI2ZjNjOTdkNmJhYTAyZDQyZThiNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNv
dXJjZVVzYWdlVGhyZWFkLmNwcApAQCAtOTYsMTEgKzk2LDExIEBAIHZvaWQgUmVzb3VyY2VVc2Fn
ZVRocmVhZDo6bm90aWZ5T2JzZXJ2ZXJzKFJlc291cmNlVXNhZ2VEYXRhJiYgZGF0YSkKIAogdm9p
ZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYg
KG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fdm0gPSAmY29tbW9uVk0oKTsKLSAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVh
dGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNvdXJjZVVzYWdlIik7
CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldl
YkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0KIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjp0
aHJlYWRDYWxsYmFjayh2b2lkKiByZXNvdXJjZVVzYWdlVGhyZWFkKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAppbmRleCAxOGExZTY3NTQzZDIyMDljMTc5NTc0NzM2
NjIyYTc4YjM4NGJiOGZjLi5lZmRlMjdlZmU2YjBhYzQ1NDY0ZGU4OTFjNjdjZTc5ZjljZjJlMTlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaApAQCAtNjIsNyAr
NjIsNyBAQCBjbGFzcyBSZXNvdXJjZVVzYWdlVGhyZWFkIHsKICAgICB2b2lkIHRocmVhZEJvZHko
KTsKICAgICB2b2lkIHBsYXRmb3JtVGhyZWFkQm9keShKU0M6OlZNKiwgUmVzb3VyY2VVc2FnZURh
dGEmKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyIHsgMCB9Owor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9sb2Nr
OwogICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBIYXNoTWFwPHZvaWQqLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJik+PiBtX29ic2VydmVyczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmlu
ZGV4IDczMGMwYTZiZDkzZjQ1NzhkMWVkYmY5YWNlMWNkODY1NjZlNmM5ODguLmQyMDc4NDA1NjBk
ZGY5MDU5MGEwZGFkZDI3MzA4NGM5MWM5ZmIxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtMzUsMTQgKzM1LDE0IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKCkK
LSAgICA6IG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgIDogbV90aHJlYWQobnVsbHB0cikKIHsK
IH0KIAogYm9vbCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgYXV0
byB0aHJlYWRJZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVh
ZElkZW50aWZpZXI7Ci0gICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRocmVh
ZCgpID09IHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gU2Ny
b2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZDsKKyAgICByZXR1cm4gdGhyZWFkICYm
IHRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhy
ZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQpAQCAtNzQsMTQgKzc0
LDE0IEBAIFNjcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKQogCiB2
b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmICht
X3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGluaXRpYWxpemUgdGhlIHJ1biBsb29wLgog
ICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6ZVJ1
bkxvb3BNdXRleCk7CiAKLSAgICAgICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFk
KHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5nIik7CisgICAgICAgIG1f
dGhyZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBT
Y3JvbGxpbmciKTsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faW5p
dGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0dXJu
IG1fdGhyZWFkUnVuTG9vcDsgfSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhy
ZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0aHJl
YWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpCiB7Ci0gICAgV1RGOjpzZXRDdXJyZW50
VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRo
cmVhZElzVXNlckludGVyYWN0aXZlKCk7CiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVGhyZWFk
Kj4oc2Nyb2xsaW5nVGhyZWFkKS0+dGhyZWFkQm9keSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmluZGV4IGRlMDYyZDc3YWMwMWRm
OWQyYTA5ODYwZWJlNmI4ZTlmZDNjZmY1YzAuLmQ4ODkyZjA1YmU2NDM3ZDRhYWNjMGE3NTFhN2Nh
N2U5M2JlZTBkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RocmVhZC5oCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIFNjcm9sbGluZ1RocmVhZCB7CiAg
ICAgdm9pZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2soKTsKICNlbmRpZgogCi0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gbV90
aHJlYWQ7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlh
YmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11dGV4OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKaW5kZXggZjcx
MzMzYzVhMzdhOTk4OTY0ZjNhNzQxYzczMTUyZTk1MTQ2NmNmNi4uZGRiZTNiYTk4MGU0NTBhNDk0
Y2QwNjQ4ZjQxYjVlMzZhZmVlYjVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIFBhc3NS
ZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVyPiBIUlRGRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZUFuZExv
YWRBc3luY2hyb25vdXNseUlmCiB9CiAKIEhSVEZEYXRhYmFzZUxvYWRlcjo6SFJURkRhdGFiYXNl
TG9hZGVyKGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKDAp
CisgICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX2RhdGFiYXNl
U2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBA
IC0xMDYsNyArMTA2LDcgQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6OmxvYWRBc3luY2hyb25v
dXNseSgpCiAgICAgCiAgICAgaWYgKCFtX2hydGZEYXRhYmFzZS5nZXQoKSAmJiAhbV9kYXRhYmFz
ZUxvYWRlclRocmVhZCkgewogICAgICAgICAvLyBTdGFydCB0aGUgYXN5bmNocm9ub3VzIGRhdGFi
YXNlIGxvYWRpbmcgcHJvY2Vzcy4KLSAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IGNy
ZWF0ZVRocmVhZChkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2Fk
ZXIiKTsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKGRh
dGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNlIGxvYWRlciIpOwogICAgIH0K
IH0KIApAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjp3YWl0Rm9y
TG9hZGVyVGhyZWFkQ29tcGxldGlvbigpCiAgICAgCiAgICAgLy8gd2FpdEZvclRocmVhZENvbXBs
ZXRpb24oKSBzaG91bGQgbm90IGJlIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgdGhyZWFkLgog
ICAgIGlmIChtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKLSAgICBtX2RhdGFiYXNlTG9hZGVyVGhy
ZWFkID0gMDsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZC0+d2FpdEZvckNvbXBsZXRp
b24oKTsKKyAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gbnVsbHB0cjsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vSFJURkRhdGFiYXNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGRGF0YWJhc2VMb2FkZXIuaAppbmRleCBjODY5ZDEzN2ExZGIyZjUyNDk4ZDBlMWI2NWQ1ODdl
NmM4MTliMzgxLi4zYWQyNTFmMjE5OTA5ZjRiYzY0NTRkMDEzMjAxYjZhN2NhNzAyNjgzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIu
aApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBIUlRGRGF0YWJhc2VMb2FkZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxIUlRGRGF0YWJhc2VMb2FkZXI+IHsKIAogICAgIC8vIEhvbGRpbmcgYSBtX3RocmVh
ZExvY2sgaXMgcmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgbV9kYXRhYmFzZUxvYWRlclRocmVhZC4K
ICAgICBMb2NrIG1fdGhyZWFkTG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fZGF0YWJhc2VM
b2FkZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9kYXRhYmFzZUxvYWRlclRocmVhZDsK
IAogICAgIGZsb2F0IG1fZGF0YWJhc2VTYW1wbGVSYXRlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCmluZGV4IDk2ZjMzMDgyODA3
OWE3OWFkNjQ4MjBkMDcyMWM1OWM1ZWExNmZkYjEuLjIxYmU5OTZlZjM3ZTUzZGI3MDMxMDAxOTYy
N2MwYzQwZDJiMjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
UmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIFJldmVyYkNvbnZvbHZlcjo6
UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVu
ZGVyU2xpCiAgICAgLy8gU3RhcnQgdXAgYmFja2dyb3VuZCB0aHJlYWQKICAgICAvLyBGSVhNRTog
d291bGQgYmUgYmV0dGVyIHRvIHVwIHRoZSB0aHJlYWQgcHJpb3JpdHkgaGVyZS4gIEl0IGRvZXNu
J3QgbmVlZCB0byBiZSByZWFsLXRpbWUsIGJ1dCBoaWdoZXIgdGhhbiB0aGUgZGVmYXVsdC4uLgog
ICAgIGlmICh0aGlzLT51c2VCYWNrZ3JvdW5kVGhyZWFkcygpICYmIG1fYmFja2dyb3VuZFN0YWdl
cy5zaXplKCkgPiAwKQotICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQgPSBjcmVhdGVUaHJlYWQo
V2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFja2dy
b3VuZCB0aHJlYWQiKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFj
a2dyb3VuZCB0aHJlYWQiKTsKIH0KIAogUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVy
KCkKQEAgLTE0Niw3ICsxNDYsNyBAQCBSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIo
KQogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5
T25lKCk7CiAgICAgICAgIH0KIAotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2Jh
Y2tncm91bmRUaHJlYWQpOworICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5oCmluZGV4IDZiYWViN2NjZTI5ODk2Yzk4OTYzNTEyZjQxYjQzYTJm
MTI4ODU0MWMuLjA1OTYzMzY3YWUyODM0OTQ4NzkwYmE3Y2NiNzIwNjBlYzU5ODEwNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCkBAIC04
Niw3ICs4Niw3IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlciB7CiAKICAgICAvLyBCYWNrZ3JvdW5k
IHRocmVhZCBhbmQgc3luY2hyb25pemF0aW9uCiAgICAgYm9vbCBtX3VzZUJhY2tncm91bmRUaHJl
YWRzOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9iYWNrZ3JvdW5kVGhyZWFkOworICAgIFJlZlB0
cjxUaHJlYWQ+IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29sIG1fd2FudHNUb0V4aXQ7CiAg
ICAgYm9vbCBtX21vcmVJbnB1dEJ1ZmZlcmVkOwogICAgIG11dGFibGUgTG9jayBtX2JhY2tncm91
bmRUaHJlYWRNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKaW5k
ZXggNmNkOGJkN2Y4MWJmZjIyMjdmZTE0ZmJjYTBmYmZkMDU1ZDA5YzU3MS4uMWYyNWU4ZTU0ZTll
ZTg1ZmEwY2NhNmEzMWI5MmUxMTFlNmRmMGNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRl
ckdTdHJlYW1lci5jcHAKQEAgLTM3MCwyMCArMzcwLDIwIEBAIFBhc3NSZWZQdHI8QXVkaW9CdXM+
IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9N
b25vCiBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNo
YXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKICAgICBS
ZWZQdHI8QXVkaW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoIkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGZpbGVQYXRoLCBtaXhUb01v
bm8sIHNhbXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJBdWRp
b0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBzYW1wbGVS
YXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVhZGVyKGZpbGVQYXRoKS5j
cmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9KTsKLSAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3Jl
YXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRyPEF1
ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJB
dWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25v
LCBzYW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9G
aWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2Ft
cGxlUmF0ZV0gewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBk
YXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMWM1YzMwZjM3N2E0MmJlMDAxNzcx
NjUxZTg3ZjcwNDNhNWQ2NWM5MC4uMjY0NjZmNTNiNDgyMThkMzM3YTVhODk0ZjFkYjcyOGRmNGM0
N2M4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAg
LTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCA6IHB1
YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIFN0cmVhbQogICAgICAgICB2b2lkIHdh
c0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBjYW5ub3RT
aG93VVJMKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAKLSAgICAgICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZCB7IDAgfTsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBu
dWxscHRyIH07CiAgICAgICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4
OwogICAgICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICAg
ICAgUnVuTG9vcCogbV9ydW5Mb29wIHsgbnVsbHB0ciB9OwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAg
UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50KFdlYktpdFdlYlNyYyogc3JjLAogICAgIDogU3RyZWFtaW5nQ2xpZW50KHNyYykKIHsKICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwot
ICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KV0geworICAgIG1fdGhyZWFkID0g
VGhyZWFkOjpjcmVhdGUoIlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IiwgW3RoaXMsIHJl
cXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7CiAgICAgICAg
ICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwpAQCAtMTExMyw4ICsxMTEzLDgg
QEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6
On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCgpCiB7CiAgICAgaWYgKG1fdGhyZWFkKSB7
Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3RocmVhZCk7Ci0gICAgICAgIG1fdGhyZWFkID0gMDsK
KyAgICAgICAgbV90aHJlYWQtPmRldGFjaCgpOworICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7
CiAgICAgfQogCiAgICAgaWYgKG1fcnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29w
Q0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29w
Q0YuY3BwCmluZGV4IDQ2Yjg5OTRhODQxZWY3MWVhMjc5Y2U3N2NiYzhmYjQzYzI5ZjBhNjIuLmZm
YmZkYTliODkzNDgzNTQ5MGM5YTQwYmExZjQ4MzM2ZTQ3NjBjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKQEAg
LTc3LDcgKzc3LDcgQEAgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxvb3AoKQogICAgIHN0ZDo6dW5p
cXVlX2xvY2s8U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5Mb29wTXV0ZXgpOwogCiAgICAgaWYg
KCFsb2FkZXJSdW5Mb29wT2JqZWN0KSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZChydW5Mb2FkZXJU
aHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CisgICAgICAgIFRocmVhZDo6
Y3JlYXRlKHJ1bkxvYWRlclRocmVhZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsK
IAogICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbXSB7
IHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IDQ0
MDhjZDE5ODcwNWJhODZjYzhjMTk4NmZiM2UyY2FkZTc5NmRjYzYuLmYxMDU3MTVlZDhkODc5Mzcz
YjYzMzFjYjI2ZTA4MmMzZTFhYjhiMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBAIC05NCwxMCArOTQsMTAgQEAg
aW50IEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdEb3dubG9hZENvdW50KCkgY29uc3QK
IHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCiB7CiAgICAg
aWYgKCFydW5UaHJlYWQoKSkgewotICAgICAgICBpZiAobV90aHJlYWRJZCkKLSAgICAgICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOworICAgICAgICBpZiAobV90aHJl
YWQpCisgICAgICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAg
c2V0UnVuVGhyZWFkKHRydWUpOwotICAgICAgICBtX3RocmVhZElkID0gY3JlYXRlVGhyZWFkKGRv
d25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQiKTsKKyAgICAgICAgbV90aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZShkb3dubG9hZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7
CiAgICAgfQogfQogCkBAIC0xMDUsOSArMTA1LDkgQEAgdm9pZCBDdXJsRG93bmxvYWRNYW5hZ2Vy
OjpzdG9wVGhyZWFkKCkKIHsKICAgICBzZXRSdW5UaHJlYWQoZmFsc2UpOwogCi0gICAgaWYgKG1f
dGhyZWFkSWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7
Ci0gICAgICAgIG1fdGhyZWFkSWQgPSAwOworICAgIGlmIChtX3RocmVhZCkgeworICAgICAgICBt
X3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRy
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxEb3dubG9hZC5oCmluZGV4IDAyY2U3MzFiZDEwYTgwMTliN2ViZTFmYWM1MmI0NWU0
MDkyNTYyMzEuLmY2YmJjNzdmNGQzY2UwYjk2ODdkMWQ4ZmNhNjA5MTU4N2M5YWU0OWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2Fk
LmgKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgQ3VybERvd25sb2FkTWFuYWdlciB7CiAKICAgICBz
dGF0aWMgdm9pZCBkb3dubG9hZFRocmVhZCh2b2lkKiBkYXRhKTsKIAotICAgIFRocmVhZElkZW50
aWZpZXIgbV90aHJlYWRJZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBDVVJM
TSogbV9jdXJsTXVsdGlIYW5kbGU7CiAgICAgVmVjdG9yPENVUkwqPiBtX3BlbmRpbmdIYW5kbGVM
aXN0OwogICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5kbGVMaXN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmgKaW5kZXggNWY5ZTA5NTQwNDcxN2QzMGJkODk5NDFlNWYyNTJmMTdiMGE4Njdi
OS4uNjhlMjFmNDc0NDUxYWMzODc1MmI5YmM4OTQzYzM1ZDIzYjY5NjliYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbC5oCkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsKICAgICAgICAgc2l6ZV90IHNpemUg
eyAwIH07CiAgICAgfTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWQgeyAw
IH07CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrZXJUaHJlYWQgeyBudWxscHRyIH07CiAgICAg
c3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFsc2UgfTsKICAgICBMb2NrIG1fbXV0
ZXhTZW5kOwogICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDdXJsLmNwcAppbmRleCAxZTM3OWQxYjAwZDA5NTVmYzJkYTAwYmUzZjk2Zjk5MmE5MWI5
NDNmLi5lY2I5ZjU0YjY1YTMzNTI0ZTNhMzU2YTNiYzEzZDBlMmY2ZjZhY2I4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbEN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9T
b2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIAogICAgIHJlZigpOyAvLyBzdG9w
VGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVmKCkuCiAKLSAgICBtX3dvcmtlclRocmVhZCA9IGNyZWF0
ZVRocmVhZCgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7CisgICAgbV93b3JrZXJUaHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7CiAKICAgICAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTI0OSw4ICsyNDksOCBAQCB2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X3N0b3BUaHJlYWQgPSB0cnVlOwotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fd29ya2Vy
VGhyZWFkKTsKLSAgICBtX3dvcmtlclRocmVhZCA9IDA7CisgICAgbV93b3JrZXJUaHJlYWQtPndh
aXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV93b3JrZXJUaHJlYWQgPSBudWxscHRyOwogICAgIGRl
cmVmKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCA3
YWQ1YjU3OTEzYTE2NzJkZjkxOTZlOWViMDEzM2UyM2UyMzI5ODVkLi5kZWU2Y2U2ZDY3M2Q3NmI0
MWYyNzQ1NDA0ZmIwNzlmMjE5NjUzYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpXb3Jr
ZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyCiB9CiAK
IFdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcm
IHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSwgV29ya2Vy
UmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5LCBXb3JrZXJUaHJlYWRTdGFydE1v
ZGUgc3RhcnRNb2RlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMm
IGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycywgYm9vbCBzaG91bGRCeXBhc3NN
YWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BP
cmlnaW4sIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9u
UHJveHkqIGNvbm5lY3Rpb25Qcm94eSwgU29ja2V0UHJvdmlkZXIqIHNvY2tldFByb3ZpZGVyLCBK
U0M6OlJ1bnRpbWVGbGFncyBydW50aW1lRmxhZ3MpCi0gICAgOiBtX3RocmVhZElEKDApCisgICAg
OiBtX3RocmVhZChudWxscHRyKQogICAgICwgbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2Fk
ZXJQcm94eSkKICAgICAsIG1fd29ya2VyUmVwb3J0aW5nUHJveHkod29ya2VyUmVwb3J0aW5nUHJv
eHkpCiAgICAgLCBtX3J1bnRpbWVGbGFncyhydW50aW1lRmxhZ3MpCkBAIC0xMzMsMTUgKzEzMywx
NSBAQCBXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQogCiBib29sIFdvcmtlclRocmVhZDo6
c3RhcnQoKQogewotICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3Vy
ZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4K
KyAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3Ro
cmVhZCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLgogICAgIExvY2tIb2xk
ZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCisg
ICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fdGhyZWFkSUQg
PSBjcmVhdGVUaHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldl
YkNvcmU6IFdvcmtlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV29ya2VyVGhy
ZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOwogCi0gICAg
cmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFdvcmtl
clRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhyZWFkKQpAQCAtMTkzLDcgKzE5Myw3
IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIGdfbWFpbl9jb250ZXh0
X3BvcF90aHJlYWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQoKSk7CiAjZW5kaWYKIAotICAgIFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBtX3RocmVhZElEOworICAgIFJlZlB0cjxUaHJlYWQ+
IHByb3RlY3RvciA9IG1fdGhyZWFkOwogCiAgICAgQVNTRVJUKG1fd29ya2VyR2xvYmFsU2NvcGUt
Pmhhc09uZVJlZigpKTsKIApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3
b3JrZXJUaHJlYWQoKQogICAgIHRocmVhZEdsb2JhbERhdGEoKS5kZXN0cm95KCk7CiAKICAgICAv
LyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBkZXN0cm95ZWQgZnJvbSBub3RpZmlj
YXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlzIi4KLSAgICBkZXRhY2hUaHJlYWQo
dGhyZWFkSUQpOworICAgIHByb3RlY3Rvci0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgV29ya2VyVGhy
ZWFkOjpzdGFydFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
clRocmVhZC5oCmluZGV4IDA3YWQzY2U3ODRmOTE5ZjcwYzQ1NjgxYjk1NGMwMDk5OTZmNTU3ZjIu
LmY4MDllZTY2NzI3ZWUxMzlkYzRmMTlkMmNiNjFiMjI2NWU0ZWE0YmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJUaHJlYWQuaApAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBXb3JrZXJUaHJl
YWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBib29sIHN0YXJ0KCk7
CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29u
c3QgeyByZXR1cm4gbV90aHJlYWRJRDsgfQorICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQo
KSBjb25zdCB7IHJldHVybiBtX3RocmVhZCA/IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogICAgIFdv
cmtlclJ1bkxvb3AmIHJ1bkxvb3AoKSB7IHJldHVybiBtX3J1bkxvb3A7IH0KICAgICBXb3JrZXJM
b2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlckxv
YWRlclByb3h5OyB9CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1By
b3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRpbmdQcm94eTsgfQpAQCAtOTgsNyAr
OTgsNyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJl
YWQ+IHsKICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRTdGFydCh2b2lkKik7CiAgICAgdm9p
ZCB3b3JrZXJUaHJlYWQoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAg
ICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBXb3JrZXJSdW5Mb29wIG1fcnVuTG9vcDsK
ICAgICBXb3JrZXJMb2FkZXJQcm94eSYgbV93b3JrZXJMb2FkZXJQcm94eTsKICAgICBXb3JrZXJS
ZXBvcnRpbmdQcm94eSYgbV93b3JrZXJSZXBvcnRpbmdQcm94eTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9TdG9yYWdlVGhyZWFkLmNwcAppbmRleCBiYjY2ZmNlYTdlNTI4YmMyN2Y2MzNhM2U1Mjg3OGI1
MDFlZjBlMTg3Li4zNTc2Nzk0NmFkZTM3MmE0Nzk0NWY4NWQzZjg5NThiNTI1NGFiZTQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIHN0
YXRpYyBIYXNoU2V0PFN0b3JhZ2VUaHJlYWQqPiYgYWN0aXZlU3RvcmFnZVRocmVhZHMoKQogfQog
CiBTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSUQoMCkKKyAg
ICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0K
QEAgLTQ4LDE2ICs0OCwxNiBAQCBTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKIFN0b3Jh
Z2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3RocmVhZCk7CiB9CiAK
IGJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhy
ZWFkKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhpcywgIldlYkNv
cmU6IExvY2FsU3RvcmFnZSIpOworICAgIGlmICghbV90aHJlYWQpCisgICAgICAgIG1fdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNr
LCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CiAgICAgYWN0aXZlU3RvcmFnZVRocmVh
ZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhy
ZWFkOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjayh2
b2lkKiB0aHJlYWQpCkBAIC03OCwyNSArNzgsMjUgQEAgdm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJl
YWRFbnRyeVBvaW50KCkKIHZvaWQgU3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9p
ZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFT
U0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVl
dWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91
bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFdURk1vdmUoZnVuY3Rpb24pKSk7CiB9CiAKIHZvaWQg
U3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAgICBBU1NF
UlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJl
YWRzKCkucmVtb3ZlKHRoaXMpOwogICAgIC8vIEV2ZW4gaW4gd2VpcmQsIGV4Y2VwdGlvbmFsIGNh
c2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KLSAg
ICBpZiAoIW1fdGhyZWFkSUQpCisgICAgaWYgKCFtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4o
W3RoaXNdIHsKICAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwogICAgIH0pKTsKLSAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSk7Ci0gICAgbV90aHJlYWRJ
RCA9IDA7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6
OnBlcmZvcm1UZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0
b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKaW5k
ZXggOTU2NGI4YWEwNmU1MjQzZTMwZTQ2N2M1ZmJmZTJjZGFkYjI0MGM1Ni4uOGNmMWIzZDRhZGM1
YTMwNmE3N2VjNzdjOWMzMjY2NjE2ODdiZWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
dG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVRocmVhZC5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFN0b3JhZ2VUaHJlYWQgewogICAgIC8v
IEJhY2tncm91bmQgdGhyZWFkIHBhcnQgb2YgdGhlIHRlcm1pbmF0ZSBwcm9jZWR1cmUuCiAgICAg
dm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTWVzc2FnZVF1ZXVlPEZ1bmN0
aW9uPHZvaWQgKCk+PiBtX3F1ZXVlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNiODVmMjJmZmFlMDFlMjhhYWI5OTgx
NjY5OGFkYWQ3YTM4NDNjNWYuLmIwNGFjYzhjMzFjNWVjYTgyYTUxNzQxNjY3ZGI3MGUwNTNmMWQy
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogewogICAg
IHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwogCi0gICAgV1RG
OjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKIAogICAgIG1fc3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVI
YW5kbGVyOwogICAgIG1fbG9hZFRocm90dGxlTGF0ZW5jeSA9IHBhcmFtZXRlcnMubG9hZFRocm90
dGxlTGF0ZW5jeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKaW5kZXggZWY3YmE4
OTk4MjAyMzI1ODllNzM5MWYyN2ZjZDNkNmUxNjlmNjg5NC4uZmEwMzBmYjNhMmEwZjgyZDZhMjQ1
YmY4NTZiMzZhYTI3MzIwMDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAK
QEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVhZFN5bmNJblRocmVhZChzaXpl
X3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgcwogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgUmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbCh0aGlzKTsK
LSAgICBkZXRhY2hUaHJlYWQoY3JlYXRlVGhyZWFkKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2No
YW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgIFRocmVhZDo6Y3Jl
YXRlKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0
aW9uSGFuZGxlcl0gewogICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHN0ZDo6bWluKHNpemUs
IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUpOwogICAgICAgICB1aW50OF90KiBidWZmZXJEYXRhID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2MoYnVmZmVyU2l6ZSkpOwogICAgICAgICBH
UmVmUHRyPFNvdXBCdWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9wdEdSZWYoc291cF9idWZmZXJfbmV3
X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwgYnVmZmVyRGF0YSwgZmFzdEZyZWUp
KTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVhZFN5bmNJblRocmVhZChz
aXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgcwogICAgICAgICAg
ICAgRGF0YSBkYXRhID0geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGRhdGEsIDApOwogICAgICAgICB9LCBxdWV1ZSk7Ci0gICAgfSkpOworICAgIH0p
LT5kZXRhY2goKTsKIH0KIAogc3RydWN0IFdyaXRlQXN5bmNEYXRhIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBiYWY1MzA2NmJlMjAwOWUyNmRiZWI3
YWM4ODhjNDA1ZTNiZGJhNmZmLi5iMzg3YjZiNDQ1ZTM3ZDNkYTNlOGE3MmM3YzBiYTM1Yzg2M2Yy
NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC02
NzUsNyArNjc1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKHN0
ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBtZXNzYWdlKQogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykK
ICAgICBpZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpICYmIG1fc2hvdWxkQm9vc3RNYWluVGhy
ZWFkT25TeW5jTWVzc2FnZSkgewotICAgICAgICBwdGhyZWFkX292ZXJyaWRlX3Qgb3ZlcnJpZGUg
PSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFzc19zdGFydF9ucChtX21haW5UaHJlYWQsIGFkanVz
dGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAwKTsKKyAgICAgICAgcHRo
cmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9vdmVycmlkZV9xb3NfY2xhc3Nfc3Rh
cnRfbnAobV9tYWluVGhyZWFkLCBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VT
RVJfSU5URVJBQ1RJVkUpLCAwKTsKICAgICAgICAgbWVzc2FnZS0+c2V0UU9TQ2xhc3NPdmVycmlk
ZShvdmVycmlkZSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQ
b2ludC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQ
Q1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAppbmRleCAzYmI3YzZkNDdkNDNjNjk3NmIw
M2NmZjc3MzY0NGY0ODc4NDkzZDQxLi5mMjNkYjQzYzAyMzRkYzdjODEwNDk1M2YwNGVmODc5NTJm
OWI4NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxp
dGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZp
Y2VFbnRyeVBvaW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFhQQ1NlcnZpY2VJbml0aWFs
aXplcihPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiBjb25uZWN0aW9uLCB4cGNfb2JqZWN0
XwogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAocGFyYW1ldGVycy5leHRyYUluaXRp
YWxpemF0aW9uRGF0YS5jb250YWlucyhBU0NJSUxpdGVyYWwoImFsd2F5cy1ydW5zLWF0LWJhY2tn
cm91bmQtcHJpb3JpdHkiKSkpCi0gICAgICAgIHNldEdsb2JhbE1heFFPU0NsYXNzKFFPU19DTEFT
U19VVElMSVRZKTsKKyAgICAgICAgVGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyhRT1NfQ0xB
U1NfVVRJTElUWSk7CiAjZW5kaWYKIAogICAgIFhQQ1NlcnZpY2VUeXBlOjpzaW5nbGV0b24oKS5p
bml0aWFsaXplKHBhcmFtZXRlcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAppbmRleCAwNjA4YWI3MmY5OTI0
OGVmMjRjZDJkNTI0NWVlNTMzM2EwMGQ5ZDBkLi40OGQxMDY5Nzc2NWE5NWE4YjM1ODcyMzBlMTAy
ZDgwM2FkNThjMGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgv
TWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIE1lbW9y
eVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKCkKICAgICBpZiAobV9ldmVu
dEZEID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlz
XSB7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIk1lbW9yeVBy
ZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7CiAgICAgICAgIGRvdWJsZSBwb2xsSW50ZXJ2YWwgPSBz
X21heFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kczsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgICAgIHNsZWVwKHBvbGxJbnRlcnZhbCk7CkBAIC0yNzEsNyArMjcxLDcgQEAgTWVtb3J5
UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IoKQogICAgICAgICB9CiAgICAg
ICAgIGNsb3NlKG1fZXZlbnRGRCk7CiAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElk
ZW50aWZpZXIpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIElQQzo6QXR0YWNobWVudCBN
ZW1vcnlQcmVzc3VyZU1vbml0b3I6OmNyZWF0ZUhhbmRsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCAxZDUwMjE1YTIwMzExNGI0ZjIzZDVkNThm
MmQyNTNmZjc5MDU2ZDVlLi40Zjk2YWJiZjBkYzk3MmY4YjljMmM2Y2Y2ZTgyNjQ2OWUyNWZiZjVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTI1OCw3ICsy
NTgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MoV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAKICAgICAvLyBNYXRjaCB0aGUgUW9TIG9m
IHRoZSBVSVByb2Nlc3MgYW5kIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGJ1dCB1c2UgYSBzbGlnaHRs
eSBsb3dlciBwcmlvcml0eS4KLSAgICBXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFj
dGl2ZSgtMSk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFj
dGl2ZSgtMSk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gcGFyYW1l
dGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcjsKICAgICBpZiAoIW1fc3Vw
cHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMzVhZWQ4NzE1MGRlZTQxMTk3MTQ2ZmVlZjBiMDlm
ZjQ2ZTg0MDYwLi5lYTI3MDVjY2M0ZDFlYTM3NmUzY2I1ZWI0OWYxNDg1NTZiNGRiY2U1IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxU
aHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRp
Y3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAg
ICAgIChydW5KYXZhU2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVh
ZHMpOgorICAgICAgICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgICh0ZXN0VGhyZWFkSWRlbnRp
Zmllck1hcCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9QYXJraW5nTG90LmNwcDoKKwogMjAxNy0wNC0wNiAgTXlsZXMgQy4gTWF4ZmllbGQg
IDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9udFdpdGhGZWF0dXJlcyB0
ZXN0IGZvbnQgcGFzcyBPVFMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFT
Y3JpcHRUaHJlYWRpbmcuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVh
ZGluZy5jcHAKaW5kZXggZTJmOWJhZGU2Y2E3YzI2OTQ4NWE0Y2RjYmU2MDk5YzM2YmEwMjE5OC4u
NzEwZDJhNTlkYTkyOTAxNmU2MDhhNGNmN2Q5NDZmYTg3ZmFkOTMyYyAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgc3Rh
dGljIExvY2smIGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKQogICAgIHJldHVybiBzdGF0aWNNdXRl
eDsKIH0KIAotdHlwZWRlZiBIYXNoU2V0PFRocmVhZElkZW50aWZpZXI+IFRocmVhZFNldDsKK3R5
cGVkZWYgSGFzaFNldDxSZWZQdHI8VGhyZWFkPj4gVGhyZWFkU2V0Owogc3RhdGljIFRocmVhZFNl
dCYgamF2YVNjcmlwdFRocmVhZHMoKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19M
T0NBTChUaHJlYWRTZXQsIHN0YXRpY0phdmFTY3JpcHRUaHJlYWRzLCAoKSk7CkBAIC0xMDgsMTAg
KzEwOCwxMCBAQCB2b2lkIHJ1bkphdmFTY3JpcHRUaHJlYWQodm9pZCopCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011
dGV4KCkpOwotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGN1cnJlbnRUaHJlYWQo
KTsKLSAgICAgICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7Ci0gICAgICAgIGphdmFTY3JpcHRUaHJl
YWRzKCkucmVtb3ZlKHRocmVhZCk7Ci0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNy
ZWF0ZVRocmVhZCgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOworICAgICAgICBUaHJlYWQm
IHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOworICAgICAgICB0aHJlYWQuZGV0YWNoKCk7Cisg
ICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkucmVtb3ZlKCZ0aHJlYWQpOworICAgICAgICBqYXZh
U2NyaXB0VGhyZWFkcygpLmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwg
MCwgMCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lk
IHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMoKQogICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3Jp
cHRUaHJlYWRzTXV0ZXgoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGphdmFTY3Jp
cHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoY3Jl
YXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CisgICAgICAgIGphdmFTY3Jp
cHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6Y3JlYXRlKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAw
KSk7CiB9CiAKIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKQEAgLTEzOCw3ICsxMzgsNyBA
QCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgICAgIGphdmFTY3JpcHRUaHJlYWRz
U2hvdWxkVGVybWluYXRlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRp
ZmllciwgamF2YVNjcmlwdFRocmVhZHNDb3VudD4gdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRy
PFRocmVhZD4sIGphdmFTY3JpcHRUaHJlYWRzQ291bnQ+IHRocmVhZHM7CiAgICAgewogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwogICAgICAgICBj
b3B5VG9WZWN0b3IoamF2YVNjcmlwdFRocmVhZHMoKSwgdGhyZWFkcyk7CkBAIC0xNDYsNyArMTQ2
LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQogICAgIH0KIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytpKQotICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2
YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQppbmRleCBmYjRkMjZmY2NlYjcwYzRiNTMyMDEwZGE4NWZiOWNlNzg1NWMxMzg0
Li4zY2VhYTZmM2U2NTczNWQzMGVmMWE0Zjg5N2Q1ZTY5YzRmYTVmZjA2IDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0xMDcyLDggKzEwNzIsOCBAQCBz
dGF0aWMgdm9pZCB0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCgpCiAgICAgcHRocmVhZF9qb2luKHB0
aHJlYWQsIDApOwogCiAgICAgLy8gTm93IGNyZWF0ZSBhbm90aGVyIHRocmVhZCB1c2luZyBXVEYu
IE9uIE9TWCwgaXQgd2lsbCBoYXZlIHRoZSBzYW1lIHB0aHJlYWQgaGFuZGxlCi0gICAgLy8gYnV0
IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQgVGhyZWFkSWRlbnRpZmllci4KLSAgICBjcmVhdGVUaHJl
YWQocnVuVGhyZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsKKyAgICAvLyBidXQgc2hv
dWxkIGdldCBhIGRpZmZlcmVudCBSZWZQdHI8VGhyZWFkPi4KKyAgICBUaHJlYWQ6OmNyZWF0ZShy
dW5UaHJlYWQsIDAsICJEdW1wUmVuZGVyVHJlZTogdGVzdCIpOwogfQogCiBzdGF0aWMgdm9pZCBh
bGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Db25kaXRpb24uY3BwCmluZGV4IDg0ODUyNzM1MWY2MDYzZmMyNjM2ODc4MDU2ZDljMjRkYmFi
ZTgzZGMuLjc3MjE2MzZiNzc4MDdmMTM5NTFlYTExMmZiZDQxM2U4ZmFjNDYwYmMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcApAQCAtODksMTQgKzg5LDE0
IEBAIHZvaWQgcnVuVGVzdCgKICAgICBDb25kaXRpb24gZW1wdHlDb25kaXRpb247CiAgICAgQ29u
ZGl0aW9uIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gY29u
c3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRocmVh
ZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAgVmVj
dG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5zaWdu
ZWQ+IHJlY2VpdmVkOwogICAgIExvY2sgcmVjZWl2ZWRMb2NrOwogICAgIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+
IHRocmVhZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1l
ciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7
KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrZXIsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRo
IHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAi
LCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIGNvbnN1
bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUs
ICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRDb250aW51ZSB8fCAhcXVldWUuaXNF
bXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBydW5UZXN0KAog
ICAgIHNsZWVwKGRlbGF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2Vyczsg
aS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVh
dGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgPSBUaHJl
YWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAg
WyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVz
c2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBydW5UZXN0
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2tlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBwcm9kdWN0
aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIs
IHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCks
ICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAi
LCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxu
IikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUuc2l6ZSgp
IDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xNTUsOCArMTU1LDggQEAgdm9pZCBy
dW5UZXN0KAogICAgICAgICBwcm9kdWNlclRocmVhZHMuYXBwZW5kKHRocmVhZElkZW50aWZpZXIp
OwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDog
cHJvZHVjZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJ
ZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiBw
cm9kdWNlclRocmVhZHMpCisgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0
aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobG9j
ayk7CkBAIC0xNjQsOCArMTY0LDggQEAgdm9pZCBydW5UZXN0KAogICAgIH0KICAgICBlbXB0eUNv
bmRpdGlvbi5ub3RpZnlBbGwoKTsKIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
ZGVudGlmaWVyIDogY29uc3VtZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElk
ZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCisgICAgICAgIHRocmVhZElkZW50aWZpZXItPndh
aXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBFWFBFQ1RfRVEobnVtUHJvZHVjZXJzICogbnVtTWVz
c2FnZXNQZXJQcm9kdWNlciwgcmVjZWl2ZWQuc2l6ZSgpKTsKICAgICBzdGQ6OnNvcnQocmVjZWl2
ZWQuYmVnaW4oKSwgcmVjZWl2ZWQuZW5kKCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvTG9jay5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9M
b2NrLmNwcAppbmRleCA1NTc2MzAyZDY5MGRmY2EzNTk5MjkyOGIxYzg1M2M3NjIyZTQ1ZmI5Li42
YTRlNTM4ZjU2ZjQ2ZDE3N2EzZjYyZjFkZGViM2E0ZDBhZjJhZjA4IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBAIHZvaWQgcnVuTG9ja1Rl
c3QodW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1UaHJlYWRzUGVyR3JvdXAs
IHVuc2lnbmVkCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExvY2tUeXBlW10+IGxvY2tzID0gc3Rk
OjptYWtlX3VuaXF1ZTxMb2NrVHlwZVtdPihudW1UaHJlYWRHcm91cHMpOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxkb3VibGVbXT4gd29yZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1U
aHJlYWRHcm91cHMpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IHRo
cmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFkR3Jv
dXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVmUHRyPFRo
cmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRyPFRocmVhZD5bXT4obnVt
VGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKIAogICAgIGZvciAodW5zaWduZWQg
dGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykg
ewogICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CiAKICAgICAgICAgZm9yICh1
bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTsp
IHsKLSAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJH
cm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIHRocmVhZHNb
dGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IFRo
cmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJMb2NrIHRlc3QgdGhyZWFkIiwKICAgICAg
ICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsIG51bUl0ZXJhdGlv
bnMsIHdvcmtQZXJDcml0aWNhbFNlY3Rpb25dICgpIHsKICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtSXRlcmF0aW9uczsgaS0tOykgewpAQCAtNjYsNyArNjYsNyBAQCB2
b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhy
ZWFkc1Blckdyb3VwLCB1bnNpZ25lZAogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgdGhyZWFk
SW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4
LS07KQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4
XSk7CisgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
CiAgICAgZG91YmxlIGV4cGVjdGVkID0gMDsKICAgICBmb3IgKHVpbnQ2NF90IGkgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obnVtSXRlcmF0aW9ucykgKiB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uICog
bnVtVGhyZWFkc1Blckdyb3VwOyBpLS07KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9QYXJraW5nTG90LmNwcAppbmRleCBjNjdlMWUwODE1YTgzYWZhOTMzM2UyYWM5YTJiZDc4YjY3
YjE2NDViLi41YWY5YzdjODI3YjIxZTIxZDhkZjkzMDUyNjBkNmZmZWU2OGZiZDFjIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcApAQCAtNDgsMTYgKzQ4
LDE0IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtVGhyZWFkczsgaS0tOykgewogICAgICAgICAgICAgdGhyZWFkcy5hcHBl
bmQoCi0gICAgICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgIFRocmVh
ZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAiUGFya2luZyBUZXN0IFRocmVhZCIsCiAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFWFBF
Q1RfTkUoMHUsIGN1cnJlbnRUaHJlYWQoKSk7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgIGRv
d24oKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0
ZXg+IGxvY2tlcihsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF3YWtlLmFkZChjdXJy
ZW50VGhyZWFkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9IGN1cnJl
bnRUaHJlYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3YWtlLmFkZChUaHJlYWQ6OmN1
cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdva2VuID0gJlRocmVhZDo6
Y3VycmVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeV9vbmUo
KTsKICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICB9CkBAIC02NSwxNiArNjMsMTYg
QEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICB2b2lkIHVucGFya09uZSh1bnNpZ25l
ZCBzaW5nbGVVbnBhcmtJbmRleCkKICAgICB7Ci0gICAgICAgIEVYUEVDVF9FUSgwdSwgbGFzdEF3
b2tlbik7CisgICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgPT0gbGFzdEF3b2tlbik7CiAgICAg
ICAgIAogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKLSAgICAgICAg
VmVjdG9yPFRocmVhZElkZW50aWZpZXIsIDg+IHF1ZXVlOworICAgICAgICBWZWN0b3I8UmVmUHRy
PFRocmVhZD4sIDg+IHF1ZXVlOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAg
ICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQq
IGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiB0aHJlYWRJZGVudGlmaWVyLCBj
b25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNl
bWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAg
cXVldWUuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIHF1ZXVlLmFw
cGVuZCgmdGhyZWFkSWRlbnRpZmllcik7CiAKICAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25B
ZGRyZXNzKys7CiAgICAgICAgICAgICB9KTsKQEAgLTg3LDEyICs4NSwxMiBAQCBzdHJ1Y3QgU2lu
Z2xlTGF0Y2hUZXN0IHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4g
bG9ja2VyKGxvY2spOwogICAgICAgICAgICAgd2hpbGUgKGF3YWtlLnNpemUoKSA8IHNpbmdsZVVu
cGFya0luZGV4ICsgMSkKICAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwot
ICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBsYXN0QXdva2VuKTsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKG51bGxwdHIgIT0gbGFzdEF3b2tlbik7CiAgICAgICAgICAgICBpZiAoIXF1ZXVlLmlz
RW1wdHkoKSAmJiBxdWV1ZVswXSAhPSBsYXN0QXdva2VuKSB7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiV29rZSB1cCB3cm9uZyB0aHJlYWQ6IHF1ZXVlID0gIiwgbGlzdER1bXAocXVldWUpLCAi
LCBsYXN0IGF3b2tlbiA9ICIsIGxhc3RBd29rZW4sICJcbiIpOwogICAgICAgICAgICAgICAgIEVY
UEVDVF9FUShxdWV1ZVswXSwgbGFzdEF3b2tlbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsYXN0QXdva2VuID0gMDsKKyAgICAgICAgICAgIGxhc3RBd29rZW4gPSBudWxscHRyOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0xMDAsNyArOTgsNyBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0
IHsKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwogICAg
ICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlm
aWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYsIGNv
bnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2Vt
YXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCkBA
IC0xMTQsNyArMTEyLDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICAgICAgbnVt
V2FpdGluZ09uQWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAg
ICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAg
ICAgICAgICAgIFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVzcykgewogICAgICAgICAg
ICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIApAQCAtMTI5LDggKzEyNyw4IEBAIHN0cnVjdCBTaW5nbGVMYXRj
aFRlc3QgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlcik7CiAgICAgICAg
IH0KIAotICAgICAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHRo
cmVhZHMpCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlm
aWVyKTsKKyAgICAgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogdGhy
ZWFkcykKKyAgICAgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAgICAgfQogCiAgICAgLy8gU2VtYXBob3JlIG9wZXJhdGlvbnMuCkBAIC0xNzksOSArMTc3LDkg
QEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgQXRvbWljPGludD4gc2VtYXBob3JlOwog
ICAgIHN0ZDo6bXV0ZXggbG9jazsKICAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBjb25kaXRp
b247Ci0gICAgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBhd2FrZTsKLSAgICBWZWN0b3I8VGhy
ZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKLSAgICBUaHJlYWRJZGVudGlmaWVyIGxhc3RBd29rZW4g
eyAwIH07CisgICAgSGFzaFNldDxSZWY8VGhyZWFkPj4gYXdha2U7CisgICAgVmVjdG9yPFJlZlB0
cjxUaHJlYWQ+PiB0aHJlYWRzOworICAgIFJlZlB0cjxUaHJlYWQ+IGxhc3RBd29rZW4geyBudWxs
cHRyIH07CiB9OwogCiB2b2lkIHJ1blBhcmtpbmdUZXN0KHVuc2lnbmVkIG51bUxhdGNoZXMsIHVu
c2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBudW1UaHJlYWRzLCB1bnNpZ25lZCBudW1TaW5nbGVVbnBh
cmtzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306521</attachid>
            <date>2017-04-07 11:46:22 -0700</date>
            <delta_ts>2017-04-09 04:58:54 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-170502-20170408034621.patch</filename>
            <type>text/plain</type>
            <size>217247</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDZkNTUxZDAxMzYzODBiNjczMjY5ZWZhNGQ4ZWVjZTBjZjM1ODRmLi4xNDhmZTAxNWI1OTg1ZTNj
MTE1YWI4NWEzYmMzOGU1NGIxZjdkYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1BsYXRmb3JtVGhyZWFkLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RnJhbWVXYWxrZXI6Omlz
VmFsaWRGcmFtZVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpTYW1w
bGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6Y3JlYXRlVGhy
ZWFkSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2Ft
cGxlKToKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpvd25lclRocmVhZCk6CisgICAgICAgICog
cnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6ZmluZEFjdGl2ZVZNQW5kU3RhY2tC
b3VuZHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAg
ICAgICAoSlNDOjpWTVRyYXBzOjpmaXJlVHJhcCk6CisKIDIwMTctMDQtMDcgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVwZGF0ZSB0
aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggNWMwYmI1
MGQ4NTBjY2Q1ZmQ0ZWM1MGRjOTQ0ODgzNGNmYzZjY2MzZC4uZjU3MjA2YjIyMmI3M2NmNzFjZmU2
OTdhZjA0MzRmNDZkOWZmMTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTcgQEAKKzIwMTctMDQtMDcgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5k
b3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVl
ZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6Cisg
ICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0
b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFk
LmNwcDoKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3Ip
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUp
OgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChX
VEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9SZWZQdHIuaDoKKyAgICAg
ICAgKFdURjo6UmVmUHRyOjpSZWZQdHIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uaDoKKyAgICAgICAgKFdURjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uOjpUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24pOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJQdGhyZWFk
cy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuY3BwLgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIpOgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAg
ICAgICogd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYv
d3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFk
SG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRl
cik6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlcldpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVu
dCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
VEY6OlRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXJX
aW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuaC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp0aHJlYWQpOgorICAgICAgICAo
V1RGOjpUaHJlYWRIb2xkZXI6OlRocmVhZEhvbGRlcik6CisgICAgICAgICogd3RmL1RocmVhZGlu
Zy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAg
ICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0
aXZlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlh
dGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6ZHVtcCk6CisgICAgICAgIChXVEY6Om5vcm1hbGl6ZVRocmVhZE5hbWUpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzZXRD
dXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
c2V0R2xvYmFsTWF4UU9TQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjphZGp1c3RlZFFP
U0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChX
VEY6OlRocmVhZDo6aWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkZE9uRXhpdENhbGxiYWNr
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6ZGlkSm9pbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAg
ICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAg
IChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAg
ICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNy
ZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRo
cmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Z2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0
aHJlYWRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFi
bGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0
YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OnRocmVhZE1hcE11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OmVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50
ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZElu
dGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmRldGFjaFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRo
cmVhZERpZEV4aXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6c2lnbmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKToKKyAgICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5n
ZVByaW9yaXR5KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1
bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3Rh
Ymxpc2gpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhh
bmRsZUJ5SWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5h
bCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50
VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAg
KFdURjo6V29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVl
dWUuaDoKKyAgICAgICAgKiB3dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAo
V1RGOjpkaXNwYXRjaFFPU0NsYXNzKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVH
ZW5lcmljLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGlu
dXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAo
V1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVy
KToKKyAgICAgICAgKiB3dGYvd2luL01haW5UaHJlYWRXaW4uY3BwOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKToKKwogMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRlIHRo
ZSBwcmlvcml0aWVzIHVzZWQgaW4gZ2xpYiBtYWluIGxvb3Agc291cmNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGUwZDQzYjFhY2Y3NGNjZjA5OWM2ZGNjOGQ4ZDc0ZjI1NzlhZjUyOGUuLmEyMTAzYzQzYzA1N2Uz
ZmZkNjA3YjEwYzMwYjgyZGU5MTkwYmQ0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAor
MjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAg
ICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4g
YW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQ
dGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpJREJTZXJ2ZXIpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9E
ZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0F1ZGlv
RGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jQXVk
aW9EZWNvZGVyOjpydW5Mb29wKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVk
aW9EZWNvZGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZyk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVh
ZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xv
c2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6Z2V0VGhyZWFkSUQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRy
b2xsZXI6OmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcpOgorICAg
ICAgICAqIGZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNh
bGxPbkZpbGVUaHJlYWQpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SWNvbkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmg6CisgICAgICAgICogcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAg
ICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhy
ZWFkOjpTY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFk
Ojppc0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpj
cmVhdGVUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6
OnRocmVhZENhbGxiYWNrKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjpIUlRGRGF0YWJhc2VMb2FkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5bmNocm9ub3Vz
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVy
VGhyZWFkQ29tcGxldGlvbik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQp
OgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJS
dW5Mb29wQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVyUnVuTG9vcCk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdGFydFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdG9wVGhyZWFkKToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OldvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0YXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKToKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
Ojp0aHJlYWRJRCk6CisKIDIwMTctMDQtMDcgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdIEZpeCBjb2RlYyBuYW1lIGluIE9XUiBBU1NFUlQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggMmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1ODA5NzdmMTI5NWQxZmJmZS4uNzg1MzgxNDg2NDNi
NTY4NjIzNmIxMGFlZDI3ODY2OWFmZWFlYWRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxNy0wNC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAg
ICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4g
YW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQ
dGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVRocmVhZDo6U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFk
Ojp+U3RvcmFnZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaCk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUpOgorICAgICAgICAqIFN0b3JhZ2Uv
U3RvcmFnZVRocmVhZC5oOgorCiAyMDE3LTA0LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogT25seSBDYXB0dXJlIEV4dHJh
IE5ldHdvcmsgTG9hZCBNZXRyaWNzIHdoZW4gdGhlcmUgaXMgYSBXZWIgSW5zcGVjdG9yIEZyb250
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggYTUyY2Q3YWNkZDEyMjYzZTY1YWYxOTZiYTAwMzMwMjEzOGI5MWU2
Ni4uNTQxZWMxMjRjMDE2NDRiZjliYmRmNjYxYjBlYmNmMWE2MmUyNjQ0OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIzIEBACisyMDE3LTA0LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVz
ZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRp
b24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVs
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjpyZWFk
U3luY0luVGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6Cisg
ICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAg
ICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VF
bnRyeVBvaW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0aWFsaXplcik6Cisg
ICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9y
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTctMDQtMDcgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVw
ZGF0ZSB0aGUgcHJpb3JpdGllcyB1c2VkIGluIGdsaWIgbWFpbiBsb29wIHNvdXJjZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcAppbmRleCBlNzgwODZjM2E5NjEyYTJmMGI0ZDdhYWYxYWRjN2JhMWExMDFjNTQ3Li40M2Fl
ZjA3Nzk3MGNmZWRiMmNhYzA0NjNmY2Q5ZWNjYTI5ZDE1MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwCkBAIC05
Niw3ICs5Niw3IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkKIHsKICAgICBCaXRtYXAgYml0
bWFwOwogICAgIGNvbnN0IGludCBudW1UaHJlYWRzID0gNTsKLSAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEc1tudW1UaHJlYWRzXTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRzW251bVRo
cmVhZHNdOwogICAgIERhdGEgZGF0YVtudW1UaHJlYWRzXTsKIAogICAgIFdURjo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOwpAQCAtMTA3LDEyICsxMDcsMTIgQEAgdm9pZCB0ZXN0Q29tcGFyZUFuZFN3
YXAoKQogICAgICAgICBkYXRhW2ldLmlkID0gaTsKICAgICAgICAgZGF0YVtpXS5udW1UaHJlYWRz
ID0gbnVtVGhyZWFkczsKICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRocmVhZEZ1bmMg
PSBzdGQ6OmJpbmQoc2V0Qml0VGhyZWFkRnVuYywgJmRhdGFbaV0pOwotICAgICAgICB0aHJlYWRJ
RHNbaV0gPSBjcmVhdGVUaHJlYWQoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRGdW5jKTsKKyAg
ICAgICAgdGhyZWFkc1tpXSA9IFRocmVhZDo6Y3JlYXRlKCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhy
ZWFkRnVuYyk7CiAgICAgfQogCiAgICAgcHJpbnRmKCJXYWl0aW5nIGZvciAlZCB0aHJlYWRzIHRv
IGpvaW5cbiIsIG51bVRocmVhZHMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFk
czsgaSsrKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRHNbaV0pOwor
ICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgcHJpbnRmKCJQ
QVNTOiBDb21wYXJlQW5kU3dhcCB0ZXN0IGNvbXBsZXRlZCB3aXRob3V0IGEgaGFuZ1xuIik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyMTdiNWM4NTUxYTU4ZTZjZmQwMGM1
YmQxZjJkYWExMDI1ZjQwOGUuLjdkMjAzNmJlODYxNmZmNTM4NjdlNWUwNzk1NjVmZGE1YTc4ODUx
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDY3LDcgKzI0NjcsNiBAQAog
CQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVFQzlBNTcwMERBODE2
MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZFRTQzRkNFMUU2NjQx
NzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3Jt
VGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2
NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYx
RDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpT
U3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KQEAgLTUwOTMsNyArNTA5Miw2
IEBACiAJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXRjaGRvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93
VGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQaW5nUG9uZ1N0
YWNrT3ZlcmZsb3dUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZs
b3dUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDUxQjk3RjRE
OTAwOUEzQjRGIC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBwYXRoID0gQVBJ
L3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJl
QW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4
QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2Fw
VGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZENkZDNTFENUU3OTcwMDA4
RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjg1
NCw3ICs2ODUyLDYgQEAKIAkJCQlGNjkyQTg3ODAyNTU1OTdEMDFGRjYwRjcgLyogT3BlcmF0aW9u
cy5oICovLAogCQkJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLywK
IAkJCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovLAotCQkJCUZFRTQz
RkNEMUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oICovLAogCQkJCTg2ODkxNkE5
MTU1RjI4NTQwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oICovLAogCQkJCTE0NzM0MURGMURDMkNF
OTYwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJMTQ3MzQxRDMxREMw
MkU2RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmggKi8sCkBAIC05MzM0LDcgKzkzMzEs
NiBAQAogCQkJCTBGNEEzOEZBMUM4RTEzREYwMDE5MDMxOCAvKiBTdXBlclNhbXBsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwNUI0MUFFMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkVFNDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBs
YXRmb3JtVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFC
ODQgLyogU3ltYm9sQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFC
MDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCmluZGV4IDg3YjM1M2Fh
Mzc5MjVjYTFlMmZhODQxMTk5NzZhZGYwYjFlMDdiYWEuLmM5MTc3MDc5NTg4Zjg2ZDQzMWEyOGJj
MDc0ZDRmZTJlM2YxM2RjNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvdGVzdGFpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWly
LmNwcApAQCAtMTkxMywxMCArMTkxMywxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
CiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFk
czsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7
CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAg
ICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQi
LAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKQEAgLTE5MzMsOCArMTkzMyw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAg
ICAgICAgICAgICAgICB9KSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZCk7
CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0aHJl
YWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAwMTk5NmFmNzFhYjRmMDllYjQ5YjcwMTFj
MTdkYmM5M2M0MGNlODdhLi45MDQ2NTY0ODg3YjZiM2E0YWZhYzM1OWRjMTBjNTAzODRkNzRkZWZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAtMTY4NTAsMTAgKzE2ODUwLDEw
IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAgIExvY2sgbG9jazsKIAotICAg
IFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhy
ZWFkPj4gdGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpu
dW1iZXJPZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAgICAgICAgdGhyZWFkcy5hcHBlbmQo
Ci0gICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgK
ICAgICAgICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAgICAgICAgICAgICAgICAgWyZdICgp
IHsKICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTY4NzAsOCArMTY4NzAsOCBA
QCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAg
IH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVh
ZD4gdGhyZWFkIDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogICAgIGNyYXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKaW5kZXggYTRlMjFmOWZhM2NkNDcyMWVhMjY3NWUw
NmU0ZDUzMGM1YmE5NWIzNS4uZTliMWY1YzJmMGJjMjdiMDI5MzEwYzU1ODE1MjBiMWI1NTIyNTk3
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBpbml0aWFsaXplU3VwZXJTYW1wbGVyKCkKICAgICBp
ZiAoIU9wdGlvbnM6OnVzZVN1cGVyU2FtcGxlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
cmVhdGVUaHJlYWQoCisgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgU3VwZXIgU2Ft
cGxlciIsCiAgICAgICAgIFtdICgpIHsKICAgICAgICAgICAgIGNvbnN0IGludCBzbGVlcFF1YW50
dW0gPSAxMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKaW5kZXgg
Y2VmOTkwY2I0ODMzYTZiYjk0NzFiZDA4YTUwNGU1NWZiNDdkZjQ1OC4uYWQwZWNjNjlhNzdkMTcy
Y2Y0YmMxZWZhYzkzZGY5MzAyN2MwMDllNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBjbGFzcyBXb3JrbGlzdDo6VGhyZWFk
Qm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogICAgICAgICAgICAgZGF0YUxvZyhtX3dv
cmtsaXN0LCAiOiBUaHJlYWQgc3RhcnRlZFxuIik7CiAgICAgICAgIAogICAgICAgICBpZiAobV9y
ZWxhdGl2ZVByaW9yaXR5KQotICAgICAgICAgICAgY2hhbmdlVGhyZWFkUHJpb3JpdHkoY3VycmVu
dFRocmVhZCgpLCBtX3JlbGF0aXZlUHJpb3JpdHkpOworICAgICAgICAgICAgVGhyZWFkOjpjdXJy
ZW50KCkuY2hhbmdlUHJpb3JpdHkobV9yZWxhdGl2ZVByaW9yaXR5KTsKICAgICAgICAgCiAgICAg
ICAgIG1fY29tcGlsYXRpb25TY29wZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb25TY29w
ZT4oKTsKICAgICAgICAgbV9sb25nTGl2ZWRTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TG9uZ0xp
dmVkU3RhdGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L0Rpc2Fzc2VtYmxlci5jcHAKaW5kZXggNzg4YTZjMzYyMzY5YzU4ZGFkMjlhNjBhMzg3MTA0NGU0
NjRlZDMwNS4uMmI4MjRlY2ZkZTU4OTNiMmM2YjcwNmY0NzAyZWNkMjI5NWQyMzU1NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNw
cApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBBc3luY2hyb25vdXNEaXNhc3NlbWJsZXIgewogcHVi
bGljOgogICAgIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpCiAgICAgewotICAgICAgICBjcmVh
dGVUaHJlYWQoIkFzeW5jaHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7
CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJBc3luY2hyb25vdXMgRGlzYXNzZW1ibGVyIiwgWyZd
ICgpIHsgcnVuKCk7IH0pOwogICAgIH0KICAgICAKICAgICB2b2lkIGVucXVldWUoc3RkOjp1bmlx
dWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKaW5kZXggM2FlZTMwMTA0ZjUyOTFhMjg3NjRhNWNkZWU1YWE4ZjBjYTcyYWQzMS4uNzIyM2Iy
MGM5ZGZiYTEwNDMwOThhNzg1NzRiYTI4YTY5NGMwNDViZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0Zp
bmFsaXplKCkKICAgICAgICAgICAgIG1fc2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3VzbHkg
PSB0cnVlOwogICAgICAgICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uLm5vdGlm
eU9uZSgpOwogICAgICAgICB9Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fY29s
bGVjdENvbnRpbnVvdXNseVRocmVhZCk7CisgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQCB2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRv
Q29sbGVjdCgpCiAgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOwogICAgIAogICAgIGlmIChP
cHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpIHsKLSAgICAgICAgbV9jb2xsZWN0Q29udGlu
dW91c2x5VGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBtX2NvbGxlY3RDb250aW51b3Vz
bHlUaHJlYWQgPSBXVEY6OlRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkpTQyBERUJVRyBD
b250aW51b3VzIEdDIiwKICAgICAgICAgICAgIFt0aGlzXSAoKSB7CiAgICAgICAgICAgICAgICAg
TW9ub3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGQwNjU3MDE2YmVlZjlhODlkMDZkZjI3OTcxN2U3NzBi
MTY0YTQ3MTQuLmQ2NzgzN2FmZWYxMzAxZjk2NzJmNjBlYTI5YzQzZmM4NTk3ZGViOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEhlbHBlclBvb2wuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC02NjYsNyArNjY3LDcgQEAgY2xhc3MgSGVhcCB7CiAgICAgTG9j
ayBtX2NvbGxlY3RDb250aW51b3VzbHlMb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbGxlY3RDb250
aW51b3VzbHlDb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29udGlu
dW91c2x5IHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fY29sbGVjdENvbnRpbnVv
dXNseVRocmVhZCB7IDAgfTsKKyAgICBSZWZQdHI8V1RGOjpUaHJlYWQ+IG1fY29sbGVjdENvbnRp
bnVvdXNseVRocmVhZCB7IG51bGxwdHIgfTsKICAgICAKICAgICBNb25vdG9uaWNUaW1lIG1fbGFz
dEdDU3RhcnRUaW1lOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NFbmRUaW1lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKaW5kZXgg
Yjg1Yjc2NDhlMmY1ZDE5ZmEyMmQ3NjNmN2JjZGVmOGY0NGM0MmM4OC4uNGZmZGY5Y2M0ZTNjMzYw
NmIxZGE5YTk0MDc3ZmM3NGM4ODZlYzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBAIC02NCw2MyArNjQsMTMgQEAKICNpbmNs
dWRlIDxwdGhyZWFkX25wLmg+CiAjZW5kaWYKIAotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJ
TkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBT
SUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlw
dENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1Iy
Owotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFsTG9jazsKLXRocmVhZF9sb2NhbCBzdGF0
aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSo+IHRocmVhZExv
Y2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQotc3RhdGljIHZvaWQgcHRocmVhZFNpZ25h
bEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCi17
Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBo
YW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEq
IHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQubG9hZCgpOwotCi0gICAgaWYg
KHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7
Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGlu
dGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCi0gICAgICAgIC8vIFNvIHRo
aXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxs
cyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4g
U2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCi0gICAgICAgIC8vIFNv
LCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4u
Likgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgotICAgICAg
ICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0
aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVjb250
ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsK
LSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0g
KnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOwotI2Vsc2UKLSAgICB0aHJlYWREYXRh
LT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKLSNl
bmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJl
YWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1
bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5k
bGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUz
OTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKLSAgICAvLwotICAg
IC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3VyZXMgdGhhdCBz
dXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDov
L3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hh
cDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVu
ZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5
IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3Bl
bmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRo
aXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4K
LSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OwotICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRT
aWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0KLSAgICAv
LyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQu
Ci0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwot
fQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4p
Ci0KICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKIAot
dXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRocmVhZDsKK3VzaW5nIEpTVGhyZWFkID0g
TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFzcyBBY3RpdmVNYWNoaW5lVGhyZWFkc01h
bmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5l
VGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTQ0LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+
TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3Bl
Y2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBMb2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJl
YWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIGZvciAoVGhyZWFkKiB0ID0g
bV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4
dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKKyAg
ICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0OwogICAgICAgICBkZWxldGUgdDsKICAgICAg
ICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMgTWFjaGluZVRocmVhZHM6OlRocmVhZERh
dGEqIHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVj
aWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRo
cmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEuZ2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJl
YWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0aHJlYWREYXRhKQotICAgIDogZGF0YSh0
aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWREYXRhKTsKLX0KLQotVGhyZWFkKiBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCkKLXsKLSAgICByZXR1
cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQotCi1ib29sIE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdAotewot
I2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAgICByZXR1cm4gZGF0YS0+cGxhdGZvcm1U
aHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuICEhcHRocmVh
ZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3RoZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVk
IGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQog
dm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiB7CiAgICAgaWYgKHRocmVh
ZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcykpIHsKQEAgLTIz
OSw3ICsxNjEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjcmVh
dGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJlYWQqIHRocmVhZCA9IG5ldyBKU1RocmVh
ZCh0aGlzKTsKICAgICB0aHJlYWRTcGVjaWZpY1NldChtX3RocmVhZFNwZWNpZmljRm9yTWFjaGlu
ZVRocmVhZHMsIHRoaXMpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVh
ZHNNdXRleCk7CkBAIC0yNDgsMTIgKzE3MCwxMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRD
dXJyZW50VGhyZWFkKCkKICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gdGhyZWFkOwogfQogCi1U
aHJlYWQqIE1hY2hpbmVUaHJlYWRzOjptYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpCitK
U1RocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkK
IHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBQ
bGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpOwot
ICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRo
cmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCA9PSBwbGF0Zm9ybVRo
cmVhZCkKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gY3VycmVudFRocmVhZCgpOworICAgIGZv
ciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgPT0gaWQp
CiAgICAgICAgICAgICByZXR1cm4gdGhyZWFkOwogICAgIH0KIApAQCAtMjgzLDIyICsyMDUsMjEg
QEAgdm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFk
KHZvaWQqIHApCiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKIAotICAgICAgICBtYWNoaW5l
VGhyZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSk7Cisg
ICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRUaHJlYWQo
KSk7CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRocmVhZD4KLXZvaWQg
TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQgcGxhdGZv
cm1UaHJlYWQpCit2b2lkIE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVh
ZElkZW50aWZpZXIgaWQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVh
ZHNNdXRleCk7Ci0gICAgVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKLSAgICBpZiAo
KnQgPT0gcGxhdGZvcm1UaHJlYWQpIHsKKyAgICBKU1RocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRo
cmVhZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgbV9yZWdpc3Rl
cmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7CisgICAgICAgIEpTVGhyZWFkKiBsYXN0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICAg
ICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsK
LSAgICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgICAgICAgICAgaWYg
KHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgICAgICAgICBsYXN0LT5uZXh0ID0gdC0+
bmV4dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMyMCwxODIg
KzI0MSwyMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tQ3VycmVudFRocmVhZChD
b25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdAogICAgIGNvbnNlcnZhdGl2ZVJvb3Rz
LmFkZChjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tUb3AsIGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFj
a09yaWdpbiwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKIH0KIAotTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEoKQorTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpK
U1RocmVhZChNYWNoaW5lVGhyZWFkcyopCisgICAgOiBuZXh0KG51bGxwdHIpCisgICAgLCBtX3Ro
cmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3
dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0
Zm9ybVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAg
IHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEFT
U0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAgYm9vbCBp
c1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3Mo
KSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLAotICAgICAgICAgICAg
JnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5zdG9yZSh0aGlzKTsK
LQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlv
bi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXI7Ci0g
ICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXIsIFtdIHsKLSAgICAgICAg
Ly8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5k
bGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBp
biB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFj
dGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgc2ln
YWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAg
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVuZFJlc3Vt
ZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87Ci0g
ICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAwKTsKLSAg
ICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAgc2lnZW1wdHlzZXQoJm1hc2spOwotICAg
IHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgcHRocmVhZF9z
aWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0KLSAgICBzZW1faW5pdCgmc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAw
LCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKLSNlbmRpZgorICAg
IG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7CisgICAgbV9zdGFja0VuZCA9IHN0
YWNrQm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVh
ZERhdGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Z2V0UmVnaXN0ZXJzKEpT
VGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgIENs
b3NlSGFuZGxlKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYg
IU9TKERBUldJTikKLSAgICBzZW1fZGVzdHJveSgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
Ci0jZW5kaWYKKyAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJl
Z3M7CisgICAgcmV0dXJuIG1fdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVncyk7CiB9CiAKLWJvb2wg
TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnN1c3BlbmQoKQotewotI2lmIE9TKERBUldJTikK
LSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFk
KTsKLSAgICByZXR1cm4gcmVzdWx0ID09IEtFUk5fU1VDQ0VTUzsKLSNlbGlmIE9TKFdJTkRPV1Mp
Ci0gICAgYm9vbCB0aHJlYWRJc1N1c3BlbmRlZCA9IChTdXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhy
ZWFkSGFuZGxlKSAhPSAoRFdPUkQpLTEpOwotICAgIEFTU0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7
Ci0gICAgcmV0dXJuIHRocmVhZElzU3VzcGVuZGVkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoY3VycmVudFBsYXRmb3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1U
aHJlYWQsICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRo
cmVhZCBpdHNlbGYuIik7Ci0gICAgewotICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVu
ZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRz
LgotICAgICAgICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxv
Y2suCi0gICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRo
cmVhZHMgQSBhbmQgQi4KLSAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5k
IEIgYXR0ZW1wdCB0byBzdXNwZW5kIEEuCi0gICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxz
LiBBbmQgbGF0ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgotICAgICAgICAv
LyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCi0gICAgICAgIExvY2tIb2xk
ZXIgbG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKCFzdXNwZW5kQ291bnQpIHsK
LSAgICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2ln
cXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhh
bmRsZXIuCi0gICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZv
cm1zLCBsaWtlIExpbnV4LgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCog
c3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KLSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQs
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1l
KTsKLSAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVy
YXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBp
cyBkb25lLgotICAgICAgICAgICAgc3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgICsrc3VzcGVuZENvdW50OwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBzdXNwZW5kIHRo
cmVhZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KLXZvaWQgTWFjaGluZVRocmVhZHM6
OlRocmVhZERhdGE6OnJlc3VtZSgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHRocmVhZF9yZXN1
bWUocGxhdGZvcm1UaHJlYWQpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBSZXN1bWVUaHJlYWQo
cGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHsKLSAgICAg
ICAgLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVj
dXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICBMb2NrSG9sZGVyIGxvY2soZ2xv
YmFsU2lnbmFsTG9jayk7Ci0gICAgICAgIGlmIChzdXNwZW5kQ291bnQgPT0gMSkgewotICAgICAg
ICAgICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBp
biB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSBpcyBhY3R1YWxseSBpc3N1ZWQsCi0gICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRs
ZXIgaXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCi0gICAgICAgICAgICAvLyBUaGVy
ZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24g
Zm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KLSAgICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQg
c2lnbmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxl
ci4KLSAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBz
dXNwZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2Fu
IGJlIHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCi0gICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFk
IGxvY2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxl
ci4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBz
dXNwZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgotICAgICAgICAgICAgaWYg
KHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRocmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0g
RVNSQ0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNl
bWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVy
IGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxs
IHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3Rv
cmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAg
IC0tc3VzcGVuZENvdW50OwotICAgIH0KLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byByZXN1
bWUgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotc2l6ZV90IE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWREYXRhOjpnZXRSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiBy
ZWdpc3RlcnMpCi17Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVncyA9IHJlZ2lzdGVycy5yZWdzOwotI2lmIE9TKERBUldJTikKLSNpZiBDUFUoWDg2KQot
ICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBzaXplb2YocmVncykvc2l6ZW9mKGludCk7Ci0gICAg
dGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOwotI2VsaWYg
Q1BVKFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0
X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NU
QVRFNjQ7Ci0jZWxpZiBDUFUoUFBDKSAKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gUFBDX1RI
UkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBD
X1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShQUEM2NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50
ID0gUFBDX1RIUkVBRF9TVEFURTY0X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBm
bGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFNjQ7Ci0jZWxpZiBDUFUoQVJNKQotICAgIHVuc2lnbmVk
IHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKEFSTTY0KQotICAg
IHVuc2lnbmVkIHVzZXJfY291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKLSNlbHNlCi0j
ZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgotCi0gICAga2Vybl9yZXR1cm5fdCBy
ZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKHBsYXRmb3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRf
c3RhdGVfdCkmcmVncywgJnVzZXJfY291bnQpOwotICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUND
RVNTKSB7Ci0gICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBX
VEZfUFJFVFRZX0ZVTkNUSU9OLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmF2YVNj
cmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSBy
ZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVu
bmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOwot
ICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICByZXR1cm4gdXNlcl9jb3VudCAqIHNpemVvZih1
aW50cHRyX3QpOwotLy8gZW5kIE9TKERBUldJTikKLQotI2VsaWYgT1MoV0lORE9XUykKLSAgICBy
ZWdzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTDsKLSAg
ICBHZXRUaHJlYWRDb250ZXh0KHBsYXRmb3JtVGhyZWFkSGFuZGxlLCAmcmVncyk7Ci0gICAgcmV0
dXJuIHNpemVvZihDT05URVhUKTsKLSNlbGlmICgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dM
SUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICByZWdzID0gc3VzcGVuZGVkTWFjaGluZUNvbnRl
eHQ7Ci0gICAgcmV0dXJuIHNpemVvZihSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzKTsKLSNl
bGlmIFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmcmVncy5hdHRyaWJ1dGUp
OwotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhORVRCU0QpCi0jaWYgIU9TKE9QRU5CU0Qp
Ci0gICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZwotICAgIHB0aHJl
YWRfYXR0cl9nZXRfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5kaWYK
LSNlbHNlCi0gICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhl
ciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICBw
dGhyZWFkX2dldGF0dHJfbnAocGxhdGZvcm1UaHJlYWQsICZyZWdzLmF0dHJpYnV0ZSk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhyZWFk
IHJlZ2lzdGVycyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKK3ZvaWQq
IE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25z
dAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKChPUyhGUkVFQlNEKSB8fCBk
ZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQogICAgIHJldHVybiBNYWNoaW5lQ29u
dGV4dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwpAQCAtNTE5LDcgKzI4MCw3IEBAIHZvaWQqIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigpIGNvbnN0CiB9
CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6
VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGlu
ZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiB7CiAj
aWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChf
X0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ3Mp
OwpAQCAtNTI4LDcgKzI4OSw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29u
c3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlv
blBvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKE9T
KEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkKICAgICByZXR1cm4gTWFjaGluZUNvbnRl
eHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdzKTsKQEAgLTUzNyw3ICsyOTgsNyBAQCB2b2lkKiBN
YWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIo
KSBjb25zdAogI2VuZGlmCiB9CiAKLXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpS
ZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpSZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewogICAgIC8vIExMSW50IHVzZXMgcmVnVDQg
YXMgUEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwg
ZGVmaW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICszMDksNiBAQCB2b2lkKiBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKIH0KICNlbmRpZiAv
LyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVh
ZERhdGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17
Ci0gICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJl
Z2lzdGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhE
QVJXSU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxF
KEpJVCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50
IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGludCByZWRab25lQWRqdXN0bWVudCA9IDA7
CkBAIC01NzMsMTcgKzMyNCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3Rt
ZW50KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1lbnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lk
Kiwgc2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQq
IHN0YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpKU1Ro
cmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQogewotICAgIGNoYXIqIGJlZ2luID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSk7CisgICAgY2hhciogYmVnaW4g
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jhc2UpOwogICAgIGNoYXIqIGVu
ZCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2
b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFja1RvcCkpKTsKICAgICBBU1NF
UlQoYmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVuZFdpdGhSZWRab25lID0gZW5kICsgb3NS
ZWRab25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8
c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25l
KSkgPT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSk7CiAKLSAg
ICBpZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFja0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUg
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQpOworICAgIGlmIChlbmRXaXRo
UmVkWm9uZSA8IG1fc3RhY2tFbmQpCisgICAgICAgIGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tFbmQpOwogCiAgICAgc3RkOjpzd2FwKGJlZ2luLCBl
bmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJlZ2luLCBlbmRXaXRo
UmVkWm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5ICszNjcsOSBAQCBzdGF0aWMgdm9pZCBjb3B5TWVt
b3J5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qgc2l6ZSkKIC8vIHNpZ25pZmlj
YW50IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2sgaXMgb25seSBj
YWxsZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBzaXplKQogLy8gb3BlcmF0aW9uLiBBcyB0aGUgaGVh
cCBpcyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIgdGhhbiB0aGUgc3RhY2sgdGhlIHBlcmZvcm1hbmNl
IGhpdCBpcyBtaW5pbWFsLgogLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRT
dGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVf
dCogc2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpT
VGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqIHNp
emUpCiB7Ci0gICAgVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIEpTVGhyZWFkOjpS
ZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCByZWdpc3RlcnNTaXplID0gdGhyZWFkLT5n
ZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gc3Rh
Y2sgPSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3RlcnMuc3RhY2tQb2ludGVyKCkpOwogCkBA
IC02MzEsOCArMzgyLDYgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFk
U3RhY2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV8KICAgICBpZiAoY2FuQ29w
eSkKICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyKSArICpzaXpl
LCBzdGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAgICAqc2l6ZSArPSBzdGFjay5zZWNvbmQ7
Ci0KLSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKIH0KIAogYm9vbCBNYWNo
aW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKQEAgLTY0NCwz
NiArMzkzLDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNr
cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAKICAgICAqc2l6ZSA9IDA7CiAK
LSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9ybVRocmVh
ZCgpOworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CiAgICAgaW50
IG51bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAgdG8gZGVub3RlIHRoYXQgd2UgaGF2ZW4n
dCBjb3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5ZXQuCiAgICAgaW50IGluZGV4ID0gMTsK
LSAgICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CisgICAgSlNUaHJlYWQq
IHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7CiAKLSAgICBUaHJlYWQqIHByZXZpb3VzVGhy
ZWFkID0gbnVsbHB0cjsKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3Jt
VGhyZWFkKSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aHJlYWQtPnN1c3BlbmQoKTsK
KyAgICBKU1RocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOworICAgIGZvciAoSlNUaHJl
YWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgaW5kZXgrKykgeworICAg
ICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKSB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lmIE9TKERBUldJTikKLSAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIW51bWJlck9mVGhyZWFkcykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKFRocmVh
ZCogY291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNv
dW50ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5uZXh0KQorICAgICAgICAgICAgICAgICAgICBm
b3IgKEpTVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRl
ZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1iZXJPZlRocmVhZHMrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gUmUtZG8gdGhlIHN1c3BlbnNpb24gdG8g
Z2V0IHRoZSBhY3R1YWwgZmFpbHVyZSByZXN1bHQgZm9yIGxvZ2dpbmcuCi0gICAgICAgICAgICAg
ICAga2Vybl9yZXR1cm5fdCBlcnJvciA9IHRocmVhZF9zdXNwZW5kKHRocmVhZC0+cGxhdGZvcm1U
aHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVycm9yICE9IEtFUk5fU1VDQ0VTUyk7
CisKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmVycm9yKCkgIT0gS0VSTl9TVUNDRVNT
KTsKIAogICAgICAgICAgICAgICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywg
V1RGX1BSRVRUWV9GVU5DVElPTiwKLSAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2Fy
YmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6
IFRocmVhZCBbJWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVhZCAlcC4iLAotICAgICAgICAgICAgICAg
ICAgICBlcnJvciwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9j
YXN0PHZvaWQqPih0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQg
dGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBpZCAlcC4iLAorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuZXJyb3IoKSwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFk
LCByZWludGVycHJldF9jYXN0PHZvaWQqPih0aHJlYWQtPnRocmVhZElEKCkpKTsKIAogICAgICAg
ICAgICAgICAgIC8vIFB1dCB0aGUgaW52YWxpZCB0aHJlYWQgb24gdGhlIHRocmVhZHNUb0JlRGVs
ZXRlZCBsaXN0LgogICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGp1c3QgZGVsZXRlIGl0IGhl
cmUgYmVjYXVzZSB3ZSBoYXZlIHN1c3BlbmRlZCBvdGhlcgogICAgICAgICAgICAgICAgIC8vIHRo
cmVhZHMsIGFuZCB0aGV5IG1heSBzdGlsbCBiZSBob2xkaW5nIHRoZSBDIGhlYXAgbG9jayB3aGlj
aAogICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgZm9yIGRlbGV0aW5nIHRoZSBpbnZhbGlkIHRo
cmVhZC4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAvLyBkZWZlciB0aGUgZGVs
ZXRpb24gdGlsbCBhZnRlciB3ZSBoYXZlIHJlc3VtZWQgYWxsIHRocmVhZHMuCi0gICAgICAgICAg
ICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAgICAgICAgICAgICAg
IEpTVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICAgICAgICAgIHRo
cmVhZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsKICAgICAgICAgICAgICAgICB0aHJlYWRz
VG9CZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4NywyNSArNDM0LDI1IEBAIGJvb2wgTWFjaGlu
ZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IHZvaWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mVGhy
ZWFkcyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJldmlvdXNUaHJlYWQpOwotICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcHJl
dmlvdXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IHRocmVhZC0+bmV4dDsKICAg
ICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhy
ZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxh
dGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVh
ZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRyeUNvcHlPdGhlclRocmVhZFN0YWNr
KHRocmVhZCwgYnVmZmVyLCBjYXBhY2l0eSwgc2l6ZSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJl
YWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFk
LT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKQorICAgIGZv
ciAoSlNUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQp
CiAgICAgICAgICAgICB0aHJlYWQtPnJlc3VtZSgpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFk
KiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7Ci0gICAgICAgIFRocmVh
ZCogbmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0aHJlYWQg
PSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsgKSB7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0
VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAgICBkZWxldGUgdGhyZWFkOwogICAgICAgICB0
aHJlYWQgPSBuZXh0VGhyZWFkOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggZDE5NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNk
ODdmNzk5NDQ4N2YyMi4uOTE5N2M0NDA4Y2UyZmQ0ZWU2YWEzZDE0YTdjNjllNmY4Y2ExMDk0NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgK
QEAgLTIyLDI1ICsyMiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYWNoaW5lQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJT
dGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
cGVjaWZpYy5oPgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERB
UldJTikKLSNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLS8vIFVz
aW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxh
YmxlIG9uIEZyZWVCU0QuCi0vLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDEx
LjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQotLy8gcmVtb3ZlZCBhZnRlciBG
cmVlQlNEIDEwLnggZ29lcyBFT0wuCi0vLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemls
bGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQotI2lmIE9TKEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNv
bnRleHQuaD4KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2Rl
QmxvY2tTZXQ7CkBAIC02NCwxMyArNTEsMTAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCk7IC8vIE9ubHkgbmVl
ZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJv
bSBtdWx0aXBsZSB0aHJlYWRzLgogCi0gICAgY2xhc3MgVGhyZWFkRGF0YSB7CisgICAgY2xhc3Mg
SlNUaHJlYWQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFRocmVhZERhdGEoKTsKLSAgICAgICAgflRocmVhZERhdGEoKTsKLQotICAgICAg
ICBzdGF0aWMgVGhyZWFkRGF0YSogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICBK
U1RocmVhZChNYWNoaW5lVGhyZWFkcyopOwogCiAgICAgICAgIHN0cnVjdCBSZWdpc3RlcnMgewog
ICAgICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVyKCkgY29uc3Q7CkBAIC03OSw4NCArNjMsNDAg
QEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAgICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Q
b2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5k
aWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICAgICAgCi0jaWYgT1MoREFS
V0lOKSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMg
PSBNYWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdpc3RlcnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkg
fHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKQotICAgICAgICAgICAgdXNpbmcg
UGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAg
ICAgICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKLSAgICAgICAgICAgICAgICBwdGhy
ZWFkX2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAgICAgICB9OwotI2Vsc2UKLSNlcnJvciBOZWVk
IGEgdGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3IgdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAg
ICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CisgICAgICAgICAgICBXVEY6OlBsYXRm
b3JtUmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07CiAKLSAgICAgICAgYm9vbCBzdXNwZW5kKCk7
Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVn
aXN0ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJlZ2lzdGVycyhSZWdpc3RlcnMmKTsKKyAgICAg
ICAgRXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgp
IHsgcmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7IH0KKyAgICAgICAgdm9pZCByZXN1bWUoKSB7
IG1fdGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lz
dGVycyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3Rh
Y2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhy
ZWFkOwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kOwot
I2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRMRSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNl
bGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNvbnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29u
dGV4dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3VudCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9t
aWM8Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFz
cyBUaHJlYWQgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgVGhy
ZWFkKFRocmVhZERhdGEqKTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgUmVnaXN0ZXJz
ID0gVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0
ZUZvckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxh
dGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KLQotICAgICAgICBib29sIHN1c3BlbmQoKSB7IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0K
LSAgICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEtPnJlc3VtZSgpOyB9Ci0gICAgICAgIHNpemVf
dCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdzKSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3Rl
cnMocmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykg
eyBkYXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9Ci0gICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1
cmVTdGFjayhzdGFja1RvcCk7IH0KLQotICAgICAgICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxh
dGZvcm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVhZDsgfQotICAgICAgICB2
b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0Jhc2U7IH0KLSAgICAg
ICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdGFja0VuZDsgfQorICAg
ICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3Ro
cmVhZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBt
X3N0YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhY2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQqIG5leHQ7Ci0gICAgICAgIFRocmVhZERhdGEq
IGRhdGE7CisgICAgICAgIEpTVGhyZWFkKiBuZXh0OworICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+
IG1fdGhyZWFkOworICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKKyAgICAgICAgdm9pZCogbV9z
dGFja0VuZDsKICAgICB9OwogCiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fcmVnaXN0
ZXJlZFRocmVhZHNNdXRleDsgfQotICAgIFRocmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4Lmlz
TG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQotICAgIFRocmVhZCogbWFj
aGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBKU1RocmVhZCogdGhyZWFkc0xpc3RI
ZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhy
ZWFkc011dGV4LmlzTG9ja2VkKCkpOyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQorICAg
IEpTVGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOwogCiBwcml2YXRlOgog
ICAgIHZvaWQgZ2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRT
dHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0g
ICAgdm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNh
cGFjaXR5LCBzaXplX3QqKTsKKyAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKEpTVGhy
ZWFkKiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7CiAgICAgYm9vbCB0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6ZV90IGNh
cGFjaXR5LCBzaXplX3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxM
IHJlbW92ZVRocmVhZCh2b2lkKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0Zm9ybVRo
cmVhZD4KLSAgICB2b2lkIHJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQpOworICAg
IHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJlYWRJZGVudGlmaWVyKTsKIAogICAgIExvY2sg
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwotICAgIFRocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFk
czsKKyAgICBKU1RocmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNw
ZWNpZmljS2V5IG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkczsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCmluZGV4IDIwODBjZDkzNDU4MzNkMmQyMzJiOGE5
Y2Q2ZjNkYmZlYmUwNWNiMjMuLmUwYWJmMjk4YmZiZTJlZWVjMzQyNWI2NjA5Y2U3MjEzM2M0MWNk
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcApAQCAtNTgsNyArNTgsNyBA
QCBBdG9taWM8SUNTdGF0cyo+IElDU3RhdHM6OnNfaW5zdGFuY2U7CiAKIElDU3RhdHM6OklDU3Rh
dHMoKQogewotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKAorICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoCiAgICAgICAgICJKU0MgSUNTdGF0cyIsCiAgICAgICAgIFt0aGlzXSAoKSB7
CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwpAQCAtODQsNyArODQsNyBA
QCBJQ1N0YXRzOjp+SUNTdGF0cygpCiAgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwog
ICAgIH0KICAgICAKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZCk7CisgICAg
bV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiB9CiAKIHZvaWQgSUNTdGF0czo6YWRkKGNv
bnN0IElDRXZlbnQmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuaAppbmRleCBl
NzVjZmRmNGQ0ZDlkN2RjYmYxYTMxYTk4Mjk0MTkyZTU1YjljZmIwLi5lYjdlMWU5MmNlOTdkZDFk
OTUwODk3MjdjODRhOWM1ZWM3ZjU3YzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMu
aApAQCAtMTc5LDcgKzE3OSw3IEBAIGNsYXNzIElDU3RhdHMgewogcHJpdmF0ZToKIAogICAgIFNw
ZWN0cnVtPElDRXZlbnQsIHVpbnQ2NF90PiBtX3NwZWN0cnVtOwotICAgIFRocmVhZElkZW50aWZp
ZXIgbV90aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX2xv
Y2s7CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIGJvb2wgbV9zaG91bGRTdG9wIHsg
ZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTliNjI3M2RlYWIxZGQ1OWZkNzU5NDFj
ZDZlNjExNDkyODc5MjQ3MC4uNzVhYzYwZDliMzQ2MDgxY2I2NzA2OWVkZWQzNTI4NTQzZmJkM2Q4
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTI1NDQsNyArMjU0NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhl
YykKICAgICBDb25kaXRpb24gZGlkU3RhcnRDb25kaXRpb247CiAgICAgYm9vbCBkaWRTdGFydCA9
IGZhbHNlOwogICAgIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkID0gY3JlYXRlVGhyZWFk
KAorICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAi
SlNDIEFnZW50IiwKICAgICAgICAgW3NvdXJjZUNvZGUsICZkaWRTdGFydExvY2ssICZkaWRTdGFy
dENvbmRpdGlvbiwgJmRpZFN0YXJ0XSAoKSB7CiAgICAgICAgICAgICBDb21tYW5kTGluZSBjb21t
YW5kTGluZSgwLCBudWxscHRyKTsKQEAgLTI1NzEsNyArMjU3MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KEV4ZWNTdGF0ZSogZXhlYykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0
YWNoKCk7CiAgICAgCiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpZFN0
YXJ0TG9jayk7CkBAIC0zMzExLDcgKzMzMTEsNyBAQCBzdGF0aWMgdm9pZCBzdGFydFRpbWVvdXRU
aHJlYWRJZk5lZWRlZCgpCiAgICAgICAgICAgICBkYXRhTG9nKCJXQVJOSU5HOiB0aW1lb3V0IHN0
cmluZyBpcyBtYWxmb3JtZWQsIGdvdCAiLCB0aW1lb3V0U3RyaW5nLAogICAgICAgICAgICAgICAg
ICIgYnV0IGV4cGVjdGVkIGEgbnVtYmVyLiBOb3QgdXNpbmcgYSB0aW1lb3V0LlxuIik7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKHRpbWVvdXRUaHJlYWRNYWluLCAw
LCAianNjIFRpbWVvdXQgVGhyZWFkIik7CisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSh0aW1l
b3V0VGhyZWFkTWFpbiwgMCwgImpzYyBUaW1lb3V0IFRocmVhZCIpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggMDFiMWZlMTI3ZThiNzMx
ZmI1M2I3YzJjZGI5OWVlMTlkZDVhZGE2OC4uNjMyMmU3MzMyMjkyMTE0ZjBlMjU0YThlMWVmMTNk
YTVjNDE5NTE2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBKU0xvY2s6OmxvY2soaW50cHRyX3QgbG9ja0NvdW50KQog
ICAgICAgICBtX2xvY2subG9jaygpOwogICAgIH0KIAotICAgIG1fb3duZXJUaHJlYWQgPSBjdXJy
ZW50VGhyZWFkKCk7CisgICAgbV9vd25lclRocmVhZCA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1faGFzT3duZXJUaHJlYWQgPSB0cnVlOwog
ICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suaAppbmRleCAwYzM1ODQ3ZTQyM2U2NGJjNzA1MDNkNWUxZDg1ZDQ4MDUwOWRiZTc0Li4xYWNh
NGI5YTdiYjRkY2FmMDRkZjEyMTcxMDk3MjBlYzhlMmQ2OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suaApAQCAtOTIsMTMgKzkyLDEzIEBAIGNsYXNzIEpTTG9jayA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKIAogICAgIFZNKiB2bSgpIHsgcmV0
dXJuIG1fdm07IH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8VGhyZWFkSWRlbnRpZmllcj4gb3duZXJU
aHJlYWQoKSBjb25zdAorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVyVGhy
ZWFkKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2hhc093bmVyVGhyZWFkKQogICAgICAg
ICAgICAgcmV0dXJuIG1fb3duZXJUaHJlYWQ7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAgICAgfQotICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB7IHJldHVybiBt
X2hhc093bmVyVGhyZWFkICYmIG1fb3duZXJUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpOyB9Cisg
ICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsgcmV0dXJuIG1faGFzT3duZXJU
aHJlYWQgJiYgbV9vd25lclRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7IH0KIAogICAg
IHZvaWQgd2lsbERlc3Ryb3lWTShWTSopOwogCkBAIC0xMzUsNyArMTM1LDcgQEAgY2xhc3MgSlNM
b2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogICAgIC8vIGRpZmZl
cmVudCB0aHJlYWQsIGFuZCBhbiBvcHRpb25hbCBpcyB2dWxuZXJhYmxlIHRvIHJhY2VzLgogICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5MDQyI2M2
CiAgICAgYm9vbCBtX2hhc093bmVyVGhyZWFkIHsgZmFsc2UgfTsKLSAgICBUaHJlYWRJZGVudGlm
aWVyIG1fb3duZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9vd25lclRocmVhZDsKICAg
ICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX2xvY2tEcm9wRGVwdGg7CiAg
ICAgYm9vbCBtX3Nob3VsZFJlbGVhc2VIZWFwQWNjZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU0MTk3ZTczYzg0MTJhODBmMzYxNDBjN2FkODZlYzc2NGZhYzI5MzcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIE9TKERBUldJTikgfHwgT1MoVU5JWCkKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0j
ZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4p
Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lmIE9TKERBUldJTikKLSNpbmNsdWRl
IDxtYWNoL3RocmVhZF9hY3QuaD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgT1MoREFSV0lOKQotdHlwZWRl
ZiBtYWNoX3BvcnRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIE9TKFdJTkRPV1MpCi10eXBlZGVm
IERXT1JEIFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotdHlwZWRlZiBwdGhy
ZWFkX3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZW5kaWYgLy8gT1MoREFSV0lOKQotICAgIAotaW5saW5l
IFBsYXRmb3JtVGhyZWFkIGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpCi17Ci0jaWYgT1MoREFSV0lO
KQotICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhyZWFkX25wKHB0aHJlYWRfc2VsZigpKTsKLSNl
bGlmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIHJldHVybiBwdGhyZWFkX3NlbGYoKTsKLSNlbmRpZgotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXggN2QzN2E2NzRhYmEwOTQ3MjMxODQ5M2IzM2JjODlm
ZTNmYWQ5OGE5ZC4uNjdmMjBkOTJjZWNkZjBhYjNiZmY3ZjZmZDEyNjYwMGFhMTViZjFhZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5j
cHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBGcmFtZVdhbGtlciB7CiAgICAgYm9vbCBpc1Zh
bGlkRnJhbWVQb2ludGVyKHZvaWQqIGV4ZWMpCiAgICAgewogICAgICAgICB1aW50OF90KiBmcENh
c3QgPSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGV4ZWMpOwotICAgICAgICBmb3IgKE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWQqIHRocmVhZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVh
ZHNMaXN0SGVhZChtX21hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJl
YWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVh
ZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVU
aHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAg
ICAgIHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0
YWNrQmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrTGltaXQgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YWNrQmFzZSk7CkBAIC0yNzksNyArMjc5LDcgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2Ft
cGxpbmdQcm9maWxlcihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAg
ICwgbV93ZWFrUmFuZG9tKCkKICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkK
ICAgICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhPcHRpb25z
OjpzYW1wbGVJbnRlcnZhbCgpKSkKLSAgICAsIG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgICwg
bV90aHJlYWQobnVsbHB0cikKICAgICAsIG1fanNjRXhlY3V0aW9uVGhyZWFkKG51bGxwdHIpCiAg
ICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pc1NodXREb3duKGZhbHNlKQpAQCAtMzAw
LDExICszMDAsMTEgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRJZk5lY2Vz
c2FyeShjb25zdCBBYnN0cmFjdExvY2tlciYpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tl
ZCgpKTsKIAotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQog
ICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8U2FtcGxpbmdQcm9maWxlcj4gcHJvZmlsZXIg
PSB0aGlzOwotICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgianNjLnNhbXBs
aW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0geworICAgIG1fdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoImpzYy5zYW1wbGluZy1wcm9maWxlci50aHJlYWQiLCBbcHJvZmlsZXJdIHsKICAg
ICAgICAgcHJvZmlsZXItPnRpbWVyTG9vcCgpOwogICAgIH0pOwogfQpAQCAtMzQ0LDcgKzM0NCw3
IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tl
ciYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAgICAgIExvY2tIb2xkZXIgY29kZUJsb2Nr
U2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwogICAgICAgICBM
b2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6
c2luZ2xldG9uKCkuZ2V0TG9jaygpKTsKIAotICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOworICAgICAgICBhdXRvIGRpZFN1c3BlbmQgPSBt
X2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkg
ewogICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBj
YW4ndCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVzZSB0aGUgSlNDIHRocmVhZAogICAgICAg
ICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgpAQCAtMzU0LDEzICszNTQs
MTIgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJ
c0xMSW50ID0gZmFsc2U7CiAgICAgICAgICAgICB2b2lkKiBsbGludFBDOwogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdp
c3RlcnM7CisgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3Rl
cnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRS
ZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICBtYWNoaW5lRnJhbWUgPSByZWdp
c3RlcnMuZnJhbWVQb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGlj
X2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAgICAgICAgICAgICAgICBtYWNoaW5l
UEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CiAgICAgICAgICAgICAgICAgbGxp
bnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRp
b25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUg
cGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0N2Y5ZTY3NjhhZDQzN2JiMThlMGE4YWJj
Nzk1YmQ2Y2YuLjA0M2RhZGJhNDA3MGI2ZjkxODA3YmQ0Y2ExMzI2OTRjM2NlYmFjNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKQEAg
LTE5NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAgICBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1fbGFzdFRpbWU7CiAgICAgTG9j
ayBtX2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7Ci0gICAg
TWFjaGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVjdXRpb25UaHJlYWQ7CisgICAgUmVmUHRy
PFRocmVhZD4gbV90aHJlYWQ7CisgICAgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkKiBtX2pzY0V4
ZWN1dGlvblRocmVhZDsKICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lzU2h1dERv
d247CiAgICAgYm9vbCBtX25lZWRzUmVwb3J0QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5
NWY0NmUuLmU5N2MzMTg1ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2Rl
PFZNPiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENv
ZGVCbG9jayosIGNvbnN0IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAg
c3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXBpTG9jay0+b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRy
PFRocmVhZD4+IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRo
cmVhZCgpOyB9CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNk
NDYzYjcyZjMzZTQ2NGI3YjVhNTlkMDExOTM4ZjY5Li4yNzJjNGRlZmE4NTVmYzM5YjBjZDQxMDFl
NWU3ZTRiMmJkYzBkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8Vk0qLCBT
dGFja0JvdW5kcz4sIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAgICAgICAg
ICAgICByZXR1cm4gVk1JbnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBUcnkg
bmV4dCBWTS4KICAgICAgICAgfQogCi0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OlRocmVh
ZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRz
TG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQqIHRocmVhZCA9IG1hY2hpbmVUaHJlYWRzLnRocmVhZHNM
aXN0SGVhZChtYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5u
ZXh0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0aHJlYWQtPnN0YWNrQmFzZSgpKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tFbmQoKSk7CiAgICAgICAg
ICAgICBpZiAoc3RhY2tQb2ludGVyIDw9IHRocmVhZC0+c3RhY2tCYXNlKCkgJiYgc3RhY2tQb2lu
dGVyID49IHRocmVhZC0+c3RhY2tFbmQoKSkgewpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgVk1U
cmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwog
ICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsK
ICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAg
c2lnbmFsVGhyZWFkKG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKSwgU0lHVVNSMSk7CisgICAg
ICAgICAgICAgICAgb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLT5zaWduYWwoU0lHVVNSMSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQ5Myw3ICs0OTMs
NyBAQCB2b2lkIFZNVHJhcHM6OmZpcmVUcmFwKFZNVHJhcHM6OkV2ZW50VHlwZSBldmVudFR5cGUp
CiAgICAgICAgIC8vIGZpcmVUcmFwKCkgZG9lcyBub3QgYmxvY2suCiAgICAgICAgIFJlZlB0cjxT
aWduYWxTZW5kZXI+IHNlbmRlciA9IGFkb3B0UmVmKG5ldyBTaWduYWxTZW5kZXIodm0oKSwgZXZl
bnRUeXBlKSk7CiAgICAgICAgIGFkZFNpZ25hbFNlbmRlcihzZW5kZXIuZ2V0KCkpOwotICAgICAg
ICBjcmVhdGVUaHJlYWQoImpzYy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0g
eworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQi
LCBbc2VuZGVyXSB7CiAgICAgICAgICAgICBzZW5kZXItPnNlbmQoKTsKICAgICAgICAgfSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU4ZjE5
YjU2ZDMzY2I4OGE2ZmI0OWQ2ZTVmM2I2MDk3ODZiYzBjYy4uNzQxNDhhODAxNGIyZWUwY2U1MTEy
NjZjYmE0YThhNzRlZWQyNjg3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zMjUsOCArMzI1LDggQEAKIAkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEE0NzMyRDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJ
QThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5oICovOyB9OwogCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uLmggKi87IH07Ci0JCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVy
RGF0YVB0aHJlYWRzLmNwcCAqLzsgfTsKLQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmggKi87IH07CisJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVy
UHRocmVhZHMuY3BwICovOyB9OworCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
SG9sZGVyUHRocmVhZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5o
ICovOyB9OwogCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMyMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0QjE1MUE4MjVCMDA0
MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi87IH07
CiAJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzNTE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovOyB9OwpAQCAtNzI4LDggKzcy
OCw4IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
aHJlYWRGdW5jdGlvbkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmll
ckRhdGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMx
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkaW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTE2NCw4ICsxMTY0LDggQEAKIAkJCQk1NTk3RjgyQzFEOTRCOTk3MDA2
NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oICovLAogCQkJCTBGQjMxN0MzMUM0ODgw
MDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFjaW5nLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovLAotCQkJCUE4QTQ3MzMwMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywKLQkJ
CQlBOEE0NzMzMTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhy
ZWFkcy5jcHAgKi8sCisJCQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRl
clB0aHJlYWRzLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Zy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICov
LAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
Ki8sCkBAIC0xNjE4LDcgKzE2MTgsNyBAQAogCQkJCTFDQ0RCMTRGMUU1NjY4OTgwMDZDNzNDMCAv
KiBUZXh0QnJlYWtJdGVyYXRvcklDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NDcxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJE
YXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xODQzLDcgKzE4NDMsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1
MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4
MUM3RjFEMzA3OERBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50
ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEEx
RDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291
cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4
NTY1MjllOGFhZWE2YWJmNjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2Mjcy
MGRiOGMwYjk5YWJjM2I3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRp
dGlvblNwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNw
ZWVkVGVzdC5jcHAKQEAgLTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0
aW9uVHlwZSBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247
CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZl
Y3RvcjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0
cjxUaHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBw
cm9kdWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExv
Y2tUeXBlIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25z
dW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZd
ICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQg
cnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9j
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBj
b25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRp
bnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3Vy
cmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250
aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6
ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hv
dWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYg
cXVldWUuaXNFbXB0eSgpKQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAg
IGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAog
ICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAg
dm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24s
IGxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tp
bmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENv
bnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6
Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENv
bnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5z
aXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1
ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7
CkBAIC0xMzgsMTEgKzEzOCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAg
IG5vdGlmeShlbXB0eUNvbmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRl
bnRpZmllcik7CisgICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9
CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2Vy
VGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmll
cik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQor
ICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3
NTExODQ4YmI1MmQ5NGYuLjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcg
KzYyLDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2Nr
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtl
X3VuaXF1ZTx1bnNpZ25lZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRl
bnRpZmllcltdPihudW1UaHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxU
aHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51
bVRocmVhZHMpOwogICAgIAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7
CiAgICAgCkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTsp
IHsKICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhy
ZWFkc1t0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3Ro
cmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsg
VGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3
LDcgKzEwNyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9j
aygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhy
ZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRz
W3RocmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNo
bWFya3MvTG9ja1NwZWVkVGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVk
VGVzdC5jcHAKaW5kZXggNTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4u
ODJkMzlmODdjNmM3MDZjMTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVu
Y2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2ht
YXJrIHsKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlw
ZT5bXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihu
dW1UaHJlYWRHcm91cHMpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91
YmxlPltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihu
dW1UaHJlYWRHcm91cHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmll
cltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRo
cmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhy
ZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAg
IHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1
Y3QgQmVuY2htYXJrIHsKICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVl
ID0gMDsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVh
ZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3Ro
cmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVh
dGVUaHJlYWQoCisgICAgICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVt
VGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAg
ICAgICAgICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3Ro
cmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9u
c0xvY2ssICZudW1JdGVyYXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgbG9jYWxXb3JkID0gMDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsK
ICAgICAgICAga2VlcEdvaW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQg
dGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVh
ZEluZGV4LS07KQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0
aHJlYWRJbmRleF0pOworICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JD
b21wbGV0aW9uKCk7CiAKICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNU
aHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdj
NmUyNWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJk
ZmJkMGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0
aWNUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAg
LTE1NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKQogICAgIAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAg
Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRy
PFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRp
Y1RocmVhZCIsCiAgICAgICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAg
LTIyMCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3Jr
UmVzdWx0OjpDb250aW51ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFj
aFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21h
dGljVGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5
MTE5Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1NWZlYmEyYzcuLmI1MGJiYmMzYmYzYWQyYjFmZGQx
MzQ1MzQ4NjU0YWIxZDQxOGNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xMjgsNyArMTI4
LDYgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmlu
dFN0cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5oCiAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmlj
LmgKICAgICBUaHJlYWRpbmcuaApAQCAtMzI5LDE2ICszMjgsMTQgQEAgbGlzdChBUFBFTkQgV1RG
X0xJQlJBUklFUwogaWYgKFdJTjMyKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAg
ICAgIE9TQWxsb2NhdG9yV2luLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAg
ICAgIFRocmVhZFNwZWNpZmljV2luLmNwcAogICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAg
KQogZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9IRUFERVJTCi0gICAgICAgIFRocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuaAotICAgICkKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNF
UwogICAgICAgICBPU0FsbG9jYXRvclBvc2l4LmNwcAotICAgICAgICBUaHJlYWRJZGVudGlmaWVy
RGF0YVB0aHJlYWRzLmNwcAorICAgICAgICBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAg
ICAgVGhyZWFkaW5nUHRocmVhZHMuY3BwCiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5j
cHAKaW5kZXggMDI0OTU0NGM1MThlODJhZmYxNzA1ZGUxOWVjOTY1YWI5OGIxZDEwNi4uMzRiOTQy
NTU1YWI1NjE4MzIxMDE4YjRmMDc5MGYyODI1MGE3ZGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvTWFpblRocmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAK
QEAgLTE4Niw5ICsxODYsOSBAQCBib29sIGlzTWFpblRocmVhZCgpCiAjZW5kaWYKIAogI2lmICFV
U0UoV0VCX1RIUkVBRCkKLWJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWQpCitib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZv
clRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCkKIHsKLSAgICByZXR1cm4gdGhyZWFkSWQg
PT0gY3VycmVudFRocmVhZCgpOworICAgIHJldHVybiB0aHJlYWQgPT0gY3VycmVudFRocmVhZCgp
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBi
L1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3Njgz
Y2U1NTA4ZGQ4ZDdmMWQ3N2FmLi4wZTc4ZThlNTFhYmU4ZDk1NTQ3MmM3OWRkMzQ2OTJmMTU0NmRi
MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNl
L1dURi93dGYvTWFpblRocmVhZC5oCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlIDxzdGRp
bnQuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFz
cyBQcmludFN0cmVhbTsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotCiAv
LyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1
cmVIYW5kbGVyLmgKaW5kZXggZGZkZGYwYTk1NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2Yzdi
ZC4uNDEyOGY1Y2Q3MWE3ZGIyZjRmZDcwMzI5NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93
dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1v
cnlQcmVzc3VyZUhhbmRsZXIgewogI2lmIFVTRShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3Vy
Y2U+IG1fc291cmNlOwogI2Vsc2UKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElE
OworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIv
U291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIw
YTM4ZTEwM2U3YzlhMmU0ZjBmN2UwNjEwNTcxNC4uY2NlMTEwNmQ0NjdiNzIwODNjMWVkYjIxM2Fk
NTljNDQwMzE3YTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2Vu
ZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAg
LTkzLDE0ICs5MywxNCBAQCBib29sIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6
OnRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCogcGFyZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElE
ID0gY3JlYXRlVGhyZWFkKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQor
ICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCZQYXJhbGxlbEVudmlyb25tZW50OjpU
aHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKIAot
ICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgbV9wYXJlbnQg
PSBwYXJlbnQ7CiAKICAgICBtX211dGV4LnVubG9jaygpOwotICAgIHJldHVybiBtX3RocmVhZElE
OworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpU
aHJlYWRQcml2YXRlOjpleGVjdXRlKFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lk
KiBwYXJhbWV0ZXJzKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVu
dDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEpCiAgICAgVGhy
ZWFkUHJpdmF0ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWRQcml2YXRl
Kj4odGhyZWFkRGF0YSk7CiAgICAgTG9ja0hvbGRlciBsb2NrKHNoYXJlZFRocmVhZC0+bV9tdXRl
eCk7CiAKLSAgICB3aGlsZSAoc2hhcmVkVGhyZWFkLT5tX3RocmVhZElEKSB7CisgICAgd2hpbGUg
KHNoYXJlZFRocmVhZC0+bV90aHJlYWQpIHsKICAgICAgICAgaWYgKHNoYXJlZFRocmVhZC0+bV9y
dW5uaW5nKSB7CiAgICAgICAgICAgICAoKnNoYXJlZFRocmVhZC0+bV90aHJlYWRGdW5jdGlvbiko
c2hhcmVkVGhyZWFkLT5tX3BhcmFtZXRlcnMpOwogICAgICAgICAgICAgc2hhcmVkVGhyZWFkLT5t
X3J1bm5pbmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9i
c0dlbmVyaWMuaCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCA0
NTg0MDdjNGNiNGEzZjk5NWM5MGM1NTU2MjdjMWNiZDIyYjQxYjVjLi43ZDY4ZWYwNzBmNjdhNjUz
M2MwYjg3NTgzZDJhNTdhMTE4ZDA1NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEpvYnNHZW5lcmljLmgKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJp
Yy5oCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgIGNs
YXNzIFRocmVhZFByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7CiAg
ICAgcHVibGljOgogICAgICAgICBUaHJlYWRQcml2YXRlKCkKLSAgICAgICAgICAgIDogbV90aHJl
YWRJRCgwKQorICAgICAgICAgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICAgICAgICAgLCBt
X3J1bm5pbmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGFyZW50KDApCiAgICAgICAgIHsKQEAg
LTc0LDcgKzc0LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHdvcmtlclRocmVhZCh2b2lkKik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBUaHJl
YWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFk
OwogICAgICAgICBib29sIG1fcnVubmluZzsKICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCog
bV9wYXJlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIv
U291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5
YWRkYjJjYzU4MTBiNTZlMWMxNC4uY2MxYTIxYjllYTVjY2NjNmYxYWNlNGM5NzQ5ODk5YmJkYTVk
N2UxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVh
ZERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRo
cmVhZERhdGEoKTsKICAgICB+VGhyZWFkRGF0YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJZGVudGlmaWVyOworICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKICAgICAKICAgICBNdXRl
eCBwYXJraW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKQEAg
LTQyMyw3ICs0MjMsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhy
ZWFkcykKIH0KIAogVGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCi0gICAgOiB0aHJlYWRJZGVudGlm
aWVyKGN1cnJlbnRUaHJlYWQoKSkKKyAgICA6IHRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKSkKIHsK
ICAgICB1bnNpZ25lZCBjdXJyZW50TnVtVGhyZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC03OTMs
NyArNzkzLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0
IHZvaWQqIGFkZHJlc3MpCiAgICAgdW5wYXJrQ291bnQoYWRkcmVzcywgVUlOVF9NQVgpOwogfQog
Ci1ORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRM
YW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKK05F
VkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQogewogICAgIFZlY3RvcjxC
dWNrZXQqPiBidWNrZXRzVG9VbmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CiAKQEAgLTgwMyw3ICs4
MDMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBT
Y29wZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaQogICAgICAgICBpZiAoIWJ1Y2tldCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJl
YWREYXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhy
ZWFkRGF0YSA9IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKLSAgICAgICAgICAgIGNh
bGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLCBjdXJyZW50VGhyZWFk
RGF0YS0+YWRkcmVzcyk7CisgICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+
dGhyZWFkLmdldCgpLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAgIAog
ICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmluZGV4
IDdkNWZiMTdlZmEwMmFiNzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTljN2I3
ZmQ0Y2M2YWNhZTM2MmFlYTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bh
cmtpbmdMb3QuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3ICsx
NTgsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
ICAgIHN0YXRpYyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAg
IGZvckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0
IHZvaWQqKT4oZnVuYykpOworICAgICAgICBmb3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9p
ZChUaHJlYWQmLCBjb25zdCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0x
NzEsNyArMTcxLDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3Ms
IGNvbnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwog
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNj
b3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFt
YmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3Rm
L1JlZlB0ci5oCmluZGV4IGZlMTYzMGM5NzM1YjVmZjUzNTNjYjJjNTU4ZTMxMDU4MTI0Nzg3ZDgu
LjI3N2U2NzVkYjNjNTU1ZDVlNGM2Y2UwNDk0Njg4NzRkMzY3Njk1OWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC00
Miw3ICs0Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0ciB7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNSZWZQdHIgPSB0cnVlOwogCi0gICAgQUxXQVlTX0lOTElO
RSBSZWZQdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3Rl
eHByIFJlZlB0cigpIDogbV9wdHIobnVsbHB0cikgeyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQ
dHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyByZWZJZk5vdE51bGwocHRyKTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgUmVmUHRyKGNvbnN0IFJlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IHJlZklm
Tm90TnVsbChtX3B0cik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29uc3Qg
UmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0KCkpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaAppbmRleCA5NDNmZDZkNzlk
MDk0NDI1NTAzYWM4OTczMWIwYTA2YTZhYzQwZmZkLi5jYjI3NWY3MDEyY2ZlNTY2MWU0OWUwYjRm
ZjBkOWM2MjFiMGU0OTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlv
bkludm9jYXRpb24uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaApAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25f
aAogI2RlZmluZSBUaHJlYWRGdW5jdGlvbkludm9jYXRpb25faAogCisjaW5jbHVkZSAiVGhyZWFk
aW5nLmgiCisKIG5hbWVzcGFjZSBXVEYgewogCiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlv
bikodm9pZCogYXJndW1lbnQpOwpAQCAtMzYsMTMgKzM4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKlRo
cmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVudCk7CiBzdHJ1Y3QgVGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGRhdGEp
CisgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCBS
ZWZQdHI8VGhyZWFkPiYmIHRocmVhZCwgdm9pZCogZGF0YSkKICAgICAgICAgOiBmdW5jdGlvbihm
dW5jdGlvbikKKyAgICAgICAgLCB0aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQogICAgICAgICAsIGRh
dGEoZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb247Cisg
ICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkOwogICAgIHZvaWQqIGRhdGE7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FjMjNiMGFmZTk2MTI0
ZDJmZDBjNTYxMTdmMDBmMzA5NGIwZWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlclB0aHJlYWRzLmgiCisKKyNpbmNs
dWRlICJUaHJlYWRpbmcuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2lmIE9TKEhVUkQpCisv
LyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwg
c28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVyZS4KKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAx
MDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYg
eworCitwdGhyZWFkX2tleV90IFRocmVhZEhvbGRlcjo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFY
OworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFk
SG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2Ny
ZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIENSQVNIKCk7
Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sKKyAgICBBU1NF
UlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRo
cmVhZEhvbGRlcio+KHB0aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkpKTsKK30KKwordm9pZCBUaHJl
YWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFkJiB0aHJlYWQpCit7CisgICAgaWYgKCFjdXJyZW50
KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVhc2UgYXNz
ZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVyZm9ybWFuZS4KKyAgICAgICAg
Ly8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0
Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNv
b24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7CisgICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMo
bV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7CisgICAgfQorfQorCit2b2lkIFRocmVh
ZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIHRocmVh
ZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAg
QVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKKworICAgIGlmICh0aHJlYWRJZGVudGlmaWVy
RGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZp
ZXJEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyZWFkSWRlbnRpZmllckRh
dGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1
ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgorICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
UHRocmVhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTNjZWRmMTU4MDM1ZmNjNjQzZDMyZjVlMmVkMjI1Njdl
NzBlYzNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRo
cmVhZHMuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRocmVhZEhvbGRlclB0aHJlYWRz
X2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyUHRocmVhZHNfaAorCisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJl
YWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3Mg
ZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlCisvLyBUaHJlYWQgZnJvbSB0aHJlYWRNYXAu
IEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlw
bGUtcGFzcyBkZXN0cnVjdGlvbi4KK2NsYXNzIFRocmVhZEhvbGRlciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVGhyZWFkSG9sZGVyKTsKK3B1YmxpYzoKKyAgICB+VGhyZWFkSG9sZGVyKCk7
CisKKyAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdo
b2xlLgorICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXpl
KCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
T25jZSgpOworCisgICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRI
b2xkZXIgaW50byB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKFRocmVhZCYpOworCisgICAgLy8gUmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBz
dG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIFRocmVhZEhvbGRlciogY3Vy
cmVudCgpOworCisgICAgVGhyZWFkJiB0aHJlYWQoKSB7IHJldHVybiBtX3RocmVhZC5nZXQoKTsg
fQorCitwcml2YXRlOgorICAgIFRocmVhZEhvbGRlcihUaHJlYWQmIHRocmVhZCkKKyAgICAgICAg
OiBtX3RocmVhZCh0aHJlYWQpCisgICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMg
Y2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKKyAgICAvLyAtIGZpcnN0LCB3
aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQs
IGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKKyAgICAvLyBhbmQg
cmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhy
ZWFkcyB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQg
YWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0aGUg
dGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIGRlc3Ry
dWN0KHZvaWQqIGRhdGEpOworCisgICAgUmVmPFRocmVhZD4gbV90aHJlYWQ7CisgICAgYm9vbCBt
X2lzRGVzdHJveWVkT25jZTsKKyAgICBzdGF0aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyUHRocmVhZHNfaAor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5YzA5NTkzYjk1ZDc2
MGU4MjEwODU0MzIyYmNjYTI5NjY4MjU4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyV2luLmgiCisKKyNpbmNsdWRlICJUaHJl
YWRpbmcuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK0RXT1JEIFRocmVhZEhvbGRlcjo6bV9rZXkg
PSAwOworCit2b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkKTsKKworVGhyZWFkSG9sZGVyOjp+VGhy
ZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVh
ZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIERXT1JEIG1fa2V5ID0gRmxzQWxsb2Mo
ZGVzdHJ1Y3QpOworICAgIGlmIChtX2tleSA9PSBGTFNfT1VUX09GX0lOREVYRVMpCisgICAgICAg
IENSQVNIKCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oRmxzR2V0VmFsdWUobV9rZXkp
KTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoVGhyZWFkJiB0aHJlYWQpCit7
CisgICAgaWYgKCFjdXJyZW50KCkpIHsKKyAgICAgICAgLy8gSWRlYWxseSB3ZSdkIGhhdmUgdGhp
cyBhcyBhIHJlbGVhc2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVy
Zm9ybWFuZS4KKyAgICAgICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFu
cyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCisgICAgICAgIC8vIFdURjo6aW5pdGlh
bGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4KKyAgICAg
ICAgRmxzU2V0VmFsdWUobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7CisgICAgfQor
fQorCit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBUaHJl
YWRIb2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVy
Kj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKKworICAgIGlmICh0
aHJlYWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgZGVsZXRl
IHRocmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhy
ZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1z
ZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBh
ZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgor
ICAgIEZsc1NldFZhbHVlKG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2lu
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmQ3MDM1
YWQwOGRkNzE4NTFlZTNiOGU0YWQ3ZTkxNmRjZDEyMjYzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBUaHJlYWRIb2xkZXJXaW5faAorI2RlZmluZSBUaHJlYWRIb2xkZXJXaW5faAorCisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMg
c3RvcmFnZSBhbmQgZW1wbG95cyBGTFMgMi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJl
bW92ZQorLy8gVGhyZWFkIGZyb20gdGhyZWFkTWFwLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFk
U3BlY2lmaWMgdHlwZXMgZG9uJ3QgdXNlIG11bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFz
cyBUaHJlYWRIb2xkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEhvbGRlcik7
CitwdWJsaWM6CisgICAgflRocmVhZEhvbGRlcigpOworCisgICAgLy8gT25lIHRpbWUgaW5pdGlh
bGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9sZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBt
dXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgpIGFuZCBpdCBpcyBub3QgdGhyZWFkLXNh
ZmUuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKKworICAgIC8vIENyZWF0ZXMg
YW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkSG9sZGVyIGludG8gdGhyZWFkLXNwZWNpZmlj
IHN0b3JhZ2UuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWQmKTsKKworICAgIC8v
IFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVk
LgorICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIqIGN1cnJlbnQoKTsKKworICAgIFRocmVhZCYgdGhy
ZWFkKCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRI
b2xkZXIoVGhyZWFkJiB0aHJlYWQpCisgICAgICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgICAg
ICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGlz
IHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNhbGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFk
IHRlcm1pbmF0ZXM6CisgICAgLy8gLSBmaXJzdCwgd2hlbiBhbGwgdGhlIG90aGVyIHRocmVhZC1z
cGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBpdCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdh
cyAnZGVzdHJveWVkIG9uY2UnCisgICAgLy8gYW5kIHJlLXNldHMgaXRzZWxmIGludG8gdGhlIHRo
cmVhZC1zcGVjaWZpYyBzbG90IHRvIG1ha2UgV2luIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCisg
ICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2Vy
ZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRo
ZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFu
dXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgZGVzdHJ1Y3Qodm9pZCog
ZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBib29sIG1faXNEZXN0cm95
ZWRPbmNlOworICAgIHN0YXRpYyBEV09SRCBtX2tleTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyV2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBiZWJmZTkzYmE1YzcwYTliNGY0YjVmMjY1NzIxZGQxNjliZmYxNDMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFBUSFJFQURTKQotCi0jaW5jbHVk
ZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIgotCi0jaW5jbHVkZSAiVGhyZWFkaW5n
LmgiCi0KLSNpZiBPUyhIVVJEKQotLy8gUFRIUkVBRF9LRVlTX01BWCBpcyBub3QgZGVmaW5lZCBp
biBiaW9uaWMgbm9yIGluIEh1cmQsIHNvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUuCi0jZGVm
aW5lIFBUSFJFQURfS0VZU19NQVggMTAyNAotI2Vsc2UKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotcHRocmVhZF9rZXlfdCBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOwotCi12b2lkIHRocmVhZERpZEV4aXQoVGhy
ZWFkSWRlbnRpZmllcik7Ci0KLVRocmVhZElkZW50aWZpZXJEYXRhOjp+VGhyZWFkSWRlbnRpZmll
ckRhdGEoKQotewotICAgIHRocmVhZERpZEV4aXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2UoKQotewotICAgIGludCBlcnJvciA9
IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKLSAgICBpZiAoZXJyb3IpCi0g
ICAgICAgIENSQVNIKCk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgVGhyZWFkSWRlbnRpZmllckRh
dGE6OmlkZW50aWZpZXIoKQotewotICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFY
KTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0
aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkp
KTsKLQotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyRGF0YSA/IHRocmVhZElkZW50aWZpZXJE
YXRhLT5tX2lkZW50aWZpZXIgOiAwOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpp
bml0aWFsaXplKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVy
KCkpOwotICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBl
dmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZvcm1hbmUuCi0gICAgLy8gSGF2aW5n
IHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4n
dCBjYWxsCi0gICAgLy8gV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1
Z3MgaW4gcmVsZWFzZSBtb2RlLgotICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5ICE9IFBUSFJFQURf
S0VZU19NQVgpOwotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRJZGVu
dGlmaWVyRGF0YShpZCkpOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpkZXN0cnVj
dCh2b2lkKiBkYXRhKQotewotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKiB0aHJlYWRJZGVudGlm
aWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXJEYXRhKj4oZGF0YSk7Ci0gICAg
QVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKLQotICAgIGlmICh0aHJlYWRJZGVudGlmaWVy
RGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKLSAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZp
ZXJEYXRhOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhyZWFkSWRlbnRpZmllckRh
dGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKLSAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1
ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgotICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg0MzQ5YTBjZGRhYWVjODYwYmNiZTRiYzBhNzI1YmQyNzVlNzJlYmQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0jZGVmaW5lIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHNfaAotCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotLy8gSG9sZHMgVGhyZWFkSWRlbnRpZmllciBpbiB0aGUgdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgcHRocmVhZHMtc3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0
aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQotLy8gVGhyZWFkSWRlbnRpZmllciBmcm9tIHRocmVhZE1h
cC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmljIHR5cGVzIGRvbid0IHVzZSBtdWx0
aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhyZWFkSWRlbnRpZmllckRhdGEgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZElkZW50aWZpZXJEYXRhKTsKLXB1YmxpYzoKLSAg
ICB+VGhyZWFkSWRlbnRpZmllckRhdGEoKTsKLQotICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0
aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCi0gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBi
ZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgot
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBw
dXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZElkZW50aWZpZXJEYXRhIGludG8gdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UuCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVy
IGlkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9y
YWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRl
bnRpZmllcigpOwotCi1wcml2YXRlOgotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKFRocmVhZElk
ZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikK
LSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
Ly8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVu
IHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0
aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVy
cyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwotICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRv
IHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdh
aW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVz
dHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwg
d2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aGUgdGhyZWFkTWFw
LCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgotICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQq
IGRhdGEpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgYm9vbCBt
X2lzRGVzdHJveWVkT25jZTsKLSAgICBzdGF0aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkc19oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXggYzFkYzM1MDE5MDNhYjc2YjM3MDQ2ZDkz
MzNmOTMyYTNlZjBjNmM2ZS4uNzE4NzgxNDEwMThlNjgwM2MwMDcwNzFhMmY2ZmE2MGVjMjAzY2U1
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBOZXdUaHJlYWRD
b250ZXh0IHsKICAgICBNdXRleCBjcmVhdGlvbk11dGV4OwogfTsKIAotY29uc3QgY2hhciogbm9y
bWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorY29uc3QgY2hhciogVGhy
ZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYg
SEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcmV0dXJuIHRocmVhZE5hbWU7CkBAIC04Miw3
ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEp
CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsKICAg
ICB9CiAKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUp
OworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5u
YW1lKTsKIAogICAgIGF1dG8gZW50cnlQb2ludCA9IFdURk1vdmUoY29udGV4dC0+ZW50cnlQb2lu
dCk7CiAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZv
aWQqIGNvbnRleHREYXRhKQogICAgIGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVu
dHJ5UG9pbnQpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludCkKIHsKICAgICBOZXdUaHJlYWRDb250
ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRleHQgeyBuYW1lLCBXVEZNb3ZlKGVudHJ5
UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhl
Y3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KICAg
ICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAKLSAgICByZXR1
cm4gY3JlYXRlVGhyZWFkSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7
CisgICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29u
dGV4dCwgbmFtZSk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCitSZWZQdHI8
VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBk
YXRhLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBjcmVhdGVUaHJlYWQobmFtZSwg
W2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUobmFtZSwgW2Vu
dHJ5UG9pbnQsIGRhdGFdIHsKICAgICAgICAgZW50cnlQb2ludChkYXRhKTsKICAgICB9KTsKIH0K
IAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGlu
dCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgQVNTRVJU
KHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiAjZW5kaWYK
IH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVBy
aW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50
IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBBU1NFUlQo
cmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgc2V0Q3Vy
cmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKICNpZiBIQVZF
KFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1heFFPU2NsYXNzIHsgUU9T
X0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRR
T1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3MgPSBtYXhDbGFzczsKIH0K
IAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNz
KQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdp
bmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9IFFPU19DTEFTU19VTlNQ
RUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFsQ2xhc3MsIGdsb2JhbE1h
eFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0Ns
YXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9pZCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2YjU1OGIzZTFkNTE3ZTgx
MGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi5kMzdhOGM5NjQ4M2Y4NzBlNTY3ZmY1MDEwYWYyYmYw
Njg2MTc0MjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFr
dGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RA
cmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3
MiArMzksMjI4IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5o
PgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmRMb2NrLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMpCisjaWYgT1MoREFSV0lOKQorI2luY2x1
ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNp
bmNsdWRlIDxzaWduYWwuaD4KKy8vIFVzaW5nIHNpZ25hbC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0
X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZyZWVCU0QuCisvLyBUaGlzIGJ1ZyBoYXMg
YmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVOVCwgc28gdGhpcyB3b3JrYXJvdW5kIGNh
biBiZQorLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEwLnggZ29lcyBFT0wuCisvLyBodHRwczov
L2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwNzA3OQorI2lmIE9T
KEZSRUVCU0QpCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgorCisjaWYgT1MoTElOVVgp
CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIUNPTVBJTEVS
KE1TVkMpCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRl
IDxzeXMvdGltZS5oPgorI2VuZGlmCisjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CiAKLXR5cGVk
ZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBDUFUo
WDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vs
aWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdp
c3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFkX3N0YXRlX3QgUGxhdGZv
cm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBwY190aHJlYWRfc3RhdGU2
NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5cGVkZWYgYXJtX3RocmVh
ZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTTY0KQordHlwZWRlZiBh
cm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbHNlCisjZXJyb3IgVW5r
bm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5ET1dTKQorCit1c2luZyBQ
bGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8
fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBt
Y29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgeworICAgIHZv
aWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit1c2luZyBUaHJlYWRJZGVudGlmaWVy
ID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1l
bnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhy
ZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8vIERhcndpbiBpcyBhbiBl
eGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVh
ZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBjYWxscyBhcmUgbm90IHJl
ZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
K2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFzcyBUaHJlYWQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CitwdWJsaWM6CisgICAgZnJp
ZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0dXJucyAwIGlmIHRocmVhZCBjcmVhdGlv
biBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24g
c29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdURl9FWFBPUlRf
UFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiB0aHJlYWRO
YW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+VGhy
ZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNw
b25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2Ug
Wy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4K
LVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2
ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0
Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwor
ICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgorICAgIC8v
IFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21lIHBsYXRmb3Jt
cyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8
VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29u
c3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGN1
cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRocmVhZFByaW9y
aXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAgIC8vIFJldHVybnMgVGhy
ZWFkIG9iamVjdC4gTm90ZSB0aGF0IGl0IGNhbiBiZSAoYSBiaXQpIGNvc3RseSBpbiBXaW5kb3dz
LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7CiAKLS8v
IERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQgY3JlYXRpb24uCi1XVEZf
RVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rp
b24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICAvLyBSZXR1cm5zIFRocmVh
ZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVz
IGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFkcyBhbmQgZW5zdXJlIHRoZSB0aHJlYWQg
bGlmZXRpbWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJl
YWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFs
KFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHkoaW50KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFs
aXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUg
bXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6ZUN1cnJl
bnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyNpZiBPUyhEQVJXSU4p
CisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBrZXJuX3JldHVybl90OworI2VsaWYg
VVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9yID0gaW50OworI2Vs
aWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IERXT1JEOwor
I2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPHZvaWQsIFBsYXRmb3Jt
U3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVz
dW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLWJvb2wgc2lnbmFsVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNlbmRpZgogCisgICAgLy8gTWFyayB0
aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3BvbnNpdmVuZXNzLgorICAgIC8v
IHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUg
YSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGlu
dCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkg
PSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgcW9z
X2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3Mo
cW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdURgorICAgIC8vIEludGVy
bmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgorICAg
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11c2luZyBXVEY6OlRocmVhZElkZW50aWZp
ZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVzaW5nIFdURjo6Y3VycmVudFRocmVhZDsK
LXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7Ci11c2luZyBXVEY6OmRldGFjaFRocmVh
ZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247CisgICAgLy8gQ2FsbGVkIGlu
IHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgIC8vIEhlbHBmdWwgZm9yIHBs
YXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhl
IHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3JtYWxp
emVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCiAjaWYgVVNFKFBUSFJFQURT
KQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgdm9pZCBlc3RhYmxpc2gocHRocmVhZF90
KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJlYWRJZGVudGlmaWVyKTsK
ICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworI2lmIFVTRShQVEhS
RUFEUykgJiYgIU9TKERBUldJTikKKyAgICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyU3VzcGVu
ZFJlc3VtZShpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVjb250ZXh0KTsKICNlbmRpZgogCisgICAg
VGhyZWFkSWRlbnRpZmllciBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQg
YWRkT25FeGl0Q2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKFRocmVhZCYpPiBjYWxsYmFjaykK
KyAgICB7CisgICAgICAgIG1fb25FeGl0Q2FsbGJhY2suYXBwZW5kKGNhbGxiYWNrKTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGhyZWFkJiB0aHJlYWQpCisgICAgeworICAg
ICAgICByZXR1cm4gaWQoKSA9PSB0aHJlYWQuaWQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgVGhyZWFkJiB0aHJlYWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQoKSAh
PSB0aHJlYWQuaWQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkKCk7CisKKyAgICBl
bnVtIEpvaW5hYmxlU3RhdGUgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUu
IFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KKyAgICAgICAgSm9pbmFibGUsCisKKyAgICAg
ICAgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhy
ZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4g
YmUgYQorICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBl
eGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5k
ZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pCisgICAgICAgIC8vIGFuZCB3aGVu
IHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBj
aGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncworICAgICAgICAv
LyBub2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdh
aXRPblRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgorICAgICAgICBKb2lu
ZWQsCisKKyAgICAgICAgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5v
IGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtl
IGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgorICAgICAgICBEZXRhY2hlZCwKKyAg
ICB9OworCisgICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2lu
YWJsZVN0YXRlOyB9CisgICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0
YXRlID0gRGV0YWNoZWQ7IH0KKyAgICB2b2lkIGRpZEV4aXQoKTsKKyAgICB2b2lkIGRpZEpvaW4o
KSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkgeyBy
ZXR1cm4gbV9kaWRFeGl0OyB9CisKKyAgICBXb3JkTG9jayBtX211dGV4OworICAgIFRocmVhZElk
ZW50aWZpZXIgbV9pZCB7IDAgfTsKKyAgICBKb2luYWJsZVN0YXRlIG1fam9pbmFibGVTdGF0ZSB7
IEpvaW5hYmxlIH07CisgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9OworICAgIFZlY3Rvcjxz
dGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkJik+PiBtX29uRXhpdENhbGxiYWNrOworI2lmIFVTRShQ
VEhSRUFEUykKKyAgICBwdGhyZWFkX3QgbV9oYW5kbGU7CisjaWYgT1MoREFSV0lOKQorICAgIG1h
Y2hfcG9ydF90IG1fcGxhdGZvcm1UaHJlYWQ7CisjZWxzZQorICAgIHNlbV90IG1fc2VtYXBob3Jl
Rm9yU3VzcGVuZFJlc3VtZTsKKyAgICBtY29udGV4dF90IG1fc3VzcGVuZGVkTWFjaGluZUNvbnRl
eHQ7CisgICAgdW5zaWduZWQgbV9zdXNwZW5kQ291bnQgeyAwIH07CisgICAgc3RkOjphdG9taWM8
Ym9vbD4gbV9zdXNwZW5kZWQgeyBmYWxzZSB9OworI2VuZGlmCisjZWxpZiBPUyhXSU5ET1dTKQor
ICAgIEhBTkRMRSBtX2hhbmRsZTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBTeXN0ZW0KKyNlbmRp
ZgorfTsKKworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRo
cmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCisvLyBEYXJ3aW4gaXMgYW4g
ZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJl
YWQsIHRoZSBvbmx5CisvLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBjYWxscyBhcmUgbm90IHJl
ZW50cmFudC4KK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsK
KworaW5saW5lIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCit7CisgICAgcmV0dXJu
IFRocmVhZDo6Y3VycmVudElEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OlRocmVhZElkZW50aWZpZXI7Cit1c2luZyBXVEY6OlRocmVhZDsKK3VzaW5nIFdURjo6Y3Vy
cmVudFRocmVhZDsKKwogI2VuZGlmIC8vIFRocmVhZGluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQ
dGhyZWFkcy5jcHAKaW5kZXggZjVjZWUzYzE3NzgyZjY2YWY5YjA0Y2M3ZDU2Y2ExZGE1YTY5MmQw
Zi4uOTM3ZDU1YWIzZDkyYWFkZTExN2JjNTVlZTFlOGMzYzRlMDE3M2UxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5j
b20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSwxNDEgKzQyLDEzNCBAQAogI2luY2x1ZGUgIlJhbmRvbU51bWJlclNlZWQuaCIKICNpbmNs
dWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24u
aCIKLSNpbmNsdWRlICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCi0jaW5jbHVkZSAi
VGhyZWFkU3BlY2lmaWMuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXJQdGhyZWFkcy5oIgorI2lu
Y2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgogI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx3dGYv
V29yZExvY2suaD4KIAotI2lmICFDT01QSUxFUihNU1ZDKQotI2luY2x1ZGUgPGxpbWl0cy5oPgot
I2luY2x1ZGUgPHNjaGVkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgorbmFtZXNw
YWNlIFdURiB7CiAKLSNpZiBPUyhMSU5VWCkKLSNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KK1RocmVh
ZDo6VGhyZWFkKCkKK3sKKyNpZiAhT1MoREFSV0lOKQorICAgIHNlbV9pbml0KCZtX3NlbWFwaG9y
ZUZvclN1c3BlbmRSZXN1bWUsIC8qIE9ubHkgYXZhaWxhYmxlIGluIHRoaXMgcHJvY2Vzcy4gKi8g
MCwgLyogSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbWFwaG9yZS4gKi8gMCk7CiAjZW5kaWYKK30K
IAorVGhyZWFkOjp+VGhyZWFkKCkKK3sKICNpZiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNpZ25h
bC5oPgorICAgIHNlbV9kZXN0cm95KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwogI2Vu
ZGlmCit9CiAKLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBQdGhyZWFkU3RhdGUgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gSm9pbmFibGVTdGF0ZSB7
Ci0gICAgICAgIEpvaW5hYmxlLCAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUuIFRoZSB0aHJl
YWQgY2FuIGJlIGpvaW5lZCBvbi4KLQotICAgICAgICBKb2luZWQsIC8vIFNvbWVib2R5IHdhaXRl
ZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlzIHRocmVhZCBmaW5hbGx5IGV4aXRlZC4g
VGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJlIGEgCi0gICAgICAgICAgICAg
ICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0aHJlYWQgZXhpdHMgKHdoaWNo
IGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aGUgcmVtYWluZGVyIG9mIHdhaXRP
blRocmVhZENvbXBsZXRpb24gdG8gcnVuKSAKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2hlbiB0
aHJlYWREaWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0aHJlYWREaWRFeGl0IHRvIHRha2UgY2hh
cmdlIGFuZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNpbmNlIHRoZXJlJ3MgCi0gICAgICAgICAg
ICAgICAgLy8gbm9ib2R5IGVsc2UgdG8gcGljayB1cCB0aGUgc2xhY2sgaW4gdGhpcyBjYXNlIChz
aW5jZSB3YWl0T25UaHJlYWRDb21wbGV0aW9uIGhhcyBhbHJlYWR5IHJldHVybmVkKS4KLQotICAg
ICAgICBEZXRhY2hlZCAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBjYW4gbm8g
bG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0IHRha2Ug
Y2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCi0gICAgfTsKLQotICAgIC8vIEN1cnJl
bnRseSBhbGwgdGhyZWFkcyBjcmVhdGVkIGJ5IFdURiBzdGFydCBvdXQgYXMgam9pbmFibGUuIAot
ICAgIFB0aHJlYWRTdGF0ZShwdGhyZWFkX3QgaGFuZGxlKQotICAgICAgICA6IG1fam9pbmFibGVT
dGF0ZShKb2luYWJsZSkKLSAgICAgICAgLCBtX2RpZEV4aXQoZmFsc2UpCi0gICAgICAgICwgbV9w
dGhyZWFkSGFuZGxlKGhhbmRsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgSm9pbmFibGVTdGF0ZSBq
b2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRlOyB9Ci0gICAgcHRocmVhZF90
IHB0aHJlYWRIYW5kbGUoKSB7IHJldHVybiBtX3B0aHJlYWRIYW5kbGU7IH0KLSAgICB2b2lkIGRp
ZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBEZXRhY2hlZDsgfQotICAgIHZv
aWQgZGlkRXhpdCgpIHsgbV9kaWRFeGl0ID0gdHJ1ZTsgfQotICAgIHZvaWQgZGlkSm9pbigpIHsg
bV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9Ci0gICAgYm9vbCBoYXNFeGl0ZWQoKSB7IHJldHVy
biBtX2RpZEV4aXQ7IH0KLQotcHJpdmF0ZToKLSAgICBKb2luYWJsZVN0YXRlIG1fam9pbmFibGVT
dGF0ZTsKLSAgICBib29sIG1fZGlkRXhpdDsKLSAgICBwdGhyZWFkX3QgbV9wdGhyZWFkSGFuZGxl
OwotfTsKLQotdHlwZWRlZiBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0
cjxQdGhyZWFkU3RhdGU+PiBUaHJlYWRNYXA7CisjaWYgIU9TKERBUldJTikKIAotdm9pZCB1bnNh
ZmVUaHJlYWRXYXNEZXRhY2hlZChUaHJlYWRJZGVudGlmaWVyKTsKLXZvaWQgdGhyZWFkRGlkRXhp
dChUaHJlYWRJZGVudGlmaWVyKTsKLXZvaWQgdGhyZWFkV2FzSm9pbmVkKFRocmVhZElkZW50aWZp
ZXIpOworLy8gV2UgdXNlIFNJR1VTUjIgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhy
ZWFkcyBpbiBKYXZhU2NyaXB0Q29yZS4KK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgaW50IFNpZ1Ro
cmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOworc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZCo+
IHRhcmdldFRocmVhZCB7IG51bGxwdHIgfTsKK3N0YXRpYyBTdGF0aWNXb3JkTG9jayBnbG9iYWxT
dXNwZW5kTG9jazsKIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCit2b2lkIFRocmVh
ZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29u
dGV4dCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJl
dHVybiBtdXRleDsKLX0KLQotdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKLXsKLSAgICBzdGF0
aWMgYm9vbCBpc0luaXRpYWxpemVkOwotCi0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCisgICAgLy8g
VG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBp
cyBhbGxvd2VkLgorICAgIFRocmVhZCogdGhyZWFkID0gdGFyZ2V0VGhyZWFkLmxvYWQoKTsKKwor
ICAgIGlmICh0aHJlYWQtPm1fc3VzcGVuZGVkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIHRoYXQg
aXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2lnc3VzcGVuZC4KKyAgICAgICAgLy8g
U28gdGhpcyBoYW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNob3VsZCBub3QgcHJvY2Vzcy4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2hlbiBzaWduYWwgY29tZXMsIGZpcnN0LCB0aGUgc3lzdGVt
IGNhbGxzIHNpZ25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNpZ3N1c3BlbmQgd2lsbCBiZSByZXN1
bWVkLiBTaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5cyBwcmVjZWRlcy4KKyAgICAgICAg
Ly8gU28sIHRoZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhhdCBzdXNwZW5kZWQuc3RvcmUodHJ1
ZSwgLi4uKSB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQuCisg
ICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkv
ZnVuY3Rpb25zL3NpZ3N1c3BlbmQuaHRtbAogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0
aWFsaXplKCk7Ci0gICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3Qg
aXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCi0gICAgLy8gc28gZW5z
dXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KLSAgICBTdHJpbmdJbXBsOjpl
bXB0eSgpOwotICAgIHRocmVhZE1hcE11dGV4KCk7Ci0gICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJl
ckdlbmVyYXRvcigpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgp
OwotICAgIHd0ZlRocmVhZERhdGEoKTsKLSAgICBpbml0aWFsaXplRGF0ZXMoKTsKLX0KKyAgICB1
Y29udGV4dF90KiB1c2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4
dCk7CisjaWYgQ1BVKFBQQykKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQg
PSAqdXNlckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7CisjZWxzZQorICAgIHRocmVhZC0+
bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19tY29udGV4dDsKKyNl
bmRpZgogCi1zdGF0aWMgVGhyZWFkTWFwJiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxUaHJlYWRNYXA+IG1hcDsKLSAgICByZXR1cm4gbWFwOworICAgIC8vIEFsbG93
IHN1c3BlbmQgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZC4KKyAg
ICAvLyBzZW1fcG9zdCBpcyBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbi4gSXQgbWVhbnMgdGhh
dCB3ZSBjYW4gY2FsbCB0aGlzIGZyb20gYSBzaWduYWwgaGFuZGxlci4KKyAgICAvLyBodHRwOi8v
cHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hh
cDAyXzA0Lmh0bWwjdGFnXzAyXzA0XzAzCisgICAgLy8KKyAgICAvLyBBbmQgc2VtX3Bvc3QgZW1p
dHMgbWVtb3J5IGJhcnJpZXIgdGhhdCBlbnN1cmVzIHRoYXQgc3VzcGVuZGVkTWFjaGluZUNvbnRl
eHQgaXMgY29ycmVjdGx5IHNhdmVkLgorICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcv
b25saW5lcHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL1YxX2NoYXAwNC5odG1sI3RhZ18wNF8xMQor
ICAgIHNlbV9wb3N0KCZ0aHJlYWQtPm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisKKyAg
ICAvLyBSZWFjaGluZyBoZXJlLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGJsb2NrZWQgaW4g
dGhpcyBoYW5kbGVyICh0aGlzIGlzIGNvbmZpZ3VyZWQgYnkgc2lnYWN0aW9uJ3Mgc2FfbWFzayku
CisgICAgLy8gU28gYmVmb3JlIGNhbGxpbmcgc2lnc3VzcGVuZCwgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSB0byB0aGlzIHRocmVhZCBpcyBkZWZlcnJlZC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGhh
bmRsZXIgaXMgbm90IGV4ZWN1dGVkIHJlY3Vyc2l2ZWx5LgorICAgIHNpZ3NldF90IGJsb2NrZWRT
aWduYWxTZXQ7CisgICAgc2lnZmlsbHNldCgmYmxvY2tlZFNpZ25hbFNldCk7CisgICAgc2lnZGVs
c2V0KCZibG9ja2VkU2lnbmFsU2V0LCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKKyAgICBzaWdz
dXNwZW5kKCZibG9ja2VkU2lnbmFsU2V0KTsKKworICAgIC8vIEFsbG93IHJlc3VtZSBjYWxsZXIg
dG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgcmVzdW1lZC4KKyAgICBzZW1fcG9zdCgmdGhyZWFk
LT5tX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwogfQogCi1zdGF0aWMgVGhyZWFkSWRlbnRp
ZmllciBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhh
bmRsZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAg
ICBUaHJlYWRNYXA6Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAo
OyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1
YWwoaS0+dmFsdWUtPnB0aHJlYWRIYW5kbGUoKSwgcHRocmVhZEhhbmRsZSkgJiYgIWktPnZhbHVl
LT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5rZXk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIDA7Ci19CisjZW5kaWYgLy8gIU9TKERBUldJTikKIAotc3RhdGljIFRocmVhZElkZW50
aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90
JiBwdGhyZWFkSGFuZGxlKQordm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBBU1NF
UlQoIWlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUocHRocmVhZEhhbmRsZSkpOwotICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBzdGF0aWMgVGhyZWFkSWRlbnRp
ZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotICAgIHRocmVhZE1hcCgpLmFkZChpZGVudGlmaWVy
Q291bnQsIHN0ZDo6bWFrZV91bmlxdWU8UHRocmVhZFN0YXRlPihwdGhyZWFkSGFuZGxlKSk7Ci0g
ICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBp
bml0aWFsaXplS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsKKyAg
ICAgICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOworICAgICAgICBUaHJl
YWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5
KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBm
YXNoaW9uLAorICAgICAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJv
bSBoZXJlLgorICAgICAgICBTdHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICBpbml0aWFsaXpl
UmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKKyAgICAg
ICAgaW5pdGlhbGl6ZURhdGVzKCk7CisKKyNpZiAhT1MoREFSV0lOKQorICAgICAgICAvLyBTaWdu
YWwgaGFuZGxlcnMgYXJlIHByb2Nlc3MgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIC8v
IEludGVudGlvbmFsbHkgYmxvY2sgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpbiB0aGUgaGFuZGxl
ci4KKyAgICAgICAgLy8gU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB3aWxsIGJlIGFsbG93ZWQgaW4g
dGhlIGhhbmRsZXIgYnkgc2lnc3VzcGVuZC4KKyAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rp
b247CisgICAgICAgIHNpZ2VtcHR5c2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAgIHNpZ2Fk
ZHNldCgmYWN0aW9uLnNhX21hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworCisgICAgICAg
IGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1l
OworICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKKyAg
ICAgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDApOworI2Vu
ZGlmCisgICAgfSk7CiB9CiAKLXN0YXRpYyBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZUZvcklkZW50
aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKFRocmVhZElkZW50aWZpZXIgaWQpCitzdGF0aWMgdm9p
ZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQogewotICAgIHJl
dHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpLT5wdGhyZWFkSGFuZGxlKCk7CisjaWYgIU9TKERBUldJ
TikKKyAgICBzaWdzZXRfdCBtYXNrOworICAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKKyAgICBzaWdh
ZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHB0aHJlYWRfc2lnbWFz
ayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkKiB3dGZU
aHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewotICAgIC8vIEJhbGFuY2VkIGJ5IC5sZWFr
UHRyKCkgaW4gY3JlYXRlVGhyZWFkSW50ZXJuYWwuCisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQ
dHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgogICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0
ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CisKKyAgICBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0gbnVs
bHB0cjsKKwogICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQor
UmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKIHsKLSAgICBhdXRvIGludm9jYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwg
ZGF0YSk7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgp
KTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLmdldCgpLCBkYXRhKTsKICAgICBwdGhyZWFk
X3QgdGhyZWFkSGFuZGxlOwogICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CiAgICAgcHRocmVhZF9h
dHRyX2luaXQoJmF0dHIpOwpAQCAtMTg2LDE3ICsxODAsMTggQEAgVGhyZWFkSWRlbnRpZmllciBj
cmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb24KICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7CiAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBv
aW50ICVwIHdpdGggZGF0YSAlcCIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0
KCkpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0ZlRo
cmVhZEVudHJ5UG9pbnQuCiAgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJbnZv
Y2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7CiAgICAgVU5VU0VEX1BBUkFNKGxlYWtlZElu
dm9jYXRpb24pOwogCi0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFu
ZGxlKHRocmVhZEhhbmRsZSk7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlKTsK
KyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3Vy
cmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFWRShQ
VEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcHRocmVhZF9zZXRuYW1lX25wKG5vcm1hbGl6ZVRocmVh
ZE5hbWUodGhyZWFkTmFtZSkpOwpAQCAtMjA1LDEyMyArMjAwLDIzNCBAQCB2b2lkIGluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHRocmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlm
aWVyIGlkID0gaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAg
QVNTRVJUKGlkKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Cisg
ICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9Ci0gICAg
Ci12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGlu
dCBkZWx0YSkKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhy
ZWFkSUQpOwogCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhh
bmRsZSk7Ci0gICAgfQordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sK
KyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAKICAgICBpbnQgcG9saWN5Owog
ICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKIAotICAgIGlmIChwdGhyZWFkX2dldHNjaGVk
cGFyYW0ocHRocmVhZEhhbmRsZSwgJnBvbGljeSwgJnBhcmFtKSkKKyAgICBpZiAocHRocmVhZF9n
ZXRzY2hlZHBhcmFtKG1faGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQogICAgICAgICByZXR1cm47
CiAKICAgICBwYXJhbS5zY2hlZF9wcmlvcml0eSArPSBkZWx0YTsKIAotICAgIHB0aHJlYWRfc2V0
c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7CisgICAgcHRocmVhZF9z
ZXRzY2hlZHBhcmFtKG1faGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7CiB9CiAKLWludCB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoraW50IFRocmVhZDo6
d2FpdEZvckNvbXBsZXRpb24oKQogewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAg
IEFTU0VSVCh0aHJlYWRJRCk7Ci0KKyAgICBwdGhyZWFkX3QgaGFuZGxlOwogICAgIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBsb2NrIGFjcm9zcyB0aGUgY2FsbCB0byBqb2luLCBzaW5j
ZSB0aGF0IGNhbiBibG9jayBvdXIgdGhyZWFkIGFuZCBjYXVzZSBkZWFkbG9jay4KLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFu
ZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVh
ZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOworICAgICAgICBXb3JkTG9ja0hv
bGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOwogICAgIH0K
IAotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKHB0aHJlYWRIYW5kbGUsIDApOwor
ICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9qb2luKGhhbmRsZSwgMCk7CiAKICAgICBpZiAo
am9pblJlc3VsdCA9PSBFREVBRExLKQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZp
ZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJ
RCk7CisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8g
YmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIG1faWQpOwogICAgIGVsc2UgaWYgKGpvaW5S
ZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxl
IHRvIGJlIGpvaW5lZC5cbiIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJ
ZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwgbV9pZCk7CiAKLSAgICBN
dXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgUHRocmVhZFN0YXRlKiBz
dGF0ZSA9IHRocmVhZE1hcCgpLmdldCh0aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAg
ICBBU1NFUlQoc3RhdGUtPmpvaW5hYmxlU3RhdGUoKSA9PSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxl
KTsKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5h
YmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CiAKLSAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5
IGV4aXRlZCwgc28gY2xlYW4gdXAgYWZ0ZXIgaXQuCi0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQo
KSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKKyAgICAvLyBUaGUgdGhy
ZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8gbm90aGluZy4KICAgICAvLyBUaGUgdGhyZWFkIGhh
c24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwg
dGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAg
YWZ0ZXIgaXRzZWxmLgotICAgIGVsc2UKLSAgICAgICAgc3RhdGUtPmRpZEpvaW4oKTsKKyAgICBp
ZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRKb2luKCk7CiAKICAgICByZXR1cm4gam9pblJl
c3VsdDsKIH0KIAotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkK
K3ZvaWQgVGhyZWFkOjpkZXRhY2goKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgV29y
ZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBkZXRhY2hSZXN1bHQgPSBwdGhy
ZWFkX2RldGFjaChtX2hhbmRsZSk7CisgICAgaWYgKGRldGFjaFJlc3VsdCkKKyAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIs
IG1faWQpOwogCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAg
IHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRo
TG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Cisg
ICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KIAot
ICAgIGludCBkZXRhY2hSZXN1bHQgPSBwdGhyZWFkX2RldGFjaChwdGhyZWFkSGFuZGxlKTsKLSAg
ICBpZiAoZGV0YWNoUmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIg
JXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwgdGhyZWFkSUQpOwotCi0gICAgUHRocmVh
ZFN0YXRlKiBzdGF0ZSA9IHRocmVhZE1hcCgpLmdldCh0aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0
YXRlKTsKLSAgICBpZiAoc3RhdGUtPmhhc0V4aXRlZCgpKQotICAgICAgICB0aHJlYWRNYXAoKS5y
ZW1vdmUodGhyZWFkSUQpOwotICAgIGVsc2UKLSAgICAgICAgdGhyZWFkTWFwKCkuZ2V0KHRocmVh
ZElEKS0+ZGlkQmVjb21lRGV0YWNoZWQoKTsKK1RocmVhZCYgVGhyZWFkOjpjdXJyZW50KCkKK3sK
KyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKTsKKyAgICBp
ZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgpOworCisgICAgLy8gTm90IGEg
V1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5
ZXQuCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsK
KyAgICB0aHJlYWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYoKSk7CisgICAgVGhyZWFkSG9sZGVy
Ojppbml0aWFsaXplKCp0aHJlYWQpOworICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklm
Tm9uV1RGQ3JlYXRlZCgpOworICAgIHJldHVybiAqdGhyZWFkOwogfQogCi12b2lkIHRocmVhZERp
ZEV4aXQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFk
OjpjdXJyZW50SUQoKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgp
KTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKTsK
LSAgICBBU1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7CisgICAgcmV0
dXJuIGN1cnJlbnQoKS5pZCgpOworfQogCi0gICAgaWYgKHN0YXRlLT5qb2luYWJsZVN0YXRlKCkg
IT0gUHRocmVhZFN0YXRlOjpKb2luYWJsZSkKLSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRo
cmVhZElEKTsKK2Jvb2wgVGhyZWFkOjpzaWduYWwoaW50IHNpZ25hbE51bWJlcikKK3sKKyAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgaW50IGVyck5vID0gcHRocmVhZF9r
aWxsKG1faGFuZGxlLCBzaWduYWxOdW1iZXIpOworICAgIHJldHVybiAhZXJyTm87IC8vIEEgMCBl
cnJObyBtZWFucyBzdWNjZXNzLgogfQogCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQo
KQorYXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3Bl
bmRFcnJvcj4KIHsKLSAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gVGhyZWFkSWRlbnRpZmllckRh
dGE6OmlkZW50aWZpZXIoKTsKLSAgICBpZiAoaWQpCi0gICAgICAgIHJldHVybiBpZDsKKyAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKHRoaXMgIT0gJmN1cnJlbnQoKSwgIkN1cnJlbnRseSB3ZSBkb24n
dCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJlbnQgdGhyZWFkIGl0c2VsZi4iKTsKKyAgICBXb3Jk
TG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorICAgIGtlcm5fcmV0
dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQobV9wbGF0Zm9ybVRocmVhZCk7CisgICAgaWYg
KHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChy
ZXN1bHQpOworICAgIHJldHVybiB7IH07CisjZWxzZQorICAgIHsKKyAgICAgICAgLy8gRHVyaW5n
IHN1c3BlbmQsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0
aGUgb3RoZXIgdGhyZWFkcy4KKyAgICAgICAgLy8gV2UgdXNlIGdsb2JhbCBsb2NrIGluc3RlYWQg
b2YgcGVyIHRocmVhZCBsb2NrLgorICAgICAgICAvLyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNh
c2UsIHRoZXJlIGFyZSB0aHJlYWRzIEEgYW5kIEIuCisgICAgICAgIC8vIEFuZCBBIGF0dGVtcHQg
dG8gc3VzcGVuZCBCIGFuZCBCIGF0dGVtcHQgdG8gc3VzcGVuZCBBLgorICAgICAgICAvLyBBIGFu
ZCBCIHNlbmQgc2lnbmFscy4gQW5kIGxhdGVyLCBzaWduYWxzIGFyZSBkZWxpdmVyZWQgdG8gQSBh
bmQgQi4KKyAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCBib3RoIHdpbGwgYmUgc3VzcGVuZGVkLgor
ICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU3VzcGVuZExvY2spOworICAgICAg
ICBpZiAoIW1fc3VzcGVuZENvdW50KSB7CisgICAgICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3Vs
ZCBsaWtlIHRvIHVzZSBwdGhyZWFkX3NpZ3F1ZXVlLiBJdCBhbGxvd3MgdXMgdG8gcGFzcyB0aGUg
YXJndW1lbnQgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgLy8gQnV0IGl0IGNh
biBiZSB1c2VkIGluIGEgZmV3IHBsYXRmb3JtcywgbGlrZSBMaW51eC4KKyAgICAgICAgICAgIC8v
IEluc3RlYWQsIHdlIHVzZSBUaHJlYWQqIHN0b3JlZCBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3Jh
Z2UgdG8gcGFzcyBpdCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICB0YXJnZXRU
aHJlYWQuc3RvcmUodGhpcyk7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9raWxs
KG1faGFuZGxlLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7CisgICAg
ICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAg
ICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3
YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAg
ICAgICAgICAgbV9zdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgKyttX3N1c3BlbmRDb3VudDsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisjZW5kaWYKK30KIAotICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVh
ZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgotICAgIGlkID0gZXN0
YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUocHRocmVhZF9zZWxmKCkpOwotICAgIFRo
cmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKGlkKTsKLSAgICByZXR1cm4gaWQ7Cit2b2lk
IFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7
CisjaWYgT1MoREFSV0lOKQorICAgIHRocmVhZF9yZXN1bWUobV9wbGF0Zm9ybVRocmVhZCk7Cisj
ZWxzZQorICAgIHsKKyAgICAgICAgLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUg
c2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgorICAgICAgICBX
b3JkTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU3VzcGVuZExvY2spOworICAgICAgICBpZiAobV9z
dXNwZW5kQ291bnQgPT0gMSkgeworICAgICAgICAgICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3Vz
cGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBhY3R1YWxseSBpc3N1ZWQsCisgICAg
ICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIgaXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2Ug
YWdhaW4uCisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1
aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9yIHN1c3BlbmQgYW5kIHJlc3VtZS4KKyAgICAg
ICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2lnbmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUg
c2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4KKyAgICAgICAgICAgIC8vIDIuIFVzZSBzb21l
IGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNwZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRs
ZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJlIHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCisg
ICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxvY2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFy
aWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgICAgIC8vIEluIHRoaXMgaW1w
bGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNwZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rp
bmd1aXNoIGl0LgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAg
ICAgICAgaWYgKHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkg
PT0gRVNSQ0gpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2VtX3dhaXQo
Jm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJh
cnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRl
ciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVu
ZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQor
ICAgICAgICAtLW1fc3VzcGVuZENvdW50OworICAgIH0KKyNlbmRpZgogfQogCi1ib29sIHNpZ25h
bFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCBpbnQgc2lnbmFsTnVtYmVyKQorc2l6
ZV90IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7
CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyNp
ZiBDUFUoWDg2KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHNpemVvZihyZWdpc3RlcnMpIC8g
c2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhS
RUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4
ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZv
ciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShQUEMpCisgICAgdW5zaWduZWQgdXNl
ckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9y
X3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShQUEM2NCkKKyAgICB1bnNp
Z25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0
YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0p
CisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0
aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQ
VShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09V
TlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2
NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAga2Vy
bl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRlKG1fcGxhdGZvcm1UaHJlYWQsIGZs
YXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsICZ1c2VyQ291bnQpOworICAgIGlmIChy
ZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAiSmF2YVNjcmlwdCBnYXJiYWdl
IGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBl
cnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUg
Um9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCByZXN1bHQpOworICAgICAgICBDUkFT
SCgpOworICAgIH0KKyAgICByZXR1cm4gdXNlckNvdW50ICogc2l6ZW9mKHVpbnRwdHJfdCk7Cisj
ZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiAoQ1BVKFg4NikgfHwg
Q1BVKFg4Nl82NCkgfHwgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykpCisgICAg
cmVnaXN0ZXJzID0gbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKKyAgICByZXR1cm4gc2l6ZW9m
KFBsYXRmb3JtUmVnaXN0ZXJzKTsKKyNlbHNlCisgICAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRl
OworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGUpOworI2lmIEhBVkUoUFRIUkVBRF9O
UF9IKSB8fCBPUyhORVRCU0QpCisjaWYgIU9TKE9QRU5CU0QpCisgICAgLy8gZS5nLiBvbiBGcmVl
QlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZworICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAobV9oYW5k
bGUsICZhdHRyaWJ1dGUpOworI2VuZGlmCisjZWxzZQorICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0
aW9uIGlzIG5vbi1wb3J0YWJsZTsgb3RoZXIgUE9TSVggc3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJl
bnQgbnAgYWx0ZXJuYXRpdmVzCisgICAgcHRocmVhZF9nZXRhdHRyX25wKG1faGFuZGxlLCAmYXR0
cmlidXRlKTsKKyNlbmRpZgorCisgICAgdm9pZCogc3RhY2tCYXNlID0gMDsKKyAgICBzaXplX3Qg
c3RhY2tTaXplID0gMDsKKyAgICBpbnQgcmMgPSBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soJmF0dHJp
YnV0ZSwgJnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7CisgICAgQVNTRVJUX1VOVVNFRChyYywgIXJj
KTsKKyAgICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICByZWdpc3RlcnMuc3RhY2tQb2ludGVyID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7CisKKyAgICBwdGhyZWFk
X2F0dHJfZGVzdHJveSgmYXR0cmlidXRlKTsKKworICAgIHJldHVybiAwOworI2VuZGlmCit9CisK
K3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKIHsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsK
LSAgICBBU1NFUlQodGhyZWFkSUQpOwogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRs
ZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNT
RVJUKHB0aHJlYWRIYW5kbGUpOworICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7CisgICAgICAgIG1fZGlkRXhpdCA9IHRydWU7CisgICAgfQorICAgIGZvciAoYXV0byYgY2Fs
bGJhY2sgOiBtX29uRXhpdENhbGxiYWNrKQorICAgICAgICBjYWxsYmFjaygqdGhpcyk7Cit9CisK
K3ZvaWQgVGhyZWFkOjplc3RhYmxpc2gocHRocmVhZF90IGhhbmRsZSkKK3sKKyAgICBXb3JkTG9j
a0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAgaWYg
KCFtX2lkKSB7CisgICAgICAgIHN0YXRpYyBzdGQ6OmF0b21pYzxUaHJlYWRJZGVudGlmaWVyPiBw
cm92aWRlciB7IDAgfTsKKyAgICAgICAgbV9pZCA9ICsrcHJvdmlkZXI7CisjaWYgT1MoREFSV0lO
KQorICAgICAgICBtX3BsYXRmb3JtVGhyZWFkID0gcHRocmVhZF9tYWNoX3RocmVhZF9ucChoYW5k
bGUpOworI2VuZGlmCiAgICAgfQotICAgIGludCBlcnJObyA9IHB0aHJlYWRfa2lsbChwdGhyZWFk
SGFuZGxlLCBzaWduYWxOdW1iZXIpOwotICAgIHJldHVybiAhZXJyTm87IC8vIEEgMCBlcnJObyBt
ZWFucyBzdWNjZXNzLgogfQogCiBNdXRleDo6TXV0ZXgoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAK
aW5kZXggNTRiNDNlZmVmMzVjZDY2MzJhNzAwODE1MDdhNWIzNzk5ZGVmYjZmYi4uYjlmMDkzNDNj
MWU1NDQ5NGMwNTgwZjA4OGJhNGRiMTkxOWIxYjVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3Bw
CkBAIC05NCw2ICs5NCw3IEBACiAKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAi
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyV2luLmgi
CiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KQEAgLTEwOSw2ICsxMTAsMTQgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKK1RocmVhZDo6VGhyZWFkKCkKK3sKK30KKworVGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwog
Ly8gTVNfVkNfRVhDRVBUSU9OLCBUSFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50
ZXJuYWwgYWxsIGNvbWUgZnJvbSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5L3hjYjJ6OGhzLmFzcHg+Lgogc3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9
IDB4NDA2RDEzODg7CiAKQEAgLTEyMSw3ICsxMzAsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YWdUSFJF
QUROQU1FX0lORk8gewogfSBUSFJFQUROQU1FX0lORk87CiAjcHJhZ21hIHBhY2socG9wKQogCi12
b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWRO
YW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3Qg
Y2hhciogc3pUaHJlYWROYW1lKQogewogI2lmIENPTVBJTEVSKE1JTkdXKQogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhyZWFkIG5hbWUgc2V0dGluZyB3aXRoIE1pbmdXLgpAQCAtMTI5LDcgKzEz
OCw3IEBAIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBz
elRocmVhZE5hbWUpCiAjZWxzZQogICAgIFRIUkVBRE5BTUVfSU5GTyBpbmZvOwogICAgIGluZm8u
ZHdUeXBlID0gMHgxMDAwOwotICAgIGluZm8uc3pOYW1lID0gbm9ybWFsaXplVGhyZWFkTmFtZShz
elRocmVhZE5hbWUpOworICAgIGluZm8uc3pOYW1lID0gVGhyZWFkOjpub3JtYWxpemVUaHJlYWRO
YW1lKHN6VGhyZWFkTmFtZSk7CiAgICAgaW5mby5kd1RocmVhZElEID0gR2V0Q3VycmVudFRocmVh
ZElkKCk7CiAgICAgaW5mby5kd0ZsYWdzID0gMDsKIApAQCAtMTQwLDcwICsxNDksMzkgQEAgdm9p
ZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFt
ZSkKICNlbmRpZgogfQogCi1zdGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0K
LQogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRp
YWxpemVkOwotICAgIAotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OmluaXRpYWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0
cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBz
byBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0lt
cGw6OmVtcHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9t
TnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVE
YXRlcygpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplS2V5OworICAgIHN0
ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsKKyAgICAgICAgV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6aW5pdGlhbGl6ZSgpOworICAgICAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVP
bmNlKCk7CisgICAgICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0
IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAorICAgICAgICAvLyBz
byBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgorICAgICAgICBTdHJp
bmdJbXBsOjplbXB0eSgpOworICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9y
KCk7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7
CisgICAgfSk7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPERXT1JELCBIQU5ETEU+JiB0aHJlYWRNYXAo
KQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPERXT1JELCBIQU5ETEU+PiBt
YXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVC
eUlkZW50aWZpZXIoRFdPUkQgdGhyZWFkSUQsIEhBTkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMg
dW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhy
ZWFkTWFwKCkuY29udGFpbnModGhyZWFkSUQpKTsKLSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFk
SUQsIHRocmVhZEhhbmRsZSk7Ci19CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBU
aHJlYWQ6OmNyZWF0ZUludGVybmFsLgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVl
X3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbio+KHBhcmFtKSk7CiAKLXN0YXRpYyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRl
bnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAg
ICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52
b2NhdGlvbi0+dGhyZWFkID0gbnVsbHB0cjsKIAotc3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5k
bGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlu
cyhpZCkpOwotICAgIHRocmVhZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25l
ZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19j
YXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+
ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Ci0KICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFk
SWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50
LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhy
ZWFkOjpjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogeworICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFk
b3B0UmVmKCpuZXcgVGhyZWFkKCkpOwogICAgIHVuc2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAw
OwogICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlv
biA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50
LCBkYXRhKTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBI
QU5ETEUgdGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVh
ZGV4KDAsIDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJl
YWRJZGVudGlmaWVyKSk7CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJO
T19IKQpAQCAtMjE5LDU1ICsxOTcsMTI0IEBAIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
SW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAg
VU5VU0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24pOwogCiAgICAgdGhyZWFkSUQgPSBzdGF0aWNf
Y2FzdDxUaHJlYWRJZGVudGlmaWVyPih0aHJlYWRJZGVudGlmaWVyKTsKLSAgICBzdG9yZVRocmVh
ZEhhbmRsZUJ5SWRlbnRpZmllcih0aHJlYWRJZGVudGlmaWVyLCB0aHJlYWRIYW5kbGUpOwogCi0g
ICAgcmV0dXJuIHRocmVhZElEOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSwg
dGhyZWFkSWRlbnRpZmllcik7CisgICAgcmV0dXJuIHRocmVhZDsKIH0KIAotdm9pZCBjaGFuZ2VU
aHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCBpbnQgZGVsdGEpCit2b2lk
IFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRlbHRhKQogewotICAgIEFTU0VSVCh0aHJlYWRJ
RCk7Ci0KLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAgICAgIExPR19FUlJPUigi
VGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJl
YWQiLCB0aHJlYWRJRCk7Ci0KLSAgICBTZXRUaHJlYWRQcmlvcml0eSh0aHJlYWRIYW5kbGUsIFRI
UkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7CisgICAgV29yZExvY2tIb2xkZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgIFNldFRocmVhZFByaW9yaXR5KG1faGFuZGxlLCBUSFJFQURfUFJJT1JJ
VFlfTk9STUFMICsgZGVsdGEpOwogfQogCi1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkK
IHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIAotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUg
PSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXRocmVhZEhh
bmRsZSkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRpZCBub3QgY29y
cmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJ
RCk7Ci0gCi0gICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFk
SGFuZGxlLCBJTkZJTklURSk7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICB7CisgICAgICAgIFdv
cmRMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7
CisgICAgfQorCisgICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFu
ZGxlLCBJTkZJTklURSk7CiAgICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxv
Y2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJl
YWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0
IiwgbV9pZCk7CiAKLSAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhy
ZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgV29yZExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgIEFTU0VSVChqb2luYWJsZVN0YXRlKCkgPT0gSm9pbmFibGUpOwor
CisgICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIGRvIG5vdGhpbmcuCisgICAg
Ly8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcg
dXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBp
dCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAg
ICAgICBkaWRKb2luKCk7CiAKICAgICByZXR1cm4gam9pblJlc3VsdDsKIH0KIAotdm9pZCBkZXRh
Y2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3ZvaWQgVGhyZWFkOjpkZXRhY2go
KQoreworICAgIC8vIFdlIGZvbGxvdyB0aGUgcHRocmVhZCBzZW1hbnRpY3M6IGV2ZW4gYWZ0ZXIg
dGhlIGRldGFjaCBpcyBjYWxsZWQsCisgICAgLy8gd2UgY2FuIHN0aWxsIHBlcmZvcm0gdmFyaW91
cyBvcGVyYXRpb25zIG9udG8gdGhlIHRocmVhZC4gRm9yIGV4YW1wbGUsCisgICAgLy8gd2UgY2Fu
IGRvIHB0aHJlYWRfa2lsbCBmb3IgdGhlIGRldGFjaGVkIHRocmVhZC4gVGhlIHByb2JsZW0gaW4g
V2luZG93cworICAgIC8vIGlzIHRoYXQgY2xvc2luZyBIQU5ETEUgbG9zZXMgdGhlIHdheSB0byBk
byBzdWNoIG9wZXJhdGlvbnMuCisgICAgLy8gVG8gZG8gc28sIHdlIGRvIG5vdGhpbmcgaGVyZSBp
biBXaW5kb3dzLiBPcmlnaW5hbCBkZXRhY2gncyBwdXJwb3NlLAorICAgIC8vIHJlbGVhc2luZyB0
aHJlYWQgcmVzb3VyY2Ugd2hlbiB0aGUgdGhyZWFkIGV4aXRzLCB3aWxsIGJlIGFjaGlldmVkIGJ5
CisgICAgLy8gRmxzQ2FsbGJhY2sgYXV0b21hdGljYWxseS4gRmxzQ2FsbGJhY2sgd2lsbCBjYWxs
IENsb3NlSGFuZGxlIHRvIGNsZWFuIHVwCisgICAgLy8gcmVzb3VyY2UuIFNvIGluIHRoaXMgZnVu
Y3Rpb24sIHdlIGp1c3QgbWFyayB0aGUgdGhyZWFkIGFzIGRldGFjaGVkIHRvCisgICAgLy8gYXZv
aWQgY2FsbGluZyB3YWl0Rm9yQ29tcGxldGlvbiBmb3IgdGhpcyB0aHJlYWQuCisgICAgV29yZExv
Y2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAg
IGRpZEJlY29tZURldGFjaGVkKCk7Cit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhw
ZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgV29yZExvY2tIb2xkZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgIERXT1JEIHJlc3VsdCA9IFN1c3BlbmRUaHJlYWQobV9oYW5k
bGUpOworICAgIGlmIChyZXN1bHQgIT0gKERXT1JEKS0xKQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworfQorCisvLyBEdXJpbmcgcmVzdW1l
LCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVy
IHRocmVhZHMuCit2b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBs
b2NrZXIobV9tdXRleCk7CisgICAgUmVzdW1lVGhyZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90
IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCit7Cisg
ICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIHJlZ2lzdGVycy5Db250ZXh0
RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05URVhUX0NPTlRST0w7CisgICAgR2V0VGhyZWFk
Q29udGV4dChtX2hhbmRsZSwgJnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVvZihDT05URVhU
KTsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewotICAgIEFTU0VSVCh0aHJlYWRJ
RCk7CisgICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7Cisg
ICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKIAotICAgIEhBTkRM
RSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAg
ICBpZiAodGhyZWFkSGFuZGxlKQotICAgICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwot
ICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgLy8gTm90
IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hl
ZCB5ZXQuCisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7
CisKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGJvb2wgaXNTdWNjZXNzZnVsID0gRHVwbGljYXRl
SGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQoKSwgR2V0Q3VycmVu
dFByb2Nlc3MoKSwgJmhhbmRsZSwgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1FX0FDQ0VTUyk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVsKTsKKworICAgIHRocmVhZC0+ZXN0YWJsaXNo
KGhhbmRsZSwgY3VycmVudElEKCkpOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSh0aHJl
YWQuZ2V0KCkpOworICAgIHJldHVybiB0aHJlYWQuZ2V0KCk7CiB9CiAKLVRocmVhZElkZW50aWZp
ZXIgY3VycmVudFRocmVhZCgpCitUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkK
IHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRo
cmVhZElkKCkpOwogfQogCit2b2lkIFRocmVhZDo6ZGlkRXhpdCgpCit7CisgICAgeworICAgICAg
ICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIG1fZGlkRXhpdCA9IHRy
dWU7CisgICAgICAgIC8vIEl0IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxsYmFjayB3aWxs
IGJlIGNhbGxlZCBldmVuIGJlZm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRsZXMuCisgICAg
ICAgIC8vIFRoaXMgZWFzaWx5IGVuc3VyZXMgdGhhdCBhbGwgdGhlIHRocmVhZCByZXNvdXJjZXMg
YXJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkLgorICAgICAgICBpZiAobV9oYW5kbGUpCisgICAgICAg
ICAgICBDbG9zZUhhbmRsZShtX2hhbmRsZSk7CisgICAgfQorICAgIGZvciAoYXV0byYgY2FsbGJh
Y2sgOiBtX29uRXhpdENhbGxiYWNrKQorICAgICAgICBjYWxsYmFjaygqdGhpcyk7Cit9CisKK3Zv
aWQgVGhyZWFkOjplc3RhYmxpc2goSEFORExFIGhhbmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCkKK3sKKyAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgbV9oYW5k
bGUgPSBoYW5kbGU7CisgICAgbV9pZCA9IHRocmVhZElEOworfQorCiBNdXRleDo6TXV0ZXgoKQog
ewogICAgIG1fbXV0ZXgubV9yZWN1cnNpb25Db3VudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRl
eCBiMmEwYTc5ZjRhYjVhYWMyODliMTY5ZjkyYmJjMWE4MDU4NTJjYTMyLi45NzMwZmNmMGYwOTIx
ZmRlZDkwZjg5ZjEyOTBlNzc0OTBiNTM5NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9X
b3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9u
cywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKIAogICAgICAgICAgICAgbV93b3JrZXJz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFkQ291bnQpOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBt
X3dvcmtlcnMuYXBwZW5kKGNyZWF0ZVRocmVhZChTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBX
b3JrZXIgJXUiLCBpKS51dGY4KCkuZGF0YSgpLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1f
d29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wg
V29ya2VyICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAg
ICAgdGhyZWFkQm9keSgpOwogICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KQEAg
LTExNCw3ICsxMTQsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBp
dGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogICAgICAgICBDb25kaXRp
b24gbV9jb25kaXRpb247CiAgICAgICAgIERlcXVlPGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4qPiBtX3F1ZXVlOwogCi0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3dvcmtl
cnM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gbV93b3JrZXJzOwogICAgIH07CiAK
ICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPFRocmVhZFBvb2w+IHRocmVhZFBvb2w7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5oCmluZGV4IGE0N2YyMWUyMGQzMWJjOGJmNzMxOGY0MWI5NTdhYjM2NmMxOTE1MDMu
Ljc2MzQ1YzA2OTMxNjRmNjhjYTRiMWM2NjQ0ODRhMjczY2M2ZThiZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5o
CkBAIC0xMDMsNyArMTAzLDcgQEAgY2xhc3MgV29ya1F1ZXVlIGZpbmFsIDogcHVibGljIEZ1bmN0
aW9uRGlzcGF0Y2hlciB7CiAKICAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwogI2VsaWYgVVNFKEdM
SUJfRVZFTlRfTE9PUCkgfHwgVVNFKEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya1F1ZXVl
VGhyZWFkOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAg
IENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgIFJ1bkxvb3AqIG1f
cnVuTG9vcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29h
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCAxYTcy
MTlhZDI1OWVkNzU5NzJhNWE0NThjNWM0ODQ5N2EzODhlNGQzLi41OWVlMWY4NWI0MzVjZTFhNzJm
NTA1MGY0ZGY2MmVmY2ZiYmM4MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9X
b3JrUXVldWVDb2NvYS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29j
b2EuY3BwCkBAIC00OSwxNSArNDksMTUgQEAgc3RhdGljIGRpc3BhdGNoX3Fvc19jbGFzc190IGRp
c3BhdGNoUU9TQ2xhc3MoV29ya1F1ZXVlOjpRT1MgcW9zKQogewogICAgIHN3aXRjaCAocW9zKSB7
CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlOgotICAgICAgICByZXR1
cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CisgICAgICAg
IHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJ
VkUpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQ6Ci0gICAgICAgIHJl
dHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CisgICAgICAg
IHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVE
KTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpEZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRq
dXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfREVGQVVMVCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOwogICAgIGNhc2UgV29ya1F1ZXVl
OjpRT1M6OlV0aWxpdHk6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFT
U19VVElMSVRZKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1Nf
Q0xBU1NfVVRJTElUWSk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3VuZDoKLSAg
ICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOworICAg
ICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5E
KTsKICAgICB9CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2VuZXJpYy9X
b3JrUXVldWVHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2Vu
ZXJpYy5jcHAKaW5kZXggOTM0YTM4Y2JiZTY0YmJmZmFlYjRkMzdkZjFiOGQ5OTUyYjg4NTM0NC4u
ZGE4NzVkMWZhMDRjZWY1MjRiMGRjMTg2YjM5YTQ2MmQ2ODA0NDYzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCkBAIC0zNSw3ICszNSw3IEBACiB2b2lk
IFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUsIFFP
UykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXgpOwotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKG5hbWUsIFt0aGlz
XSB7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShuYW1lLCBbdGhpc10g
ewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVS
dW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6
OmN1cnJlbnQoKTsKQEAgLTUxLDggKzUxLDggQEAgdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCiAgICAgaWYgKG1fcnVuTG9vcCkKICAgICAgICAgbV9ydW5Mb29wLT5zdG9wKCk7
CiAgICAgaWYgKG1fd29ya1F1ZXVlVGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3dv
cmtRdWV1ZVRocmVhZCk7Ci0gICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICAgICAg
bV93b3JrUXVldWVUaHJlYWQtPmRldGFjaCgpOworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9
IG51bGxwdHI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9N
ZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1v
cnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKaW5kZXggYjI5NDE5NDQ0ZTc0MjczNmE2N2RjMGMx
YWE4NTFkZWMzYWU1ODdlNC4uZmZkNDAwODU1YjgyOTNhOGI1YTNjM2FlYjIzYWI3N2FhZjVhN2Vl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
TGludXguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxl
ckxpbnV4LmNwcApAQCAtMTE5LDcgKzExOSwxMCBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2
ZW50RkRQb2xsZXI6OkV2ZW50RkRQb2xsZXIoaW50IGZkLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKAog
ICAgIH0sIHRoaXMsIG51bGxwdHIpOwogICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQo
KSwgbnVsbHB0cik7CiAjZWxzZQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIldURjog
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwgW3RoaXNdIHsgcmVhZEFuZE5vdGlmeSgpOyB9CisgICAg
bV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLAor
ICAgICAgICBbdGhpc10geworICAgICAgICAgICAgcmVhZEFuZE5vdGlmeSgpOworICAgICAgICB9
KTsKICNlbmRpZgogfQogCkBAIC0xMjksNyArMTMyLDcgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVy
OjpFdmVudEZEUG9sbGVyOjp+RXZlbnRGRFBvbGxlcigpCiAjaWYgVVNFKEdMSUIpCiAgICAgZ19z
b3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7CiAjZWxzZQotICAgIGRldGFjaFRocmVhZCht
X3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwIGIvU291cmNlL1dURi93
dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCmluZGV4IGYzMjRlOGI2MWRkNDFmYTA1NjA4NjNiNmM1
ODE5MTBmODY3ZDM2ZWIuLmE2NDczZDA3YjY3ZWFjYzg2YmU3YTRlYjY5NzQ5ODkzZWM2MTQ5N2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgdm9p
ZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkKICAgICAgICAgQ1dfVVNFREVGQVVMVCwg
MCwgQ1dfVVNFREVGQVVMVCwgMCwgSFdORF9NRVNTQUdFLCAwLCAwLCAwKTsKICAgICB0aHJlYWRp
bmdGaXJlZE1lc3NhZ2UgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2VXKEwiY29tLmFwcGxlLldlYktp
dC5NYWluVGhyZWFkRmlyZWQiKTsKIAotICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoIk1haW4gVGhyZWFkIik7CisgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZElu
dGVybmFsKCJNYWluIFRocmVhZCIpOwogfQogCiB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlv
bnNPbk1haW5UaHJlYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA4NzQ3NjQzOGNhZTY1YTYzODdkOTAxYTc1
Mjg4MTVlYzk1NDdmMjMyLi45Y2QzZGI0ZDFiYzE0YTM2MTczMjFhYjAwNWEwMTk2MjA1Mjc4Mjc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihJREJC
YWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2Jh
Y2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyKGZpbGVIYW5kbGVyKQogewogICAgIExvY2tl
cjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jayk7Ci0gICAgbV90aHJl
YWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMs
ICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0
ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2Ug
U2VydmVyIik7CiB9CiAKIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmls
ZUhhbmRsZXIpCkBAIC02Niw3ICs2Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhCiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFzZURp
cmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7CiAKICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1f
ZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJl
YWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNl
IFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2VydmVyOjpkYXRh
YmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQogCiB2
b2lkIElEQlNlcnZlcjo6cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYg
Y29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuaAppbmRleCAyNTZjZDUwN2U2ZTZkN2Y2NTZlZWNlMGMxMTk4OTQ4ZmQ5
MjNkYTFkLi45MzRhMWQxNzQ1MjkwODQyOGEzYWU2ZTBlZDdlNTEwYTlhOWNhNmU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CkBAIC0xMjUsNyArMTI1LDcgQEAgY2xhc3MgSURCU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8
SURCU2VydmVyPiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPElEQkNvbm5lY3Rpb25U
b0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRlbnRp
ZmllciwgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsK
IAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQdHI8VGhy
ZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2NrIG1fZGF0YWJhc2VUaHJlYWRDcmVh
dGlvbkxvY2s7CiAgICAgTG9jayBtX21haW5UaHJlYWRSZXBseUxvY2s7CiAgICAgYm9vbCBtX21h
aW5UaHJlYWRSZXBseVNjaGVkdWxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCmluZGV4IDI5MmYwNWI4
Y2Q1MDZlMjI5YWU2YjhiZDg2MjljMDk1NGQxODQ1OWIuLjdjZjdhZjhmZWEyZTFlNjdkNTIzN2M4
NzFhMDE1YjNjNDkwMGEyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIEFzeW5jQXVk
aW9EZWNvZGVyOjpBc3luY0F1ZGlvRGVjb2RlcigpCiB7CiAgICAgLy8gU3RhcnQgd29ya2VyIHRo
cmVhZC4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBt
X3RocmVhZElEID0gY3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwg
dGhpcywgIkF1ZGlvIERlY29kZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKEFz
eW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKIH0K
IAogQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCkBAIC00Nyw4ICs0Nyw4
IEBAIEFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQogICAgIG1fcXVldWUu
a2lsbCgpOwogICAgIAogICAgIC8vIFN0b3AgdGhyZWFkLgotICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKG1fdGhyZWFkSUQpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFkLT53
YWl0Rm9yQ29tcGxldGlvbigpOworICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBB
c3luY0F1ZGlvRGVjb2Rlcjo6ZGVjb2RlQXN5bmMoUmVmPEFycmF5QnVmZmVyPiYmIGF1ZGlvRGF0
YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vz
c0NhbGxiYWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQpA
QCAtNzIsNyArNzIsNyBAQCB2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdW50
aWwgd2UgaGF2ZSBtX3RocmVhZElEIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgcnVu
IGxvb3AuCisgICAgICAgIC8vIFdhaXQgZm9yIHVudGlsIHdlIGhhdmUgbV90aHJlYWQgZXN0YWJs
aXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4gbG9vcC4KICAgICAgICAgTG9ja0hvbGRlciBs
b2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKaW5kZXggYmI1YzVlMzM3
YjVlY2YxZjhlNjE3NTNhMjlmOGQwZjk3MTQxNTUzZC4uZjEyNTEwZDE5N2MzZGY5NmNjMDU2ODU0
NmNiYzNmYjQ2ZWFhYThhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBBc3luY0F1
ZGlvRGVjb2RlciB7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnkodm9pZCogdGhyZWFkRGF0
YSk7CiAgICAgdm9pZCBydW5Mb29wKCk7CiAKLSAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBMb2NrIG1fdGhyZWFk
Q3JlYXRpb25NdXRleDsKICAgICBNZXNzYWdlUXVldWU8RGVjb2RpbmdUYXNrPiBtX3F1ZXVlOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA1MDUyMzA0MTk3Y2RlZGRlNDdm
ZGNiYjkxMmVjNDc0MDU1Nzk3NDI4Li5lN2Q1NjdkZmVhZDQ0MmMzOTZhZjBmNzA1MTA5NzNmZmUx
NDhhYjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC00MSw3ICs0MSw3IEBA
IGNvbnN0IHNpemVfdCByZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsKIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCYgY29u
dGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKICAgICA6IEF1ZGlvRGVzdGluYXRpb25O
b2RlKGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQogICAgICwgbV9yZW5kZXJU
YXJnZXQocmVuZGVyVGFyZ2V0KQotICAgICwgbV9yZW5kZXJUaHJlYWQoMCkKKyAgICAsIG1fcmVu
ZGVyVGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX3N0YXJ0ZWRSZW5kZXJpbmcoZmFsc2UpCiB7CiAg
ICAgbV9yZW5kZXJCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKHJlbmRlclRhcmdldC0+bnVtYmVyT2ZD
aGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSk7CkBAIC02Niw4ICs2Niw4IEBAIHZvaWQgT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAgICBtX3JlbmRlclRocmVhZCA9IDA7CisgICAg
ICAgIG1fcmVuZGVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3JlbmRl
clRocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUo
KTsKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0
YXJ0UmVuZGVyaW5nKCkKICAgICBpZiAoIW1fc3RhcnRlZFJlbmRlcmluZykgewogICAgICAgICBt
X3N0YXJ0ZWRSZW5kZXJpbmcgPSB0cnVlOwogICAgICAgICByZWYoKTsgLy8gU2VlIGNvcnJlc3Bv
bmRpbmcgZGVyZWYoKSBjYWxsIGluIG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2goKS4KLSAgICAgICAg
bV9yZW5kZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
OjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgICAg
IG1fcmVuZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRleCA3NTU2MDQ2NDcyMzJjNGJjNTEz
Y2M5ZTM5ZGQ0NDVmMzhiNjJjZWY0Li41NjkwMTM4YjE2NTcwYjNmOWQyMzdmOWRkNGE4ZWEyM2Q3
M2ZmYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTYzLDcgKzYzLDcgQEAgY2xh
c3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25O
b2RlIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwogICAgIAogICAgIC8vIFJl
bmRlcmluZyB0aHJlYWQuCi0gICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX3JlbmRlclRo
cmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3JlbmRlclRocmVhZDsKICAgICBib29sIG1fc3Rh
cnRlZFJlbmRlcmluZzsKICAgICBzdGF0aWMgdm9pZCBvZmZsaW5lUmVuZGVyRW50cnkodm9pZCog
dGhyZWFkRGF0YSk7CiAgICAgdm9pZCBvZmZsaW5lUmVuZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IDg4NjlmNmJmMjIzMjMy
ZTYzY2MzZmI1MmUxNmFlMWRiM2ViNDFiZTYuLjhjOTJkNmU1Mzk2YWRmMTJmYmRkNjhkN2FjOTdm
OWVkMTlhZGMwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCkBAIC03NzAsOCArNzcwLDcgQEAgU2VjdXJpdHlPcmlnaW5EYXRhIERhdGFi
YXNlOjpzZWN1cml0eU9yaWdpbigpCiB7CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6
OmZyb21TZWN1cml0eU9yaWdpbihtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7
Ci0gICAgYXV0byYgdGhyZWFkID0gZGF0YWJhc2VUaHJlYWQoKTsKLSAgICBpZiAoY3VycmVudFRo
cmVhZCgpID09IHRocmVhZC5nZXRUaHJlYWRJRCgpKQorICAgIGlmIChjdXJyZW50VGhyZWFkKCkg
PT0gZGF0YWJhc2VUaHJlYWQoKS5nZXRUaHJlYWRJRCgpKQogICAgICAgICByZXR1cm4gU2VjdXJp
dHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5
T3JpZ2luLmdldCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFk
LmNwcAppbmRleCAwZGRlNWY3MjY4ZWU2NDJjMDA0MzA1Y2VmZTM2YjFjOWU0NGI4N2QzLi5kNzA4
MTRmOWI1NWIyNDhmZDY0ZTFhZmY0M2UzNzY3NGYxNjkyZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtNjAs
MTIgKzYwLDEyIEBAIGJvb2wgRGF0YWJhc2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBMb2NrSG9s
ZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQor
ICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElE
ID0gY3JlYXRlVGhyZWFkKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlz
LCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKERh
dGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJh
c2UiKTsKIAotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0K
IAogdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1pbmF0aW9uKERhdGFiYXNlVGFza1N5
bmNocm9uaXplciogY2xlYW51cFN5bmMpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBEYXRhYmFz
ZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9mIGFs
bCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGRhdGFiYXNlIHRocmVhZAogICAgIG1fdHJh
bnNhY3Rpb25Db29yZGluYXRvci0+c2h1dGRvd24oKTsKIAotICAgIExPRyhTdG9yYWdlQVBJLCAi
QWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRo
cmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlz
LCByZWZDb3VudCgpKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJl
YWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJl
bnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWQtPmlkKCksIHRoaXMsIHJlZkNvdW50KCkpOwog
CiAgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlcyB0aGF0IHdlIHJhbiB0cmFuc2FjdGlvbnMgb24u
IFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFueSB0cmFuc2FjdGlvbnMgYXJlIHN0aWxsIG9wZW4sIHRo
ZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3ZSBkb24ndCBsZWF2ZSB0aGUgZGF0YWJhc2UgaW4gYW4K
ICAgICAvLyBpbmNvbnNpc3RlbnQgb3IgbG9ja2VkIHN0YXRlLgpAQCAtMTI3LDcgKzEyNyw3IEBA
IHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgb3BlbkRhdGFi
YXNlLT5wZXJmb3JtQ2xvc2UoKTsKIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyBy
ZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQotICAg
IGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CiAKICAg
ICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBTeW5jID0gbV9jbGVhbnVwU3luYzsK
IApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNl
T3BlbihEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fb3BlbkRh
dGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVh
ZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkLT5pZCgpKTsKICAg
ICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1f
b3BlbkRhdGFiYXNlU2V0LmFkZCgmZGF0YWJhc2UpOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZv
aWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlJiBkYXRhYmFz
ZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0YWJhc2VTZXRNdXRleCk7CiAKLSAg
ICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPmlkKCkpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxl
ZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZkYXRhYmFzZSkpOwogICAgIG1fb3Bl
bkRhdGFiYXNlU2V0LnJlbW92ZSgmZGF0YWJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5oCmluZGV4IGVjMDQxZTMxODE3
MjQ5MmVjYTZiY2VmZThmMWRhMjVlYzkyZWQyNmMuLmE1MjEyZGZiOGIxNzJjZTJmZjZhOTg4OGRl
MGE5ZGI5NzdhZTJkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgRGF0YWJhc2VU
aHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIAog
ICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlJik7CiAgICAgdm9pZCByZWNvcmRE
YXRhYmFzZUNsb3NlZChEYXRhYmFzZSYpOwotICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFk
SUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJl
YWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAKICAgICBT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgeyByZXR1
cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CiAKQEAgLTY5LDcgKzY5LDcgQEAg
Y2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJh
c2VUaHJlYWQ+IHsKICAgICB2b2lkIGRhdGFiYXNlVGhyZWFkKCk7CiAKICAgICBMb2NrIG1fdGhy
ZWFkQ3JlYXRpb25NdXRleDsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07
CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPERh
dGFiYXNlVGhyZWFkPiBtX3NlbGZSZWY7CiAKICAgICBNZXNzYWdlUXVldWU8RGF0YWJhc2VUYXNr
PiBtX3F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAK
aW5kZXggNmY5ZmNhNjdmM2M0N2FkZGM4M2RlYzhjYjBkNWViOGNjYjQwZDc0My4uMTM5YWE5OTFh
MTZlYWQyMmY2OGY1MDFiZTdiOTQ1OTYzMjIxMzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCB2b2lkIEdDQ29u
dHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiAKIHZvaWQgR0ND
b250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJv
b2wgd2FpdFVudGlsRG9uZSkKIHsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3Jl
YXRlVGhyZWFkKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xsZXIiKTsKKyAgICBSZWZQ
dHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShjb2xsZWN0LCAwLCAiV2ViQ29yZTog
R0NDb250cm9sbGVyIik7CiAKICAgICBpZiAod2FpdFVudGlsRG9uZSkgewotICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgICAgIHRocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRldGFjaFRocmVhZCh0
aHJlYWRJRCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6
OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCmluZGV4IDE2OGU0ZTI3
Nzk1ZDQyNWY0MDRmMTc1YzliY2JhOTNmNzM2ODA3NGMuLjU1YzdjYjAyMzk4NTk5Yzk3MWU2YTM3
YTBmOWE3MjQ4NDg0MmU2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0
cmVhbS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChG
dW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0ZUZpbGVUaHJl
YWRPbmNlLCBbXSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5bmNGaWxlU3Ry
ZWFtIiwgW10geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiV2ViQ29yZTogQXN5bmNGaWxlU3Ry
ZWFtIiwgW10gewogICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICAgIEF1dG9k
cmFpbmVkUG9vbCBwb29sOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmNwcAppbmRleCA0Y2RjZmFhZDZlODMyYTM5YTVjMzUyNjU4MDU4NTA4NmIzZDlmNzJmLi5h
NDhiZmY2MDUxZjBmMTc0ZGExOGQyZmY5ZDM3YWIzYmM2Njg0ZmExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNkZWZp
bmUgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpIEFTU0VSVCghbV9zeW5jVGhyZWFkUnVubmluZyB8
fCAhSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAvLyBGb3IgbWV0aG9kcyB0aGF0IGFyZSBtZWFu
dCB0byBzdXBwb3J0IHRoZSBzeW5jIHRocmVhZCBPTkxZCi0jZGVmaW5lIElTX0lDT05fU1lOQ19U
SFJFQUQoKSAobV9zeW5jVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSkKKyNkZWZpbmUgSVNfSUNP
Tl9TWU5DX1RIUkVBRCgpIChtX3N5bmNUaHJlYWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgpKQog
I2RlZmluZSBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpIEFTU0VSVChJU19JQ09OX1NZTkNfVEhS
RUFEKCkpCiAKICNpZiBQTEFURk9STShHVEspCkBAIC0xNDEsNyArMTQxLDcgQEAgYm9vbCBJY29u
RGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUpCiAgICAgLy8gTG9jayBoZXJlIGFzIHdlbGwgYXMgZmlyc3QgdGhpbmcgaW4gdGhlIHRo
cmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNuJ3QgYWN0dWFsbHkgY29tbWVuY2UgdW50aWwgdGhlIGNy
ZWF0ZVRocmVhZCgpIGNhbGwgCiAgICAgLy8gY29tcGxldGVzIGFuZCBtX3N5bmNUaHJlYWRSdW5u
aW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3luY0xvY2subG9jaygpOwotICAgIG1fc3luY1Ro
cmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRT
dGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIpOworICAgIG1fc3luY1RocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0
LCB0aGlzLCAiV2ViQ29yZTogSWNvbkRhdGFiYXNlIik7CiAgICAgbV9zeW5jVGhyZWFkUnVubmlu
ZyA9IG1fc3luY1RocmVhZDsKICAgICBtX3N5bmNMb2NrLnVubG9jaygpOwogICAgIGlmICghbV9z
eW5jVGhyZWFkKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpjbG9zZSgp
CiAgICAgICAgIHdha2VTeW5jVGhyZWFkKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXYWl0IGZv
ciB0aGUgc3luYyB0aHJlYWQgdG8gdGVybWluYXRlCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKG1fc3luY1RocmVhZCk7CisgICAgICAgIG1fc3luY1RocmVhZC0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKICAgICB9CiAKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gZmFsc2U7ICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAppbmRleCAwNjFhZjRhMTI1
NTc3MWRlMTFhMzJmNTY4M2MwZWZkYTU5MjkzYjlkLi44NjQwOTU1NDc1MzNmZDg5MGYwM2FmZTky
YmIwNmY2MDg3ZWU3MzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2UuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIEljb25EYXRhYmFzZSBmaW5hbCA6IHB1Ymxp
YyBJY29uRGF0YWJhc2VCYXNlIHsKICAgICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7CiAgICAgCiAg
ICAgVGltZXIgbV9zeW5jVGltZXI7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3N5bmNUaHJlYWQ7
CisgICAgUmVmUHRyPFRocmVhZD4gbV9zeW5jVGhyZWFkOwogICAgIGJvb2wgbV9zeW5jVGhyZWFk
UnVubmluZzsKICAgICAKICAgICBIYXNoU2V0PFJlZlB0cjxEb2N1bWVudExvYWRlcj4+IG1fbG9h
ZGVyc1BlbmRpbmdEZWNpc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVz
b3VyY2VVc2FnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VU
aHJlYWQuY3BwCmluZGV4IDkxMjAwYzM0NWY0NTVmOTZkNDk0YmZkMmFkNzAzZjI4YzVjNjI5ZDEu
LmQ5YjZmNzJmYTM2ZmE3MDBjODI2ZjNjOTdkNmJhYTAyZDQyZThiNWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcApAQCAtOTYsMTEgKzk2LDExIEBAIHZv
aWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6bm90aWZ5T2JzZXJ2ZXJzKFJlc291cmNlVXNhZ2VEYXRh
JiYgZGF0YSkKIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRl
ZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fdm0gPSAmY29tbW9uVk0oKTsKLSAgICBtX3RocmVhZElk
ZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBS
ZXNvdXJjZVVzYWdlIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRDYWxs
YmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0KIAogdm9pZCBSZXNvdXJj
ZVVzYWdlVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiByZXNvdXJjZVVzYWdlVGhyZWFkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAppbmRleCAxOGExZTY3NTQz
ZDIyMDljMTc5NTc0NzM2NjIyYTc4YjM4NGJiOGZjLi5lZmRlMjdlZmU2YjBhYzQ1NDY0ZGU4OTFj
NjdjZTc5ZjljZjJlMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJl
YWQuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBSZXNvdXJjZVVzYWdlVGhyZWFkIHsKICAgICB2
b2lkIHRocmVhZEJvZHkoKTsKICAgICB2b2lkIHBsYXRmb3JtVGhyZWFkQm9keShKU0M6OlZNKiwg
UmVzb3VyY2VVc2FnZURhdGEmKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZGVu
dGlmaWVyIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9Owog
ICAgIExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBIYXNoTWFw
PHZvaWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJik+PiBt
X29ic2VydmVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUaHJlYWQuY3BwCmluZGV4IDczMGMwYTZiZDkzZjQ1NzhkMWVkYmY5YWNlMWNkODY1NjZlNmM5
ODguLmQyMDc4NDA1NjBkZGY5MDU5MGEwZGFkZDI3MzA4NGM5MWM5ZmIxMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtMzUs
MTQgKzM1LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcm9sbGluZ1RocmVhZDo6U2Ny
b2xsaW5nVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgIDogbV90aHJl
YWQobnVsbHB0cikKIHsKIH0KIAogYm9vbCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVh
ZCgpCiB7Ci0gICAgYXV0byB0aHJlYWRJZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5n
bGV0b24oKS5tX3RocmVhZElkZW50aWZpZXI7Ci0gICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIg
JiYgY3VycmVudFRocmVhZCgpID09IHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVh
ZD4gdGhyZWFkID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZDsKKyAgICBy
ZXR1cm4gdGhyZWFkICYmIHRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7CiB9CiAKIHZv
aWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9u
KQpAQCAtNzQsMTQgKzc0LDE0IEBAIFNjcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpz
aW5nbGV0b24oKQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQo
KQogewotICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGluaXRpYWxpemUg
dGhlIHJ1biBsb29wLgogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2Nr
KG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKLSAgICAgICAgbV90aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5n
Iik7CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRo
aXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFkUnVuTG9vcDsgfSk7CkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiAKIHZvaWQgU2Nyb2xs
aW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpCiB7Ci0gICAg
V1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKKyAgICBXVEY6OlRocmVh
ZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCk7CiAgICAgc3RhdGljX2Nhc3Q8
U2Nyb2xsaW5nVGhyZWFkKj4oc2Nyb2xsaW5nVGhyZWFkKS0+dGhyZWFkQm9keSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmluZGV4
IGRlMDYyZDc3YWMwMWRmOWQyYTA5ODYwZWJlNmI4ZTlmZDNjZmY1YzAuLmQ4ODkyZjA1YmU2NDM3
ZDRhYWNjMGE3NTFhN2NhN2U5M2JlZTBkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIFNjcm9s
bGluZ1RocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2soKTsKICNl
bmRpZgogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7CisgICAgUmVm
UHRyPFRocmVhZD4gbV90aHJlYWQ7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9v
cENvbmRpdGlvblZhcmlhYmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11dGV4Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9h
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRl
ci5jcHAKaW5kZXggZjcxMzMzYzVhMzdhOTk4OTY0ZjNhNzQxYzczMTUyZTk1MTQ2NmNmNi4uZGRi
ZTNiYTk4MGU0NTBhNDk0Y2QwNjQ4ZjQxYjVlMzZhZmVlYjVmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCkBAIC02NCw3
ICs2NCw3IEBAIFBhc3NSZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVyPiBIUlRGRGF0YWJhc2VMb2Fk
ZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hyb25vdXNseUlmCiB9CiAKIEhSVEZEYXRhYmFzZUxvYWRl
cjo6SFJURkRhdGFiYXNlTG9hZGVyKGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2RhdGFiYXNl
TG9hZGVyVGhyZWFkKDApCisgICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKG51bGxwdHIpCiAg
ICAgLCBtX2RhdGFiYXNlU2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6
OmxvYWRBc3luY2hyb25vdXNseSgpCiAgICAgCiAgICAgaWYgKCFtX2hydGZEYXRhYmFzZS5nZXQo
KSAmJiAhbV9kYXRhYmFzZUxvYWRlclRocmVhZCkgewogICAgICAgICAvLyBTdGFydCB0aGUgYXN5
bmNocm9ub3VzIGRhdGFiYXNlIGxvYWRpbmcgcHJvY2Vzcy4KLSAgICAgICAgbV9kYXRhYmFzZUxv
YWRlclRocmVhZCA9IGNyZWF0ZVRocmVhZChkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlzLCAiSFJU
RiBkYXRhYmFzZSBsb2FkZXIiKTsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNlIGxv
YWRlciIpOwogICAgIH0KIH0KIApAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgSFJURkRhdGFiYXNl
TG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhyZWFkQ29tcGxldGlvbigpCiAgICAgCiAgICAgLy8gd2Fp
dEZvclRocmVhZENvbXBsZXRpb24oKSBzaG91bGQgbm90IGJlIGNhbGxlZCB0d2ljZSBmb3IgdGhl
IHNhbWUgdGhyZWFkLgogICAgIGlmIChtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKQotICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKLSAgICBtX2Rh
dGFiYXNlTG9hZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gbnVsbHB0
cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAppbmRleCBjODY5ZDEzN2ExZGIyZjUy
NDk4ZDBlMWI2NWQ1ODdlNmM4MTliMzgxLi4zYWQyNTFmMjE5OTA5ZjRiYzY0NTRkMDEzMjAxYjZh
N2NhNzAyNjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRG
RGF0YWJhc2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRG
RGF0YWJhc2VMb2FkZXIuaApAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBIUlRGRGF0YWJhc2VMb2Fk
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxIUlRGRGF0YWJhc2VMb2FkZXI+IHsKIAogICAgIC8vIEhv
bGRpbmcgYSBtX3RocmVhZExvY2sgaXMgcmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgbV9kYXRhYmFz
ZUxvYWRlclRocmVhZC4KICAgICBMb2NrIG1fdGhyZWFkTG9jazsKLSAgICBUaHJlYWRJZGVudGlm
aWVyIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9kYXRhYmFz
ZUxvYWRlclRocmVhZDsKIAogICAgIGZsb2F0IG1fZGF0YWJhc2VTYW1wbGVSYXRlOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCmlu
ZGV4IDk2ZjMzMDgyODA3OWE3OWFkNjQ4MjBkMDcyMWM1OWM1ZWExNmZkYjEuLjIxYmU5OTZlZjM3
ZTUzZGI3MDMxMDAxOTYyN2MwYzQwZDJiMjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIFJl
dmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29udm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3Bv
bnNlLCBzaXplX3QgcmVuZGVyU2xpCiAgICAgLy8gU3RhcnQgdXAgYmFja2dyb3VuZCB0aHJlYWQK
ICAgICAvLyBGSVhNRTogd291bGQgYmUgYmV0dGVyIHRvIHVwIHRoZSB0aHJlYWQgcHJpb3JpdHkg
aGVyZS4gIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSByZWFsLXRpbWUsIGJ1dCBoaWdoZXIgdGhhbiB0
aGUgZGVmYXVsdC4uLgogICAgIGlmICh0aGlzLT51c2VCYWNrZ3JvdW5kVGhyZWFkcygpICYmIG1f
YmFja2dyb3VuZFN0YWdlcy5zaXplKCkgPiAwKQotICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQg
PSBjcmVhdGVUaHJlYWQoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAiY29u
dm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoV2ViQ29yZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAi
Y29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJlYWQiKTsKIH0KIAogUmV2ZXJiQ29udm9sdmVyOjp+
UmV2ZXJiQ29udm9sdmVyKCkKQEAgLTE0Niw3ICsxNDYsNyBAQCBSZXZlcmJDb252b2x2ZXI6On5S
ZXZlcmJDb252b2x2ZXIoKQogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0aW9u
VmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgICAgIH0KIAotICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX2JhY2tncm91bmRUaHJlYWQpOworICAgICAgICBtX2JhY2tncm91bmRUaHJl
YWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCmluZGV4IDZiYWViN2NjZTI5ODk2Yzk4
OTYzNTEyZjQxYjQzYTJmMTI4ODU0MWMuLjA1OTYzMzY3YWUyODM0OTQ4NzkwYmE3Y2NiNzIwNjBl
YzU5ODEwNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlci5oCkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlciB7CiAKICAg
ICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBhbmQgc3luY2hyb25pemF0aW9uCiAgICAgYm9vbCBtX3Vz
ZUJhY2tncm91bmRUaHJlYWRzOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9iYWNrZ3JvdW5kVGhy
ZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29sIG1f
d2FudHNUb0V4aXQ7CiAgICAgYm9vbCBtX21vcmVJbnB1dEJ1ZmZlcmVkOwogICAgIG11dGFibGUg
TG9jayBtX2JhY2tncm91bmRUaHJlYWRNdXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdT
dHJlYW1lci5jcHAKaW5kZXggNmNkOGJkN2Y4MWJmZjIyMjdmZTE0ZmJjYTBmYmZkMDU1ZDA5YzU3
MS4uMWYyNWU4ZTU0ZTllZTg1ZmEwY2NhNmEzMWI5MmUxMTFlNmRmMGNhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKQEAgLTM3MCwyMCArMzcwLDIwIEBAIFBhc3NS
ZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJh
dGUsIGJvb2wgbWl4VG9Nb25vCiBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVk
aW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxl
UmF0ZSkKIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8gdGhy
ZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGZp
bGVQYXRoLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4
VG9Nb25vLCBzYW1wbGVSYXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVh
ZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9KTsK
LSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53YWl0
Rm9yQ29tcGxldGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGFzc1JlZlB0
cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRh
dGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7
CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0g
Y3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRh
U2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUs
IG1peFRvTW9ubywgc2FtcGxlUmF0ZV0gewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmls
ZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7
CiAgICAgfSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgIHRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMWM1YzMw
ZjM3N2E0MmJlMDAxNzcxNjUxZTg3ZjcwNDNhNWQ2NWM5MC4uMjY0NjZmNTNiNDgyMThkMzM3YTVh
ODk0ZjFkYjcyOGRmNGM0N2M4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIFN0cmVhbQog
ICAgICAgICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKICAgICAg
ICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAKLSAgICAg
ICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZCB7IDAgfTsKKyAgICAgICAgUmVmUHRyPFRocmVh
ZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9v
cENvbmRpdGlvbk11dGV4OwogICAgICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENv
bmRpdGlvbjsKICAgICAgICAgUnVuTG9vcCogbV9ydW5Mb29wIHsgbnVsbHB0ciB9OwpAQCAtMTA3
Nyw3ICsxMDc3LDcgQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogICAgIDogU3RyZWFtaW5nQ2xp
ZW50KHNyYykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29u
ZGl0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkID0gY3JlYXRlVGhyZWFkKCJSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KV0gewor
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25N
dXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwpAQCAt
MTExMyw4ICsxMTEzLDggQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLAogUmVzb3VyY2VIYW5kbGVT
dHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCgpCiB7CiAgICAg
aWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVhZChtX3RocmVhZCk7Ci0gICAgICAg
IG1fdGhyZWFkID0gMDsKKyAgICAgICAgbV90aHJlYWQtPmRldGFjaCgpOworICAgICAgICBtX3Ro
cmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKG1fcnVuTG9vcCA9PSAmUnVuTG9vcDo6
Y3VycmVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9Mb2FkZXJSdW5Mb29wQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCmluZGV4IDQ2Yjg5OTRhODQxZWY3MWVhMjc5Y2U3N2NiYzhm
YjQzYzI5ZjBhNjIuLmZmYmZkYTliODkzNDgzNTQ5MGM5YTQwYmExZjQ4MzM2ZTQ3NjBjOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9v
cENGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1
bkxvb3BDRi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxvb3Ao
KQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5Mb29wTXV0
ZXgpOwogCiAgICAgaWYgKCFsb2FkZXJSdW5Mb29wT2JqZWN0KSB7Ci0gICAgICAgIGNyZWF0ZVRo
cmVhZChydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7Cisg
ICAgICAgIFRocmVhZDo6Y3JlYXRlKHJ1bkxvYWRlclRocmVhZCwgMCwgIldlYkNvcmU6IENGTmV0
d29yayBMb2FkZXIiKTsKIAogICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUu
d2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuY3BwCmluZGV4IDQ0MDhjZDE5ODcwNWJhODZjYzhjMTk4NmZiM2UyY2FkZTc5NmRjYzYuLmYx
MDU3MTVlZDhkODc5MzczYjYzMzFjYjI2ZTA4MmMzZTFhYjhiMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBAIC05
NCwxMCArOTQsMTAgQEAgaW50IEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdEb3dubG9h
ZENvdW50KCkgY29uc3QKIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5l
ZWRlZCgpCiB7CiAgICAgaWYgKCFydW5UaHJlYWQoKSkgewotICAgICAgICBpZiAobV90aHJlYWRJ
ZCkKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOworICAg
ICAgICBpZiAobV90aHJlYWQpCisgICAgICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRp
b24oKTsKICAgICAgICAgc2V0UnVuVGhyZWFkKHRydWUpOwotICAgICAgICBtX3RocmVhZElkID0g
Y3JlYXRlVGhyZWFkKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQiKTsKKyAg
ICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3dubG9hZFRocmVhZCwgdGhpcywgImRv
d25sb2FkVGhyZWFkIik7CiAgICAgfQogfQogCkBAIC0xMDUsOSArMTA1LDkgQEAgdm9pZCBDdXJs
RG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKIHsKICAgICBzZXRSdW5UaHJlYWQoZmFsc2Up
OwogCi0gICAgaWYgKG1fdGhyZWFkSWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24obV90aHJlYWRJZCk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSAwOworICAgIGlmIChtX3RocmVh
ZCkgeworICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV90
aHJlYWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCmluZGV4IDAyY2U3MzFiZDEwYTgwMTli
N2ViZTFmYWM1MmI0NWU0MDkyNTYyMzEuLmY2YmJjNzdmNGQzY2UwYjk2ODdkMWQ4ZmNhNjA5MTU4
N2M5YWU0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybERvd25sb2FkLmgKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgQ3VybERvd25sb2FkTWFu
YWdlciB7CiAKICAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRocmVhZCh2b2lkKiBkYXRhKTsKIAot
ICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3Ro
cmVhZDsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7CiAgICAgVmVjdG9yPENVUkwqPiBt
X3BlbmRpbmdIYW5kbGVMaXN0OwogICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5kbGVMaXN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKaW5kZXggNWY5ZTA5NTQwNDcxN2QzMGJkODk5NDFl
NWYyNTJmMTdiMGE4NjdiOS4uNjhlMjFmNDc0NDUxYWMzODc1MmI5YmM4OTQzYzM1ZDIzYjY5Njli
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsKICAgICAg
ICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgfTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV93
b3JrZXJUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrZXJUaHJlYWQgeyBu
dWxscHRyIH07CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFsc2UgfTsK
ICAgICBMb2NrIG1fbXV0ZXhTZW5kOwogICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAppbmRleCAxZTM3OWQxYjAwZDA5NTVmYzJkYTAw
YmUzZjk2Zjk5MmE5MWI5NDNmLi5lY2I5ZjU0YjY1YTMzNTI0ZTNhMzU2YTNiYzEzZDBlMmY2ZjZh
Y2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29j
a2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKQEAgLTE5OSw3ICsx
OTksNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIAogICAg
IHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVmKCkuCiAKLSAgICBtX3dvcmtl
clRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlzXSB7CisgICAg
bV93b3JrZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlz
XSB7CiAKICAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTI0OSw4ICsyNDks
OCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQoKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOwotICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKLSAgICBtX3dvcmtlclRocmVhZCA9IDA7CisgICAgbV93
b3JrZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV93b3JrZXJUaHJlYWQgPSBu
dWxscHRyOwogICAgIGRlcmVmKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmNwcAppbmRleCA3YWQ1YjU3OTEzYTE2NzJkZjkxOTZlOWViMDEzM2UyM2UyMzI5ODVkLi5k
ZWU2Y2U2ZDY3M2Q3NmI0MWYyNzQ1NDA0ZmIwNzlmMjE5NjUzYjYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFdvcmtlclRocmVhZFN0
YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBVUkwmIHNjcmlwdFVSTCwg
Y29uc3QgU3RyCiB9CiAKIFdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVSTCYgc2Ny
aXB0VVJMLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2Fk
ZXJQcm94eSwgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5LCBXb3Jr
ZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lS
ZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycywgYm9v
bCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0IFNlY3Vy
aXR5T3JpZ2luJiB0b3BPcmlnaW4sIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwgSURCQ2xpZW50
OjpJREJDb25uZWN0aW9uUHJveHkqIGNvbm5lY3Rpb25Qcm94eSwgU29ja2V0UHJvdmlkZXIqIHNv
Y2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRpbWVGbGFncyBydW50aW1lRmxhZ3MpCi0gICAgOiBtX3Ro
cmVhZElEKDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICwgbV93b3JrZXJMb2FkZXJQ
cm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAsIG1fd29ya2VyUmVwb3J0aW5nUHJveHkod29y
a2VyUmVwb3J0aW5nUHJveHkpCiAgICAgLCBtX3J1bnRpbWVGbGFncyhydW50aW1lRmxhZ3MpCkBA
IC0xMzMsMTUgKzEzMywxNSBAQCBXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQogCiBib29s
IFdvcmtlclRocmVhZDo6c3RhcnQoKQogewotICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVj
ZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFkSUQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUg
dGhyZWFkIHN0YXJ0cy4KKyAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBl
bnN1cmUgdGhhdCBtX3RocmVhZCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRz
LgogICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYg
KG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRT
dGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdv
cmtlciIpOwogCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwog
fQogCiB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQodm9pZCogdGhyZWFkKQpA
QCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAg
IGdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQoKSk7CiAj
ZW5kaWYKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBtX3RocmVhZElEOworICAg
IFJlZlB0cjxUaHJlYWQ+IHByb3RlY3RvciA9IG1fdGhyZWFkOwogCiAgICAgQVNTRVJUKG1fd29y
a2VyR2xvYmFsU2NvcGUtPmhhc09uZVJlZigpKTsKIApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQg
V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogICAgIHRocmVhZEdsb2JhbERhdGEoKS5kZXN0
cm95KCk7CiAKICAgICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBkZXN0cm95
ZWQgZnJvbSBub3RpZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlzIi4KLSAg
ICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHByb3RlY3Rvci0+ZGV0YWNoKCk7CiB9CiAK
IHZvaWQgV29ya2VyVGhyZWFkOjpzdGFydFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCmluZGV4IDA3YWQzY2U3ODRmOTE5ZjcwYzQ1NjgxYjk1
NGMwMDk5OTZmNTU3ZjIuLmY4MDllZTY2NzI3ZWUxMzlkYzRmMTlkMmNiNjFiMjI2NWU0ZWE0YmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApAQCAtNjAsNyArNjAsNyBAQCBj
bGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAg
ICBib29sIHN0YXJ0KCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJRDsgfQorICAgIFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZCA/IG1fdGhyZWFkLT5pZCgp
IDogMDsgfQogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AoKSB7IHJldHVybiBtX3J1bkxvb3A7
IH0KICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHkoKSBjb25zdCB7IHJl
dHVybiBtX3dvcmtlckxvYWRlclByb3h5OyB9CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdv
cmtlclJlcG9ydGluZ1Byb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRpbmdQcm94
eTsgfQpAQCAtOTgsNyArOTgsNyBAQCBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291
bnRlZDxXb3JrZXJUaHJlYWQ+IHsKICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRTdGFydCh2
b2lkKik7CiAgICAgdm9pZCB3b3JrZXJUaHJlYWQoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBXb3JrZXJSdW5M
b29wIG1fcnVuTG9vcDsKICAgICBXb3JrZXJMb2FkZXJQcm94eSYgbV93b3JrZXJMb2FkZXJQcm94
eTsKICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgbV93b3JrZXJSZXBvcnRpbmdQcm94eTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAppbmRleCBiYjY2ZmNlYTdlNTI4YmMy
N2Y2MzNhM2U1Mjg3OGI1MDFlZjBlMTg3Li4zNTc2Nzk0NmFkZTM3MmE0Nzk0NWY4NWQzZjg5NThi
NTI1NGFiZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCkBAIC00
MCw3ICs0MCw3IEBAIHN0YXRpYyBIYXNoU2V0PFN0b3JhZ2VUaHJlYWQqPiYgYWN0aXZlU3RvcmFn
ZVRocmVhZHMoKQogfQogCiBTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKCkKLSAgICA6IG1f
dGhyZWFkSUQoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIH0KQEAgLTQ4LDE2ICs0OCwxNiBAQCBTdG9yYWdlVGhyZWFkOjpTdG9yYWdl
VGhyZWFkKCkKIFN0b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFt
X3RocmVhZCk7CiB9CiAKIGJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVh
ZElEID0gY3JlYXRlVGhyZWFkKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFj
aywgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOworICAgIGlmICghbV90aHJlYWQpCisg
ICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50
cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CiAgICAgYWN0
aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cisg
ICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5
UG9pbnRDYWxsYmFjayh2b2lkKiB0aHJlYWQpCkBAIC03OCwyNSArNzgsMjUgQEAgdm9pZCBTdG9y
YWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKIHZvaWQgU3RvcmFnZVRocmVhZDo6ZGlzcGF0
Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKKyAg
ICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIG1fcXVldWUuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFdURk1vdmUoZnVuY3Rpb24p
KSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVh
ZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIGFj
dGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwogICAgIC8vIEV2ZW4gaW4gd2VpcmQs
IGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhyZWFkIHRv
IHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgaWYgKCFtX3RocmVhZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxGdW5j
dGlvbjx2b2lkICgpPj4oW3RoaXNdIHsKICAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwogICAg
IH0pKTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKKyAgICBtX3Ro
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSk7
Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2b2lk
IFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9y
YWdlVGhyZWFkLmgKaW5kZXggOTU2NGI4YWEwNmU1MjQzZTMwZTQ2N2M1ZmJmZTJjZGFkYjI0MGM1
Ni4uOGNmMWIzZDRhZGM1YTMwNmE3N2VjNzdjOWMzMjY2NjE2ODdiZWM1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFN0b3JhZ2VU
aHJlYWQgewogICAgIC8vIEJhY2tncm91bmQgdGhyZWFkIHBhcnQgb2YgdGhlIHRlcm1pbmF0ZSBw
cm9jZWR1cmUuCiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKLSAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTWVz
c2FnZVF1ZXVlPEZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVlOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNiODVmMjJm
ZmFlMDFlMjhhYWI5OTgxNjY5OGFkYWQ3YTM4NDNjNWYuLmIwNGFjYzhjMzFjNWVjYTgyYTUxNzQx
NjY3ZGI3MGUwNTNmMWQyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmJgogewogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRl
cnMpOwogCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7CisgICAg
V1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKIAogICAgIG1f
c3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIG1fbG9hZFRocm90dGxlTGF0ZW5jeSA9IHBhcmFt
ZXRlcnMubG9hZFRocm90dGxlTGF0ZW5jeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5j
cHAKaW5kZXggZWY3YmE4OTk4MjAyMzI1ODllNzM5MWYyN2ZjZDNkNmUxNjlmNjg5NC4uZmEwMzBm
YjNhMmEwZjgyZDZhMjQ1YmY4NTZiMzZhYTI3MzIwMDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9D
aGFubmVsU291cC5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVhZFN5
bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwg
cwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUmVmUHRyPElPQ2hhbm5lbD4g
Y2hhbm5lbCh0aGlzKTsKLSAgICBkZXRhY2hUaHJlYWQoY3JlYXRlVGhyZWFkKCJJT0NoYW5uZWw6
OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0gewor
ICAgIFRocmVhZDo6Y3JlYXRlKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUs
IHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0gewogICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUpOwogICAgICAgICB1aW50OF90
KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2MoYnVmZmVyU2l6
ZSkpOwogICAgICAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9wdEdSZWYo
c291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwgYnVmZmVy
RGF0YSwgZmFzdEZyZWUpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVh
ZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1
ZSwgcwogICAgICAgICAgICAgRGF0YSBkYXRhID0geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEsIDApOwogICAgICAgICB9LCBxdWV1ZSk7Ci0g
ICAgfSkpOworICAgIH0pLT5kZXRhY2goKTsKIH0KIAogc3RydWN0IFdyaXRlQXN5bmNEYXRhIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBiYWY1MzA2
NmJlMjAwOWUyNmRiZWI3YWM4ODhjNDA1ZTNiZGJhNmZmLi5iMzg3YjZiNDQ1ZTM3ZDNkYTNlOGE3
MmM3YzBiYTM1Yzg2M2YyNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uY3BwCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5j
b21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBtZXNzYWdlKQogCiAjaWYgSEFW
RShRT1NfQ0xBU1NFUykKICAgICBpZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpICYmIG1fc2hv
dWxkQm9vc3RNYWluVGhyZWFkT25TeW5jTWVzc2FnZSkgewotICAgICAgICBwdGhyZWFkX292ZXJy
aWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFzc19zdGFydF9ucChtX21h
aW5UaHJlYWQsIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAw
KTsKKyAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9vdmVycmlk
ZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAwKTsKICAgICAgICAgbWVzc2FnZS0+c2V0
UU9TQ2xhc3NPdmVycmlkZShvdmVycmlkZSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9Y
UENTZXJ2aWNlRW50cnlQb2ludC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRV
dGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAppbmRleCAzYmI3
YzZkNDdkNDNjNjk3NmIwM2NmZjc3MzY0NGY0ODc4NDkzZDQxLi5mMjNkYjQzYzAyMzRkYzdjODEw
NDk1M2YwNGVmODc5NTJmOWI4NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENT
ZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFhQ
Q1NlcnZpY2VJbml0aWFsaXplcihPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiBjb25uZWN0
aW9uLCB4cGNfb2JqZWN0XwogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAocGFyYW1l
dGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5jb250YWlucyhBU0NJSUxpdGVyYWwoImFsd2F5
cy1ydW5zLWF0LWJhY2tncm91bmQtcHJpb3JpdHkiKSkpCi0gICAgICAgIHNldEdsb2JhbE1heFFP
U0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAgICAgICAgVGhyZWFkOjpzZXRHbG9iYWxNYXhR
T1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7CiAjZW5kaWYKIAogICAgIFhQQ1NlcnZpY2VUeXBl
OjpzaW5nbGV0b24oKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAppbmRl
eCAwNjA4YWI3MmY5OTI0OGVmMjRjZDJkNTI0NWVlNTMzM2EwMGQ5ZDBkLi40OGQxMDY5Nzc2NWE5
NWE4YjM1ODcyMzBlMTAyZDgwM2FkNThjMGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcApAQCAtMjQ4LDcg
KzI0OCw3IEBAIE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKCkK
ICAgICBpZiAobV9ldmVudEZEID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoIk1lbW9yeVByZXNzdXJl
TW9uaXRvciIsIFt0aGlzXSB7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7CiAgICAgICAgIGRvdWJsZSBw
b2xsSW50ZXJ2YWwgPSBzX21heFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kczsKICAgICAgICAgd2hp
bGUgKHRydWUpIHsKICAgICAgICAgICAgIHNsZWVwKHBvbGxJbnRlcnZhbCk7CkBAIC0yNzEsNyAr
MjcxLDcgQEAgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IoKQog
ICAgICAgICB9CiAgICAgICAgIGNsb3NlKG1fZXZlbnRGRCk7CiAgICAgfSk7Ci0gICAgZGV0YWNo
VGhyZWFkKHRocmVhZElkZW50aWZpZXIpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIElQ
Qzo6QXR0YWNobWVudCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6OmNyZWF0ZUhhbmRsZSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCAxZDUwMjE1YTIw
MzExNGI0ZjIzZDVkNThmMmQyNTNmZjc5MDU2ZDVlLi40Zjk2YWJiZjBkYzk3MmY4YjljMmM2Y2Y2
ZTgyNjQ2OWUyNWZiZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9j
ZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIHBsYXRm
b3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAKICAgICAvLyBN
YXRjaCB0aGUgUW9TIG9mIHRoZSBVSVByb2Nlc3MgYW5kIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGJ1
dCB1c2UgYSBzbGlnaHRseSBsb3dlciBwcmlvcml0eS4KLSAgICBXVEY6OnNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVI
YW5kbGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcjsK
ICAgICBpZiAoIW1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIpIHsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMzVhZWQ4NzE1MGRlZTQx
MTk3MTQ2ZmVlZjBiMDlmZjQ2ZTg0MDYwLi5lYTI3MDVjY2M0ZDFlYTM3NmUzY2I1ZWI0OWYxNDg1
NTZiNGRiY2U1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTctMDQtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBh
bmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1l
bnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVh
ZGluZy5jcHA6CisgICAgICAgIChydW5KYXZhU2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0YXJ0
SmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAgICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgICh0
ZXN0VGhyZWFkSWRlbnRpZmllck1hcCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2Nr
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcDoKKwogMjAxNy0wNC0wNiAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9u
dFdpdGhGZWF0dXJlcyB0ZXN0IGZvbnQgcGFzcyBPVFMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
SmF2YVNjcmlwdFRocmVhZGluZy5jcHAKaW5kZXggZTJmOWJhZGU2Y2E3YzI2OTQ4NWE0Y2RjYmU2
MDk5YzM2YmEwMjE5OC4uNzEwZDJhNTlkYTkyOTAxNmU2MDhhNGNmN2Q5NDZmYTg3ZmFkOTMyYyAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAKQEAgLTUx
LDcgKzUxLDcgQEAgc3RhdGljIExvY2smIGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKQogICAgIHJl
dHVybiBzdGF0aWNNdXRleDsKIH0KIAotdHlwZWRlZiBIYXNoU2V0PFRocmVhZElkZW50aWZpZXI+
IFRocmVhZFNldDsKK3R5cGVkZWYgSGFzaFNldDxSZWZQdHI8VGhyZWFkPj4gVGhyZWFkU2V0Owog
c3RhdGljIFRocmVhZFNldCYgamF2YVNjcmlwdFRocmVhZHMoKQogewogICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChUaHJlYWRTZXQsIHN0YXRpY0phdmFTY3JpcHRUaHJlYWRzLCAo
KSk7CkBAIC0xMDgsMTAgKzEwOCwxMCBAQCB2b2lkIHJ1bkphdmFTY3JpcHRUaHJlYWQodm9pZCop
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZh
U2NyaXB0VGhyZWFkc011dGV4KCkpOwotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9
IGN1cnJlbnRUaHJlYWQoKTsKLSAgICAgICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7Ci0gICAgICAg
IGphdmFTY3JpcHRUaHJlYWRzKCkucmVtb3ZlKHRocmVhZCk7Ci0gICAgICAgIGphdmFTY3JpcHRU
aHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwor
ICAgICAgICBUaHJlYWQmIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOworICAgICAgICB0aHJl
YWQuZGV0YWNoKCk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkucmVtb3ZlKCZ0aHJlYWQp
OworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVuSmF2
YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEyOCw3
ICsxMjgsNyBAQCB2b2lkIHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMoKQogICAgIExvY2tIb2xkZXIg
bG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgamF2YVNjcmlwdFRo
cmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7Cisg
ICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6Y3JlYXRlKCZydW5KYXZhU2Ny
aXB0VGhyZWFkLCAwLCAwKSk7CiB9CiAKIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKQEAg
LTEzOCw3ICsxMzgsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgICAgIGph
dmFTY3JpcHRUaHJlYWRzU2hvdWxkVGVybWluYXRlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBWZWN0
b3I8VGhyZWFkSWRlbnRpZmllciwgamF2YVNjcmlwdFRocmVhZHNDb3VudD4gdGhyZWFkczsKKyAg
ICBWZWN0b3I8UmVmUHRyPFRocmVhZD4sIGphdmFTY3JpcHRUaHJlYWRzQ291bnQ+IHRocmVhZHM7
CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4
KCkpOwogICAgICAgICBjb3B5VG9WZWN0b3IoamF2YVNjcmlwdFRocmVhZHMoKSwgdGhyZWFkcyk7
CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQogICAgIH0K
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytp
KQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW2ldKTsKKyAgICAgICAg
dGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBmYjRkMjZmY2NlYjcwYzRiNTMyMDEwZGE4
NWZiOWNlNzg1NWMxMzg0Li4zY2VhYTZmM2U2NTczNWQzMGVmMWE0Zjg5N2Q1ZTY5YzRmYTVmZjA2
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0K
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0xMDcy
LDggKzEwNzIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCgpCiAgICAg
cHRocmVhZF9qb2luKHB0aHJlYWQsIDApOwogCiAgICAgLy8gTm93IGNyZWF0ZSBhbm90aGVyIHRo
cmVhZCB1c2luZyBXVEYuIE9uIE9TWCwgaXQgd2lsbCBoYXZlIHRoZSBzYW1lIHB0aHJlYWQgaGFu
ZGxlCi0gICAgLy8gYnV0IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQgVGhyZWFkSWRlbnRpZmllci4K
LSAgICBjcmVhdGVUaHJlYWQocnVuVGhyZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsK
KyAgICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBSZWZQdHI8VGhyZWFkPi4KKyAgICBU
aHJlYWQ6OmNyZWF0ZShydW5UaHJlYWQsIDAsICJEdW1wUmVuZGVyVHJlZTogdGVzdCIpOwogfQog
CiBzdGF0aWMgdm9pZCBhbGxvY2F0ZUdsb2JhbENvbnRyb2xsZXJzKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCmluZGV4IDg0ODUyNzM1MWY2MDYzZmMyNjM2
ODc4MDU2ZDljMjRkYmFiZTgzZGMuLjc3MjE2MzZiNzc4MDdmMTM5NTFlYTExMmZiZDQxM2U4ZmFj
NDYwYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlv
bi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcApA
QCAtODksMTQgKzg5LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAgICBDb25kaXRpb24gZW1wdHlDb25k
aXRpb247CiAgICAgQ29uZGl0aW9uIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhyZWFk
SWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVy
PiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1lclRo
cmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAKICAg
ICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2sgcmVjZWl2ZWRMb2NrOwogICAg
IAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAg
IFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAg
ICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAg
ICAgICAgICBmb3IgKDs7KSB7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBydW5UZXN0KAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrZXIsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9u
IHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1
ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhyZWFkOjpjdXJyZW50KCksICI6
IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwg
c2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRDb250aW51
ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xMzEsNyArMTMxLDcgQEAg
dm9pZCBydW5UZXN0KAogICAgIHNsZWVwKGRlbGF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IG51bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElk
ZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZElk
ZW50aWZpZXIgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQi
LAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xNDIsNyArMTQyLDcg
QEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRp
b24sIGxvY2tlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBD
aGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhy
ZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hv
dWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1
ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7CkBAIC0xNTUsOCAr
MTU1LDggQEAgdm9pZCBydW5UZXN0KAogICAgICAgICBwcm9kdWNlclRocmVhZHMuYXBwZW5kKHRo
cmVhZElkZW50aWZpZXIpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZElkZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCisgICAgICAgIHRocmVhZElkZW50aWZpZXIt
PndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrZXIobG9jayk7CkBAIC0xNjQsOCArMTY0LDggQEAgdm9pZCBydW5UZXN0KAogICAg
IH0KICAgICBlbXB0eUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKIAotICAgIGZvciAoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogY29uc3VtZXJUaHJlYWRzKQotICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxU
aHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCisgICAgICAgIHRocmVh
ZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBFWFBFQ1RfRVEobnVtUHJv
ZHVjZXJzICogbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwgcmVjZWl2ZWQuc2l6ZSgpKTsKICAgICBz
dGQ6OnNvcnQocmVjZWl2ZWQuYmVnaW4oKSwgcmVjZWl2ZWQuZW5kKCkpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAppbmRleCA1NTc2MzAyZDY5MGRmY2EzNTk5MjkyOGIxYzg1
M2M3NjIyZTQ1ZmI5Li42YTRlNTM4ZjU2ZjQ2ZDE3N2EzZjYyZjFkZGViM2E0ZDBhZjJhZjA4IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcApAQCAtNDYsMTMgKzQ2LDEzIEBA
IHZvaWQgcnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1U
aHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVkCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExvY2tUeXBl
W10+IGxvY2tzID0gc3RkOjptYWtlX3VuaXF1ZTxMb2NrVHlwZVtdPihudW1UaHJlYWRHcm91cHMp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gd29yZHMgPSBzdGQ6Om1ha2VfdW5pcXVl
PGRvdWJsZVtdPihudW1UaHJlYWRHcm91cHMpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJ
ZGVudGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJb
XT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRy
PFRocmVhZD5bXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKIAogICAg
IGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFk
R3JvdXBJbmRleC0tOykgewogICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsg
dGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAq
IG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAg
ICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRo
cmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJMb2NrIHRlc3Qg
dGhyZWFkIiwKICAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29y
ZHMsIG51bUl0ZXJhdGlvbnMsIHdvcmtQZXJDcml0aWNhbFNlY3Rpb25dICgpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSXRlcmF0aW9uczsgaS0tOykgewpAQCAt
NjYsNyArNjYsNyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3Vwcywg
dW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAogICAgIH0KIAogICAgIGZvciAo
dW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3Jv
dXA7IHRocmVhZEluZGV4LS07KQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJl
YWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhdLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogCiAgICAgZG91YmxlIGV4cGVjdGVkID0gMDsKICAgICBmb3IgKHVpbnQ2
NF90IGkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obnVtSXRlcmF0aW9ucykgKiB3b3JrUGVyQ3Jp
dGljYWxTZWN0aW9uICogbnVtVGhyZWFkc1Blckdyb3VwOyBpLS07KQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAppbmRleCBjNjdlMWUwODE1YTgzYWZhOTMz
M2UyYWM5YTJiZDc4YjY3YjE2NDViLi41YWY5YzdjODI3YjIxZTIxZDhkZjkzMDUyNjBkNmZmZWU2
OGZiZDFjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5n
TG90LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNw
cApAQCAtNDgsMTYgKzQ4LDE0IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtVGhyZWFkczsgaS0tOykgewogICAgICAgICAg
ICAgdGhyZWFkcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAg
ICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAiUGFya2luZyBU
ZXN0IFRocmVhZCIsCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGN1cnJlbnRUaHJlYWQoKSk7Ci0KICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvd24oKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGF3YWtlLmFkZChjdXJyZW50VGhyZWFkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dEF3b2tlbiA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3YWtl
LmFkZChUaHJlYWQ6OmN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdv
a2VuID0gJlRocmVhZDo6Y3VycmVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uLm5vdGlmeV9vbmUoKTsKICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICB9CkBA
IC02NSwxNiArNjMsMTYgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAKICAgICB2b2lkIHVu
cGFya09uZSh1bnNpZ25lZCBzaW5nbGVVbnBhcmtJbmRleCkKICAgICB7Ci0gICAgICAgIEVYUEVD
VF9FUSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgPT0gbGFz
dEF3b2tlbik7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNz
ID0gMDsKLSAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIDg+IHF1ZXVlOworICAgICAg
ICBWZWN0b3I8UmVmUHRyPFRocmVhZD4sIDg+IHF1ZXVlOwogICAgICAgICBQYXJraW5nTG90Ojpm
b3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZp
ZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiB0aHJl
YWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOworICAgICAgICAg
ICAgICAgIHF1ZXVlLmFwcGVuZCgmdGhyZWFkSWRlbnRpZmllcik7CiAKICAgICAgICAgICAgICAg
ICBudW1XYWl0aW5nT25BZGRyZXNzKys7CiAgICAgICAgICAgICB9KTsKQEAgLTg3LDEyICs4NSwx
MiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwogICAgICAgICAgICAgd2hpbGUgKGF3YWtlLnNp
emUoKSA8IHNpbmdsZVVucGFya0luZGV4ICsgMSkKICAgICAgICAgICAgICAgICBjb25kaXRpb24u
d2FpdChsb2NrZXIpOwotICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBsYXN0QXdva2VuKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKG51bGxwdHIgIT0gbGFzdEF3b2tlbik7CiAgICAgICAgICAg
ICBpZiAoIXF1ZXVlLmlzRW1wdHkoKSAmJiBxdWV1ZVswXSAhPSBsYXN0QXdva2VuKSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiV29rZSB1cCB3cm9uZyB0aHJlYWQ6IHF1ZXVlID0gIiwgbGlz
dER1bXAocXVldWUpLCAiLCBsYXN0IGF3b2tlbiA9ICIsIGxhc3RBd29rZW4sICJcbiIpOwogICAg
ICAgICAgICAgICAgIEVYUEVDVF9FUShxdWV1ZVswXSwgbGFzdEF3b2tlbik7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsYXN0QXdva2VuID0gMDsKKyAgICAgICAgICAgIGxhc3RBd29rZW4g
PSBudWxscHRyOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDAsNyArOTgsNyBAQCBzdHJ1Y3Qg
U2luZ2xlTGF0Y2hUZXN0IHsKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdPbkFk
ZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZd
IChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBb
Jl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAo
YWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgCkBAIC0xMTQsNyArMTEyLDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7
CiAKICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6
OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQq
IGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVz
cykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIApAQCAtMTI5LDggKzEyNyw4IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxv
Y2tlcik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SWRlbnRpZmllciA6IHRocmVhZHMpCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJ
ZGVudGlmaWVyIDogdGhyZWFkcykKKyAgICAgICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRG
b3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgLy8gU2VtYXBob3JlIG9wZXJhdGlvbnMuCkBA
IC0xNzksOSArMTc3LDkgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgQXRvbWljPGlu
dD4gc2VtYXBob3JlOwogICAgIHN0ZDo6bXV0ZXggbG9jazsKICAgICBzdGQ6OmNvbmRpdGlvbl92
YXJpYWJsZSBjb25kaXRpb247Ci0gICAgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBhd2FrZTsK
LSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKLSAgICBUaHJlYWRJZGVudGlm
aWVyIGxhc3RBd29rZW4geyAwIH07CisgICAgSGFzaFNldDxSZWY8VGhyZWFkPj4gYXdha2U7Cisg
ICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOworICAgIFJlZlB0cjxUaHJlYWQ+IGxh
c3RBd29rZW4geyBudWxscHRyIH07CiB9OwogCiB2b2lkIHJ1blBhcmtpbmdUZXN0KHVuc2lnbmVk
IG51bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBudW1UaHJlYWRzLCB1bnNpZ25l
ZCBudW1TaW5nbGVVbnBhcmtzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306617</attachid>
            <date>2017-04-09 04:58:56 -0700</date>
            <delta_ts>2017-04-09 05:56:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170502-20170409205855.patch</filename>
            <type>text/plain</type>
            <size>228715</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OTkxYzE0NWRlZjdhNjY1OTliNDJkODdkOWM0ZmUyY2I0M2M2Njk3Li41Mjc5Y2QxMDUzN2MyOWY3
ZTM5MGVjYmY0MGJiYTgyMDI0NjMzNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Om93bmVyVGhyZWFkKToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6
c2VuZCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKwogMjAxNy0wNC0wOCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUlRDIHRlc3Rz
IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCA3MzQ4N2JhMWRkMDAwOWU0NzA0YTdkMTUzMGIxMTNkMzMzZjE2OTdk
Li44MDI5OGE5ZmMwMGI4YzY2NTkwMDM3M2Y2Y2I1MzRkODIwYzkzNWMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5MSBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRy
PFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFu
dGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyBvZiBXVEYgVGhyZWFkaW5nIG1l
Y2hhbmlzbSB0byBtZXJnZSBKYXZhU2NyaXB0Q29yZSdzIHRocmVhZGluZyBleHRlbnNpb24gdG8g
V1RGIFRocmVhZGluZy4KKyAgICAgICAgUHJldmlvdXNseSwgSmF2YVNjcmlwdENvcmUgcmVxdWly
ZXMgcmljaGVyIHRocmVhZGluZyBmZWF0dXJlcyAoc3VjaCBhcyBzdXNwZW5kaW5nIGFuZCByZXN1
bWluZyB0aHJlYWRzKSwgYW5kIHRoZXkKKyAgICAgICAgYXJlIGltcGxlbWVudGVkIGZvciBQbGF0
Zm9ybVRocmVhZCBpbiBKYXZhU2NyaXB0Q29yZS4gQnV0IHRoZXNlIGZlYXR1cmVzIHNob3VsZCBi
ZSBpbXBsZW1lbnRlZCBpbiBXVEYgVGhyZWFkaW5nIHNpZGUKKyAgICAgICAgaW5zdGVhZCBvZiBt
YWludGFpbmluZyBKU0MncyBvd24gdGhyZWFkaW5nIGZlYXR1cmVzIHRvby4gVGhpcyBwYXRjaCBy
ZW1vdmVzIHRoZXNlIGZlYXR1cmVzIGZyb20gSlNDIGFuZCBtb3ZlIGl0IHRvCisgICAgICAgIFdU
RiBUaHJlYWRpbmcuCisKKyAgICAgICAgSG93ZXZlciwgY3VycmVudCBXVEYgVGhyZWFkaW5nIGhh
cyBvbmUgcHJvYmxlbTogV2luZG93cyB2ZXJzaW9uIG9mIFdURiBUaHJlYWRpbmcgaGFzIGRpZmZl
cmVudCBzZW1hbnRpY3MgZnJvbSBQdGhyZWFkcworICAgICAgICBvbmUuIEluIFdpbmRvd3MgV1RG
IFRocmVhZGluZywgd2UgY2Fubm90IHBlcmZvcm0gYW55IG9wZXJhdGlvbiBhZnRlciB0aGUgdGFy
Z2V0IHRocmVhZCBpcyBkZXRhY2hlZDogV1RGIFRocmVhZGluZyBzdG9wCisgICAgICAgIHRyYWNr
aW5nIHRoZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIG9uY2UgdGhlIHRocmVhZCBpcyBkZXRhY2hlZC4g
QnV0IHRoaXMgaXMgbm90IHRoZSBzYW1lIHRvIFB0aHJlYWRzIG9uZS4gSW4gUHRocmVhZHMsCisg
ICAgICAgIHB0aHJlYWRfZGV0YWNoIGp1c3QgbWVhbnMgdGhhdCB0aGUgcmVzb3VyY2Ugb2YgdGhl
IHRocmVhZCB3aWxsIGJlIGRlc3Ryb3llZCBhdXRvbWF0aWNhbGx5LiBXaGlsZSBzb21lIG9wZXJh
dGlvbnMgbGlrZQorICAgICAgICBwdGhyZWFkX2pvaW4gd2lsbCBiZSByZWplY3RlZCwgc29tZSBv
cGVyYXRpb25zIGxpa2UgcHRocmVhZF9raWxsIHdpbGwgYmUgYWNjZXB0ZWQuCisKKyAgICAgICAg
VGhlIHByb2JsZW0gaXMgdGhhdCBkZXRhY2hlZCB0aHJlYWQgY2FuIGJlIHN1c3BlbmRlZCBhbmQg
cmVzdW1lZCBpbiBKU0MuIEZvciBleGFtcGxlLCBpbiBqc2MuY3BwLCB3ZSBzdGFydCB0aGUgd29y
a2VyCisgICAgICAgIHRocmVhZCBhbmQgZGV0YWNoIGl0IGltbWVkaWF0ZWx5LiBJbiB3b3JrZXIg
dGhyZWFkLCB3ZSB3aWxsIGNyZWF0ZSBWTSBhbmQgdGh1cyBjb25jdXJyZW50IEdDIHdpbGwgc3Vz
cGVuZCBhbmQgcmVzdW1lCisgICAgICAgIHRoZSBkZXRhY2hlZCB0aHJlYWQuIEhvd2V2ZXIsIGlu
IFdpbmRvd3MgV1RGIFRocmVhZGluZywgd2UgaGF2ZSBubyByZWZlcmVuY2UgdG8gdGhlIGRldGFj
aGVkIHRocmVhZC4gVGh1cyB3ZSBjYW5ub3QKKyAgICAgICAgcGVyZm9ybSBzdXNwZW5kIGFuZCBy
ZXN1bWUgb3BlcmF0aW9ucyBvbnRvIHRoZSBkZXRhY2hlZCB0aHJlYWQuCisKKyAgICAgICAgVG8g
c29sdmUgdGhlIHByb2JsZW0sIHdlIGNoYW5nZSBXaW5kb3dzIFRocmVhZGluZyBtZWNoYW5pc20g
ZHJhc3RpY2FsbHkgdG8gYWxpZ24gaXQgdG8gdGhlIFB0aHJlYWQgc2VtYW50aWNzLiBJbiB0aGUK
KyAgICAgICAgbmV3IFRocmVhZGluZywgd2UgaGF2ZSBSZWZQdHI8VGhyZWFkPiBjbGFzcy4gSXQg
aG9sZHMgYSBoYW5kbGUgdG8gYSBwbGF0Zm9ybSB0aHJlYWQuIFdlIGNhbiBwZXJmb3JtIHRocmVh
ZGluZyBvcGVyYXRpb25zCisgICAgICAgIHdpdGggdGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsIFRo
cmVhZDo6c3VzcGVuZCBpcyBvZmZlcmVkLiBBbmQgd2UgdXNlIGRlc3RydWN0b3Igb2YgdGhlIHRo
cmVhZCBsb2NhbCB2YXJpYWJsZSB0byByZWxlYXNlCisgICAgICAgIHRoZSByZXNvdXJjZXMgaGVs
ZCBieSBSZWZQdHI8VGhyZWFkPi4gSW4gV2luZG93cywgVGhyZWFkOjpkZXRhY2ggZG9lcyBub3Ro
aW5nIGJlY2F1c2UgdGhlIHJlc291cmNlIHdpbGwgYmUgZGVzdHJveWVkCisgICAgICAgIGF1dG9t
YXRpY2FsbHkgYnkgUmVmUHRyPFRocmVhZD4uCisKKyAgICAgICAgVG8gZG8gc28sIHdlIGludHJv
ZHVjZSBUaHJlYWRIb2xkZXIgZm9yIFdpbmRvd3MuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJl
dmlvdXMgVGhyZWFkSWRlbnRpZmllckRhdGEgZm9yIFB0aHJlYWRzLgorICAgICAgICBJdCBob2xk
cyBSZWZQdHI8VGhyZWFkPiBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKHRlY2huaWNhbGx5
LCBpdCBpcyBGaWJlciBMb2NhbCBTdG9yYWdlIGluIFdpbmRvd3MpLiBUaHJlYWQ6OmN1cnJlbnQo
KQorICAgICAgICB3aWxsIHJldHVybiB0aGlzIHJlZmVyZW5jZS4KKworICAgICAgICBUaGUgcHJv
YmxlbWF0aWMgc2l0dWF0aW9uIGlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBkZWFsbG9jYXRpb24g
b2YgdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIGlzIG5vdCBkZWZpbmVkLiBTbyB3ZSBzaG91bGQK
KyAgICAgICAgbm90IHRvdWNoIHRocmVhZCBsb2NhbCBzdG9yYWdlIGluIHRoZSBkZXN0cnVjdG9y
IG9mIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZS4gVG8gYXZvaWQgc3VjaCBlZGdlIGNhc2VzLCB3
ZSBoYXZlCisgICAgICAgIGN1cnJlbnRUaHJlYWQoKSAvIFRocmVhZDo6Y3VycmVudElEKCkgQVBJ
cy4gVGhleSBhcmUgc2FmZSB0byBiZSBjYWxsZWQgZXZlbiBpbiB0aGUgZGVzdHJ1Y3RvciBvZiB0
aGUgb3RoZXIgdGhyZWFkIGxvY2FsCisgICAgICAgIHN0b3JhZ2UuIEFuZCBpbiBXaW5kb3dzLCBp
biB0aGUgRkxTIGRlc3RydWN0b3IsIHdlIHdpbGwgY3JlYXRlIHRoZSB0aHJlYWRfbG9jYWwgdmFy
aWFibGUgdG8gZGVmZXIgdGhlIGRlc3RydWN0aW9uIG9mCisgICAgICAgIHRoZSBUaHJlYWRIb2xk
ZXIuIFdlIGVuc3VyZSB0aGF0IHRoaXMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG90
aGVyIEZMUyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkIGluIFdpbmRvd3MgMTAuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVl
ZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6Cisg
ICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0
b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFk
LmNwcDoKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3Ip
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUp
OgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChX
VEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVJlZ2lzdGVy
cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1U
aHJlYWQuaC4KKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0cjo6
UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6CisgICAg
ICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
VEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAg
ICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5jcHAuCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UpOgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJl
YWRIb2xkZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNwcDog
QWRkZWQuCisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KToKKyAgICAgICAgKFdURjo6dGhy
ZWFkTWFwKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSk6Cisg
ICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTcGVjaWZpYy5oOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om5vcm1hbGl6
ZVRocmVhZE5hbWUpOgorICAgICAgICAoV1RGOjp0aHJlYWRFbnRyeVBvaW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0Q3VycmVu
dFRocmVhZElzVXNlckluaXRpYXRlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0R2xvYmFs
TWF4UU9TQ2xhc3MpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MpOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmR1bXApOgorICAgICAgICAoV1RGOjpub3JtYWxpemVUaHJl
YWROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6YWRqdXN0ZWRRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVh
ZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmlkKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpk
aWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkSm9pbik6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVh
ZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdU
Rjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50
VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5
UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUludGVybmFsKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2Fp
dEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElE
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6
OnJlc3VtZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Z2V0UmVnaXN0ZXJzKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gp
OgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQ
dGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3Rh
dGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmVz
dGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRldGFjaFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2ln
bmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6
d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGV0
YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRF
eGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6d2FpdEZv
clRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpjb25jdXJy
ZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiB3dGYvY29j
b2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAoV1RGOjpkaXNwYXRjaFFPU0NsYXNzKToK
KyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcDoKKyAgICAgICAgKFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZv
cm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
TGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQ
b2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKToKKyAgICAgICAgKiB3dGYvd2luL01h
aW5UaHJlYWRXaW4uY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRocmVhZFBsYXRm
b3JtKToKKwogMjAxNy0wNC0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByZW1vdmUgY29uc3RleHByIGZ1bmN0aW9uIHNpbmNl
IEdUSyBkaWRuJ3QgbGlrZSBpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MGUyZjA3OTczMGI1NDdlNjVkODRi
MjdlMDBkMjc5MWE1ZWY5NTYzLi4wNzkzYmYwNGJjOGNlYmVlY2Q5ZGQ1ZThhODU3NDY5NjVlZTAz
NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTctMDQtMDkgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRo
cmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVh
ZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBV
c2UgVGhyZWFkOjogQVBJcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVu
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OnN0YXJ0UmVuZGVyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFk
OjpnZXRUaHJlYWRJRCk6CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0
ZVRocmVhZEZvckRlYnVnZ2luZyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAg
ICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6
Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L0hSVEZEYXRhYmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VM
b2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJh
c2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0
YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9s
dmVyOjpSZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVy
Ojp+UmV2ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252
b2x2ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVh
ZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0Zp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2FkZXJSdW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0
VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6
c3RvcFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0YXJ0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
Ojp3b3JrZXJUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0wOCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtWYXJpYXRp
b24gRm9udHNdIFdpZHRoIHZhbHVlcyBvZiBHWCBmb250cyBhcmUgbm90IG1hcHBlZCBjb3JyZWN0
bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1ODA5NzdmMTI5NWQxZmJmZS4u
M2NkMjY2OWFlYWI0MWVmZDFiYmYzODU1MTI3NzNkYmRjMDAzY2QyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBBUElzLgorCisg
ICAgICAgICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRo
cmVhZDo6flN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUaHJlYWQuaDoKKwogMjAxNy0wNC0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVj
b3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVyZSBF
eHRyYSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVuIHRoZXJlIGlzIGEgV2ViIEluc3BlY3RvciBG
cm9udGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDJjYzU4MmRkZjIxYjU1MDU5NGMxNzRmYWYxYjFkY2M1M2Fl
ZGZmOGIuLjQwZGE2YzE0ODcyZDQyNjljMTBkZGI2OTA2YmFhNWE1N2FjZDkyYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFu
ZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVu
dGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBB
UElzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5j
SW5UaHJlYWQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKElQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6CisgICAgICAgICog
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5
UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRpYWxpemVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNy0wNC0wOCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3Agc3RkOjpjaHJvbm8gc3VwcG9y
dCBmcm9tIFRpbWVyIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKaW5kZXggZTc4MDg2YzNhOTYxMmEyZjBiNGQ3
YWFmMWFkYzdiYTFhMTAxYzU0Ny4uNDNhZWYwNzc5NzBjZmVkYjJjYWMwNDYzZmNkOWVjY2EyOWQx
NTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJl
QW5kU3dhcFRlc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcApAQCAtOTYsNyArOTYsNyBAQCB2b2lkIHRlc3RDb21wYXJlQW5k
U3dhcCgpCiB7CiAgICAgQml0bWFwIGJpdG1hcDsKICAgICBjb25zdCBpbnQgbnVtVGhyZWFkcyA9
IDU7Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRHNbbnVtVGhyZWFkc107CisgICAgUmVm
UHRyPFRocmVhZD4gdGhyZWFkc1tudW1UaHJlYWRzXTsKICAgICBEYXRhIGRhdGFbbnVtVGhyZWFk
c107CiAKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTEwNywxMiArMTA3LDEy
IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkKICAgICAgICAgZGF0YVtpXS5pZCA9IGk7CiAg
ICAgICAgIGRhdGFbaV0ubnVtVGhyZWFkcyA9IG51bVRocmVhZHM7CiAgICAgICAgIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiB0aHJlYWRGdW5jID0gc3RkOjpiaW5kKHNldEJpdFRocmVhZEZ1bmMsICZk
YXRhW2ldKTsKLSAgICAgICAgdGhyZWFkSURzW2ldID0gY3JlYXRlVGhyZWFkKCJzZXRCaXRUaHJl
YWRGdW5jIiwgdGhyZWFkRnVuYyk7CisgICAgICAgIHRocmVhZHNbaV0gPSBUaHJlYWQ6OmNyZWF0
ZSgic2V0Qml0VGhyZWFkRnVuYyIsIHRocmVhZEZ1bmMpOwogICAgIH0KIAogICAgIHByaW50Zigi
V2FpdGluZyBmb3IgJWQgdGhyZWFkcyB0byBqb2luXG4iLCBudW1UaHJlYWRzKTsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkSURzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKIAogICAgIHByaW50ZigiUEFTUzogQ29tcGFyZUFuZFN3YXAgdGVzdCBjb21wbGV0
ZWQgd2l0aG91dCBhIGhhbmdcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3ZjE2NmMzN2RhNDlhZGRmZmFlYjc2N2NmMWM5OGJiZWFjN2IzMGZjLi45Yjk0ZjMwYjk4N2Yz
MDk2ZTAzNWE2ZjliNmZhOWQ5MTFjNmY1YmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjQ3MSw3ICsyNDcxLDYgQEAKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExM
SW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQ5NEYyRTE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsg
fTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlGRUU0M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRTQzRkNEMUU2
NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBD
b21wYXJlQW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVz
dC5jcHAgKi87IH07CiAJCUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRkQ2
RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCkBAIC01MTAxLDcgKzUxMDAsNiBAQAogCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hkb2cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRG
IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFREE1MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZs
b3dUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tP
dmVyZmxvd1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZE
MSAvKiBQbGF0Zm9ybVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF0Zm9ybVRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MDFB
QUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9
IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NjYsNyArNjg2NCw2IEBACiAJCQkJRjY5MkE4NzgwMjU1
NTk3RDAxRkY2MEY3IC8qIE9wZXJhdGlvbnMuaCAqLywKIAkJCQkwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi8sCiAJCQkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCAqLywKLQkJCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1U
aHJlYWQuaCAqLywKIAkJCQk4Njg5MTZBOTE1NUYyODU0MDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUu
aCAqLywKIAkJCQkxNDczNDFERjFEQzJDRTk2MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwICovLAogCQkJCTE0NzM0MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJs
ZS5oICovLApAQCAtOTM0OCw3ICs5MzQ1LDYgQEAKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAz
MTggLyogU3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRTQz
RkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk2QjczMjcxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjAxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJv
bFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcAppbmRleCA4N2IzNTNhYTM3OTI1Y2ExZTJmYTg0MTE5OTc2YWRmMGIxZTA3YmFh
Li5jOTE3NzA3OTU4OGY4NmQ0MzFhMjhiYzA3NGQ0ZmUyZTNmMTNkYzQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKQEAgLTE5MTMsMTAgKzE5MTMsMTAgQEAgdm9p
ZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0
aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9m
UHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAg
ICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAg
ICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xOTMzLDggKzE5MzMsOCBAQCB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0KIAotICAg
IGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFk
IDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNy
YXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXgg
MDE5OTZhZjcxYWI0ZjA5ZWI0OWI3MDExYzE3ZGJjOTNjNDBjZTg3YS4uOTA0NjU2NDg4N2I2YjNh
NGFmYWMzNTlkYzEwYzUwMzg0ZDc0ZGVmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKQEAgLTE2ODUwLDEwICsxNjg1MCwxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
CiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFk
czsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7
CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAg
ICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQi
LAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKQEAgLTE2ODcwLDggKzE2ODcwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQog
ICAgICAgICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkIDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
KTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCmluZGV4
IGE0ZTIxZjlmYTNjZDQ3MjFlYTI2NzVlMDZlNGQ1MzBjNWJhOTViMzUuLmU5YjFmNWMyZjBiYzI3
YjAyOTMxMGM1NTgxNTIwYjFiNTUyMjU5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgaW5pdGlh
bGl6ZVN1cGVyU2FtcGxlcigpCiAgICAgaWYgKCFPcHRpb25zOjp1c2VTdXBlclNhbXBsZXIoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgY3JlYXRlVGhyZWFkKAorICAgIFRocmVhZDo6Y3JlYXRl
KAogICAgICAgICAiSlNDIFN1cGVyIFNhbXBsZXIiLAogICAgICAgICBbXSAoKSB7CiAgICAgICAg
ICAgICBjb25zdCBpbnQgc2xlZXBRdWFudHVtID0gMTA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCmluZGV4IGNlZjk5MGNiNDgzM2E2YmI5NDcxYmQwOGE1MDRlNTVm
YjQ3ZGY0NTguLmFkMGVjYzY5YTc3ZDE3MmNmNGJjMWVmYWM5M2RmOTMwMjdjMDA5ZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCkBAIC0xNDQsNyArMTQ0LDcg
QEAgY2xhc3MgV29ya2xpc3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsK
ICAgICAgICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0ZWRcbiIpOwog
ICAgICAgICAKICAgICAgICAgaWYgKG1fcmVsYXRpdmVQcmlvcml0eSkKLSAgICAgICAgICAgIGNo
YW5nZVRocmVhZFByaW9yaXR5KGN1cnJlbnRUaHJlYWQoKSwgbV9yZWxhdGl2ZVByaW9yaXR5KTsK
KyAgICAgICAgICAgIFRocmVhZDo6Y3VycmVudCgpLmNoYW5nZVByaW9yaXR5KG1fcmVsYXRpdmVQ
cmlvcml0eSk7CiAgICAgICAgIAogICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBzdGQ6Om1h
a2VfdW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7CiAgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPExvbmdMaXZlZFN0YXRlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4IDc4OGE2YzM2
MjM2OWM1OGRhZDI5YTYwYTM4NzEwNDRlNDY0ZWQzMDUuLjJiODI0ZWNmZGU1ODkzYjJjNmI3MDZm
NDcwMmVjZDIyOTVkMjM1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgQXN5bmNo
cm9ub3VzRGlzYXNzZW1ibGVyIHsKIHB1YmxpYzoKICAgICBBc3luY2hyb25vdXNEaXNhc3NlbWJs
ZXIoKQogICAgIHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJBc3luY2hyb25vdXMgRGlzYXNzZW1i
bGVyIiwgWyZdICgpIHsgcnVuKCk7IH0pOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiQXN5bmNo
cm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBlbnF1ZXVlKHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+IHRhc2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDNhZWUzMDEwNGY1MjkxYTI4NzY0YTVj
ZGVlNWFhOGYwY2E3MmFkMzEuLjcyMjNiMjBjOWRmYmExMDQzMDk4YTc4NTc0YmEyOGE2OTRjMDQ1
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDksNyArMzQ5LDcgQEAg
dm9pZCBIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiAgICAgICAgICAgICBtX3Nob3VsZFN0
b3BDb2xsZWN0aW5nQ29udGludW91c2x5ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgfQotICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQpOworICAgICAg
ICBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAg
fQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQpAQCAtMjY4MSw3ICsyNjgxLDcgQEAg
dm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQogICAgIG1faXNTYWZlVG9Db2xsZWN0
ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKSB7
Ci0gICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkID0gV1RGOjpUaHJlYWQ6OmNyZWF0ZSgK
ICAgICAgICAgICAgICJKU0MgREVCVUcgQ29udGludW91cyBHQyIsCiAgICAgICAgICAgICBbdGhp
c10gKCkgewogICAgICAgICAgICAgICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAx
NmJlZWY5YTg5ZDA2ZGYyNzk3MTdlNzcwYjE2NGE0NzE0Li5kNjc4MzdhZmVmMTMwMWY5NjcyZjYw
ZWEyOWM0M2ZjODU5N2RlYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC00OSw2
ICs0OSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjY2LDcgKzY2Nyw3
IEBAIGNsYXNzIEhlYXAgewogICAgIExvY2sgbV9jb2xsZWN0Q29udGludW91c2x5TG9jazsKICAg
ICBDb25kaXRpb24gbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uOwogICAgIGJvb2wgbV9z
aG91bGRTdG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSB7IGZhbHNlIH07Ci0gICAgVGhyZWFkSWRl
bnRpZmllciBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFdU
Rjo6VGhyZWFkPiBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyBudWxscHRyIH07CiAgICAg
CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ1N0YXJ0VGltZTsKICAgICBNb25vdG9uaWNUaW1l
IG1fbGFzdEdDRW5kVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNo
aW5lU3RhY2tNYXJrZXIuY3BwCmluZGV4IGI4NWI3NjQ4ZTJmNWQxOWZhMjJkNzYzZjdiY2RlZjhm
NDRjNDJjODguLjI3ZDNmMTIxMTMwNjMwZmFjZWYwNzMyZWY3N2JjZGU5NTNiZDI0ZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApA
QCAtMzYsOTEgKzM2LDExIEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgT1MoREFSV0lOKQotCi0jaW5jbHVkZSA8
bWFjaC9tYWNoX2luaXQuaD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgotI2luY2x1ZGUg
PG1hY2gvdGFzay5oPgotI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2luY2x1ZGUgPG1h
Y2gvdm1fbWFwLmg+Ci0KLSNlbGlmIE9TKFdJTkRPV1MpCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxzeXMv
bW1hbi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaWYgT1MoU09MQVJJUykKLSNpbmNsdWRl
IDx0aHJlYWQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLSNpZiBI
QVZFKFBUSFJFQURfTlBfSCkKLSNpbmNsdWRlIDxwdGhyZWFkX25wLmg+Ci0jZW5kaWYKLQotI2lm
IFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8
c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNo
aW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFs
TG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQot
c3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5m
b190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0
b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRU
aHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRs
ZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1
c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91
bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVz
LCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdz
dXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMg
cHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQg
c3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhh
bmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29u
bGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdz
OwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJD
b250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxs
ZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0
IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxs
IHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91
cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0
YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFy
cmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0
bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2
OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3Qo
JnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hp
bmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxl
ciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNv
IGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhp
cyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5v
dCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0Owot
ICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tl
ZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxv
Y2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0
IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9T
KFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRo
cmVhZDsKK3VzaW5nIEpTVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFz
cyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVh
ZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTE0
LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNp
ZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBM
b2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgp
OwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAg
ICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdp
c3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0Owog
ICAgICAgICBkZWxldGUgdDsKICAgICAgICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMg
TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVjaWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwg
Q2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRocmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEu
Z2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0
aHJlYWREYXRhKQotICAgIDogZGF0YSh0aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWRE
YXRhKTsKLX0KLQotVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJy
ZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQot
Ci1ib29sIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1U
aHJlYWQmIG90aGVyKSBjb25zdAotewotI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAg
ICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3Ro
ZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlz
IHBsYXRmb3JtCi0jZW5kaWYKLX0KLQogdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRo
cmVhZCgpCiB7CiAgICAgaWYgKHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JN
YWNoaW5lVGhyZWFkcykpIHsKQEAgLTIzOSw3ICsxMzEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRz
OjphZGRDdXJyZW50VGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVh
ZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJl
YWQqIHRocmVhZCA9IG5ldyBKU1RocmVhZCgpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhy
ZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKQEAgLTI0OCwxMiArMTQwLDEyIEBAIHZvaWQg
TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVh
ZHMgPSB0aHJlYWQ7CiB9CiAKLVRocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRG
b3JDdXJyZW50VGhyZWFkKCkKK0pTVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVh
ZEZvckN1cnJlbnRUaHJlYWQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRU
aHJlYWRzTXV0ZXgpOwotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVu
dFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgq
dGhyZWFkID09IHBsYXRmb3JtVGhyZWFkKQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJy
ZW50VGhyZWFkKCk7CisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVh
ZC0+dGhyZWFkSUQoKSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQog
CkBAIC0yODMsMjIgKzE3NSwyMSBAQCB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVU
aHJlYWRzOjpyZW1vdmVUaHJlYWQodm9pZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogCi0gICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQ
bGF0Zm9ybVRocmVhZCgpKTsKKyAgICAgICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElm
Rm91bmQoY3VycmVudFRocmVhZCgpKTsKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBs
YXRmb3JtVGhyZWFkPgotdm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQ
bGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92
ZVRocmVhZElmRm91bmQoVGhyZWFkSWRlbnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVy
ZWRUaHJlYWRzOwotICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIEpTVGhyZWFk
KiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkg
ewogICAgICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4
dDsKICAgICAgICAgZGVsZXRlIHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVGhyZWFkKiBsYXN0
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICAgICAgSlNUaHJlYWQqIGxhc3QgPSBtX3JlZ2lz
dGVyZWRUaHJlYWRzOwogICAgICAgICBmb3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0
OyB0OyB0ID0gdC0+bmV4dCkgewotICAgICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFk
KSB7CisgICAgICAgICAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAg
ICAgIGxhc3QtPm5leHQgPSB0LT5uZXh0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMzIwLDIwNiArMjExLDM0IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhl
ckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAg
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3Vy
cmVudFRocmVhZFN0YXRlLnN0YWNrT3JpZ2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3Mp
OwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhyZWFkKCkKKyAgICA6IG5leHQobnVsbHB0cikKKyAgICAs
IG1fdGhyZWFkKFdURjo6VGhyZWFkOjpjdXJyZW50KCkpCiB7CiAgICAgYXV0byBzdGFja0JvdW5k
cyA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwotICAgIHBsYXRmb3JtVGhyZWFkID0gY3VycmVu
dFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAgc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7
Ci0gICAgc3RhY2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgQVNTRVJUKHBsYXRmb3JtVGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKLSAgICBi
b29sIGlzU3VjY2Vzc2Z1bCA9Ci0gICAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJv
Y2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksCi0gICAgICAg
ICAgICAmcGxhdGZvcm1UaHJlYWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NF
U1MpOwotICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpICYmICFPUyhEQVJXSU4pCi0gICAgdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkLnN0b3JlKHRo
aXMpOwotCi0gICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25maWd1
cmF0aW9uLgotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplU2lnbmFsSGFuZGxl
cjsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplU2lnbmFsSGFuZGxlciwgW10gewotICAg
ICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhl
IGhhbmRsZXIuCi0gICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxv
d2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rp
b24gYWN0aW9uOwotICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAg
ICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLQot
ICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5k
UmVzdW1lOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5G
TzsKLSAgICAgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDAp
OwotICAgIH0pOwotCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgmbWFzayk7
Ci0gICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBwdGhy
ZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLQotICAgIHNlbV9pbml0KCZzZW1h
cGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3Mu
ICovIDAsIC8qIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwotI2VuZGlm
CisgICAgbV9zdGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKKyAgICBtX3N0YWNrRW5k
ID0gc3RhY2tCb3VuZHMuZW5kKCk7CiB9CiAKLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+
VGhyZWFkRGF0YSgpCitzaXplX3QgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMoSlNUaHJlYWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgQ2xvc2VIYW5kbGUocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURT
KSAmJiAhT1MoREFSV0lOKQotICAgIHNlbV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVz
dW1lKTsKLSNlbmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3Rl
cnMucmVnczsKKyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdzKTsKIH0KIAot
Ym9vbCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCgpCi17Ci0jaWYgT1MoREFS
V0lOKQotICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQocGxhdGZvcm1U
aHJlYWQpOwotICAgIHJldHVybiByZXN1bHQgPT0gS0VSTl9TVUNDRVNTOwotI2VsaWYgT1MoV0lO
RE9XUykKLSAgICBib29sIHRocmVhZElzU3VzcGVuZGVkID0gKFN1c3BlbmRUaHJlYWQocGxhdGZv
cm1UaHJlYWRIYW5kbGUpICE9IChEV09SRCktMSk7Ci0gICAgQVNTRVJUKHRocmVhZElzU3VzcGVu
ZGVkKTsKLSAgICByZXR1cm4gdGhyZWFkSXNTdXNwZW5kZWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMp
Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSAhPSBwbGF0
Zm9ybVRocmVhZCwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJl
bnQgdGhyZWFkIGl0c2VsZi4iKTsKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBz
dXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRo
cmVhZHMuCi0gICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJl
YWQgbG9jay4KLSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBh
cmUgdGhyZWFkcyBBIGFuZCBCLgotICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQg
QiBhbmQgQiBhdHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNp
Z25hbHMuIEFuZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCi0gICAg
ICAgIC8vIEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoIXN1c3BlbmRDb3Vu
dCkgewotICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVh
ZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBw
bGF0Zm9ybXMsIGxpa2UgTGludXguCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhy
ZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhl
IHNpZ25hbCBoYW5kbGVyLgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRo
cmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRS
ZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlz
IG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNz
aW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytzdXNwZW5kQ291bnQ7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3Bl
bmQgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6cmVzdW1lKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFk
X3Jlc3VtZShwbGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIFJlc3VtZVRo
cmVhZChwbGF0Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgewot
ICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJl
IGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgICAgIExvY2tIb2xkZXIgbG9j
ayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKHN1c3BlbmRDb3VudCA9PSAxKSB7Ci0g
ICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJy
dXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgICAgIC8vIHRoZSBzaWduYWwg
aGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KLSAgICAgICAgICAgIC8v
IFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2Nh
dGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgotICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZl
cmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBo
YW5kbGVyLgotICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1
aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1
ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAgICAgIC8vIDMuIFVzZSB0
aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBo
YW5kbGVyLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAo
MykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgICAg
ICBpZiAocHRocmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KSA9PSBFU1JDSCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZW1fd2Fp
dCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJh
cnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRl
ciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRl
ZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgLS1zdXNwZW5kQ291bnQ7Ci0gICAgfQotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRv
IHJlc3VtZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi1zaXplX3QgTWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3Rl
cnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShY
ODYpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsK
LSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0j
ZWxpZiBDUFUoWDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NU
QVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJF
QURfU1RBVEU2NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQ
UENfVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSBQUENfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJf
Y291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0
YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQp
Ci0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vs
c2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVy
bl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRo
cmVhZF9zdGF0ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJO
X1NVQ0NFU1MpIHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5F
X18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJK
YXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0
YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBv
ZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3Vs
dCk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6
ZW9mKHVpbnRwdHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQot
ICAgIHJlZ3MuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9M
OwotICAgIEdldFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAg
ICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVk
KF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5l
Q29udGV4dDsKLSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMp
OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJp
YnV0ZSk7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BF
TkJTRCkKLSAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAg
cHRocmVhZF9hdHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNl
bmRpZgotI2Vsc2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7
IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwot
ICAgIHB0aHJlYWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsK
LSNlbmRpZgotICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0
aHJlYWQgcmVnaXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi12b2lkKiBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAor
dm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigp
IGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoKE9TKEZSRUVCU0Qp
IHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCiAgICAgcmV0dXJuIE1hY2hp
bmVDb250ZXh0OjpzdGFja1BvaW50ZXIocmVncyk7CiAjZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAg
dm9pZCogc3RhY2tCYXNlID0gMDsKLSAgICBzaXplX3Qgc3RhY2tTaXplID0gMDsKLSNpZiBPUyhP
UEVOQlNEKQotICAgIHN0YWNrX3Qgc3M7Ci0gICAgaW50IHJjID0gcHRocmVhZF9zdGFja3NlZ19u
cChwdGhyZWFkX3NlbGYoKSwgJnNzKTsKLSAgICBzdGFja0Jhc2UgPSAodm9pZCopKChzaXplX3Qp
IHNzLnNzX3NwIC0gc3Muc3Nfc2l6ZSk7Ci0gICAgc3RhY2tTaXplID0gc3Muc3Nfc2l6ZTsKLSNl
bHNlCi0gICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZyZWdzLmF0dHJpYnV0ZSwg
JnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7Ci0jZW5kaWYKLSAgICAodm9pZClyYzsgLy8gRklYTUU6
IERlYWwgd2l0aCBlcnJvciBjb2RlIHNvbWVob3c/IFNlZW1zIGZhdGFsLgotICAgIEFTU0VSVChz
dGFja0Jhc2UpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0
YWNrU2l6ZTsKKyAgICByZXR1cm4gcmVncy5zdGFja1BvaW50ZXI7CiAjZWxzZQogI2Vycm9yIE5l
ZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBwb2ludGVyIGZvciBhbm90aGVyIHRocmVhZCBvbiB0
aGlzIHBsYXRmb3JtCiAjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
LXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRl
cigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6ZnJh
bWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChP
UyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250
ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBAIC01MjgsNyArMjQ3LDcgQEAgdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKICNl
bmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpp
bnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lO
KSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQog
ICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAt
NTM3LDcgKzI1Niw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3Rl
cnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0CiB7CiAg
ICAgLy8gTExJbnQgdXNlcyByZWdUNCBhcyBQQy4KICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRP
V1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCkBAIC01NDgsMTYgKzI2
Nyw2IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50
UEMoKSBjb25zdAogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotdm9p
ZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6ZnJlZVJlZ2lzdGVycyhUaHJlYWREYXRhOjpS
ZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikgJiYgISgoT1MoRlJFRUJTRCkgfHwgZGVmaW5l
ZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgm
cmVncy5hdHRyaWJ1dGUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVncyk7Ci0jZW5kaWYK
LX0KLQogc3RhdGljIGlubGluZSBpbnQgb3NSZWRab25lQWRqdXN0bWVudCgpCiB7CiAgICAgaW50
IHJlZFpvbmVBZGp1c3RtZW50ID0gMDsKQEAgLTU3MywxNyArMjgyLDE3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogICAgIHJldHVybiByZWRab25lQWRqdXN0bWVu
dDsKIH0KIAotc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWRE
YXRhOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCitzdGQ6OnBhaXI8dm9pZCosIHNpemVf
dD4gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3Ap
CiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tC
YXNlKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0
YWNrQmFzZSk7CiAgICAgY2hhciogZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0YWNrVG9wKSkpOwogICAgIEFTU0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5k
V2l0aFJlZFpvbmUgPSBlbmQgKyBvc1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZW5kV2l0aFJlZFpvbmUpKTsKIAotICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQot
ICAgICAgICBlbmRXaXRoUmVkWm9uZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFj
a0VuZCk7CisgICAgaWYgKGVuZFdpdGhSZWRab25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5k
V2l0aFJlZFpvbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAK
ICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVuZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhSZWRab25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzMyNSw5
IEBAIHN0YXRpYyB2b2lkIGNvcHlNZW1vcnkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNp
emVfdCBzaXplKQogLy8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFjayBpcyBvbmx5IGNhbGxlZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAv
LyBvcGVyYXRpb24uIEFzIHRoZSBoZWFwIGlzIGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRo
ZSBzdGFjayB0aGUgcGVyZm9ybWFuY2UgaGl0IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVh
ZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIs
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5
Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKIHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdp
c3RlcnM7CisgICAgSlNUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgc2l6ZV90IHJl
Z2lzdGVyc1NpemUgPSB0aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgIHN0ZDo6
cGFpcjx2b2lkKiwgc2l6ZV90PiBzdGFjayA9IHRocmVhZC0+Y2FwdHVyZVN0YWNrKHJlZ2lzdGVy
cy5zdGFja1BvaW50ZXIoKSk7CiAKQEAgLTYzMSw4ICszNDAsNiBAQCB2b2lkIE1hY2hpbmVUaHJl
YWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVy
LCBzaXplXwogICAgIGlmIChjYW5Db3B5KQogICAgICAgICBjb3B5TWVtb3J5KHN0YXRpY19jYXN0
PGNoYXIqPihidWZmZXIpICsgKnNpemUsIHN0YWNrLmZpcnN0LCBzdGFjay5zZWNvbmQpOwogICAg
ICpzaXplICs9IHN0YWNrLnNlY29uZDsKLQotICAgIHRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdp
c3RlcnMpOwogfQogCiBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
a3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwg
c2l6ZV90KiBzaXplKQpAQCAtNjQ0LDM2ICszNTEsMzQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6
dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVm
ZmUKIAogICAgICpzaXplID0gMDsKIAotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFk
ID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7CisgICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IGN1
cnJlbnRUaHJlYWQoKTsKICAgICBpbnQgbnVtYmVyT2ZUaHJlYWRzID0gMDsgLy8gVXNpbmcgMCB0
byBkZW5vdGUgdGhhdCB3ZSBoYXZlbid0IGNvdW50ZWQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHll
dC4KICAgICBpbnQgaW5kZXggPSAxOwotICAgIFRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0g
bnVsbHB0cjsKKyAgICBKU1RocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAot
ICAgIFRocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0
aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAg
aWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IHRocmVhZC0+c3VzcGVuZCgpOworICAgIEpTVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51
bGxwdHI7CisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsg
dGhyZWFkOyBpbmRleCsrKSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQp
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAjaWYgT1Mo
REFSV0lOKQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkgewogICAgICAgICAgICAgICAgIGlmICghbnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgY291bnRlZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQp
CisgICAgICAgICAgICAgICAgICAgIGZvciAoSlNUaHJlYWQqIGNvdW50ZWRUaHJlYWQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhyZWFkOyBjb3VudGVkVGhyZWFkID0gY291bnRlZFRo
cmVhZC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mVGhyZWFkcysrOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBS
ZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQgdGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3Ig
bG9nZ2luZy4KLSAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1
c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQu
ZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwogCiAgICAgICAgICAgICAgICAgV1RGUmVwb3J0RXJy
b3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLAotICAgICAgICAgICAg
ICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52
YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIHBsYXRmb3JtVGhyZWFk
ICVwLiIsCi0gICAgICAgICAgICAgICAgICAgIGVycm9yLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRz
LCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQo
KSkpOworICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24g
ZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDog
JXBdIGlkICVwLiIsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcigpLCBpbmRleCwg
bnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+
dGhyZWFkSUQoKSkpOwogCiAgICAgICAgICAgICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVh
ZCBvbiB0aGUgdGhyZWFkc1RvQmVEZWxldGVkIGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QganVzdCBkZWxldGUgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVy
CiAgICAgICAgICAgICAgICAgLy8gdGhyZWFkcywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRp
bmcgdGhlIEMgaGVhcCBsb2NrIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3Ig
ZGVsZXRpbmcgdGhlIGludmFsaWQgdGhyZWFkLiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAg
ICAgICAgIC8vIGRlZmVyIHRoZSBkZWxldGlvbiB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBh
bGwgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQt
Pm5leHQ7CisgICAgICAgICAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5l
eHQ7CiAgICAgICAgICAgICAgICAgdGhyZWFkLT5uZXh0ID0gdGhyZWFkc1RvQmVEZWxldGVkOwog
ICAgICAgICAgICAgICAgIHRocmVhZHNUb0JlRGVsZXRlZCA9IHRocmVhZDsKIApAQCAtNjg3LDI1
ICszOTIsMjUgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKICNlbHNlCiAgICAgICAgICAgICBV
TlVTRURfUEFSQU0obnVtYmVyT2ZUaHJlYWRzKTsKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShw
cmV2aW91c1RocmVhZCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7CiAjZW5kaWYK
ICAgICAgICAgfQogICAgICAgICBwcmV2aW91c1RocmVhZCA9IHRocmVhZDsKICAgICAgICAgdGhy
ZWFkID0gdGhyZWFkLT5uZXh0OwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBt
X3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAg
ICAgICBpZiAoKnRocmVhZCAhPSBwbGF0Zm9ybVRocmVhZCkKKyAgICBmb3IgKEpTVGhyZWFkKiB0
aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4
dCkgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAg
dHJ5Q29weU90aGVyVGhyZWFkU3RhY2sodGhyZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsK
ICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsg
dGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0g
cGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRo
cmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRocmVhZC0+cmVzdW1lKCk7CiAg
ICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhy
ZWFkOyApIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAg
IGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsK
KyAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgIGRl
bGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IG5leHRUaHJlYWQ7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAppbmRleCBkMTk2
ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3OTk0NDg3ZjIyLi40ZWFlODY3Yjg4NDEzZTU4Y2Q2
NmY2NDY5OTA0M2ZiZDg1OTk2ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtMjIsMjUgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaHJlYWQu
aCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKLSNpZiBVU0UoUFRIUkVBRFMpICYm
ICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRf
dCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KLS8vIFRoaXMgYnVnIGhhcyBi
ZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2Fu
IGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4KLS8vIGh0dHBzOi8v
YnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc5Ci0jaWYgT1Mo
RlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4dC5oPgotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKQEAgLTY0LDEzICs1MSwxMCBAQCBjbGFz
cyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEN1cnJl
bnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNh
biB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCiAKLSAgICBjbGFzcyBU
aHJlYWREYXRhIHsKKyAgICBjbGFzcyBKU1RocmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+
VGhyZWFkRGF0YSgpOwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJy
ZW50VGhyZWFkKCk7CisgICAgICAgIEpTVGhyZWFkKCk7CiAKICAgICAgICAgc3RydWN0IFJlZ2lz
dGVycyB7CiAgICAgICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXIoKSBjb25zdDsKQEAgLTc5LDg0
ICs2Myw0MCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgICAgICB2b2lkKiBpbnN0
cnVjdGlvblBvaW50ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25z
dDsKICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICAKLSNp
ZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpCi0gICAgICAgICAgICB1c2luZyBQbGF0Zm9ybVJl
Z2lzdGVycyA9IE1hY2hpbmVDb250ZXh0OjpQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpCi0gICAgICAgICAg
ICB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpCi0gICAgICAgICAgICBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewotICAgICAgICAgICAg
ICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIH07Ci0jZWxzZQotI2Vy
cm9yIE5lZWQgYSB0aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0jZW5k
aWYKLQotICAgICAgICAgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKKyAgICAgICAgICAgIFdU
Rjo6UGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHN1
c3BlbmQoKTsKLSAgICAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgc2l6ZV90IGdldFJlZ2lz
dGVycyhSZWdpc3RlcnMmKTsKLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYp
OworICAgICAgICBFeHBlY3RlZDx2b2lkLCBUaHJlYWQ6OlBsYXRmb3JtU3VzcGVuZEVycm9yPiBz
dXNwZW5kKCkgeyByZXR1cm4gbV90aHJlYWQtPnN1c3BlbmQoKTsgfQorICAgICAgICB2b2lkIHJl
c3VtZSgpIHsgbV90aHJlYWQtPnJlc3VtZSgpOyB9CisgICAgICAgIHNpemVfdCBnZXRSZWdpc3Rl
cnMoUmVnaXN0ZXJzJiByZWdzKTsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IGNh
cHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCk7CiAKLSAgICAgICAgUGxhdGZvcm1UaHJlYWQgcGxh
dGZvcm1UaHJlYWQ7Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogc3Rh
Y2tFbmQ7Ci0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgSEFORExFIHBsYXRmb3JtVGhyZWFkSGFu
ZGxlOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgICAgICBzZW1fdCBz
ZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOwotICAgICAgICBtY29udGV4dF90IHN1c3BlbmRlZE1h
Y2hpbmVDb250ZXh0OwotICAgICAgICBpbnQgc3VzcGVuZENvdW50IHsgMCB9OwotICAgICAgICBz
dGQ6OmF0b21pYzxib29sPiBzdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsKLQot
ICAgIGNsYXNzIFRocmVhZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
ICAgICBUaHJlYWQoVGhyZWFkRGF0YSopOwotCi0gICAgcHVibGljOgotICAgICAgICB1c2luZyBS
ZWdpc3RlcnMgPSBUaHJlYWREYXRhOjpSZWdpc3RlcnM7Ci0KLSAgICAgICAgc3RhdGljIFRocmVh
ZCogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQotCi0gICAgICAgIGJvb2wgc3VzcGVuZCgpIHsgcmV0dXJuIGRhdGEtPnN1c3Bl
bmQoKTsgfQotICAgICAgICB2b2lkIHJlc3VtZSgpIHsgZGF0YS0+cmVzdW1lKCk7IH0KLSAgICAg
ICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgcmV0dXJuIGRhdGEtPmdl
dFJlZ2lzdGVycyhyZWdzKTsgfQotICAgICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0ZXJz
JiByZWdzKSB7IGRhdGEtPmZyZWVSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgc3RkOjpwYWly
PHZvaWQqLCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkgeyByZXR1cm4gZGF0
YS0+Y2FwdHVyZVN0YWNrKHN0YWNrVG9wKTsgfQotCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGhy
ZWFkJiBwbGF0Zm9ybVRocmVhZCgpIHsgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkOyB9Ci0g
ICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrQmFzZTsg
fQotICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrRW5k
OyB9CisgICAgICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGhyZWFkLT5pZCgpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhY2tCYXNlOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFja0VuZDsgfQogCi0gICAgICAgIFRocmVhZCogbmV4dDsKLSAgICAgICAgVGhy
ZWFkRGF0YSogZGF0YTsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQ7CisgICAgICAgIFJlZjxXVEY6
OlRocmVhZD4gbV90aHJlYWQ7CisgICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOworICAgICAgICB2
b2lkKiBtX3N0YWNrRW5kOwogICAgIH07CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4g
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OyB9Ci0gICAgVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhy
ZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTVGhyZWFkKiB0aHJl
YWRzTGlzdEhlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lz
dGVyZWRUaHJlYWRzTXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB9CisgICAgSlNUaHJlYWQqIG1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290
cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRl
Jik7CiAKLSAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCosIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCopOworICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3Rh
Y2soSlNUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29s
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJ
RklDX0NBTEwgcmVtb3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBs
YXRmb3JtVGhyZWFkPgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVh
ZCk7CisgICAgdm9pZCByZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAg
ICAgTG9jayBtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVy
ZWRUaHJlYWRzOworICAgIEpTVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdURjo6
VGhyZWFkU3BlY2lmaWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgzM2Qy
ZDIzMmI4YTljZDZmM2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDljZTcy
MTMzYzQxY2RkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01OCw3
ICs1OCw3IEBAIEF0b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNTdGF0
czo6SUNTdGF0cygpCiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAgW3Ro
aXNdICgpIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04NCw3
ICs4NCw3IEBAIElDU3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5
QWxsKCk7CiAgICAgfQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFk
KTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0YXRz
OjphZGQoY29uc3QgSUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CmluZGV4IGU3NWNmZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2UxZTky
Y2U5N2RkMWQ5NTA4OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SUNTdGF0cy5oCkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRlOgog
CiAgICAgU3BlY3RydW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBM
b2NrIG1fbG9jazsKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3Vs
ZFN0b3AgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA5MDk1MGI5ODU5N2ZmMzk4
ZDQyMTNkZGY5MDkwN2JkM2MxN2QyN2I5Li4xODllNzk1YjY3MDJjY2JmYWU1NDQ5MWRhNGQzOTcw
MTJhYmViYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0
YXRlKiBleGVjKQogICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29sIGRp
ZFN0YXJ0ID0gZmFsc2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVh
dGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAg
ICAgICAgICJKU0MgQWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9jaywg
JmRpZFN0YXJ0Q29uZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1hbmRM
aW5lIGNvbW1hbmRMaW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhy
ZWFkLT5kZXRhY2goKTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soZGlkU3RhcnRMb2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0YXJ0
VGltZW91dFRocmVhZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IHRp
bWVvdXQgc3RyaW5nIGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAgICAg
ICAgICAgICAgIiBidXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQuXG4i
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRocmVh
ZE1haW4sIDAsICJqc2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6Y3Jl
YXRlKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIxZmUx
MjdlOGI3MzFmYjUzYjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUyNTRh
OGUxZWYxM2RhNWM0MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBsb2Nr
Q291bnQpCiAgICAgICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRocmVh
ZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3VycmVu
dCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVhZCA9
IHRydWU7CiAgICAgQVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5oCmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5ZGJl
NzQuLjFhY2E0YjlhN2JiNGRjYWYwNGRmMTIxNzEwOTcyMGVjOGUyZDY4ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3MgSlNM
b2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0qIHZt
KCkgeyByZXR1cm4gbV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVy
PiBvd25lclRocmVhZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFkPj4g
b3duZXJUaHJlYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJlYWQp
CiAgICAgICAgICAgICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsg
cmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFk
KCk7IH0KKyAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9o
YXNPd25lclRocmVhZCAmJiBtX293bmVyVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsg
fQogCiAgICAgdm9pZCB3aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBj
bGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAg
Ly8gZGlmZmVyZW50IHRocmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8gcmFj
ZXMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjkwNDIjYzYKICAgICBib29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRocmVh
ZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVyVGhy
ZWFkOwogICAgIGludHB0cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BE
ZXB0aDsKICAgICBib29sIG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTQxOTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0aHJl
YWQuaD4KLSNlbmRpZgotCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9T
KERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQot
I2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJXSU4p
Ci10eXBlZGVmIG1hY2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykK
LXR5cGVkZWYgRFdPUkQgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10eXBl
ZGVmIHB0aHJlYWRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0gICAg
Ci1pbmxpbmUgUGxhdGZvcm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNpZiBP
UyhEQVJXSU4pCi0gICAgcmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9zZWxm
KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7
Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2VuZGlm
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4NDkz
YjMzYmM4OWZlM2ZhZDk4YTlkLi42N2YyMGQ5MmNlY2RmMGFiM2JmZjdmNmZkMTI2NjAwYWExNWJm
MWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAgICBi
b29sIGlzVmFsaWRGcmFtZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVpbnQ4
X3QqIGZwQ2FzdCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZvciAo
TWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRz
KCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKG1f
bWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewog
ICAgICAgICAgICAgdWludDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRo
cmVhZC0+c3RhY2tCYXNlKCkpOwogICAgICAgICAgICAgdWludDhfdCogc3RhY2tMaW1pdCA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhY2tCYXNlKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBTYW1wbGluZ1Byb2Zp
bGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0
Y2gpCiAgICAgLCBtX3dlYWtSYW5kb20oKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9w
d2F0Y2gpKQogICAgICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRz
KE9wdGlvbnM6OnNhbXBsZUludGVydmFsKCkpKQotICAgICwgbV90aHJlYWRJZGVudGlmaWVyKDAp
CisgICAgLCBtX3RocmVhZChudWxscHRyKQogICAgICwgbV9qc2NFeGVjdXRpb25UaHJlYWQobnVs
bHB0cikKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2lzU2h1dERvd24oZmFsc2Up
CkBAIC0zMDAsMTEgKzMwMCwxMSBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVh
ZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICBBU1NFUlQobV9sb2Nr
LmlzTG9ja2VkKCkpOwogCi0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90
aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBw
cm9maWxlciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJq
c2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxl
cl0gewogICAgICAgICBwcm9maWxlci0+dGltZXJMb29wKCk7CiAgICAgfSk7CiB9CkBAIC0zNDQs
NyArMzQ0LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgTG9ja0hvbGRlciBj
b2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7CiAg
ICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxs
b2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkpOwogCi0gICAgICAgIGJvb2wgZGlkU3VzcGVu
ZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGF1dG8gZGlkU3Vz
cGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAgIGlmIChkaWRT
dXNwZW5kKSB7CiAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5k
ZWQsIHdlIGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFk
CiAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQs
MTMgKzM1NCwxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICAgICAgYm9vbCB0
b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0
ZXJzIHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6
OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJl
YWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFt
ZSA9IHJlZ2lzdGVycy5mcmFtZVBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBjYWxsRnJhbWUg
PSBzdGF0aWNfY2FzdDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAgICAg
IG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKICAgICAgICAgICAg
ICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hl
biB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKaW5kZXggYjQ0YTNiYTQ3ZjllNjc2OGFkNDM3YmIx
OGUwYThhYmM3OTViZDZjZi4uMDQzZGFkYmE0MDcwYjZmOTE4MDdiZDRjYTEzMjY5NGMzY2ViYWM0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuaApAQCAtMTk1LDggKzE5NSw4IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsK
ICAgICBMb2NrIG1fbG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmll
cjsKLSAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKKyAg
ICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQq
IG1fanNjRXhlY3V0aW9uVGhyZWFkOwogICAgIGJvb2wgbV9pc1BhdXNlZDsKICAgICBib29sIG1f
aXNTaHV0RG93bjsKICAgICBib29sIG1fbmVlZHNSZXBvcnRBdEV4aXQgeyBmYWxzZSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOTlhMjZmY2ExYzIxZjNkMDQ0MDQ3M2I0NDJl
ODlkYzlhNDk1ZjQ2ZS4uZTk3YzMxODVmYzZmMmM2Mjg0YWU3MWJlYjkwNWMwMmUzNDlhNzRmYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC02NTksNyArNjU5LDcgQEAgY2xhc3Mg
Vk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2Vk
TGlzdE5vZGU8Vk0+IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgbG9n
RXZlbnQoQ29kZUJsb2NrKiwgY29uc3QgY2hhciogc3VtbWFyeSwgY29uc3QgRnVuYyYgZnVuYyk7
CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFkKCkgY29u
c3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CisgICAgc3RkOjpvcHRpb25h
bDxSZWZQdHI8VGhyZWFkPj4gb3duZXJUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2st
Pm93bmVyVGhyZWFkKCk7IH0KIAogICAgIFZNVHJhcHMmIHRyYXBzKCkgeyByZXR1cm4gbV90cmFw
czsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDUy
NzYzZjg1M2Q0NjNiNzJmMzNlNDY0YjdiNWE1OWQwMTE5MzhmNjkuLjI3MmM0ZGVmYTg1NWZjMzli
MGNkNDEwMWU1ZTdlNGIyYmRjMGRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGljIEV4cGVjdGVkPHN0ZDo6cGFp
cjxWTSosIFN0YWNrQm91bmRzPiwgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWMK
ICAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3RvclN0YXR1czo6Q29udGludWU7
IC8vIFRyeSBuZXh0IFZNLgogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFk
czo6VGhyZWFkKiB0aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGlu
ZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAg
ICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMu
dGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tC
YXNlKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsK
ICAgICAgICAgICAgIGlmIChzdGFja1BvaW50ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBz
dGFja1BvaW50ZXIgPj0gdGhyZWFkLT5zdGFja0VuZCgpKSB7CkBAIC00NTUsNyArNDU1LDcgQEAg
dm9pZCBWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0g
Km1fdm07CiAgICAgICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRo
cmVhZCgpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAg
ICAgICAgICBzaWduYWxUaHJlYWQob3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLCBTSUdVU1Ix
KTsKKyAgICAgICAgICAgICAgICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChT
SUdVU1IxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDkz
LDcgKzQ5Myw3IEBAIHZvaWQgVk1UcmFwczo6ZmlyZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2
ZW50VHlwZSkKICAgICAgICAgLy8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KICAgICAgICAg
UmVmUHRyPFNpZ25hbFNlbmRlcj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2
bSgpLCBldmVudFR5cGUpKTsKICAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7
Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBb
c2VuZGVyXSB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5n
LnRocmVhZCIsIFtzZW5kZXJdIHsKICAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwogICAgICAg
ICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3Yzc3NGQ5N2RkNDE4NzJhMjBmMzk5Yzk2YTM1OTFkN2E0Y2FlMTQ5Li44YmNmZWJjNDcwMTQy
YzE4M2VkNTE1MmJiZDBmMGZiNDBhNmNmMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTMyNyw4ICszMjcsNyBAQAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICov
OyB9OwogCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24uaCAqLzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAgKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJ
CUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuaCAqLzsgfTsKIAkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
Ki87IH07CkBAIC0zNzQsNiArMzczLDkgQEAKIAkJREU1QTA5RkMxQkEzNjk5MjAwM0Q0NDI0IC8q
IENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICov
OyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1
NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi87IH07
CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGNDE4
QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oICovOyB9OworCQlFMzIw
MEFCNzFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjAwQUI0MUU5QTUzNkQwMDNCNTlE
MiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oICovOyB9OworCQlFMzIwMEFCODFFOUE1MzZEMDAzQjU5
RDIgLyogVGhyZWFkSG9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzMjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3Bw
ICovOyB9OworCQlFMzIwMEFCOTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIwMEFCNjFFOUE1
MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggKi87IH07CiAJCUU0M0E0Njk1MUUyMjhCOTEw
MDI3NkIwNSAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDNBNDY5MDFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oICovOyB9Owog
CQlFNDNBNDY5NjFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTExRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCAqLzsgfTsKIAkJRTQzQTQ2OTcxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2
OTIxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuY3BwICovOyB9OwpAQCAtNzMxLDggKzczMyw3
IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThB
NDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHJpbWl0aXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQ
cmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzcsNiArNzc4LDkg
QEAKIAkJREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25DcnlwdG9TUEkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dy
YXBoaWNVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8q
IFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjAwQUI1
MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRIb2xkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQzQTQ2OTAxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDNBNDY5MTFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwMCw2ICsxMTA0LDcgQEAKIAkJCQkwRjgyNEE2NTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi8sCisJCQkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRm
b3JtUmVnaXN0ZXJzLmggKi8sCiAJCQkJRENFRTIxRkUxQ0VBNzU1MTAwMEMyMzk2IC8qIFBsYXRm
b3JtVXNlclByZWZlcnJlZExhbmd1YWdlcy5oICovLAogCQkJCURDRUUyMUZGMUNFQTc1NTEwMDBD
MjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXNNYWMubW0gKi8sCiAJCQkJMEZG
ODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8sCkBAIC0xMTY3
LDggKzExNzIsOSBAQAogCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3Rl
bVRyYWNpbmcuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmggKi8sCi0JCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovLAotCQkJCUE4QTQ3MzMxMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8sCisJCQkJRTMyMDBB
QjUxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgKi8sCisJCQkJRTMyMDBBQjYx
RTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczMzIx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCkBAIC0xNTU2LDYgKzE1NjIsNyBAQAogCQkJ
CUE4QTQ3NDBDMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICov
LAogCQkJCURDRUUyMjAyMUNFQTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzMjAwQUI5MUU5QTUzNkQwMDNCNTlEMiAv
KiBUaHJlYWRIb2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1
MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzNjMx
NjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0
NDg4MzE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLywKQEAgLTE2
MjIsNyArMTYyOSw2IEBACiAJCQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRleHRCcmVh
a0l0ZXJhdG9ySUNVLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjQ4
LDYgKzE2NTQsNyBAQAogCQkJCUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjZCMjkzMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUzMjAwQUI3MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9y
bVJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEz
IC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJCTFGQTQ3QzhCMTUyNTAyREEwMDU2
OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU0NDc5RDFCN0FB
QTAzMDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMTgzMCw2ICsxODM3
LDcgQEAKIAkJCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxp
bWl0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYgLyog
U3RhY2tCb3VuZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTMyMDBBQjgxRTlBNTM2RDAwM0I1
OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRURBQ0QzRDE2MzBG
ODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQz
QzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xODQ3LDcgKzE4NTUsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBT
eW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERBMDBG
NUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0g
aW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1h
cmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2YWJm
NjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJjM2I3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5j
cHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKQEAg
LTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0eUNv
bmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8
VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVu
dGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25z
dW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7
CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2VpdmVk
TG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsK
LSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFk
KAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAg
ICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAg
ICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVk
aWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5z
aXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVj
a2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3Vs
ZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwg
IXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgp
KQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1bWVy
VGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhyZWFk
cy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9k
dWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZd
ICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2Fn
ZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0KAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBD
aGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1h
eFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEgKzEz
OCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0eUNv
bmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAg
ICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3IgKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChS
ZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtz
L0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVz
c1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5NGYu
LjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0
IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25l
ZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZp
ZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1U
aHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVh
ZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwogICAg
IAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03MCw3
ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAg
IGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRl
eF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRo
cmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAgICAg
ICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0
cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0g
ICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7
CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsK
ICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVk
VGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5kZXgg
NTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3MDZj
MTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMp
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3JkcyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91cHMp
OwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0g
c3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51
bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFk
PltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1UaHJl
YWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJvb2wg
a2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsK
ICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhy
ZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXgg
KiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAg
ICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3Vw
ICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJC
ZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgs
ICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1JdGVy
YXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3JkID0g
MDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2VlcEdv
aW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBu
dW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAg
ICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOwor
ICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAK
ICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291
cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2Fh
NjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3
ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBA
QCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAg
IAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAg
ICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBA
QCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQp
OworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJl
YWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUz
Y2IzMGE3NmEyYTg1NWZlYmEyYzcuLjFiYWUzYmI5MGIzNzEyMGE1MWM0ODk5ZDk4N2Q4YTM0MTI1
NDBkNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC05NSw2ICs5NSw3IEBAIHNldChXVEZfSEVB
REVSUwogICAgIFBhcmtpbmdMb3QuaAogICAgIFBhc3NSZWZQdHIuaAogICAgIFBsYXRmb3JtLmgK
KyAgICBQbGF0Zm9ybVJlZ2lzdGVycy5oCiAgICAgUHJpbnRTdHJlYW0uaAogICAgIFByb2Nlc3NJ
RC5oCiAgICAgUkFNU2l6ZS5oCkBAIC0xMjgsNyArMTI5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAg
ICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJh
Y2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisgICAgVGhyZWFkSG9s
ZGVyLmNwcAogICAgIFRocmVhZFNhZmVSZWZDb3VudGVkLmgKICAgICBUaHJlYWRTcGVjaWZpYy5o
CiAgICAgVGhyZWFkaW5nLmgKQEAgLTMyOSwxNiArMzMwLDE0IEBAIGxpc3QoQVBQRU5EIFdURl9M
SUJSQVJJRVMKIGlmIChXSU4zMikKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAg
ICBPU0FsbG9jYXRvcldpbi5jcHAKKyAgICAgICAgVGhyZWFkSG9sZGVyV2luLmNwcAogICAgICAg
ICBUaHJlYWRTcGVjaWZpY1dpbi5jcHAKICAgICAgICAgVGhyZWFkaW5nV2luLmNwcAogICAgICkK
IGVsc2UgKCkKLSAgICBsaXN0KEFQUEVORCBXVEZfSEVBREVSUwotICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmgKLSAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMK
ICAgICAgICAgT1NBbGxvY2F0b3JQb3NpeC5jcHAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHAKKyAgICAgICAgVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCiAgICAgICAg
IFRocmVhZGluZ1B0aHJlYWRzLmNwcAogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3Bw
CmluZGV4IDAyNDk1NDRjNTE4ZTgyYWZmMTcwNWRlMTllYzk2NWFiOThiMWQxMDYuLjM0Yjk0MjU1
NWFiNTYxODMyMTAxOGI0ZjA3OTBmMjgyNTBhN2RjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL01haW5UaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCkBA
IC0xODYsOSArMTg2LDkgQEAgYm9vbCBpc01haW5UaHJlYWQoKQogI2VuZGlmCiAKICNpZiAhVVNF
KFdFQl9USFJFQUQpCi1ib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkKQorYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQpCiB7Ci0gICAgcmV0dXJuIHRocmVhZElkID09
IGN1cnJlbnRUaHJlYWQoKTsKKyAgICByZXR1cm4gdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggMjVkOGY3NjZkY2ZiODc5YTFkNzY4M2Nl
NTUwOGRkOGQ3ZjFkNzdhZi4uMGU3OGU4ZTUxYWJlOGQ5NTU0NzJjNzlkZDM0NjkyZjE1NDZkYjFh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01haW5UaHJlYWQuaApAQCAtMzQsMTMgKzM0LDEyIEBACiAjaW5jbHVkZSA8c3RkaW50
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3Mg
UHJpbnRTdHJlYW07CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKLQogLy8g
TXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJl
SGFuZGxlci5oCmluZGV4IGRmZGRmMGE5NTU1MmRiM2UyYWVjZmVmNGVjMTZlZmI1YzZlNmM3YmQu
LjQxMjhmNWNkNzFhN2RiMmY0ZmQ3MDMyOTUzZjBjM2YxZjUwMGQxMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC0xNzMsNyArMTczLDcgQEAgY2xhc3MgTWVtb3J5
UHJlc3N1cmVIYW5kbGVyIHsKICNpZiBVU0UoR0xJQikKICAgICAgICAgR1JlZlB0cjxHU291cmNl
PiBtX3NvdXJjZTsKICNlbHNlCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsK
KyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAjZW5kaWYKICAgICB9OwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCmluZGV4IDQwMjNmNDNlNmYyMGEz
OGUxMDNlN2M5YTJlNGYwZjdlMDYxMDU3MTQuLmNjZTExMDZkNDY3YjcyMDgzYzFlZGIyMTNhZDU5
YzQ0MDMxN2E0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVy
aWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCkBAIC05
MywxNCArOTMsMTQgQEAgYm9vbCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0
cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9
IGNyZWF0ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2Vy
VGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisgICAgaWYgKCFtX3RocmVhZCkKKyAg
ICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhy
ZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CiAKLSAg
ICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1fcGFyZW50ID0g
cGFyZW50OwogCiAgICAgbV9tdXRleC51bmxvY2soKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsK
KyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhy
ZWFkUHJpdmF0ZTo6ZXhlY3V0ZShUaHJlYWRGdW5jdGlvbiB0aHJlYWRGdW5jdGlvbiwgdm9pZCog
cGFyYW1ldGVycykKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFBhcmFsbGVsRW52aXJvbm1lbnQ6
OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCh2b2lkKiB0aHJlYWREYXRhKQogICAgIFRocmVh
ZFByaXZhdGUqIHNoYXJlZFRocmVhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkUHJpdmF0ZSo+
KHRocmVhZERhdGEpOwogICAgIExvY2tIb2xkZXIgbG9jayhzaGFyZWRUaHJlYWQtPm1fbXV0ZXgp
OwogCi0gICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkgeworICAgIHdoaWxlIChz
aGFyZWRUaHJlYWQtPm1fdGhyZWFkKSB7CiAgICAgICAgIGlmIChzaGFyZWRUaHJlYWQtPm1fcnVu
bmluZykgewogICAgICAgICAgICAgKCpzaGFyZWRUaHJlYWQtPm1fdGhyZWFkRnVuY3Rpb24pKHNo
YXJlZFRocmVhZC0+bV9wYXJhbWV0ZXJzKTsKICAgICAgICAgICAgIHNoYXJlZFRocmVhZC0+bV9y
dW5uaW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNH
ZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKaW5kZXggNDU4
NDA3YzRjYjRhM2Y5OTVjOTBjNTU1NjI3YzFjYmQyMmI0MWI1Yy4uN2Q2OGVmMDcwZjY3YTY1MzNj
MGI4NzU4M2QyYTU3YTExOGQwNTZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxs
ZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBQYXJhbGxlbEVudmlyb25tZW50IHsKICAgICBjbGFz
cyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8VGhyZWFkUHJpdmF0ZT4gewogICAg
IHB1YmxpYzoKICAgICAgICAgVGhyZWFkUHJpdmF0ZSgpCi0gICAgICAgICAgICA6IG1fdGhyZWFk
SUQoMCkKKyAgICAgICAgICAgIDogbV90aHJlYWQobnVsbHB0cikKICAgICAgICAgICAgICwgbV9y
dW5uaW5nKGZhbHNlKQogICAgICAgICAgICAgLCBtX3BhcmVudCgwKQogICAgICAgICB7CkBAIC03
NCw3ICs3NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgICAgICBzdGF0aWMg
dm9pZCB3b3JrZXJUaHJlYWQodm9pZCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsK
ICAgICAgICAgYm9vbCBtX3J1bm5pbmc7CiAgICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQqIG1f
cGFyZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCmluZGV4IGU2YzY3OGJlZmMwZjE5MGEyMjNlOWFk
ZGIyY2M1ODEwYjU2ZTFjMTQuLmNjMWEyMWI5ZWE1Y2NjYzZmMWFjZTRjOTc0OTg5OWJiZGE1ZDdl
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0cnVjdCBUaHJlYWRE
YXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZERhdGE+IHsKICAgICBUaHJl
YWREYXRhKCk7CiAgICAgflRocmVhZERhdGEoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllcjsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQ7CiAgICAgCiAgICAgTXV0ZXgg
cGFya2luZ0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25kaXRpb247CkBAIC00
MjMsNyArNDIzLDcgQEAgdm9pZCBlbnN1cmVIYXNodGFibGVTaXplKHVuc2lnbmVkIG51bVRocmVh
ZHMpCiB9CiAKIFRocmVhZERhdGE6OlRocmVhZERhdGEoKQotICAgIDogdGhyZWFkSWRlbnRpZmll
cihjdXJyZW50VGhyZWFkKCkpCisgICAgOiB0aHJlYWQoVGhyZWFkOjpjdXJyZW50KCkpCiB7CiAg
ICAgdW5zaWduZWQgY3VycmVudE51bVRocmVhZHM7CiAgICAgZm9yICg7OykgewpAQCAtNzkzLDcg
Kzc5Myw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25zdCB2
b2lkKiBhZGRyZXNzKQogICAgIHVucGFya0NvdW50KGFkZHJlc3MsIFVJTlRfTUFYKTsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFt
YmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCitORVZF
Ul9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8
dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKIHsKICAgICBWZWN0b3I8QnVj
a2V0Kj4gYnVja2V0c1RvVW5sb2NrID0gbG9ja0hhc2h0YWJsZSgpOwogCkBAIC04MDMsNyArODAz
LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2Nv
cGVkTGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmkKICAgICAgICAgaWYgKCFidWNrZXQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChUaHJlYWREYXRhKiBjdXJyZW50VGhyZWFk
RGF0YSA9IGJ1Y2tldC0+cXVldWVIZWFkOyBjdXJyZW50VGhyZWFkRGF0YTsgY3VycmVudFRocmVh
ZERhdGEgPSBjdXJyZW50VGhyZWFkRGF0YS0+bmV4dEluUXVldWUpCi0gICAgICAgICAgICBjYWxs
YmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhyZWFkSWRlbnRpZmllciwgY3VycmVudFRocmVhZERh
dGEtPmFkZHJlc3MpOworICAgICAgICAgICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRo
cmVhZC5nZXQoKSwgY3VycmVudFRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgIH0KICAgICAKICAg
ICB1bmxvY2tIYXNodGFibGUoYnVja2V0c1RvVW5sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BhcmtpbmdMb3QuaCBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAppbmRleCA3
ZDVmYjE3ZWZhMDJhYjc2YjEyOGVhZjU5OTgxMzgwMTAwYmFiZDk2Li5iNmQ4ODMwZDE5YzdiN2Zk
NGNjNmFjYWUzNjJhZWEzYjk0M2E5ZDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJr
aW5nTG90LmgKKysrIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCkBAIC0xNTgsNyArMTU4
LDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICBzdGF0aWMgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotICAgICAgICBm
b3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2
b2lkKik+KGZ1bmMpKTsKKyAgICAgICAgZm9yRWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQo
VGhyZWFkJiwgY29uc3Qgdm9pZCopPihmdW5jKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTcx
LDcgKzE3MSw3IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB1bnBhcmtPbmVJbXBsKAogICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLCBj
b25zdCBTY29wZWRMYW1iZGE8aW50cHRyX3QoVW5wYXJrUmVzdWx0KT4mIGNhbGxiYWNrKTsKIAot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+Jik7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgyODY1ZWE4MzVhODU1
MzdjMGU3NmMxYTcwOTAwYjlhNTgyOTAzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybVJl
Z2lzdGVyc19oCisjZGVmaW5lIFBsYXRmb3JtUmVnaXN0ZXJzX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5o
PgorI2VsaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1
ZGUgPHVjb250ZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBPUyhEQVJX
SU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
UmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0
X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFk
X3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBw
Y190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5
cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFS
TTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5E
T1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZv
cm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdp
c3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFBsYXRmb3JtUmVnaXN0ZXJzX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKaW5kZXgg
ZmUxNjMwYzk3MzViNWZmNTM1M2NiMmM1NThlMzEwNTgxMjQ3ODdkOC4uMjc3ZTY3NWRiM2M1NTVk
NWU0YzZjZTA0OTQ2ODg3NGQzNjc2OTU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVm
UHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQyLDcgKzQyLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc1JlZlB0ciA9IHRydWU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cigpIDogbV9w
dHIobnVsbHB0cikgeyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgUmVmUHRyKCkgOiBt
X3B0cihudWxscHRyKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihUKiBwdHIpIDogbV9w
dHIocHRyKSB7IHJlZklmTm90TnVsbChwdHIpOyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQdHIo
Y29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsg
fQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDog
bV9wdHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCmluZGV4IDk0M2ZkNmQ3OWQwOTQ0MjU1MDNhYzg5NzMx
YjBhMDZhNmFjNDBmZmQuLmNiMjc1ZjcwMTJjZmU1NjYxZTQ5ZTBiNGZmMGQ5YzYyMWIwZTQ5OWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCkBAIC0yOSw2ICsy
OSw4IEBACiAjaWZuZGVmIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAjZGVmaW5lIFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKwogbmFtZXNw
YWNlIFdURiB7CiAKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVu
dCk7CkBAIC0zNiwxMyArMzgsMTUgQEAgdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZv
aWQqIGFyZ3VtZW50KTsKIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24gewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAgICBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIFJlZlB0cjxUaHJlYWQ+JiYg
dGhyZWFkLCB2b2lkKiBkYXRhKQogICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAg
ICAsIHRocmVhZChXVEZNb3ZlKHRocmVhZCkpCiAgICAgICAgICwgZGF0YShkYXRhKQogICAgIHsK
ICAgICB9CiAKICAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBSZWZQdHI8VGhyZWFk
PiB0aHJlYWQ7CiAgICAgdm9pZCogZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU3YmY2NDZmODVhNDhmMzg4YTc2ODU5MjkxMGQ0MTRlZTc0ZjgwZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xk
ZXIuaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGhy
ZWFkU3BlY2lmaWNLZXkgVGhyZWFkSG9sZGVyOjptX2tleSA9IEludmFsaWRUaHJlYWRTcGVjaWZp
Y0tleTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+
ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRo
cmVhZCkKK3sKKyAgICBpZiAoIWN1cnJlbnQoKSkgeworICAgICAgICAvLyBJZGVhbGx5IHdlJ2Qg
aGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQg
aHVydCBwZXJmb3JtYW5lLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBo
ZXJlIG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RG
Ojppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2Rl
LgorICAgICAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAg
ICAgICAgdGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlci5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzg5ZjQyYTBiNjM4Yjk5NmI5ZWUzYTkwNThkOTUyMjg4ZTE2YTQ2MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5oCkBAIC0wLDAgKzEsODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgVGhyZWFkSG9sZGVyX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIEhvbGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UuIFRoZSBkZXN0cnVjdG9yIG9mIHRoaXMgaG9sZGVyIHJlbGlhYmx5IGRlc3Ry
b3kgVGhyZWFkLgorLy8gRm9yIHB0aHJlYWQsIGl0IGVtcGxveXMgcHRocmVhZHMtc3BlY2lmaWMg
Mi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZSBUaHJlYWQuCisvLyBGb3IgV2lu
ZG93cywgd2UgdXNlIHRocmVhZF9sb2NhbCB0byBkZWZlciB0aHJlYWQgaG9sZGVyIGRlc3RydWN0
aW9uLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMKKy8vIHR5cGVzIGRvbid0IHVz
ZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFkSG9sZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGljOgorICAgIH5UaHJlYWRI
b2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNz
IGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGlu
aXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9m
IFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgorICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNw
ZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBzdGF0aWMgVGhyZWFkSG9s
ZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFk
LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRocmVhZCYgdGhyZWFkKQor
ICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1
Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgorICAgIC8vIC0g
Zmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJl
IGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJworICAg
IC8vIGFuZCAoMSkgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3Qg
b3IgKDIpIGNvbnN0cnVjdHMgdGhyZWFkIGxvY2FsIHZhbHVlIHRvIGNhbGwgaXQgYWdhaW4gbGF0
ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3Rv
cnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVt
b3ZlIHRoZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhl
IGNsZWFudXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgZGVzdHJ1Y3Qo
dm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBib29sIG1faXNE
ZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpY0tleSBtX2tleTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjgxNWFiYjZmNGVlZmM1
MjNlZGI5NzkzNWI5ZTI3NTVlODY0ZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKKworI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgVGhyZWFkSG9sZGVy
Ojppbml0aWFsaXplT25jZSgpCit7CisgICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJm1fa2V5
LCBkZXN0cnVjdCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkK
K3sKKyAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4odGhyZWFkU3BlY2lmaWNHZXQobV9rZXkp
KTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAg
VGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZEhv
bGRlcio+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7CisKKyAgICBp
ZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7CisgICAgICAgIGRl
bGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7CisgICAgLy8g
UmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNh
bGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxl
ZC4KKyAgICB0aHJlYWRTcGVjaWZpY1NldChtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY0NjA0NWQ3MmQxNDQ3NjdiMGIzNGI3MDNhZmY3MWMwNGYzNzQ5MGMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAgKzEs
MTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworI2Rl
ZmluZSBJbnZhbGlkVGhyZWFkSG9sZGVyICgoVGhyZWFkSG9sZGVyKikoMHhiYmFkYmVlZikpCisK
K3N0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxzdGQ6Om11dGV4PiBtdXRleDsKKyAgICByZXR1cm4gbXV0ZXg7Cit9CisKK3N0YXRpYyBI
YXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVhZEhvbGRlcio+JiB0aHJlYWRNYXAoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVh
ZEhvbGRlcio+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6
OmluaXRpYWxpemVPbmNlKCkKK3sKKyAgICB0aHJlYWRNYXBNdXRleCgpOworICAgIHRocmVhZE1h
cCgpOworICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOworfQor
CitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAgQVNTRVJUKG1f
a2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgVGhyZWFkSG9sZGVyKiBob2xk
ZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPih0aHJlYWRTcGVjaWZpY0dldChtX2tleSkp
OworICAgIGlmIChob2xkZXIpCisgICAgICAgIHJldHVybiBob2xkZXI7CisKKyAgICAvLyBBZnRl
ciBGTFMgaXMgZGVzdHJveWVkLCB0aGlzIG1hcCBvZmZlcnMgdGhlIHZhbHVlIHVudGlsIHRoZSBz
ZWNvbmQgdGhyZWFkIGV4aXQgY2FsbGJhY2sgaXMgY2FsbGVkLgorICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgIHJldHVybiB0aHJl
YWRNYXAoKS5nZXQoY3VycmVudFRocmVhZCgpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRl
c3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAgaWYgKGRhdGEgPT0gSW52YWxpZFRocmVhZEhvbGRl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGhyZWFkSG9sZGVyKiBob2xkZXIgPSBzdGF0aWNf
Y2FzdDxUaHJlYWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQoaG9sZGVyKTsKKworICAgIC8v
IERlbGF5IHRoZSBkZWFsbG9jYXRpb24gb2YgVGhyZWFkSG9sZGVyIG1vcmUuCisgICAgLy8gSXQg
ZGVmZXJzIFRocmVhZEhvbGRlciBkZWFsbG9jYXRpb24gYWZ0ZXIgdGhlIG90aGVyIFRocmVhZFNw
ZWNpZmljIHZhbHVlcyBhcmUgZGVhbGxvY2F0ZWQuCisgICAgc3RhdGljIHRocmVhZF9sb2NhbCBj
bGFzcyBUaHJlYWRFeGl0Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGhyZWFkRXhp
dENhbGxiYWNrKFRocmVhZEhvbGRlciogaG9sZGVyKQorICAgICAgICAgOiBtX2hvbGRlcihob2xk
ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5UaHJlYWRFeGl0Q2FsbGJhY2so
KQorICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KG1faG9sZGVy
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFkSG9sZGVyKiBtX2hv
bGRlcjsKKyAgICB9IGNhbGxiYWNrKGhvbGRlcik7CisKKyAgICBpZiAoaG9sZGVyLT5tX2lzRGVz
dHJveWVkT25jZSkgeworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0
ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0
aHJlYWRNYXAoKS5jb250YWlucyhob2xkZXItPm1fdGhyZWFkLT5pZCgpKSk7CisgICAgICAgICAg
ICB0aHJlYWRNYXAoKS5yZW1vdmUoaG9sZGVyLT5tX3RocmVhZC0+aWQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgZGVsZXRlIGhvbGRlcjsKKworICAgICAgICAvLyBGaWxsIHRoZSBGTFMgd2l0aCB0
aGUgbm9uLW51bGxwdHIgdmFsdWUuIFdoaWxlIEZMUyBkZXN0cnVjdG9yIHdvbid0IGJlIGNhbGxl
ZCBmb3IgdGhhdCwKKyAgICAgICAgLy8gbm9uLW51bGxwdHIgdmFsdWUgdGVsbHMgdXMgdGhhdCB3
ZSBhbHJlYWR5IGRlc3RydWN0ZWQgVGhyZWFkSG9sZGVyLiBJdCBsZWFkcyBpbmNvcnJlY3QKKyAg
ICAgICAgLy8gdXNlIG9mIFRocmVhZDo6Y3VycmVudCgpIGNyYXNoLgorICAgICAgICB0aHJlYWRT
cGVjaWZpY1NldChtX2tleSwgSW52YWxpZFRocmVhZEhvbGRlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9j
a2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgICAgICB0aHJlYWRNYXAoKS5hZGQoaG9sZGVyLT5t
X3RocmVhZC0+aWQoKSwgaG9sZGVyKTsKKyAgICB9CisgICAgdGhyZWFkU3BlY2lmaWNTZXQobV9r
ZXksIEludmFsaWRUaHJlYWRIb2xkZXIpOworICAgIGhvbGRlci0+bV9pc0Rlc3Ryb3llZE9uY2Ug
PSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBiZWJmZTkzYmE1YzcwYTliNGY0YjVmMjY1NzIxZGQxNjliZmYxNDMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFBUSFJFQURTKQotCi0jaW5jbHVk
ZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIgotCi0jaW5jbHVkZSAiVGhyZWFkaW5n
LmgiCi0KLSNpZiBPUyhIVVJEKQotLy8gUFRIUkVBRF9LRVlTX01BWCBpcyBub3QgZGVmaW5lZCBp
biBiaW9uaWMgbm9yIGluIEh1cmQsIHNvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUuCi0jZGVm
aW5lIFBUSFJFQURfS0VZU19NQVggMTAyNAotI2Vsc2UKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotcHRocmVhZF9rZXlfdCBUaHJlYWRJZGVudGlmaWVy
RGF0YTo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOwotCi12b2lkIHRocmVhZERpZEV4aXQoVGhy
ZWFkSWRlbnRpZmllcik7Ci0KLVRocmVhZElkZW50aWZpZXJEYXRhOjp+VGhyZWFkSWRlbnRpZmll
ckRhdGEoKQotewotICAgIHRocmVhZERpZEV4aXQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBU
aHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2UoKQotewotICAgIGludCBlcnJvciA9
IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKLSAgICBpZiAoZXJyb3IpCi0g
ICAgICAgIENSQVNIKCk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgVGhyZWFkSWRlbnRpZmllckRh
dGE6OmlkZW50aWZpZXIoKQotewotICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tFWVNfTUFY
KTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0
aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMobV9rZXkp
KTsKLQotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyRGF0YSA/IHRocmVhZElkZW50aWZpZXJE
YXRhLT5tX2lkZW50aWZpZXIgOiAwOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpp
bml0aWFsaXplKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVy
KCkpOwotICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBl
dmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZvcm1hbmUuCi0gICAgLy8gSGF2aW5n
IHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4n
dCBjYWxsCi0gICAgLy8gV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1
Z3MgaW4gcmVsZWFzZSBtb2RlLgotICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5ICE9IFBUSFJFQURf
S0VZU19NQVgpOwotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJlYWRJZGVu
dGlmaWVyRGF0YShpZCkpOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpkZXN0cnVj
dCh2b2lkKiBkYXRhKQotewotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKiB0aHJlYWRJZGVudGlm
aWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXJEYXRhKj4oZGF0YSk7Ci0gICAg
QVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKLQotICAgIGlmICh0aHJlYWRJZGVudGlmaWVy
RGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKLSAgICAgICAgZGVsZXRlIHRocmVhZElkZW50aWZp
ZXJEYXRhOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhyZWFkSWRlbnRpZmllckRh
dGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKLSAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1
ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIg
dGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgotICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg0MzQ5YTBjZGRhYWVjODYwYmNiZTRiYzBhNzI1YmQyNzVlNzJlYmQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0jZGVmaW5lIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHNfaAotCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotLy8gSG9sZHMgVGhyZWFkSWRlbnRpZmllciBpbiB0aGUgdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgcHRocmVhZHMtc3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0
aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQotLy8gVGhyZWFkSWRlbnRpZmllciBmcm9tIHRocmVhZE1h
cC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmljIHR5cGVzIGRvbid0IHVzZSBtdWx0
aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhyZWFkSWRlbnRpZmllckRhdGEgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZElkZW50aWZpZXJEYXRhKTsKLXB1YmxpYzoKLSAg
ICB+VGhyZWFkSWRlbnRpZmllckRhdGEoKTsKLQotICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0
aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCi0gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBi
ZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgot
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBw
dXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZElkZW50aWZpZXJEYXRhIGludG8gdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UuCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVy
IGlkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZpYyBzdG9y
YWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRl
bnRpZmllcigpOwotCi1wcml2YXRlOgotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKFRocmVhZElk
ZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikK
LSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
Ly8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVu
IHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0
aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVy
cyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwotICAgIC8vIGFuZCByZS1zZXRzIGl0c2VsZiBpbnRv
IHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwgaXQgYWdh
aW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVz
dHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwg
d2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aGUgdGhyZWFkTWFw
LCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgotICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KHZvaWQq
IGRhdGEpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAgYm9vbCBt
X2lzRGVzdHJveWVkT25jZTsKLSAgICBzdGF0aWMgcHRocmVhZF9rZXlfdCBtX2tleTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkc19oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKaW5kZXggZjA5MDRmY2Y2MjQ0OWUyZDNi
YWM3MDNkMmRhNzQ2MDBiYjdlMzk0OC4uMWY5ODM2M2U5MzQxMzRjNDE0MzMzNmM4YjgyZjhhZmM0
MzgxNWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCkBAIC00OCw2ICs0OCwxNCBAQAogCiAj
aWYgVVNFKFBUSFJFQURTKQogI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworI2lmIE9TKEhVUkQpCisv
LyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwg
c28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVyZS4KKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAx
MDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKICNlbGlmIE9TKFdJTkRP
V1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCkBAIC0xMDksNiArMTE3LDggQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgQ2FuQmVHQ1RocmVhZCBjYW5CZUdDVGhyZWFkID0gQ2FuQmVHQ1Ro
cmVhZDo6RmFsc2U+IGNsYXNzIFQKIAogdHlwZWRlZiBwdGhyZWFkX2tleV90IFRocmVhZFNwZWNp
ZmljS2V5OwogCitzdGF0aWMgY29uc3QgY29uc3RleHByIFRocmVhZFNwZWNpZmljS2V5IEludmFs
aWRUaHJlYWRTcGVjaWZpY0tleSA9IFBUSFJFQURfS0VZU19NQVg7CisKIGlubGluZSB2b2lkIHRo
cmVhZFNwZWNpZmljS2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKCpkZXN0
cnVjdG9yKSh2b2lkICopKQogewogICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZShr
ZXksIGRlc3RydWN0b3IpOwpAQCAtMTcxLDYgKzE4MSw4IEBAIFdURl9FWFBPUlRfUFJJVkFURSBE
V09SRCogZmxzS2V5cygpOwogCiB0eXBlZGVmIERXT1JEIFRocmVhZFNwZWNpZmljS2V5OwogCitz
dGF0aWMgY29uc3QgY29uc3RleHByIFRocmVhZFNwZWNpZmljS2V5IEludmFsaWRUaHJlYWRTcGVj
aWZpY0tleSA9IEZMU19PVVRfT0ZfSU5ERVhFUzsKKwogaW5saW5lIHZvaWQgdGhyZWFkU3BlY2lm
aWNLZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNLZXkqIGtleSwgdm9pZCAoVEhSRUFEX1NQRUNJRklD
X0NBTEwgKmRlc3RydWN0b3IpKHZvaWQgKikpCiB7CiAgICAgRFdPUkQgZmxzS2V5ID0gRmxzQWxs
b2MoZGVzdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3Bw
IGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCBjMWRjMzUwMTkwM2FiNzZiMzcw
NDZkOTMzM2Y5MzJhM2VmMGM2YzZlLi43MTg3ODE0MTAxOGU2ODAzYzAwNzA3MWEyZjZmYTYwZWMy
MDNjZTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RydWN0IE5ld1Ro
cmVhZENvbnRleHQgewogICAgIE11dGV4IGNyZWF0aW9uTXV0ZXg7CiB9OwogCi1jb25zdCBjaGFy
KiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCitjb25zdCBjaGFy
KiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsK
ICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9OUCkKICAgICByZXR1cm4gdGhyZWFkTmFtZTsKQEAg
LTgyLDcgKzgyLDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0
RGF0YSkKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgp
OwogICAgIH0KIAotICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+
bmFtZSk7CisgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRl
eHQtPm5hbWUpOwogCiAgICAgYXV0byBlbnRyeVBvaW50ID0gV1RGTW92ZShjb250ZXh0LT5lbnRy
eVBvaW50KTsKIApAQCAtOTIsMjQgKzkyLDI0IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9p
bnQodm9pZCogY29udGV4dERhdGEpCiAgICAgZW50cnlQb2ludCgpOwogfQogCi1UaHJlYWRJZGVu
dGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gZW50cnlQb2ludCkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQogewogICAgIE5ld1RocmVh
ZENvbnRleHQqIGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUo
ZW50cnlQb2ludCksIHsgfSB9OwogCiAgICAgLy8gUHJldmVudCB0aGUgdGhyZWFkIGJvZHkgZnJv
bSBleGVjdXRpbmcgdW50aWwgd2UndmUgZXN0YWJsaXNoZWQgdGhlIHRocmVhZCBpZGVudGlmaWVy
LgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsKIAotICAg
IHJldHVybiBjcmVhdGVUaHJlYWRJbnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBu
YW1lKTsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50
LCBjb250ZXh0LCBuYW1lKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhy
ZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKK1Jl
ZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZv
aWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZChu
YW1lLCBbZW50cnlQb2ludCwgZGF0YV0geworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZShuYW1l
LCBbZW50cnlQb2ludCwgZGF0YV0gewogICAgICAgICBlbnRyeVBvaW50KGRhdGEpOwogICAgIH0p
OwogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRp
dmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3Rp
dmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBB
U1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIHNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKICNl
bmRpZgogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0
aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRl
ZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogICAgIEFT
U0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTM0LDEzICsxMzQsMTMgQEAgdm9pZCBz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5KQogI2lm
IEhBVkUoUU9TX0NMQVNTRVMpCiBzdGF0aWMgcW9zX2NsYXNzX3QgZ2xvYmFsTWF4UU9TY2xhc3Mg
eyBRT1NfQ0xBU1NfVU5TUEVDSUZJRUQgfTsKIAotdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhx
b3NfY2xhc3NfdCBtYXhDbGFzcykKK3ZvaWQgVGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyhx
b3NfY2xhc3NfdCBtYXhDbGFzcykKIHsKICAgICBibWFsbG9jOjphcGk6OnNldFNjYXZlbmdlclRo
cmVhZFFPU0NsYXNzKG1heENsYXNzKTsKICAgICBnbG9iYWxNYXhRT1NjbGFzcyA9IG1heENsYXNz
OwogfQogCi1xb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFs
Q2xhc3MpCitxb3NfY2xhc3NfdCBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3Qg
b3JpZ2luYWxDbGFzcykKIHsKICAgICBpZiAoZ2xvYmFsTWF4UU9TY2xhc3MgIT0gUU9TX0NMQVNT
X1VOU1BFQ0lGSUVEKQogICAgICAgICByZXR1cm4gc3RkOjptaW4ob3JpZ2luYWxDbGFzcywgZ2xv
YmFsTWF4UU9TY2xhc3MpOwpAQCAtMTQ4LDQgKzE0OCw5IEBAIHFvc19jbGFzc190IGFkanVzdGVk
UU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3JpZ2luYWxDbGFzcykKIH0KICNlbmRpZgogCit2b2lkIFRo
cmVhZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2lk
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDZiNTU4YjNlMWQ1
MTdlODEwYzVlYThmNmIyY2E0NDA1YWNmMDEyZDIuLjY5YWQ5YzRiNDg0MTY5NGZiOGUwMDdkZmZl
YjJmOTllZDIwYzA5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29k
QHJlYWt0aXguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5
Z29vZEByZWFrdGl4LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDc1ICszNiwxNzIgQEAKIC8vIE5vdGhpbmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5kcyBvbiBB
c3NlcnRpb25zLCBBdG9taWNzLCBMb2NrZXIsIE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZlUmVmQ291
bnRlZCwgb3IgVGhyZWFkaW5nUHJpbWl0aXZlcy4KIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cisj
aW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3Rl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4K
IAorI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKKyNpbmNsdWRlIDxzZW1hcGhvcmUu
aD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAotdHlw
ZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgVGhyZWFkSWRlbnRpZmllciA9
IHVpbnQzMl90OwogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50
KTsKIAotLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVh
ZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhj
ZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJlYWQs
IHRoZSBvbmx5IAotLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVu
dHJhbnQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7Citj
bGFzcyBUaHJlYWRIb2xkZXI7CitjbGFzcyBQcmludFN0cmVhbTsKKworY2xhc3MgVGhyZWFkIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4geworcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBUaHJlYWRIb2xkZXI7CiAKLS8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3JlYXRpb24g
ZmFpbGVkLgotLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNv
bWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1XVEZfRVhQT1JUX1BS
SVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogdGhyZWFkTmFt
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgflRocmVh
ZCgpOwogCi0vLyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9u
c2l2ZW5lc3MuCi0vLyByZWxhdGl2ZVByaW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFst
MTUsIDBdIHdoZXJlIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJpb3JpdHkuCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUo
aW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1
cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKyAg
ICAvLyBSZXR1cm5zIG51bGxwdHIgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KKyAgICAvLyBU
aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMg
aXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRo
cmVhZD4gY3JlYXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0
IGNoYXIqIG5hbWUpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjdXJy
ZW50VGhyZWFkKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0
eShUaHJlYWRJZGVudGlmaWVyLCBpbnQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGludCB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICAvLyBSZXR1cm5zIFRocmVh
ZCBvYmplY3QuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQo
KTsKIAotLy8gRGVwcmVjYXRlZCBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIHRocmVhZCBjcmVhdGlv
bi4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJl
YWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIC8vIFJldHVy
bnMgVGhyZWFkSWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9u
bHkgY2FyZXMgYWJvdXQgaWRlbnRpdHkKKyAgICAvLyBvZiB0aHJlYWRzIGFuZCBlbnN1cmUgdGhl
IHRocmVhZCBsaWZldGltZS4gV2hpbGUgVGhyZWFkOjpjdXJyZW50KCkgaXMgbm90IHNhZmUgaWYg
aXQgaXMgY2FsbGVkCisgICAgLy8gZnJvbSB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgb3RoZXIgVExT
IGRhdGEsIGN1cnJlbnRJRCgpIGFsd2F5cyByZXR1cm5zIG1lYW5pbmdmdWwgdGhyZWFkIElELgor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50SUQo
KTsKIAotLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGltcGxlbWVu
dGF0aW9uLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5j
dGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGNoYW5nZVByaW9yaXR5KGludCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGlu
dCB3YWl0Rm9yQ29tcGxldGlvbigpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRldGFj
aCgpOwogCi0vLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0v
LyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0
IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisjaWYgT1MoREFSV0lOKQorICAgIHVzaW5n
IFBsYXRmb3JtU3VzcGVuZEVycm9yID0ga2Vybl9yZXR1cm5fdDsKKyNlbGlmIFVTRShQVEhSRUFE
UykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IGludDsKKyNlbGlmIE9TKFdJTkRP
V1MpCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBEV09SRDsKKyNlbmRpZgogCi1j
b25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJv
cj4gc3VzcGVuZCgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc3VtZSgpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZ2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJz
Jik7CiAKICNpZiBVU0UoUFRIUkVBRFMpCi1ib29sIHNpZ25hbFRocmVhZChUaHJlYWRJZGVudGlm
aWVyLCBpbnQgc2lnbmFsTnVtYmVyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBzaWdu
YWwoaW50IHNpZ25hbE51bWJlcik7CiAjZW5kaWYKIAorICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQg
dGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KKyAgICAvLyByZWxhdGl2ZVBy
aW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTUsIDBdIHdoZXJlIGEgbG93ZXIgdmFs
dWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJpb3JpdHkuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQ
cmlvcml0eSA9IDApOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisKICNp
ZiBIQVZFKFFPU19DTEFTU0VTKQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2xvYmFsTWF4
UU9TQ2xhc3MocW9zX2NsYXNzX3QpOwotV1RGX0VYUE9SVF9QUklWQVRFIHFvc19jbGFzc190IGFk
anVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190
KTsKICNlbmRpZgogCi19IC8vIG5hbWVzcGFjZSBXVEYKKyAgICAvLyBJbnRlcm5hbCBwbGF0Zm9y
bS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICBzdGF0aWMgUmVm
UHRyPFRocmVhZD4gY3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBj
aGFyKiB0aHJlYWROYW1lKTsKIAotdXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwotdXNpbmcg
V1RGOjpjcmVhdGVUaHJlYWQ7Ci11c2luZyBXVEY6OmN1cnJlbnRUaHJlYWQ7Ci11c2luZyBXVEY6
OmNoYW5nZVRocmVhZFByaW9yaXR5OwotdXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2luZyBX
VEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uOworICAgIC8vIENhbGxlZCBpbiB0aGUgdGhyZWFk
IGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAgICAvLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hl
cmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCisg
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFy
KiB0aHJlYWROYW1lKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFt
ZShjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLXVzaW5nIFdU
Rjo6c2lnbmFsVGhyZWFkOworICAgIHZvaWQgZXN0YWJsaXNoKHB0aHJlYWRfdCk7CisjZWxzZQor
ICAgIHZvaWQgZXN0YWJsaXNoKEhBTkRMRSwgVGhyZWFkSWRlbnRpZmllcik7CiAjZW5kaWYKIAot
I2lmIEhBVkUoUU9TX0NMQVNTRVMpCi11c2luZyBXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzOwot
dXNpbmcgV1RGOjphZGp1c3RlZFFPU0NsYXNzOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKKyNpZiBVU0UoUFRIUkVBRFMpICYmICFP
UyhEQVJXSU4pCisgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUoaW50
LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CiAjZW5kaWYKIAorICAgIFRocmVhZElkZW50
aWZpZXIgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVGhyZWFkJiB0aHJlYWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQoKSA9PSB0aHJl
YWQuaWQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGhyZWFkJiB0aHJl
YWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQoKSAhPSB0aHJlYWQuaWQoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgVGhyZWFkKCk7CisKKyAgICBlbnVtIEpvaW5hYmxlU3RhdGUgeworICAg
ICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5l
ZCBvbi4KKyAgICAgICAgSm9pbmFibGUsCisKKyAgICAgICAgLy8gU29tZWJvZHkgd2FpdGVkIG9u
IHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlz
IHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYQorICAgICAgICAvLyBwZXJpb2Qg
b2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJl
YWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxl
dGlvbiB0byBydW4pCisgICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVk
LiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhy
ZWFkIGRhdGEgc2luY2UgdGhlcmUncworICAgICAgICAvLyBub2JvZHkgZWxzZSB0byBwaWNrIHVw
IHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVhZENvbXBsZXRpb24gaGFz
IGFscmVhZHkgcmV0dXJuZWQpLgorICAgICAgICBKb2luZWQsCisKKyAgICAgICAgLy8gVGhlIHRo
cmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0
IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0
ZXIgaXRzZWxmLgorICAgICAgICBEZXRhY2hlZCwKKyAgICB9OworCisgICAgSm9pbmFibGVTdGF0
ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRlOyB9CisgICAgdm9pZCBk
aWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRlID0gRGV0YWNoZWQ7IH0KKyAgICB2
b2lkIGRpZEV4aXQoKTsKKyAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpv
aW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9CisKKyAg
ICAvLyBXb3JkTG9jayAmIExvY2sgcmVseSBvbiBUaHJlYWRTcGVjaWZpYy4gQnV0IFRocmVhZCBv
YmplY3QgY2FuIGJlIGRlc3Ryb3llZCBldmVuIGFmdGVyIFRocmVhZFNwZWNpZmljIHRoaW5ncyBh
cmUgZGVzdHJveWVkLgorICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsKKyAgICBUaHJlYWRJZGVudGlm
aWVyIG1faWQgeyAwIH07CisgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2lu
YWJsZSB9OworICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsKKyNpZiBVU0UoUFRIUkVBRFMp
CisgICAgcHRocmVhZF90IG1faGFuZGxlOworI2lmIE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRf
dCBtX3BsYXRmb3JtVGhyZWFkOworI2Vsc2UKKyAgICBzZW1fdCBtX3NlbWFwaG9yZUZvclN1c3Bl
bmRSZXN1bWU7CisgICAgbWNvbnRleHRfdCBtX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0OworICAg
IHVuc2lnbmVkIG1fc3VzcGVuZENvdW50IHsgMCB9OworICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1f
c3VzcGVuZGVkIHsgZmFsc2UgfTsKKyNlbmRpZgorI2VsaWYgT1MoV0lORE9XUykKKyAgICBIQU5E
TEUgbV9oYW5kbGU7CisjZWxzZQorI2Vycm9yIFVua25vd24gU3lzdGVtCisjZW5kaWYKK307CisK
Ky8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0
IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5LgorLy8gRGFyd2luIGlzIGFuIGV4Y2VwdGlv
biB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNhbGwgaXQgZnJvbSBhbnkgdGhyZWFkLCB0aGUg
b25seQorLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQu
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CisKK2lubGlu
ZSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQoreworICAgIHJldHVybiBUaHJlYWQ6
OmN1cnJlbnRJRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaHJl
YWRJZGVudGlmaWVyOwordXNpbmcgV1RGOjpUaHJlYWQ7Cit1c2luZyBXVEY6OmN1cnJlbnRUaHJl
YWQ7CisKICNlbmRpZiAvLyBUaHJlYWRpbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwCmluZGV4IGY1Y2VlM2MxNzc4MmY2NmFmOWIwNGNjN2Q1NmNhMWRhNWE2OTJkMGYuLjU3NTJl
ZWUyODY4ODM5ZDllMmI1NTg3OGM4MDhkNjFjOGQ2ZmM4MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKQEAgLTEsNyArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgPGpoYXlnb29kQHJlYWt0aXguY29tPgogICog
Q29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTMg
KzQyLDE3IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgogI2luY2x1ZGUgIlN0ZExp
YkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgotI2luY2x1
ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLSNpbmNsdWRlICJUaHJlYWRTcGVj
aWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlci5oIgorI2luY2x1ZGUgPGVycm5vLmg+CiAj
aW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRh
Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KKworI2lm
IE9TKExJTlVYKQorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2VuZGlmCiAKICNpZiAhQ09NUElM
RVIoTVNWQykKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTU1LDEyNyArNjAsMTQzIEBACiAjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi0jaWYgT1MoTElOVVgpCi0jaW5jbHVkZSA8c3lz
L3ByY3RsLmg+Ci0jZW5kaWYKLQotI2lmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+
Ci0jZW5kaWYKKyNpZiAhT1MoREFSV0lOKSAmJiBPUyhVTklYKQogCi1uYW1lc3BhY2UgV1RGIHsK
KyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi1jbGFzcyBQdGhy
ZWFkU3RhdGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVu
dW0gSm9pbmFibGVTdGF0ZSB7Ci0gICAgICAgIEpvaW5hYmxlLCAvLyBUaGUgZGVmYXVsdCB0aHJl
YWQgc3RhdGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KLQotICAgICAgICBKb2luZWQs
IC8vIFNvbWVib2R5IHdhaXRlZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlzIHRocmVh
ZCBmaW5hbGx5IGV4aXRlZC4gVGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJl
IGEgCi0gICAgICAgICAgICAgICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0
aHJlYWQgZXhpdHMgKHdoaWNoIGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aGUg
cmVtYWluZGVyIG9mIHdhaXRPblRocmVhZENvbXBsZXRpb24gdG8gcnVuKSAKLSAgICAgICAgICAg
ICAgICAvLyBhbmQgd2hlbiB0aHJlYWREaWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0aHJlYWRE
aWRFeGl0IHRvIHRha2UgY2hhcmdlIGFuZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNpbmNlIHRo
ZXJlJ3MgCi0gICAgICAgICAgICAgICAgLy8gbm9ib2R5IGVsc2UgdG8gcGljayB1cCB0aGUgc2xh
Y2sgaW4gdGhpcyBjYXNlIChzaW5jZSB3YWl0T25UaHJlYWRDb21wbGV0aW9uIGhhcyBhbHJlYWR5
IHJldHVybmVkKS4KLQotICAgICAgICBEZXRhY2hlZCAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRl
dGFjaGVkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhl
IHRocmVhZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCi0gICAg
fTsKLQotICAgIC8vIEN1cnJlbnRseSBhbGwgdGhyZWFkcyBjcmVhdGVkIGJ5IFdURiBzdGFydCBv
dXQgYXMgam9pbmFibGUuIAotICAgIFB0aHJlYWRTdGF0ZShwdGhyZWFkX3QgaGFuZGxlKQotICAg
ICAgICA6IG1fam9pbmFibGVTdGF0ZShKb2luYWJsZSkKLSAgICAgICAgLCBtX2RpZEV4aXQoZmFs
c2UpCi0gICAgICAgICwgbV9wdGhyZWFkSGFuZGxlKGhhbmRsZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRl
OyB9Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUoKSB7IHJldHVybiBtX3B0aHJlYWRIYW5k
bGU7IH0KLSAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBE
ZXRhY2hlZDsgfQotICAgIHZvaWQgZGlkRXhpdCgpIHsgbV9kaWRFeGl0ID0gdHJ1ZTsgfQotICAg
IHZvaWQgZGlkSm9pbigpIHsgbV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9Ci0gICAgYm9vbCBo
YXNFeGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4aXQ7IH0KKyNpZiBPUyhTT0xBUklTKQorI2luY2x1
ZGUgPHRocmVhZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKIAotcHJp
dmF0ZToKLSAgICBKb2luYWJsZVN0YXRlIG1fam9pbmFibGVTdGF0ZTsKLSAgICBib29sIG1fZGlk
RXhpdDsKLSAgICBwdGhyZWFkX3QgbV9wdGhyZWFkSGFuZGxlOwotfTsKKyNpZiBIQVZFKFBUSFJF
QURfTlBfSCkKKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisjZW5kaWYKIAotdHlwZWRlZiBIYXNo
TWFwPFRocmVhZElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxQdGhyZWFkU3RhdGU+PiBUaHJl
YWRNYXA7CisjZW5kaWYKIAotdm9pZCB1bnNhZmVUaHJlYWRXYXNEZXRhY2hlZChUaHJlYWRJZGVu
dGlmaWVyKTsKLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyKTsKLXZvaWQgdGhy
ZWFkV2FzSm9pbmVkKFRocmVhZElkZW50aWZpZXIpOworbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRp
YyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQorVGhyZWFkOjpUaHJlYWQoKQogewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4OworI2lmICFP
UyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyog
T25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZv
ciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgogfQogCi12b2lkIGluaXRpYWxpemVUaHJl
YWRpbmcoKQorVGhyZWFkOjp+VGhyZWFkKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxp
emVkOwotCi0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlz
SW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlh
bGl6ZSgpOwotICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0
cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAotICAgIC8vIHNvIGVuc3Vy
ZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1w
dHkoKTsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJH
ZW5lcmF0b3IoKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2UoKTsK
LSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlhbGl6ZURhdGVzKCk7CisjaWYgIU9TKERB
UldJTikKKyAgICBzZW1fZGVzdHJveSgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyNl
bmRpZgogfQogCi1zdGF0aWMgVGhyZWFkTWFwJiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxUaHJlYWRNYXA+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQorI2lmICFP
UyhEQVJXSU4pCiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0aHJlYWRI
YW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQotewotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKy8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQg
YW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCitzdGF0aWMgY29u
c3RleHByIGNvbnN0IGludCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lID0gU0lHVVNSMjsKK3N0YXRp
YyBzdGQ6OmF0b21pYzxUaHJlYWQqPiB0YXJnZXRUaHJlYWQgeyBudWxscHRyIH07CitzdGF0aWMg
U3RhdGljV29yZExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CiAKLSAgICBUaHJlYWRNYXA6Oml0ZXJh
dG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgp
LmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+dmFsdWUtPnB0aHJl
YWRIYW5kbGUoKSwgcHRocmVhZEhhbmRsZSkgJiYgIWktPnZhbHVlLT5oYXNFeGl0ZWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBpLT5rZXk7Cit2b2lkIFRocmVhZDo6c2lnbmFsSGFuZGxlclN1c3Bl
bmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKK3sKKyAgICAvLyBUb3Vj
aGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRsZXJzIGlzIGFs
bG93ZWQuCisgICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQubG9hZCgpOworCisgICAg
aWYgKHRocmVhZC0+bV9zdXNwZW5kZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkg
eworICAgICAgICAvLyBUaGlzIGlzIHNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gdGhhdCBpcyBp
bnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlc3VtZSBzaWdzdXNwZW5kLgorICAgICAgICAvLyBTbyB0
aGlzIGhhbmRsZXIgaW52b2NhdGlvbiBpdHNlbGYgc2hvdWxkIG5vdCBwcm9jZXNzLgorICAgICAg
ICAvLworICAgICAgICAvLyBXaGVuIHNpZ25hbCBjb21lcywgZmlyc3QsIHRoZSBzeXN0ZW0gY2Fs
bHMgc2lnbmFsIGhhbmRsZXIuIEFuZCBsYXRlciwgc2lnc3VzcGVuZCB3aWxsIGJlIHJlc3VtZWQu
IFNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gYWx3YXlzIHByZWNlZGVzLgorICAgICAgICAvLyBT
bywgdGhlIHByb2JsZW0gbmV2ZXIgaGFwcGVucyB0aGF0IHN1c3BlbmRlZC5zdG9yZSh0cnVlLCAu
Li4pIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBoYW5kbGVyIGlzIGNhbGxlZC4KKyAgICAg
ICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5j
dGlvbnMvc2lnc3VzcGVuZC5odG1sCisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXR1
cm4gMDsKKyAgICB1Y29udGV4dF90KiB1c2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0
X3QqPih1Y29udGV4dCk7CisjaWYgQ1BVKFBQQykKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFj
aGluZUNvbnRleHQgPSAqdXNlckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7CisjZWxzZQor
ICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19t
Y29udGV4dDsKKyNlbmRpZgorCisgICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRo
YXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgorICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNp
Z25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBh
IHNpZ25hbCBoYW5kbGVyLgorICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5l
cHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMK
KyAgICAvLworICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVu
c3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCisg
ICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFz
ZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9z
ZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKworICAgIC8vIFJlYWNoaW5nIGhlcmUsIFNpZ1Ro
cmVhZFN1c3BlbmRSZXN1bWUgaXMgYmxvY2tlZCBpbiB0aGlzIGhhbmRsZXIgKHRoaXMgaXMgY29u
ZmlndXJlZCBieSBzaWdhY3Rpb24ncyBzYV9tYXNrKS4KKyAgICAvLyBTbyBiZWZvcmUgY2FsbGlu
ZyBzaWdzdXNwZW5kLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHRvIHRoaXMgdGhyZWFkIGlzIGRl
ZmVycmVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgZXhlY3V0ZWQgcmVj
dXJzaXZlbHkuCisgICAgc2lnc2V0X3QgYmxvY2tlZFNpZ25hbFNldDsKKyAgICBzaWdmaWxsc2V0
KCZibG9ja2VkU2lnbmFsU2V0KTsKKyAgICBzaWdkZWxzZXQoJmJsb2NrZWRTaWduYWxTZXQsIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHNpZ3N1c3BlbmQoJmJsb2NrZWRTaWduYWxTZXQp
OworCisgICAgLy8gQWxsb3cgcmVzdW1lIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBp
cyByZXN1bWVkLgorICAgIHNlbV9wb3N0KCZ0aHJlYWQtPm1fc2VtYXBob3JlRm9yU3VzcGVuZFJl
c3VtZSk7CiB9CiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50aWZpZXJG
b3JQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKKyNlbmRpZiAv
LyAhT1MoREFSV0lOKQorCit2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogewotICAgIEFTU0VS
VCghaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlm
aWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJD
b3VudCwgc3RkOjptYWtlX3VuaXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRIYW5kbGUpKTsKLSAg
ICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGlu
aXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAg
ICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVh
ZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHko
KSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZh
c2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9t
IGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVS
YW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAg
ICBpbml0aWFsaXplRGF0ZXMoKTsKKworI2lmICFPUyhEQVJXSU4pCisgICAgICAgIC8vIFNpZ25h
bCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KKyAgICAgICAgLy8g
SW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVy
LgorICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dlZCBpbiB0
aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgorICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlv
bjsKKyAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgc2lnYWRk
c2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisKKyAgICAgICAg
YWN0aW9uLnNhX3NpZ2FjdGlvbiA9IFRocmVhZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWU7
CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOworICAg
ICAgICBzaWdhY3Rpb24oU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlvbiwgMCk7CisjZW5k
aWYKKyAgICB9KTsKIH0KIAotc3RhdGljIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlRm9ySWRlbnRp
ZmllcldpdGhMb2NrQWxyZWFkeUhlbGQoVGhyZWFkSWRlbnRpZmllciBpZCkKK3N0YXRpYyB2b2lk
IGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCiB7Ci0gICAgcmV0
dXJuIHRocmVhZE1hcCgpLmdldChpZCktPnB0aHJlYWRIYW5kbGUoKTsKKyNpZiAhT1MoREFSV0lO
KQorICAgIHNpZ3NldF90IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAgIHNpZ2Fk
ZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgcHRocmVhZF9zaWdtYXNr
KFNJR19VTkJMT0NLLCAmbWFzaywgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQqIHd0ZlRo
cmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQ
dHIoKSBpbiBjcmVhdGVUaHJlYWRJbnRlcm5hbC4KKyAgICAvLyBCYWxhbmNlZCBieSAubGVha1B0
cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwuCiAgICAgYXV0byBpbnZvY2F0aW9uID0gc3Rk
Ojp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8VGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKKworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlh
bGl6ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxs
cHRyOworCiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJu
YWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciopCitS
ZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5
UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewotICAgIGF1dG8gaW52b2NhdGlvbiA9
IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBk
YXRhKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkp
OworICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uPihlbnRyeVBvaW50LCB0aHJlYWQuZ2V0KCksIGRhdGEpOwogICAgIHB0aHJlYWRf
dCB0aHJlYWRIYW5kbGU7CiAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKICAgICBwdGhyZWFkX2F0
dHJfaW5pdCgmYXR0cik7CkBAIC0xODYsMTcgKzIwNywxOCBAQCBUaHJlYWRJZGVudGlmaWVyIGNy
ZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEs
IGNvbgogICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyKTsKICAgICBpZiAoZXJyb3IpIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50cnkgcG9p
bnQgJXAgd2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQo
KSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
ICAgICAvLyBCYWxhbmNlZCBieSBzdGQ6OnVuaXF1ZV9wdHIgY29uc3RydWN0b3IgaW4gd3RmVGhy
ZWFkRW50cnlQb2ludC4KICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGxlYWtlZEludm9j
YXRpb24gPSBpbnZvY2F0aW9uLnJlbGVhc2UoKTsKICAgICBVTlVTRURfUEFSQU0obGVha2VkSW52
b2NhdGlvbik7CiAKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5k
bGUodGhyZWFkSGFuZGxlKTsKKyAgICB0aHJlYWQtPmVzdGFibGlzaCh0aHJlYWRIYW5kbGUpOwor
ICAgIHJldHVybiB0aHJlYWQ7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRl
cm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBU
SFJFQURfU0VUTkFNRV9OUCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFk
TmFtZSh0aHJlYWROYW1lKSk7CkBAIC0yMDUsMTIzICsyMjcsMjM0IEBAIHZvaWQgaW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0odGhyZWFkTmFtZSk7CiAjZW5kaWYKLQotICAgIFRocmVhZElkZW50aWZp
ZXIgaWQgPSBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJlYWRfc2VsZigpKTsKLSAgICBB
U1NFUlQoaWQpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKGlkKTsKKyAg
ICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0KLSAgICAK
LXZvaWQgY2hhbmdlVGhyZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgaW50
IGRlbHRhKQotewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFTU0VSVCh0aHJl
YWRJRCk7CiAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVy
V2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhyZWFkSGFu
ZGxlKTsKLSAgICB9Cit2b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRlbHRhKQorewor
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwogCiAgICAg
aW50IHBvbGljeTsKICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CiAKLSAgICBpZiAocHRo
cmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCisgICAg
aWYgKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShtX2hhbmRsZSwgJnBvbGljeSwgJnBhcmFtKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgKz0gZGVsdGE7CiAKLSAg
ICBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZEhhbmRsZSwgcG9saWN5LCAmcGFyYW0pOwor
ICAgIHB0aHJlYWRfc2V0c2NoZWRwYXJhbShtX2hhbmRsZSwgcG9saWN5LCAmcGFyYW0pOwogfQog
Ci1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkK
K2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBwdGhyZWFkX3QgcHRocmVh
ZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCisgICAgcHRocmVhZF90IGhhbmRsZTsK
ICAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbG9jayBhY3Jvc3MgdGhlIGNhbGwg
dG8gam9pbiwgc2luY2UgdGhhdCBjYW4gYmxvY2sgb3VyIHRocmVhZCBhbmQgY2F1c2UgZGVhZGxv
Y2suCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICAg
ICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJl
YWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgICAg
IGhhbmRsZSA9IG1faGFuZGxlOwogICAgIH0KIAotICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVh
ZF9qb2luKHB0aHJlYWRIYW5kbGUsIDApOworICAgIGludCBqb2luUmVzdWx0ID0gcHRocmVhZF9q
b2luKGhhbmRsZSwgMCk7CiAKICAgICBpZiAoam9pblJlc3VsdCA9PSBFREVBRExLKQotICAgICAg
ICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2Nr
ZWQgdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAgICAgIExPR19FUlJPUigiVGhyZWFk
SWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIs
IG1faWQpOwogICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhy
ZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5lZC5cbiIsIHRocmVhZElEKTsK
KyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUg
am9pbmVkLlxuIiwgbV9pZCk7CiAKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0gICAgUHRocmVhZFN0YXRlKiBzdGF0ZSA9IHRocmVhZE1hcCgpLmdldCh0aHJlYWRJ
RCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICBBU1NFUlQoc3RhdGUtPmpvaW5hYmxlU3RhdGUo
KSA9PSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6
bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgpID09IEpv
aW5hYmxlKTsKIAotICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBzbyBjbGVh
biB1cCBhZnRlciBpdC4KLSAgICBpZiAoc3RhdGUtPmhhc0V4aXRlZCgpKQotICAgICAgICB0aHJl
YWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOworICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkg
ZXhpdGVkLCBkbyBub3RoaW5nLgogICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQs
IHNvIGRvbid0IGNsZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVh
ZHkgam9pbmVkIG9uIGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBhZnRlciBpdHNlbGYuCi0g
ICAgZWxzZQotICAgICAgICBzdGF0ZS0+ZGlkSm9pbigpOworICAgIGlmICghaGFzRXhpdGVkKCkp
CisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCi12b2lk
IGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJlYWQ6OmRl
dGFjaCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9IHB0aHJl
YWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAg
QVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotCi0gICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRf
ZGV0YWNoKHB0aHJlYWRIYW5kbGUpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4g
bG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBkZXRhY2hSZXN1bHQgPSBwdGhyZWFkX2RldGFjaCht
X2hhbmRsZSk7CiAgICAgaWYgKGRldGFjaFJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJl
YWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRocmVhZElEKTsK
LQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFkSUQpOwot
ICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAg
dGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLSAgICBlbHNlCi0gICAgICAgIHRocmVhZE1h
cCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIExPR19FUlJP
UigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4iLCBtX2lk
KTsKKworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFjaGVkKCk7
CiB9CiAKLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQorVGhy
ZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRo
cmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRFeGl0KCk7
CisgICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7CisgICAg
aWYgKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKIAotICAgIGlmIChzdGF0
ZS0+am9pbmFibGVTdGF0ZSgpICE9IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpCi0gICAgICAgIHRo
cmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhy
ZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmUHRy
PFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICB0aHJlYWQtPmVz
dGFibGlzaChwdGhyZWFkX3NlbGYoKSk7CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCp0
aHJlYWQpOworICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgp
OworICAgIHJldHVybiAqdGhyZWFkOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJl
YWQoKQorVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiB7Ci0gICAgVGhyZWFk
SWRlbnRpZmllciBpZCA9IFRocmVhZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCk7Ci0gICAg
aWYgKGlkKQotICAgICAgICByZXR1cm4gaWQ7CisgICAgcmV0dXJuIGN1cnJlbnQoKS5pZCgpOwor
fQogCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlz
IG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yUHRo
cmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6Omlu
aXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsKK2Jvb2wgVGhyZWFkOjpzaWduYWwoaW50IHNp
Z25hbE51bWJlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlciht
X211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25hbE51
bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9
CiAKLWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBzaWdu
YWxOdW1iZXIpCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBsYXRm
b3JtU3VzcGVuZEVycm9yPgogewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFT
U0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0aGlzICE9ICZjdXJyZW50
KCksICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVh
ZCBpdHNlbGYuIik7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9t
dXRleCk7CisjaWYgT1MoREFSV0lOKQorICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFk
X3N1c3BlbmQobV9wbGF0Zm9ybVRocmVhZCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NF
U1MpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgIHJldHVybiB7
IH07CisjZWxzZQogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11
dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZp
ZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRI
YW5kbGUpOworICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hv
dWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgorICAgICAgICAvLyBX
ZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCisgICAgICAgIC8v
IENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4K
KyAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBz
dXNwZW5kIEEuCisgICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNp
Z25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgorICAgICAgICAvLyBJbiB0aGF0IGNhc2Us
IGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihn
bG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlmICghbV9zdXNwZW5kQ291bnQpIHsKKyAgICAg
ICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUu
IEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIu
CisgICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBs
aWtlIExpbnV4LgorICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVk
IGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFu
ZGxlci4KKyAgICAgICAgICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgICAg
IGludCByZXN1bHQgPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAgICAgICAgICAgIHNlbV93YWl0KCZtX3NlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMg
dGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92
ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCisgICAgICAgICAgICBtX3N1c3BlbmRlZC5zdG9yZSh0cnVl
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQorICAgICAgICArK21fc3Vz
cGVuZENvdW50OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgorfQorCit2b2lk
IFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZShtX3BsYXRm
b3JtVGhyZWFkKTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNw
ZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVh
ZHMuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7Cisg
ICAgICAgIGlmIChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBXaGVuIGFs
bG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFu
ZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5
IGlzc3VlZCwKKyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBi
ZSBjYWxsZWQgb25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdh
eXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQg
cmVzdW1lLgorICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4g
QW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAgICAgICAg
Ly8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3Vt
ZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2Fu
IHRha2UgdGhpcy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3
aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAg
Ly8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlz
IHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUo
dGhpcyk7CisgICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJlYWRT
dXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAg
IC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlz
IGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAg
ICAgICAgbV9zdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2Up
OworICAgICAgICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2VuZGlmCit9
CisKK3NpemVfdCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0
ZXJzKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgp
OworI2lmIE9TKERBUldJTikKKyNpZiBDUFUoWDg2KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9
IHNpemVvZihyZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1
bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShQ
UEMpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsKKyNlbGlm
IENQVShQUEM2NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRf
Q09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RB
VEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVB
RF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RI
UkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBB
Uk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZv
ciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1
cmUKKyNlbmRpZgorCisgICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0X3N0YXRl
KG1fcGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsICZ1
c2VyQ291bnQpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIFdU
RlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9O
LCAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhyZWFkX2dl
dF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRoZSByZXN1
bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4iLCBy
ZXN1bHQpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gdXNlckNvdW50ICog
c2l6ZW9mKHVpbnRwdHJfdCk7CisjZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJD
X18pKSAmJiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0
KSB8fCBDUFUoTUlQUykpCisgICAgcmVnaXN0ZXJzID0gbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4
dDsKKyAgICByZXR1cm4gc2l6ZW9mKFBsYXRmb3JtUmVnaXN0ZXJzKTsKKyNlbGlmIE9TKE9QRU5C
U0QpCisgICAgLy8gaHR0cDovL21hbi5vcGVuYnNkLm9yZy9wdGhyZWFkX3N0YWNrc2VnX25wLjMK
KyAgICBzdGFja190IHNzOworICAgIGludCByYyA9IHB0aHJlYWRfc3RhY2tzZWdfbnAobV9oYW5k
bGUsICZzcyk7CisgICAgcmVnaXN0ZXJzLnN0YWNrUG9pbnRlciA9IHNzLnNzX3NwOworICAgIHJl
dHVybiAwOworI2Vsc2UKKyAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7CisgICAgcHRocmVh
ZF9hdHRyX2luaXQoJmF0dHJpYnV0ZSk7CisjaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5F
VEJTRCkKKyAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCisgICAg
cHRocmVhZF9hdHRyX2dldF9ucChtX2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZWxzZQorICAgIC8v
IEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1wb3J0YWJsZTsgb3RoZXIgUE9TSVggc3lzdGVt
cyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0ZXJuYXRpdmVzCisgICAgcHRocmVhZF9nZXRhdHRy
X25wKG1faGFuZGxlLCAmYXR0cmlidXRlKTsKKyNlbmRpZgorCisgICAgdm9pZCogc3RhY2tCYXNl
ID0gMDsKKyAgICBzaXplX3Qgc3RhY2tTaXplID0gMDsKKyAgICBpbnQgcmMgPSBwdGhyZWFkX2F0
dHJfZ2V0c3RhY2soJmF0dHJpYnV0ZSwgJnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7CisgICAgQVNT
RVJUX1VOVVNFRChyYywgIXJjKTsKKyAgICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICByZWdpc3Rl
cnMuc3RhY2tQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1Np
emU7CisKKyAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cmlidXRlKTsKKworICAgIHJldHVy
biAwOworI2VuZGlmCit9CisKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2RpZEV4aXQgPSB0
cnVlOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNoKHB0aHJlYWRfdCBoYW5kbGUpCit7Cisg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgbV9o
YW5kbGUgPSBoYW5kbGU7CisgICAgaWYgKCFtX2lkKSB7CisgICAgICAgIHN0YXRpYyBzdGQ6OmF0
b21pYzxUaHJlYWRJZGVudGlmaWVyPiBwcm92aWRlciB7IDAgfTsKKyAgICAgICAgbV9pZCA9ICsr
cHJvdmlkZXI7CisjaWYgT1MoREFSV0lOKQorICAgICAgICBtX3BsYXRmb3JtVGhyZWFkID0gcHRo
cmVhZF9tYWNoX3RocmVhZF9ucChoYW5kbGUpOworI2VuZGlmCiAgICAgfQotICAgIGludCBlcnJO
byA9IHB0aHJlYWRfa2lsbChwdGhyZWFkSGFuZGxlLCBzaWduYWxOdW1iZXIpOwotICAgIHJldHVy
biAhZXJyTm87IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNzLgogfQogCiBNdXRleDo6TXV0ZXgo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggNTRiNDNlZmVmMzVjZDY2MzJhNzAwODE1MDdh
NWIzNzk5ZGVmYjZmYi4uZGUxMTY2NDFjYjhkOTkxOTQzY2RiNDQ2OWZiNDZlZjk0NDc5ZWNjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC05NCw2ICs5NCw3IEBACiAKICNpbmNsdWRlICJN
YWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCisjaW5j
bHVkZSAiVGhyZWFkSG9sZGVyLmgiCiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTEwOSw2ICsxMTAsMTQg
QEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK1RocmVhZDo6VGhyZWFkKCkKK3sKK30KKworVGhyZWFk
Ojp+VGhyZWFkKCkKK3sKK30KKwogLy8gTVNfVkNfRVhDRVBUSU9OLCBUSFJFQUROQU1FX0lORk8s
IGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNvbWUgZnJvbSA8aHR0cDovL21zZG4ubWlj
cm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhzLmFzcHg+Lgogc3RhdGljIGNvbnN0IERX
T1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CiAKQEAgLTEyMSw3ICsxMzAsNyBAQCB0
eXBlZGVmIHN0cnVjdCB0YWdUSFJFQUROQU1FX0lORk8gewogfSBUSFJFQUROQU1FX0lORk87CiAj
cHJhZ21hIHBhY2socG9wKQogCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwo
Y29uc3QgY2hhciogc3pUaHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50
VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQogewogI2lmIENPTVBJTEVS
KE1JTkdXKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhyZWFkIG5hbWUgc2V0dGluZyB3aXRo
IE1pbmdXLgpAQCAtMTI5LDcgKzEzOCw3IEBAIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJ
bnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiAjZWxzZQogICAgIFRIUkVBRE5BTUVf
SU5GTyBpbmZvOwogICAgIGluZm8uZHdUeXBlID0gMHgxMDAwOwotICAgIGluZm8uc3pOYW1lID0g
bm9ybWFsaXplVGhyZWFkTmFtZShzelRocmVhZE5hbWUpOworICAgIGluZm8uc3pOYW1lID0gVGhy
ZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKHN6VGhyZWFkTmFtZSk7CiAgICAgaW5mby5kd1RocmVh
ZElEID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAgICAgaW5mby5kd0ZsYWdzID0gMDsKIApAQCAt
MTQwLDcwICsxNDksMzkgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNv
bnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbmRpZgogfQogCi1zdGF0aWMgTXV0ZXgmIHRocmVh
ZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4Owot
ICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAg
ICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkOwotICAgIAotICAgIGlmIChpc0luaXRpYWxpemVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdU
Rjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjpl
bXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNh
ZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJv
bSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsK
LSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgd3RmVGhyZWFkRGF0
YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQotCi1zdGF0aWMgSGFzaE1hcDxEV09SRCwg
SEFORExFPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1h
cDxEV09SRCwgSEFORExFPj4gbWFwOwotICAgIHJldHVybiBtYXA7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtl
eSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7Cisg
ICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5n
SW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0
aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0
aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAg
IGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0
YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIHZv
aWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIoRFdPUkQgdGhyZWFkSUQsIEhBTkRMRSB0
aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9p
bnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFwKCkuY29udGFpbnModGhyZWFkSUQpKTsKLSAgICB0
aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRocmVhZEhhbmRsZSk7Ci19CisgICAgLy8gQmFsYW5j
ZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgorICAgIGF1dG8gaW52
b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRp
Y19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAKLXN0YXRpYyBIQU5E
TEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICByZXR1cm4gdGhyZWFk
TWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKmludm9jYXRp
b24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0gbnVsbHB0cjsKIAotc3RhdGlj
IHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQp
Ci17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIEFTU0VS
VCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotICAgIHRocmVhZE1hcCgpLnJlbW92ZShpZCk7
Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lk
KiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
PiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFt
KSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Ci0KICAgICBy
ZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJl
YWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1l
KQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBl
bnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogeworICAgIFJl
ZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwogICAgIHVuc2lnbmVk
IHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSAw
OwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFk
LnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gcmVpbnRlcnByZXRfY2Fz
dDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9j
YXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVyKSk7CiAgICAgaWYgKCF0aHJlYWRIYW5k
bGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpAQCAtMjE5LDU1ICsxOTcsMTIwIEBAIFRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uCiAgICAgVU5VU0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24pOwogCiAg
ICAgdGhyZWFkSUQgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPih0aHJlYWRJZGVudGlm
aWVyKTsKLSAgICBzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcih0aHJlYWRJZGVudGlmaWVy
LCB0aHJlYWRIYW5kbGUpOwogCi0gICAgcmV0dXJuIHRocmVhZElEOworICAgIHRocmVhZC0+ZXN0
YWJsaXNoKHRocmVhZEhhbmRsZSwgdGhyZWFkSWRlbnRpZmllcik7CisgICAgcmV0dXJuIHRocmVh
ZDsKIH0KIAotdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElELCBpbnQgZGVsdGEpCit2b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRlbHRhKQog
ewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhy
ZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUp
Ci0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBjb3JyZXNw
b25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQiLCB0aHJlYWRJRCk7Ci0KLSAgICBTZXRUaHJlYWRQcmlv
cml0eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7CisgICAg
c3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgU2V0VGhy
ZWFkUHJpb3JpdHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7CiB9
CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
KQoraW50IFRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24oKQogewotICAgIEFTU0VSVCh0aHJlYWRJ
RCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50
aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBMT0dfRVJS
T1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0
aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09SRCBqb2lu
UmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRFKTsKKyAg
ICBIQU5ETEUgaGFuZGxlOworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11
dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOworICAgIH0K
KworICAgIERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhhbmRsZSwgSU5G
SU5JVEUpOwogICAgIGlmIChqb2luUmVzdWx0ID09IFdBSVRfRkFJTEVEKQotICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5
aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRp
ZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIG1faWQp
OworCisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7Cisg
ICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CiAKLSAgICBDbG9zZUhhbmRs
ZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJl
YWRJRCk7CisgICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIGRvIG5vdGhpbmcu
CisgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55
dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28g
dGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KKyAgICBpZiAoIWhhc0V4aXRlZCgp
KQorICAgICAgICBkaWRKb2luKCk7CiAKICAgICByZXR1cm4gam9pblJlc3VsdDsKIH0KIAotdm9p
ZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3ZvaWQgVGhyZWFkOjpk
ZXRhY2goKQoreworICAgIC8vIFdlIGZvbGxvdyB0aGUgcHRocmVhZCBzZW1hbnRpY3M6IGV2ZW4g
YWZ0ZXIgdGhlIGRldGFjaCBpcyBjYWxsZWQsCisgICAgLy8gd2UgY2FuIHN0aWxsIHBlcmZvcm0g
dmFyaW91cyBvcGVyYXRpb25zIG9udG8gdGhlIHRocmVhZC4gRm9yIGV4YW1wbGUsCisgICAgLy8g
d2UgY2FuIGRvIHB0aHJlYWRfa2lsbCBmb3IgdGhlIGRldGFjaGVkIHRocmVhZC4gVGhlIHByb2Js
ZW0gaW4gV2luZG93cworICAgIC8vIGlzIHRoYXQgY2xvc2luZyBIQU5ETEUgbG9zZXMgdGhlIHdh
eSB0byBkbyBzdWNoIG9wZXJhdGlvbnMuCisgICAgLy8gVG8gZG8gc28sIHdlIGRvIG5vdGhpbmcg
aGVyZSBpbiBXaW5kb3dzLiBPcmlnaW5hbCBkZXRhY2gncyBwdXJwb3NlLAorICAgIC8vIHJlbGVh
c2luZyB0aHJlYWQgcmVzb3VyY2Ugd2hlbiB0aGUgdGhyZWFkIGV4aXRzLCB3aWxsIGJlIGFjaGll
dmVkIGJ5CisgICAgLy8gRmxzQ2FsbGJhY2sgYXV0b21hdGljYWxseS4gRmxzQ2FsbGJhY2sgd2ls
bCBjYWxsIENsb3NlSGFuZGxlIHRvIGNsZWFuIHVwCisgICAgLy8gcmVzb3VyY2UuIFNvIGluIHRo
aXMgZnVuY3Rpb24sIHdlIGp1c3QgbWFyayB0aGUgdGhyZWFkIGFzIGRldGFjaGVkIHRvCisgICAg
Ly8gYXZvaWQgY2FsbGluZyB3YWl0Rm9yQ29tcGxldGlvbiBmb3IgdGhpcyB0aHJlYWQuCisgICAg
c3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgaWYgKCFo
YXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KKworYXV0byBUaHJl
YWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJvcj4KK3sK
KyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBE
V09SRCByZXN1bHQgPSBTdXNwZW5kVGhyZWFkKG1faGFuZGxlKTsKKyAgICBpZiAocmVzdWx0ICE9
IChEV09SRCktMSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQocmVzdWx0KTsKK30KKworLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hv
dWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgordm9pZCBUaHJlYWQ6
OnJlc3VtZSgpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9t
dXRleCk7CisgICAgUmVzdW1lVGhyZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90IFRocmVhZDo6
Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCiB7Ci0gICAgQVNTRVJU
KHRocmVhZElEKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211
dGV4KTsKKyAgICByZWdpc3RlcnMuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09O
VEVYVF9DT05UUk9MOworICAgIEdldFRocmVhZENvbnRleHQobV9oYW5kbGUsICZyZWdpc3RlcnMp
OworICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7Cit9CisKK1RocmVhZCYgVGhyZWFkOjpjdXJy
ZW50KCkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJlbnQo
KTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgpOworCisgICAg
Ly8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3Rh
Ymxpc2hlZCB5ZXQuCisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJl
YWQoKSk7CisKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGJvb2wgaXNTdWNjZXNzZnVsID0gRHVw
bGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQoKSwgR2V0
Q3VycmVudFByb2Nlc3MoKSwgJmhhbmRsZSwgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1FX0FDQ0VT
Uyk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVsKTsKIAotICAgIEhBTkRMRSB0aHJl
YWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAo
dGhyZWFkSGFuZGxlKQotICAgICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNs
ZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT5lc3Rh
Ymxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXpl
KHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJuIHRocmVhZC5nZXQoKTsKIH0KIAotVGhyZWFkSWRl
bnRpZmllciBjdXJyZW50VGhyZWFkKCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50
SUQoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJy
ZW50VGhyZWFkSWQoKSk7CiB9CiAKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2RpZEV4aXQg
PSB0cnVlOworICAgIC8vIEl0IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxsYmFjayB3aWxs
IGJlIGNhbGxlZCBldmVuIGJlZm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRsZXMuCisgICAg
Ly8gVGhpcyBlYXNpbHkgZW5zdXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291cmNlcyBhcmUg
YXV0b21hdGljYWxseSBjbG9zZWQuCisgICAgaWYgKG1faGFuZGxlKQorICAgICAgICBDbG9zZUhh
bmRsZShtX2hhbmRsZSk7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2goSEFORExFIGhhbmRs
ZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0
ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBt
X2lkID0gdGhyZWFkSUQ7Cit9CisKIE11dGV4OjpNdXRleCgpCiB7CiAgICAgbV9tdXRleC5tX3Jl
Y3Vyc2lvbkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IGIyYTBhNzlmNGFiNWFhYzI4
OWIxNjlmOTJiYmMxYTgwNTg1MmNhMzIuLjk3MzBmY2YwZjA5MjFmZGVkOTBmODlmMTI5MGU3NzQ5
MGI1Mzk3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFdvcmtR
dWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKHNpegogCiAgICAgICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSh0aHJlYWRDb3VudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhyZWFkQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoY3Jl
YXRlVGhyZWFkKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQb29sIFdvcmtlciAldSIsIGkpLnV0Zjgo
KS5kYXRhKCksIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVuZChUaHJl
YWQ6OmNyZWF0ZShTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBpKS51dGY4
KCkuZGF0YSgpLCBbdGhpc10gewogICAgICAgICAgICAgICAgICAgICB0aHJlYWRCb2R5KCk7CiAg
ICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgfQpAQCAtMTE0LDcgKzExNCw3IEBAIHZv
aWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAgICAgICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAg
ICAgICAgRGVxdWU8Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPio+IG1fcXVldWU7CiAKLSAg
ICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fd29ya2VyczsKKyAgICAgICAgVmVjdG9y
PFJlZlB0cjxUaHJlYWQ+PiBtX3dvcmtlcnM7CiAgICAgfTsKIAogICAgIHN0YXRpYyBMYXp5TmV2
ZXJEZXN0cm95ZWQ8VGhyZWFkUG9vbD4gdGhyZWFkUG9vbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKaW5kZXggYTQ3
ZjIxZTIwZDMxYmM4YmY3MzE4ZjQxYjk1N2FiMzY2YzE5MTUwMy4uNzYzNDVjMDY5MzE2NGY2OGNh
NGIxYzY2NDQ4NGEyNzNjYzZlOGJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1
ZXVlLmgKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTEwMyw3ICsxMDMsNyBA
QCBjbGFzcyBXb3JrUXVldWUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25EaXNwYXRjaGVyIHsKIAog
ICAgIEhBTkRMRSBtX3RpbWVyUXVldWU7CiAjZWxpZiBVU0UoR0xJQl9FVkVOVF9MT09QKSB8fCBV
U0UoR0VORVJJQ19FVkVOVF9MT09QKQotICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVldWVU
aHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrUXVldWVUaHJlYWQ7CiAgICAgTG9jayBt
X2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1faW5pdGlh
bGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgUnVuTG9vcCogbV9ydW5Mb29wOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwIGIvU291cmNlL1dURi93
dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCmluZGV4IDFhNzIxOWFkMjU5ZWQ3NTk3MmE1YTQ1
OGM1YzQ4NDk3YTM4OGU0ZDMuLjU5ZWUxZjg1YjQzNWNlMWE3MmY1MDUwZjRkZjYyZWZjZmJiYzgy
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKQEAgLTQ5LDE1ICs0
OSwxNSBAQCBzdGF0aWMgZGlzcGF0Y2hfcW9zX2NsYXNzX3QgZGlzcGF0Y2hRT1NDbGFzcyhXb3Jr
UXVldWU6OlFPUyBxb3MpCiB7CiAgICAgc3dpdGNoIChxb3MpIHsKICAgICBjYXNlIFdvcmtRdWV1
ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmU6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNz
KFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRq
dXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CiAgICAgY2FzZSBXb3Jr
UXVldWU6OlFPUzo6VXNlckluaXRpYXRlZDoKLSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRq
dXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOwogICAgIGNhc2UgV29ya1F1
ZXVlOjpRT1M6OkRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19D
TEFTU19ERUZBVUxUKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhR
T1NfQ0xBU1NfREVGQVVMVCk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXRpbGl0eToKLSAg
ICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VUSUxJVFkpOworICAgICAg
ICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKICAg
ICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kOgotICAgICAgICByZXR1cm4gYWRqdXN0
ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dST1VORCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6
OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOwogICAgIH0KIH0KICNlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3Bw
IGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRleCA5MzRh
MzhjYmJlNjRiYmZmYWViNGQzN2RmMWI4ZDk5NTJiODg1MzQ0Li5kYTg3NWQxZmEwNGNlZjUyNGIw
ZGMxODZiMzlhNDYyZDY4MDQ0NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmlj
L1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1
ZXVlR2VuZXJpYy5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9y
bUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7Ci0gICAgbV93b3Jr
UXVldWVUaHJlYWQgPSBjcmVhdGVUaHJlYWQobmFtZSwgW3RoaXNdIHsKKyAgICBtX3dvcmtRdWV1
ZVRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKG5hbWUsIFt0aGlzXSB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRl
eCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwpAQCAtNTEs
OCArNTEsOCBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAgICBpZiAo
bV9ydW5Mb29wKQogICAgICAgICBtX3J1bkxvb3AtPnN0b3AoKTsKICAgICBpZiAobV93b3JrUXVl
dWVUaHJlYWQpIHsKLSAgICAgICAgZGV0YWNoVGhyZWFkKG1fd29ya1F1ZXVlVGhyZWFkKTsKLSAg
ICAgICAgbV93b3JrUXVldWVUaHJlYWQgPSAwOworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZC0+
ZGV0YWNoKCk7CisgICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gbnVsbHB0cjsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxl
ckxpbnV4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxp
bnV4LmNwcAppbmRleCBiMjk0MTk0NDRlNzQyNzM2YTY3ZGMwYzFhYTg1MWRlYzNhZTU4N2U0Li5m
ZmQ0MDA4NTViODI5M2E4YjVhM2MzYWViMjNhYjc3YWFmNWE3ZWU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCkBAIC0xMTks
NyArMTE5LDEwIEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6RXZlbnRGRFBvbGxlcjo6RXZlbnRG
RFBvbGxlcihpbnQgZmQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoCiAgICAgfSwgdGhpcywgbnVsbHB0
cik7CiAgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBudWxscHRyKTsKICNlbHNl
Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRs
ZXIiLCBbdGhpc10geyByZWFkQW5kTm90aWZ5KCk7IH0KKyAgICBtX3RocmVhZCA9IFRocmVhZDo6
Y3JlYXRlKCJXVEY6IE1lbW9yeVByZXNzdXJlSGFuZGxlciIsCisgICAgICAgIFt0aGlzXSB7Cisg
ICAgICAgICAgICByZWFkQW5kTm90aWZ5KCk7CisgICAgICAgIH0pOwogI2VuZGlmCiB9CiAKQEAg
LTEyOSw3ICsxMzIsNyBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5F
dmVudEZEUG9sbGVyKCkKICNpZiBVU0UoR0xJQikKICAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291
cmNlLmdldCgpKTsKICNlbHNlCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOworICAgIG1f
dGhyZWFkLT5kZXRhY2goKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi93aW4vTWFpblRocmVhZFdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdp
bi5jcHAKaW5kZXggZjMyNGU4YjYxZGQ0MWZhMDU2MDg2M2I2YzU4MTkxMGY4NjdkMzZlYi4uYTY0
NzNkMDdiNjdlYWNjODZiZTdhNGViNjk3NDk4OTNlYzYxNDk3ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9N
YWluVGhyZWFkV2luLmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIGluaXRpYWxpemVNYWluVGhy
ZWFkUGxhdGZvcm0oKQogICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAw
LCBIV05EX01FU1NBR0UsIDAsIDAsIDApOwogICAgIHRocmVhZGluZ0ZpcmVkTWVzc2FnZSA9IFJl
Z2lzdGVyV2luZG93TWVzc2FnZVcoTCJjb20uYXBwbGUuV2ViS2l0Lk1haW5UaHJlYWRGaXJlZCIp
OwogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCgiTWFpbiBUaHJlYWQiKTsK
KyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoIk1haW4gVGhyZWFk
Iik7CiB9CiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuY3BwCmluZGV4IDg3NDc2NDM4Y2FlNjVhNjM4N2Q5MDFhNzUyODgxNWVjOTU0N2YyMzIuLjlj
ZDNkYjRkMWJjMTRhMzYxNzMyMWFiMDA1YTAxOTYyMDUyNzgyNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC01
Niw3ICs1Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKElEQkJhY2tpbmdTdG9yZVRlbXBvcmFy
eUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikKICAgICA6IG1fYmFja2luZ1N0b3JlVGVtcG9yYXJ5
RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2Rh
dGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBT
ZXJ2ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNlcnZlcjo6ZGF0YWJh
c2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAogSURC
U2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIElE
QkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikKQEAgLTY2LDcg
KzY2LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVj
dG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmEKICAgICBMT0coSW5kZXhlZERCLCAiSURC
U2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aC51dGY4KCku
ZGF0YSgpKTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRocmVhZENyZWF0
aW9uTG9jayk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFi
YXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CisgICAgbV90
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRo
aXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpyZWdp
c3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmlu
ZGV4IDI1NmNkNTA3ZTZlNmQ3ZjY1NmVlY2UwYzExOTg5NDhmZDkyM2RhMWQuLjkzNGExZDE3NDUy
OTA4NDI4YTNhZTZlMGVkN2U1MTBhOWE5Y2E2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTEyNSw3ICsxMjUsNyBA
QCBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+IHsKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SURCQ29ubmVjdGlvblRvQ2xpZW50Pj4gbV9jb25uZWN0
aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlmaWVyLCBSZWZQdHI8VW5pcXVl
SURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwOwogCi0gICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVs
bHB0ciB9OwogICAgIExvY2sgbV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jazsKICAgICBMb2Nr
IG1fbWFpblRocmVhZFJlcGx5TG9jazsKICAgICBib29sIG1fbWFpblRocmVhZFJlcGx5U2NoZWR1
bGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKaW5kZXggMjkyZjA1YjhjZDUwNmUyMjlhZTZiOGJkODYy
OWMwOTU0ZDE4NDU5Yi4uN2NmN2FmOGZlYTJlMWU2N2Q1MjM3Yzg3MWEwMTViM2M0OTAwYTI3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVj
b2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlv
RGVjb2Rlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgQXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVk
aW9EZWNvZGVyKCkKIHsKICAgICAvLyBTdGFydCB3b3JrZXIgdGhyZWFkLgogICAgIExvY2tIb2xk
ZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoQXN5bmNBdWRpb0RlY29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVjb2Rl
ciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoQXN5bmNBdWRpb0RlY29kZXI6OnRo
cmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVjb2RlciIpOwogfQogCiBBc3luY0F1ZGlvRGVjb2Rl
cjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKQEAgLTQ3LDggKzQ3LDggQEAgQXN5bmNBdWRpb0RlY29k
ZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCiAgICAgbV9xdWV1ZS5raWxsKCk7CiAgICAgCiAgICAg
Ly8gU3RvcCB0aHJlYWQuCi0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7
Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7
CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpk
ZWNvZGVBc3luYyhSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRl
LCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxB
dWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCkBAIC03Miw3ICs3Miw3IEBAIHZv
aWQgQXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3AoKQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogCiAgICAgewotICAgICAgICAvLyBXYWl0IGZvciB1bnRpbCB3ZSBoYXZlIG1fdGhyZWFk
SUQgZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4gbG9vcC4KKyAgICAgICAgLy8g
V2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVhZCBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRp
bmcgdGhlIHJ1biBsb29wLgogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlv
bk11dGV4KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXN5bmNBdWRpb0RlY29kZXIuaAppbmRleCBiYjVjNWUzMzdiNWVjZjFmOGU2MTc1M2EyOWY4
ZDBmOTcxNDE1NTNkLi5mMTI1MTBkMTk3YzNkZjk2Y2MwNTY4NTQ2Y2JjM2ZiNDZlYWFhOGExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNv
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVj
b2Rlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEFzeW5jQXVkaW9EZWNvZGVyIHsKICAgICBz
dGF0aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKICAgICB2b2lkIHJ1bkxv
b3AoKTsKIAotICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0
cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIExvY2sgbV90aHJlYWRDcmVhdGlvbk11dGV4OwogICAg
IE1lc3NhZ2VRdWV1ZTxEZWNvZGluZ1Rhc2s+IG1fcXVldWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUuY3BwCmluZGV4IDUwNTIzMDQxOTdjZGVkZGU0N2ZkY2JiOTEyZWM0NzQwNTU3OTc0
MjguLmU3ZDU2N2RmZWFkNDQyYzM5NmFmMGY3MDUxMDk3M2ZmZTE0OGFiMGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgY29uc3Qgc2l6ZV90IHJlbmRl
clF1YW50dW1TaXplID0gMTI4OwogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBBdWRpb0J1ZmZlciog
cmVuZGVyVGFyZ2V0KQogICAgIDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVuZGVy
VGFyZ2V0LT5zYW1wbGVSYXRlKCkpCiAgICAgLCBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQp
Ci0gICAgLCBtX3JlbmRlclRocmVhZCgwKQorICAgICwgbV9yZW5kZXJUaHJlYWQobnVsbHB0cikK
ICAgICAsIG1fc3RhcnRlZFJlbmRlcmluZyhmYWxzZSkKIHsKICAgICBtX3JlbmRlckJ1cyA9IEF1
ZGlvQnVzOjpjcmVhdGUocmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCksIHJlbmRlclF1
YW50dW1TaXplKTsKQEAgLTY2LDggKzY2LDggQEAgdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlv
bk5vZGU6OnVuaW5pdGlhbGl6ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3JlbmRl
clRocmVhZCkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3JlbmRlclRocmVh
ZCk7Ci0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwpAQCAtODMsNyArODMsNyBA
QCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmcoKQogICAg
IGlmICghbV9zdGFydGVkUmVuZGVyaW5nKSB7CiAgICAgICAgIG1fc3RhcnRlZFJlbmRlcmluZyA9
IHRydWU7CiAgICAgICAgIHJlZigpOyAvLyBTZWUgY29ycmVzcG9uZGluZyBkZXJlZigpIGNhbGwg
aW4gbm90aWZ5Q29tcGxldGVEaXNwYXRjaCgpLgotICAgICAgICBtX3JlbmRlclRocmVhZCA9IGNy
ZWF0ZVRocmVhZChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om9mZmxpbmVSZW5kZXJFbnRy
eSwgdGhpcywgIm9mZmxpbmUgcmVuZGVyZXIiKTsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBU
aHJlYWQ6OmNyZWF0ZShPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om9mZmxpbmVSZW5kZXJF
bnRyeSwgdGhpcywgIm9mZmxpbmUgcmVuZGVyZXIiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oCmluZGV4IDc1NTYwNDY0NzIzMmM0YmM1MTNjYzllMzlkZDQ0NWYzOGI2MmNl
ZjQuLjU2OTAxMzhiMTY1NzBiM2Y5ZDIzN2Y5ZGQ0YThlYTIzZDczZmZhYTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBPZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5vZGUgewogICAgIFJlZlB0cjxB
dWRpb0J1cz4gbV9yZW5kZXJCdXM7CiAgICAgCiAgICAgLy8gUmVuZGVyaW5nIHRocmVhZC4KLSAg
ICB2b2xhdGlsZSBUaHJlYWRJZGVudGlmaWVyIG1fcmVuZGVyVGhyZWFkOworICAgIFJlZlB0cjxU
aHJlYWQ+IG1fcmVuZGVyVGhyZWFkOwogICAgIGJvb2wgbV9zdGFydGVkUmVuZGVyaW5nOwogICAg
IHN0YXRpYyB2b2lkIG9mZmxpbmVSZW5kZXJFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKICAgICB2
b2lkIG9mZmxpbmVSZW5kZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZS5jcHAKaW5kZXggODg2OWY2YmYyMjMyMzJlNjNjYzNmYjUyZTE2YWUxZGIz
ZWI0MWJlNi4uOGM5MmQ2ZTUzOTZhZGYxMmZiZGQ2OGQ3YWM5N2Y5ZWQxOWFkYzAxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKQEAgLTc3
MCw4ICs3NzAsNyBAQCBTZWN1cml0eU9yaWdpbkRhdGEgRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2lu
KCkKIHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2lu
KG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLSAgICBhdXRvJiB0aHJlYWQg
PSBkYXRhYmFzZVRocmVhZCgpOwotICAgIGlmIChjdXJyZW50VGhyZWFkKCkgPT0gdGhyZWFkLmdl
dFRocmVhZElEKCkpCisgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZVRocmVhZCgp
LmdldFRocmVhZElEKCkpCiAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21T
ZWN1cml0eU9yaWdpbihtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCmluZGV4IDBkZGU1Zjcy
NjhlZTY0MmMwMDQzMDVjZWZlMzZiMWM5ZTQ0Yjg3ZDMuLmQ3MDgxNGY5YjU1YjI0OGZkNjRlMWFm
ZjQzZTM3Njc0ZjE2OTJkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCkBAIC02MCwxMiArNjAsMTIgQEAgYm9vbCBE
YXRhYmFzZVRocmVhZDo6c3RhcnQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENy
ZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhyZWFkKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoRGF0
YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFz
ZSIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoRGF0YWJhc2VUaHJlYWQ6OmRhdGFi
YXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFzZSIpOwogCi0gICAgcmV0dXJu
IG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIERhdGFiYXNlVGhy
ZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBjbGVhbnVw
U3luYykKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRo
cmVhZCgpCiAgICAgLy8gQ2xlYW4gdXAgdGhlIGxpc3Qgb2YgYWxsIHBlbmRpbmcgdHJhbnNhY3Rp
b25zIG9uIHRoaXMgZGF0YWJhc2UgdGhyZWFkCiAgICAgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
LT5zaHV0ZG93bigpOwogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhy
ZWFkICVpIGFuZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJy
ZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNvdW50KCkpOworICAg
IExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIgdGhl
IHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYocyki
LCBtX3RocmVhZC0+aWQoKSwgdGhpcywgcmVmQ291bnQoKSk7CiAKICAgICAvLyBDbG9zZSB0aGUg
ZGF0YWJhc2VzIHRoYXQgd2UgcmFuIHRyYW5zYWN0aW9ucyBvbi4gVGhpcyBlbnN1cmVzIHRoYXQg
aWYgYW55IHRyYW5zYWN0aW9ucyBhcmUgc3RpbGwgb3BlbiwgdGhleSBhcmUgcm9sbGVkIGJhY2sg
YW5kIHdlIGRvbid0IGxlYXZlIHRoZSBkYXRhYmFzZSBpbiBhbgogICAgIC8vIGluY29uc2lzdGVu
dCBvciBsb2NrZWQgc3RhdGUuCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBEYXRhYmFzZVRocmVh
ZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBvcGVuRGF0YWJhc2UtPnBlcmZvcm1DbG9zZSgp
OwogCiAgICAgLy8gRGV0YWNoIHRoZSB0aHJlYWQgc28gaXRzIHJlc291cmNlcyBhcmUgbm8gbG9u
Z2VyIG9mIGFueSBjb25jZXJuIHRvIGFueW9uZSBlbHNlCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhy
ZWFkSUQpOworICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKIAogICAgIERhdGFiYXNlVGFza1N5bmNo
cm9uaXplciogY2xlYW51cFN5bmMgPSBtX2NsZWFudXBTeW5jOwogCkBAIC0xNDIsNyArMTQyLDcg
QEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlJiBkYXRh
YmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0YWJhc2VTZXRNdXRleCk7CiAK
LSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAgIEFTU0VSVChj
dXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPmlkKCkpOwogICAgIEFTU0VSVCghbV9vcGVuRGF0
YWJhc2VTZXQuY29udGFpbnMoJmRhdGFiYXNlKSk7CiAgICAgbV9vcGVuRGF0YWJhc2VTZXQuYWRk
KCZkYXRhYmFzZSk7CiB9CkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6
cmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UmIGRhdGFiYXNlKQogewogICAgIExvY2tIb2xk
ZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAotICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3Ro
cmVhZC0+aWQoKSk7CiAgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkgfHwgbV9vcGVuRGF0YWJh
c2VTZXQuY29udGFpbnMoJmRhdGFiYXNlKSk7CiAgICAgbV9vcGVuRGF0YWJhc2VTZXQucmVtb3Zl
KCZkYXRhYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGhyZWFkLmgKaW5kZXggZWMwNDFlMzE4MTcyNDkyZWNhNmJjZWZlOGYxZGEy
NWVjOTJlZDI2Yy4uYTUyMTJkZmI4YjE3MmNlMmZmNmE5ODg4ZGUwYTlkYjk3N2FlMmQyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJl
YWQuaApAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4gewogCiAgICAgdm9pZCByZWNvcmREYXRh
YmFzZU9wZW4oRGF0YWJhc2UmKTsKICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFi
YXNlJik7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhy
ZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90
aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KIAogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuZ2V0KCk7IH0KIApAQCAtNjksNyArNjksNyBAQCBjbGFzcyBEYXRhYmFzZVRocmVh
ZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4gewogICAgIHZv
aWQgZGF0YWJhc2VUaHJlYWQoKTsKIAogICAgIExvY2sgbV90aHJlYWRDcmVhdGlvbk11dGV4Owot
ICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFk
PiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fc2Vs
ZlJlZjsKIAogICAgIE1lc3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAppbmRleCA2ZjlmY2E2N2YzYzQ3
YWRkYzgzZGVjOGNiMGQ1ZWI4Y2NiNDBkNzQzLi4xMzlhYTk5MWExNmVhZDIyZjY4ZjUwMWJlN2I5
NDU5NjMyMjEzNWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0Nv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAKQEAgLTEwMSwxNCArMTAxLDE0IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29s
bGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KCkKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VD
b2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcoYm9vbCB3YWl0VW50aWxEb25lKQog
ewotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoY29sbGVjdCwg
MCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xsZXIiKTsKIAog
ICAgIGlmICh3YWl0VW50aWxEb25lKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KHRocmVhZElEKTsKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsKKyAgICB0aHJl
YWQtPmRldGFjaCgpOwogfQogCiB2b2lkIEdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJh
Z2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXggMTY4ZTRlMjc3OTVkNDI1ZjQwNGYxNzVjOWJj
YmE5M2Y3MzY4MDc0Yy4uNTVjN2NiMDIzOTg1OTljOTcxZTZhMzdhMGY5YTcyNDg0ODQyZTZiYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcApAQCAtNzQsNyAr
NzQsNyBAQCBzdGF0aWMgdm9pZCBjYWxsT25GaWxlVGhyZWFkKEZ1bmN0aW9uPHZvaWQgKCk+JiYg
ZnVuY3Rpb24pCiAKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgY3JlYXRlRmlsZVRocmVhZE9u
Y2U7CiAgICAgc3RkOjpjYWxsX29uY2UoY3JlYXRlRmlsZVRocmVhZE9uY2UsIFtdIHsKLSAgICAg
ICAgY3JlYXRlVGhyZWFkKCJXZWJDb3JlOiBBc3luY0ZpbGVTdHJlYW0iLCBbXSB7CisgICAgICAg
IFRocmVhZDo6Y3JlYXRlKCJXZWJDb3JlOiBBc3luY0ZpbGVTdHJlYW0iLCBbXSB7CiAgICAgICAg
ICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgQXV0b2RyYWluZWRQb29sIHBvb2w7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4IDRjZGNm
YWFkNmU4MzJhMzlhNWMzNTI2NTgwNTg1MDg2YjNkOWY3MmYuLmE0OGJmZjYwNTFmMGYxNzRkYTE4
ZDJmZjlkMzdhYjNiYzY2ODRmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkRhdGFiYXNlLmNwcApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBBU1NFUlRfTk9UX1NZTkNf
VEhSRUFEKCkgQVNTRVJUKCFtX3N5bmNUaHJlYWRSdW5uaW5nIHx8ICFJU19JQ09OX1NZTkNfVEhS
RUFEKCkpCiAKIC8vIEZvciBtZXRob2RzIHRoYXQgYXJlIG1lYW50IHRvIHN1cHBvcnQgdGhlIHN5
bmMgdGhyZWFkIE9OTFkKLSNkZWZpbmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5bmNUaHJl
YWQgPT0gY3VycmVudFRocmVhZCgpKQorI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkgKG1f
c3luY1RocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCkpCiAjZGVmaW5lIEFTU0VSVF9JQ09O
X1NZTkNfVEhSRUFEKCkgQVNTRVJUKElTX0lDT05fU1lOQ19USFJFQUQoKSkKIAogI2lmIFBMQVRG
T1JNKEdUSykKQEAgLTE0MSw3ICsxNDEsNyBAQCBib29sIEljb25EYXRhYmFzZTo6b3Blbihjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAgICAvLyBMb2Nr
IGhlcmUgYXMgd2VsbCBhcyBmaXJzdCB0aGluZyBpbiB0aGUgdGhyZWFkIHNvIHRoZSB0aHJlYWQg
ZG9lc24ndCBhY3R1YWxseSBjb21tZW5jZSB1bnRpbCB0aGUgY3JlYXRlVGhyZWFkKCkgY2FsbCAK
ICAgICAvLyBjb21wbGV0ZXMgYW5kIG1fc3luY1RocmVhZFJ1bm5pbmcgaXMgcHJvcGVybHkgc2V0
CiAgICAgbV9zeW5jTG9jay5sb2NrKCk7Ci0gICAgbV9zeW5jVGhyZWFkID0gY3JlYXRlVGhyZWFk
KEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29y
ZTogSWNvbkRhdGFiYXNlIik7CisgICAgbV9zeW5jVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSWNv
bkRhdGFiYXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBJ
Y29uRGF0YWJhc2UiKTsKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gbV9zeW5jVGhyZWFkOwog
ICAgIG1fc3luY0xvY2sudW5sb2NrKCk7CiAgICAgaWYgKCFtX3N5bmNUaHJlYWQpCkBAIC0xNjEs
NyArMTYxLDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OmNsb3NlKCkKICAgICAgICAgd2FrZVN5bmNU
aHJlYWQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBzeW5jIHRocmVhZCB0
byB0ZXJtaW5hdGUKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9zeW5jVGhyZWFk
KTsKKyAgICAgICAgbV9zeW5jVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIAog
ICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBmYWxzZTsgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5oCmluZGV4IDA2MWFmNGExMjU1NzcxZGUxMWEzMmY1NjgzYzBl
ZmRhNTkyOTNiOWQuLjg2NDA5NTU0NzUzM2ZkODkwZjAzYWZlOTJiYjA2ZjYwODdlZTczNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oCkBAIC0xMTksNyArMTE5
LDcgQEAgY2xhc3MgSWNvbkRhdGFiYXNlIGZpbmFsIDogcHVibGljIEljb25EYXRhYmFzZUJhc2Ug
ewogICAgIHZvaWQgc3luY1RpbWVyRmlyZWQoKTsKICAgICAKICAgICBUaW1lciBtX3N5bmNUaW1l
cjsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fc3luY1RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFk
PiBtX3N5bmNUaHJlYWQ7CiAgICAgYm9vbCBtX3N5bmNUaHJlYWRSdW5uaW5nOwogICAgIAogICAg
IEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50TG9hZGVyPj4gbV9sb2FkZXJzUGVuZGluZ0RlY2lzaW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKaW5kZXggOTEy
MDBjMzQ1ZjQ1NWY5NmQ0OTRiZmQyYWQ3MDNmMjhjNWM2MjlkMS4uZDliNmY3MmZhMzZmYTcwMGM4
MjZmM2M5N2Q2YmFhMDJkNDJlOGI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9S
ZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwCkBAIC05NiwxMSArOTYsMTEgQEAgdm9pZCBSZXNvdXJjZVVzYWdlVGhy
ZWFkOjpub3RpZnlPYnNlcnZlcnMoUmVzb3VyY2VVc2FnZURhdGEmJiBkYXRhKQogCiB2b2lkIFJl
c291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV90
aHJlYWRJZGVudGlmaWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV92bSA9ICZjb21tb25WTSgpOwotICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRo
cmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKKyAg
ICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29y
ZTogUmVzb3VyY2VVc2FnZSIpOwogfQogCiB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnRocmVh
ZENhbGxiYWNrKHZvaWQqIHJlc291cmNlVXNhZ2VUaHJlYWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZVRocmVhZC5oCmluZGV4IDE4YTFlNjc1NDNkMjIwOWMxNzk1NzQ3MzY2MjJh
NzhiMzg0YmI4ZmMuLmVmZGUyN2VmZTZiMGFjNDU0NjRkZTg5MWM2N2NlNzlmOWNmMmUxOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oCkBAIC02Miw3ICs2Miw3
IEBAIGNsYXNzIFJlc291cmNlVXNhZ2VUaHJlYWQgewogICAgIHZvaWQgdGhyZWFkQm9keSgpOwog
ICAgIHZvaWQgcGxhdGZvcm1UaHJlYWRCb2R5KEpTQzo6Vk0qLCBSZXNvdXJjZVVzYWdlRGF0YSYp
OwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXIgeyAwIH07CisgICAg
UmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgTG9jayBtX2xvY2s7CiAg
ICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIEhhc2hNYXA8dm9pZCosIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmKT4+IG1fb2JzZXJ2ZXJzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKaW5kZXgg
NzMwYzBhNmJkOTNmNDU3OGQxZWRiZjlhY2UxY2Q4NjU2NmU2Yzk4OC4uZDIwNzg0MDU2MGRkZjkw
NTkwYTBkYWRkMjczMDg0YzkxYzlmYjEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogU2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQoKQotICAg
IDogbV90aHJlYWRJZGVudGlmaWVyKDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQogewogfQog
CiBib29sIFNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKCkKIHsKLSAgICBhdXRvIHRo
cmVhZElkZW50aWZpZXIgPSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkSWRl
bnRpZmllcjsKLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllciAmJiBjdXJyZW50VGhyZWFkKCkg
PT0gdGhyZWFkSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBTY3JvbGxp
bmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkOworICAgIHJldHVybiB0aHJlYWQgJiYgdGhy
ZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6
OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCkBAIC03NCwxNCArNzQsMTQg
QEAgU2Nyb2xsaW5nVGhyZWFkJiBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpCiAKIHZvaWQg
U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhy
ZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3AuCiAgICAg
ewogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9pbml0aWFsaXplUnVuTG9v
cE11dGV4KTsKIAotICAgICAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhy
ZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKKyAgICAgICAgbV90aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFNjcm9s
bGluZyIpOwogICAgICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgbV9pbml0aWFs
aXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdeyByZXR1cm4gbV90
aHJlYWRSdW5Mb29wOyB9KTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBTY3JvbGxpbmdUaHJlYWQ6
OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OnRocmVhZENh
bGxiYWNrKHZvaWQqIHNjcm9sbGluZ1RocmVhZCkKIHsKLSAgICBXVEY6OnNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbnRlcmFjdGl2ZSgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW50ZXJhY3RpdmUoKTsKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxpbmdUaHJlYWQqPihz
Y3JvbGxpbmdUaHJlYWQpLT50aHJlYWRCb2R5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXggZGUwNjJkNzdhYzAxZGY5ZDJh
MDk4NjBlYmU2YjhlOWZkM2NmZjVjMC4uZDg4OTJmMDViZTY0MzdkNGFhY2MwYTc1MWE3Y2E3ZTkz
YmVlMGRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmgKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgU2Nyb2xsaW5nVGhyZWFkIHsKICAgICB2
b2lkIHRocmVhZFJ1bkxvb3BTb3VyY2VDYWxsYmFjaygpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVh
ZDsKIAogICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGU7
CiAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAppbmRleCBmNzEzMzNj
NWEzN2E5OTg5NjRmM2E3NDFjNzMxNTJlOTUxNDY2Y2Y2Li5kZGJlM2JhOTgwZTQ1MGE0OTRjZDA2
NDhmNDFiNWUzNmFmZWViNWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgUGFzc1JlZlB0
cjxIUlRGRGF0YWJhc2VMb2FkZXI+IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5kTG9hZEFz
eW5jaHJvbm91c2x5SWYKIH0KIAogSFJURkRhdGFiYXNlTG9hZGVyOjpIUlRGRGF0YWJhc2VMb2Fk
ZXIoZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQoMCkKKyAg
ICA6IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQobnVsbHB0cikKICAgICAsIG1fZGF0YWJhc2VTYW1w
bGVSYXRlKHNhbXBsZVJhdGUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTEw
Niw3ICsxMDYsNyBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5
KCkKICAgICAKICAgICBpZiAoIW1faHJ0ZkRhdGFiYXNlLmdldCgpICYmICFtX2RhdGFiYXNlTG9h
ZGVyVGhyZWFkKSB7CiAgICAgICAgIC8vIFN0YXJ0IHRoZSBhc3luY2hyb25vdXMgZGF0YWJhc2Ug
bG9hZGluZyBwcm9jZXNzLgotICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gY3JlYXRl
VGhyZWFkKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNlIGxvYWRlciIp
OworICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoZGF0YWJh
c2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJhc2UgbG9hZGVyIik7CiAgICAgfQogfQog
CkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6OndhaXRGb3JMb2Fk
ZXJUaHJlYWRDb21wbGV0aW9uKCkKICAgICAKICAgICAvLyB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bigpIHNob3VsZCBub3QgYmUgY2FsbGVkIHR3aWNlIGZvciB0aGUgc2FtZSB0aHJlYWQuCiAgICAg
aWYgKG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQpOwotICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQg
PSAwOworICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OworICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9I
UlRGRGF0YWJhc2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZE
YXRhYmFzZUxvYWRlci5oCmluZGV4IGM4NjlkMTM3YTFkYjJmNTI0OThkMGUxYjY1ZDU4N2U2Yzgx
OWIzODEuLjNhZDI1MWYyMTk5MDlmNGJjNjQ1NGQwMTMyMDFiNmE3Y2E3MDI2ODMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oCkBA
IC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEhSVEZEYXRhYmFzZUxvYWRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEhSVEZEYXRhYmFzZUxvYWRlcj4gewogCiAgICAgLy8gSG9sZGluZyBhIG1fdGhyZWFkTG9j
ayBpcyByZXF1aXJlZCB3aGVuIGFjY2Vzc2luZyBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkLgogICAg
IExvY2sgbV90aHJlYWRMb2NrOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9kYXRhYmFzZUxvYWRl
clRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkOwogCiAg
ICAgZmxvYXQgbV9kYXRhYmFzZVNhbXBsZVJhdGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKaW5kZXggOTZmMzMwODI4MDc5YTc5
YWQ2NDgyMGQwNzIxYzU5YzVlYTE2ZmRiMS4uMjFiZTk5NmVmMzdlNTNkYjcwMzEwMDE5NjI3YzBj
NDBkMmIyMTBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZl
cmJDb252b2x2ZXIuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgUmV2ZXJiQ29udm9sdmVyOjpSZXZl
cmJDb252b2x2ZXIoQXVkaW9DaGFubmVsKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCByZW5kZXJT
bGkKICAgICAvLyBTdGFydCB1cCBiYWNrZ3JvdW5kIHRocmVhZAogICAgIC8vIEZJWE1FOiB3b3Vs
ZCBiZSBiZXR0ZXIgdG8gdXAgdGhlIHRocmVhZCBwcmlvcml0eSBoZXJlLiAgSXQgZG9lc24ndCBu
ZWVkIHRvIGJlIHJlYWwtdGltZSwgYnV0IGhpZ2hlciB0aGFuIHRoZSBkZWZhdWx0Li4uCiAgICAg
aWYgKHRoaXMtPnVzZUJhY2tncm91bmRUaHJlYWRzKCkgJiYgbV9iYWNrZ3JvdW5kU3RhZ2VzLnNp
emUoKSA+IDApCi0gICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IGNyZWF0ZVRocmVhZChXZWJD
b3JlOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnksIHRoaXMsICJjb252b2x1dGlvbiBiYWNrZ3JvdW5k
IHRocmVhZCIpOworICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShX
ZWJDb3JlOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnksIHRoaXMsICJjb252b2x1dGlvbiBiYWNrZ3Jv
dW5kIHRocmVhZCIpOwogfQogCiBSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIoKQpA
QCAtMTQ2LDcgKzE0Niw3IEBAIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZlcigpCiAg
ICAgICAgICAgICBtX2JhY2tncm91bmRUaHJlYWRDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlPbmUo
KTsKICAgICAgICAgfQogCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fYmFja2dy
b3VuZFRocmVhZCk7CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZC0+d2FpdEZvckNvbXBsZXRp
b24oKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYkNvbnZvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmgKaW5kZXggNmJhZWI3Y2NlMjk4OTZjOTg5NjM1MTJmNDFiNDNhMmYxMjg4
NTQxYy4uMDU5NjMzNjdhZTI4MzQ5NDg3OTBiYTdjY2I3MjA2MGVjNTk4MTA3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKQEAgLTg2LDcg
Kzg2LDcgQEAgY2xhc3MgUmV2ZXJiQ29udm9sdmVyIHsKIAogICAgIC8vIEJhY2tncm91bmQgdGhy
ZWFkIGFuZCBzeW5jaHJvbml6YXRpb24KICAgICBib29sIG1fdXNlQmFja2dyb3VuZFRocmVhZHM7
Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2JhY2tncm91bmRUaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV9iYWNrZ3JvdW5kVGhyZWFkOwogICAgIGJvb2wgbV93YW50c1RvRXhpdDsKICAgICBi
b29sIG1fbW9yZUlucHV0QnVmZmVyZWQ7CiAgICAgbXV0YWJsZSBMb2NrIG1fYmFja2dyb3VuZFRo
cmVhZE11dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcAppbmRleCA2
Y2Q4YmQ3ZjgxYmZmMjIyN2ZlMTRmYmNhMGZiZmQwNTVkMDljNTcxLi4xZjI1ZThlNTRlOWVlODVm
YTBjY2E2YTMxYjkyZTExMWU2ZGYwY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0
cmVhbWVyLmNwcApAQCAtMzcwLDIwICszNzAsMjAgQEAgUGFzc1JlZlB0cjxBdWRpb0J1cz4gQXVk
aW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8K
IFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3QgY2hhciog
ZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIFJlZlB0
cjxBdWRpb0J1cz4gcmV0dXJuVmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRocmVh
ZCgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9ubywg
c2FtcGxlUmF0ZV0geworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIkF1ZGlvRmls
ZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBsZVJhdGVd
IHsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIoZmlsZVBhdGgpLmNyZWF0
ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0pOwotICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVC
dXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXpl
LCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8QXVkaW9C
dXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1ZGlv
RmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNh
bXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJBdWRpb0ZpbGVS
ZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVS
YXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVhZGVyKGRhdGEsIGRhdGFT
aXplKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9KTsKLSAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxl
dGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2Vi
S2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCAxYzVjMzBmMzc3YTQyYmUwMDE3NzE2NTFl
ODdmNzA0M2E1ZDY1YzkwLi4yNjQ2NmY1M2I0ODIxOGQzMzdhNWE4OTRmMWRiNzI4ZGY0YzQ3Yzgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
V2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMTA4
LDcgKzEwOCw3IEBAIGNsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGlj
IFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtCiAgICAgICAgIHZvaWQgd2FzQmxv
Y2tlZChSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGNhbm5vdFNob3dV
UkwoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKIAotICAgICAgICBUaHJlYWRJZGVudGlmaWVy
IG1fdGhyZWFkIHsgMCB9OworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7IG51bGxw
dHIgfTsKICAgICAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXg7CiAg
ICAgICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAgICAgICBS
dW5Mb29wKiBtX3J1bkxvb3AgeyBudWxscHRyIH07CkBAIC0xMDc3LDcgKzEwNzcsNyBAQCBSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQo
V2ViS2l0V2ViU3JjKiBzcmMsCiAgICAgOiBTdHJlYW1pbmdDbGllbnQoc3JjKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7Ci0gICAg
bV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoIlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Iiwg
W3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CisgICAgbV90aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZSgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBbdGhpcywgcmVxdWVz
dCA9IFdURk1vdmUocmVxdWVzdCldIHsKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKICAgICAgICAgICAg
IG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CkBAIC0xMTEzLDggKzExMTMsOCBAQCBS
ZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGll
bnQoV2ViS2l0V2ViU3JjKiBzcmMsCiBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6flJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCkKIHsKICAgICBpZiAobV90aHJlYWQpIHsKLSAg
ICAgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkKTsKLSAgICAgICAgbV90aHJlYWQgPSAwOworICAg
ICAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKICAg
ICB9CiAKICAgICBpZiAobV9ydW5Mb29wID09ICZSdW5Mb29wOjpjdXJyZW50KCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5j
cHAKaW5kZXggNDZiODk5NGE4NDFlZjcxZWEyNzljZTc3Y2JjOGZiNDNjMjlmMGE2Mi4uZmZiZmRh
OWI4OTM0ODM1NDkwYzlhNDBiYTFmNDgzMzZlNDc2MGM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcApAQCAtNzcs
NyArNzcsNyBAQCBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVuTG9vcCgpCiAgICAgc3RkOjp1bmlxdWVf
bG9jazxTdGF0aWNMb2NrPiBsb2NrKGxvYWRlclJ1bkxvb3BNdXRleCk7CiAKICAgICBpZiAoIWxv
YWRlclJ1bkxvb3BPYmplY3QpIHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKHJ1bkxvYWRlclRocmVh
ZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsKKyAgICAgICAgVGhyZWFkOjpjcmVh
dGUocnVuTG9hZGVyVGhyZWFkLCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRlciIpOwogCiAg
ICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFtdIHsgcmV0
dXJuIGxvYWRlclJ1bkxvb3BPYmplY3Q7IH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXggNDQwOGNk
MTk4NzA1YmE4NmNjOGMxOTg2ZmIzZTJjYWRlNzk2ZGNjNi4uZjEwNTcxNWVkOGQ4NzkzNzNiNjMz
MWNiMjZlMDgyYzNlMWFiOGIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKQEAgLTk0LDEwICs5NCwxMCBAQCBpbnQg
Q3VybERvd25sb2FkTWFuYWdlcjo6Z2V0UGVuZGluZ0Rvd25sb2FkQ291bnQoKSBjb25zdAogdm9p
ZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKIHsKICAgICBpZiAo
IXJ1blRocmVhZCgpKSB7Ci0gICAgICAgIGlmIChtX3RocmVhZElkKQotICAgICAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7CisgICAgICAgIGlmIChtX3RocmVhZCkK
KyAgICAgICAgICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgICAgICBzZXRS
dW5UaHJlYWQodHJ1ZSk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSBjcmVhdGVUaHJlYWQoZG93bmxv
YWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOworICAgICAgICBtX3RocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQiKTsKICAg
ICB9CiB9CiAKQEAgLTEwNSw5ICsxMDUsOSBAQCB2b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OnN0
b3BUaHJlYWQoKQogewogICAgIHNldFJ1blRocmVhZChmYWxzZSk7CiAKLSAgICBpZiAobV90aHJl
YWRJZCkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElkKTsKLSAg
ICAgICAgbV90aHJlYWRJZCA9IDA7CisgICAgaWYgKG1fdGhyZWFkKSB7CisgICAgICAgIG1fdGhy
ZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybERvd25sb2FkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmgKaW5kZXggMDJjZTczMWJkMTBhODAxOWI3ZWJlMWZhYzUyYjQ1ZTQwOTI1
NjIzMS4uZjZiYmM3N2Y0ZDNjZTBiOTY4N2QxZDhmY2E2MDkxNTg3YzlhZTQ5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaApA
QCAtNjksNyArNjksNyBAQCBjbGFzcyBDdXJsRG93bmxvYWRNYW5hZ2VyIHsKIAogICAgIHN0YXRp
YyB2b2lkIGRvd25sb2FkVGhyZWFkKHZvaWQqIGRhdGEpOwogCi0gICAgVGhyZWFkSWRlbnRpZmll
ciBtX3RocmVhZElkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIENVUkxNKiBt
X2N1cmxNdWx0aUhhbmRsZTsKICAgICBWZWN0b3I8Q1VSTCo+IG1fcGVuZGluZ0hhbmRsZUxpc3Q7
CiAgICAgVmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGwuaAppbmRleCA3YmQ3YjJkMzcwMmY1ZjljZDU3MTM2MWUxY2JiODVlYjk3MTFlOTJkLi44
MmJiNGE4MDUwNDEwMzdjNWFlZWViMjg1ZjQyNjQ2ZmZkYzg4N2Q4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmgKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlSW1w
bCA6IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGUgewogICAgICAgICBzaXplX3Qgc2l6ZSB7IDAg
fTsKICAgICB9OwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtlclRocmVhZCB7IDAgfTsK
KyAgICBSZWZQdHI8VGhyZWFkPiBtX3dvcmtlclRocmVhZCB7IG51bGxwdHIgfTsKICAgICBzdGQ6
OmF0b21pYzxib29sPiBtX3N0b3BUaHJlYWQgeyBmYWxzZSB9OwogICAgIExvY2sgbV9tdXRleFNl
bmQ7CiAgICAgTG9jayBtX211dGV4UmVjZWl2ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1w
bEN1cmwuY3BwCmluZGV4IDFlMzc5ZDFiMDBkMDk1NWZjMmRhMDBiZTNmOTZmOTkyYTkxYjk0M2Yu
LmVjYjlmNTRiNjVhMzM1MjRlM2EzNTZhM2JjMTNkMGUyZjZmNmFjYjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Q3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6c3RhcnRUaHJlYWQoKQogCiAgICAgcmVmKCk7IC8vIHN0b3BUaHJl
YWQoKSB3aWxsIGNhbGwgZGVyZWYoKS4KIAotICAgIG1fd29ya2VyVGhyZWFkID0gY3JlYXRlVGhy
ZWFkKCJXZWJTb2NrZXQgdGhyZWFkIiwgW3RoaXNdIHsKKyAgICBtX3dvcmtlclRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKCJXZWJTb2NrZXQgdGhyZWFkIiwgW3RoaXNdIHsKIAogICAgICAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbDo6c3RvcFRocmVhZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3Rv
cFRocmVhZCA9IHRydWU7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV93b3JrZXJUaHJl
YWQpOwotICAgIG1fd29ya2VyVGhyZWFkID0gMDsKKyAgICBtX3dvcmtlclRocmVhZC0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKKyAgICBtX3dvcmtlclRocmVhZCA9IG51bGxwdHI7CiAgICAgZGVyZWYo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCmluZGV4IDdhZDVi
NTc5MTNhMTY3MmRmOTE5NmU5ZWIwMTMzZTIzZTIzMjk4NWQuLmRlZTZjZTZkNjczZDc2YjQxZjI3
NDU0MDRmYjA3OWYyMTk2NTNiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OldvcmtlclRo
cmVhZFN0YXJ0dXBEYXRhKGNvbnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHIKIH0KIAogV29y
a2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291
cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBXb3JrZXJSZXBv
cnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtlclRocmVhZFN0YXJ0TW9kZSBz
dGFydE1vZGUsIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyYgY29u
dGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLCBib29sIHNob3VsZEJ5cGFzc01haW5X
b3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdp
biwgTW9ub3RvbmljVGltZSB0aW1lT3JpZ2luLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94
eSogY29ubmVjdGlvblByb3h5LCBTb2NrZXRQcm92aWRlciogc29ja2V0UHJvdmlkZXIsIEpTQzo6
UnVudGltZUZsYWdzIHJ1bnRpbWVGbGFncykKLSAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICA6IG1f
dGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclBy
b3h5KQogICAgICwgbV93b3JrZXJSZXBvcnRpbmdQcm94eSh3b3JrZXJSZXBvcnRpbmdQcm94eSkK
ICAgICAsIG1fcnVudGltZUZsYWdzKHJ1bnRpbWVGbGFncykKQEAgLTEzMywxNSArMTMzLDE1IEBA
IFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCgpCiAKIGJvb2wgV29ya2VyVGhyZWFkOjpzdGFy
dCgpCiB7Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRo
YXQgbV90aHJlYWRJRCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLgorICAg
IC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFk
IGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCiAgICAgTG9ja0hvbGRlciBs
b2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBp
ZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJRCA9IGNy
ZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29y
ZTogV29ya2VyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShXb3JrZXJUaHJlYWQ6
OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7CiAKLSAgICByZXR1
cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgV29ya2VyVGhy
ZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2b2lkKiB0aHJlYWQpCkBAIC0xOTMsNyArMTkzLDcgQEAg
dm9pZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpCiAgICAgZ19tYWluX2NvbnRleHRfcG9w
X3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0LmdldCgpKTsKICNlbmRpZgogCi0gICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCA9IG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4gcHJv
dGVjdG9yID0gbV90aHJlYWQ7CiAKICAgICBBU1NFUlQobV93b3JrZXJHbG9iYWxTY29wZS0+aGFz
T25lUmVmKCkpOwogCkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6Ondvcmtl
clRocmVhZCgpCiAgICAgdGhyZWFkR2xvYmFsRGF0YSgpLmRlc3Ryb3koKTsKIAogICAgIC8vIFRo
ZSB0aHJlYWQgb2JqZWN0IG1heSBiZSBhbHJlYWR5IGRlc3Ryb3llZCBmcm9tIG5vdGlmaWNhdGlv
biBub3csIGRvbid0IHRyeSB0byBhY2Nlc3MgInRoaXMiLgotICAgIGRldGFjaFRocmVhZCh0aHJl
YWRJRCk7CisgICAgcHJvdGVjdG9yLT5kZXRhY2goKTsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWQ6
OnN0YXJ0UnVubmluZ0RlYnVnZ2VyVGFza3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmgKaW5kZXggMDdhZDNjZTc4NGY5MTlmNzBjNDU2ODFiOTU0YzAwOTk5NmY1NTdmMi4uZjgw
OWVlNjY3MjdlZTEzOWRjNGYxOWQyY2I2MWIyMjY1ZTRlYTRiYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclRocmVhZC5oCkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIFdvcmtlclRocmVhZCA6
IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4gewogICAgIGJvb2wgc3RhcnQoKTsKICAg
ICB2b2lkIHN0b3AoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7
IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAgICAgV29ya2Vy
UnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQogICAgIFdvcmtlckxvYWRl
clByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyTG9hZGVy
UHJveHk7IH0KICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHko
KSBjb25zdCB7IHJldHVybiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OyB9CkBAIC05OCw3ICs5OCw3
IEBAIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4g
ewogICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQqKTsKICAgICB2b2lkIHdv
cmtlclRocmVhZCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIFdvcmtlclJ1bkxvb3AgbV9ydW5Mb29wOwogICAg
IFdvcmtlckxvYWRlclByb3h5JiBtX3dvcmtlckxvYWRlclByb3h5OwogICAgIFdvcmtlclJlcG9y
dGluZ1Byb3h5JiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0
b3JhZ2VUaHJlYWQuY3BwCmluZGV4IGJiNjZmY2VhN2U1MjhiYzI3ZjYzM2EzZTUyODc4YjUwMWVm
MGUxODcuLjM1NzY3OTQ2YWRlMzcyYTQ3OTQ1Zjg1ZDNmODk1OGI1MjU0YWJlNDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgc3RhdGlj
IEhhc2hTZXQ8U3RvcmFnZVRocmVhZCo+JiBhY3RpdmVTdG9yYWdlVGhyZWFkcygpCiB9CiAKIFN0
b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQorICAgIDog
bV90aHJlYWQobnVsbHB0cikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogfQpAQCAt
NDgsMTYgKzQ4LDE2IEBAIFN0b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQoKQogU3RvcmFnZVRo
cmVhZDo6flN0b3JhZ2VUaHJlYWQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKCFtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkKTsKIH0KIAogYm9v
bCBTdG9yYWdlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQo
U3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTog
TG9jYWxTdG9yYWdlIik7CisgICAgaWYgKCFtX3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQgPSBU
aHJlYWQ6OmNyZWF0ZShTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRo
aXMsICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKICAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygp
LmFkZCh0aGlzKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7
CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrKHZvaWQq
IHRocmVhZCkKQEAgLTc4LDI1ICs3OCwyNSBAQCB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVu
dHJ5UG9pbnQoKQogdm9pZCBTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkICgp
PiYmIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJU
KCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV9xdWV1ZS5r
aWxsZWQoKSAmJiBtX3RocmVhZCk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxGdW5jdGlvbjx2b2lkICgpPj4oV1RGTW92ZShmdW5jdGlvbikpKTsKIH0KIAogdm9pZCBTdG9y
YWdlVGhyZWFkOjp0ZXJtaW5hdGUoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCgh
bV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZCk7CiAgICAgYWN0aXZlU3RvcmFnZVRocmVhZHMo
KS5yZW1vdmUodGhpcyk7CiAgICAgLy8gRXZlbiBpbiB3ZWlyZCwgZXhjZXB0aW9uYWwgY2FzZXMs
IGRvbid0IHdhaXQgb24gYSBub25leGlzdGVudCB0aHJlYWQgdG8gdGVybWluYXRlLgotICAgIGlm
ICghbV90aHJlYWRJRCkKKyAgICBpZiAoIW1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uPHZvaWQgKCk+PihbdGhp
c10gewogICAgICAgICBwZXJmb3JtVGVybWluYXRlKCk7CiAgICAgfSkpOwotICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxl
dGlvbigpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpKTsKLSAgICBtX3RocmVhZElEID0g
MDsKKyAgICBtX3RocmVhZCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6cGVy
Zm9ybVRlcm1pbmF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVRocmVhZC5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAppbmRleCA5
NTY0YjhhYTA2ZTUyNDNlMzBlNDY3YzVmYmZlMmNkYWRiMjQwYzU2Li44Y2YxYjNkNGFkYzVhMzA2
YTc3ZWM3N2M5YzMyNjY2MTY4N2JlYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhy
ZWFkLmgKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgU3RvcmFnZVRocmVhZCB7CiAgICAgLy8gQmFj
a2dyb3VuZCB0aHJlYWQgcGFydCBvZiB0aGUgdGVybWluYXRlIHByb2NlZHVyZS4KICAgICB2b2lk
IHBlcmZvcm1UZXJtaW5hdGUoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsK
KyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBNZXNzYWdlUXVldWU8RnVuY3Rpb248
dm9pZCAoKT4+IG1fcXVldWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggM2I4NWYyMmZmYWUwMWUyOGFhYjk5ODE2Njk4
YWRhZDdhMzg0M2M1Zi4uYjA0YWNjOGMzMWM1ZWNhODJhNTE3NDE2NjdkYjcwZTA1M2YxZDJjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cApAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiB7CiAgICAgcGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CiAKLSAgICBXVEY6OnNl
dEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3Vy
cmVudFRocmVhZElzVXNlckluaXRpYXRlZCgpOwogCiAgICAgbV9zdXBwcmVzc01lbW9yeVByZXNz
dXJlSGFuZGxlciA9IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI7CiAgICAgbV9sb2FkVGhyb3R0bGVMYXRlbmN5ID0gcGFyYW1ldGVycy5sb2FkVGhyb3R0bGVM
YXRlbmN5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAppbmRleCBlZjdiYTg5OTgy
MDIzMjU4OWU3MzkxZjI3ZmNkM2Q2ZTE2OWY2ODk0Li5mYTAzMGZiM2EyYTBmODJkNmEyNDViZjg1
NmIzNmFhMjczMjAwNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcApAQCAt
MTgzLDcgKzE4Myw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luY0luVGhyZWFkKHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzCiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAKICAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsKHRoaXMpOwotICAg
IGRldGFjaFRocmVhZChjcmVhdGVUaHJlYWQoIklPQ2hhbm5lbDo6cmVhZFN5bmMiLCBbY2hhbm5l
bCwgc2l6ZSwgcXVldWUsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgVGhyZWFkOjpjcmVhdGUo
IklPQ2hhbm5lbDo6cmVhZFN5bmMiLCBbY2hhbm5lbCwgc2l6ZSwgcXVldWUsIGNvbXBsZXRpb25I
YW5kbGVyXSB7CiAgICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RkOjptaW4oc2l6ZSwgZ0Rl
ZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CiAgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlckRhdGEgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhidWZmZXJTaXplKSk7CiAgICAgICAgIEdSZWZQ
dHI8U291cEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9uZXdfd2l0
aF9vd25lcihidWZmZXJEYXRhLCBidWZmZXJTaXplLCBidWZmZXJEYXRhLCBmYXN0RnJlZSkpOwpA
QCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luY0luVGhyZWFkKHNpemVf
dCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzCiAgICAgICAgICAgICBE
YXRhIGRhdGEgPSB7IFdURk1vdmUoYnVmZmVyKSB9OwogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZGF0YSwgMCk7CiAgICAgICAgIH0sIHF1ZXVlKTsKLSAgICB9KSk7CisgICAgfSktPmRl
dGFjaCgpOwogfQogCiBzdHJ1Y3QgV3JpdGVBc3luY0RhdGEgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGJhZjUzMDY2YmUyMDA5ZTI2ZGJlYjdhYzg4
OGM0MDVlM2JkYmE2ZmYuLmIzODdiNmI0NDVlMzdkM2RhM2U4YTcyYzdjMGJhMzVjODYzZjI3MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTY3NSw3
ICs2NzUsNyBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Uoc3RkOjp1
bmlxdWVfcHRyPERlY29kZXI+IG1lc3NhZ2UpCiAKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogICAg
IGlmIChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkgJiYgbV9zaG91bGRCb29zdE1haW5UaHJlYWRP
blN5bmNNZXNzYWdlKSB7Ci0gICAgICAgIHB0aHJlYWRfb3ZlcnJpZGVfdCBvdmVycmlkZSA9IHB0
aHJlYWRfb3ZlcnJpZGVfcW9zX2NsYXNzX3N0YXJ0X25wKG1fbWFpblRocmVhZCwgYWRqdXN0ZWRR
T1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSksIDApOworICAgICAgICBwdGhyZWFk
X292ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFzc19zdGFydF9u
cChtX21haW5UaHJlYWQsIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9J
TlRFUkFDVElWRSksIDApOwogICAgICAgICBtZXNzYWdlLT5zZXRRT1NDbGFzc092ZXJyaWRlKG92
ZXJyaWRlKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2Vy
dmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCmluZGV4IDNiYjdjNmQ0N2Q0M2M2OTc2YjAzY2Zm
NzczNjQ0ZjQ4Nzg0OTNkNDEuLmYyM2RiNDNjMDIzNGRjN2M4MTA0OTUzZjA0ZWY4Nzk1MmY5Yjg3
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVz
L21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVu
dHJ5UG9pbnQuaApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgWFBDU2VydmljZUluaXRpYWxpemVy
KE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfCiAK
ICNpZiBIQVZFKFFPU19DTEFTU0VTKQogICAgIGlmIChwYXJhbWV0ZXJzLmV4dHJhSW5pdGlhbGl6
YXRpb25EYXRhLmNvbnRhaW5zKEFTQ0lJTGl0ZXJhbCgiYWx3YXlzLXJ1bnMtYXQtYmFja2dyb3Vu
ZC1wcmlvcml0eSIpKSkKLSAgICAgICAgc2V0R2xvYmFsTWF4UU9TQ2xhc3MoUU9TX0NMQVNTX1VU
SUxJVFkpOworICAgICAgICBUaHJlYWQ6OnNldEdsb2JhbE1heFFPU0NsYXNzKFFPU19DTEFTU19V
VElMSVRZKTsKICNlbmRpZgogCiAgICAgWFBDU2VydmljZVR5cGU6OnNpbmdsZXRvbigpLmluaXRp
YWxpemUocGFyYW1ldGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCmluZGV4IDA2MDhhYjcyZjk5MjQ4ZWYy
NGNkMmQ1MjQ1ZWU1MzMzYTAwZDlkMGQuLjQ4ZDEwNjk3NzY1YTk1YThiMzU4NzIzMGUxMDJkODAz
YWQ1OGMwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51eC9NZW1v
cnlQcmVzc3VyZU1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51
eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgTWVtb3J5UHJl
c3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IoKQogICAgIGlmIChtX2V2ZW50RkQg
PT0gLTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRl
bnRpZmllciA9IGNyZWF0ZVRocmVhZCgiTWVtb3J5UHJlc3N1cmVNb25pdG9yIiwgW3RoaXNdIHsK
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiTWVtb3J5UHJlc3N1
cmVNb25pdG9yIiwgW3RoaXNdIHsKICAgICAgICAgZG91YmxlIHBvbGxJbnRlcnZhbCA9IHNfbWF4
UG9sbGluZ0ludGVydmFsSW5TZWNvbmRzOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICAgICAgc2xlZXAocG9sbEludGVydmFsKTsKQEAgLTI3MSw3ICsyNzEsNyBAQCBNZW1vcnlQcmVz
c3VyZU1vbml0b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgICAgIH0KICAgICAgICAg
Y2xvc2UobV9ldmVudEZEKTsKICAgICB9KTsKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSWRlbnRp
Zmllcik7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogSVBDOjpBdHRhY2htZW50IE1lbW9y
eVByZXNzdXJlTW9uaXRvcjo6Y3JlYXRlSGFuZGxlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGYxM2JjYTBkYzczM2QwOWUwMTQzYTk5MGE0ZDQ3
YWY0YWI0ZTg5NDguLjBlZmVlMjIxYWE0YzgyZWE2ZmI4NzAxNDgwYzc0MDI0MzUxODFiZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMjU4LDcgKzI1OCw3
IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgcGxhdGZvcm1Jbml0aWFsaXplV2ViUHJv
Y2VzcyhXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIAogICAgIC8vIE1hdGNoIHRoZSBRb1Mgb2YgdGhl
IFVJUHJvY2VzcyBhbmQgdGhlIHNjcm9sbGluZyB0aHJlYWQgYnV0IHVzZSBhIHNsaWdodGx5IGxv
d2VyIHByaW9yaXR5LgotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZl
KC0xKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZl
KC0xKTsKIAogICAgIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0ZXJz
LnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIGlmICghbV9zdXBwcmVz
c01lbW9yeVByZXNzdXJlSGFuZGxlcikgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQxMjA3M2FkMmQ1MDI3YzAzZDI4NjhiZjFmNTQxZjlhOWUx
ZGVmN2MuLjIyYzJlYTQ0MWMwMGRhMGEzMDA0ZDFiOGI4MmRhNmM4ZmE5YzJlMGIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBA
QAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKwor
ICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVh
ZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0
byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBBUElzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAgICAgIChydW5KYXZh
U2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAg
ICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW06CisgICAgICAgICh0ZXN0VGhyZWFkSWRlbnRpZmllck1hcCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcDoKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJr
aW5nTG90LmNwcDoKKwogMjAxNy0wNC0wOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgQ1NTUHJvcGVydGllcy5qc29uIHdpdGggY29ycmVj
dCBmaWxsLWFuZC1zdHJva2Ugc3RhdHVzLCBhbmQgb3RoZXIgY2xlYW51cApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcAppbmRleCBlMmY5YmFkZTZjYTdjMjY5
NDg1YTRjZGNiZTYwOTljMzZiYTAyMTk4Li43MTBkMmE1OWRhOTI5MDE2ZTYwOGE0Y2Y3ZDk0NmZh
ODdmYWQ5MzJjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhy
ZWFkaW5nLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5n
LmNwcApAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgTG9jayYgamF2YVNjcmlwdFRocmVhZHNNdXRl
eCgpCiAgICAgcmV0dXJuIHN0YXRpY011dGV4OwogfQogCi10eXBlZGVmIEhhc2hTZXQ8VGhyZWFk
SWRlbnRpZmllcj4gVGhyZWFkU2V0OwordHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxUaHJlYWQ+PiBU
aHJlYWRTZXQ7CiBzdGF0aWMgVGhyZWFkU2V0JiBqYXZhU2NyaXB0VGhyZWFkcygpCiB7CiAgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFRocmVhZFNldCwgc3RhdGljSmF2YVNjcmlw
dFRocmVhZHMsICgpKTsKQEAgLTEwOCwxMCArMTA4LDEwIEBAIHZvaWQgcnVuSmF2YVNjcmlwdFRo
cmVhZCh2b2lkKikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7Ci0gICAgICAgIFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkID0gY3VycmVudFRocmVhZCgpOwotICAgICAgICBkZXRhY2hUaHJlYWQodGhyZWFk
KTsKLSAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5yZW1vdmUodGhyZWFkKTsKLSAgICAgICAg
amF2YVNjcmlwdFRocmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0VGhyZWFk
LCAwLCAwKSk7CisgICAgICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Cisg
ICAgICAgIHRocmVhZC5kZXRhY2goKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5yZW1v
dmUoJnRocmVhZCk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6Y3Jl
YXRlKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgc3RhcnRKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAg
TG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytpKQotICAgICAgICBq
YXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFTY3JpcHRUaHJlYWQs
IDAsIDApKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUo
JnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKIH0KIAogdm9pZCBzdG9wSmF2YVNjcmlwdFRo
cmVhZHMoKQpAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkK
ICAgICAgICAgamF2YVNjcmlwdFRocmVhZHNTaG91bGRUZXJtaW5hdGUgPSB0cnVlOwogICAgIH0K
IAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyLCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0
aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPiwgamF2YVNjcmlwdFRocmVhZHNDb3Vu
dD4gdGhyZWFkczsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRU
aHJlYWRzTXV0ZXgoKSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihqYXZhU2NyaXB0VGhyZWFkcygp
LCB0aHJlYWRzKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFk
cygpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFk
c0NvdW50OyArK2kpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbaV0p
OworICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgewogICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGZiNGQyNmZjY2ViNzBj
NGI1MzIwMTBkYTg1ZmI5Y2U3ODU1YzEzODQuLjNjZWFhNmYzZTY1NzM1ZDMwZWYxYTRmODk3ZDVl
NjljNGZhNWZmMDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0KQEAgLTEwNzIsOCArMTA3Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RUaHJlYWRJZGVudGlmaWVy
TWFwKCkKICAgICBwdGhyZWFkX2pvaW4ocHRocmVhZCwgMCk7CiAKICAgICAvLyBOb3cgY3JlYXRl
IGFub3RoZXIgdGhyZWFkIHVzaW5nIFdURi4gT24gT1NYLCBpdCB3aWxsIGhhdmUgdGhlIHNhbWUg
cHRocmVhZCBoYW5kbGUKLSAgICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBUaHJlYWRJ
ZGVudGlmaWVyLgotICAgIGNyZWF0ZVRocmVhZChydW5UaHJlYWQsIDAsICJEdW1wUmVuZGVyVHJl
ZTogdGVzdCIpOworICAgIC8vIGJ1dCBzaG91bGQgZ2V0IGEgZGlmZmVyZW50IFJlZlB0cjxUaHJl
YWQ+LgorICAgIFRocmVhZDo6Y3JlYXRlKHJ1blRocmVhZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0
ZXN0Iik7CiB9CiAKIHN0YXRpYyB2b2lkIGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMoKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKaW5kZXggODQ4NTI3MzUx
ZjYwNjNmYzI2MzY4NzgwNTZkOWMyNGRiYWJlODNkYy4uNzcyMTYzNmI3NzgwN2YxMzk1MWVhMTEy
ZmJkNDEzZThmYWM0NjBiYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvQ29uZGl0aW9uLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25k
aXRpb24uY3BwCkBAIC04OSwxNCArODksMTQgQEAgdm9pZCBydW5UZXN0KAogICAgIENvbmRpdGlv
biBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb24gZnVsbENvbmRpdGlvbjsKIAotICAgIFZl
Y3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1lclRocmVhZHM7Ci0gICAgVmVjdG9yPFRocmVh
ZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+
IGNvbnN1bWVyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1Y2VyVGhy
ZWFkczsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7CiAgICAgTG9jayByZWNlaXZl
ZExvY2s7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQ29uc3VtZXJzOyBpLS07KSB7
Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVh
ZCgKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA9IFRocmVhZDo6Y3Jl
YXRlKAogICAgICAgICAgICAgIkNvbnN1bWVyIHRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkg
ewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIHJ1
blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlDb25kaXRpb24sIGxvY2tl
ciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcg
Y29uc3VtcHRpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250
aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1
cnJlbnQoKSwgIjogQ2hlY2tpbmcgY29uc3VtcHRpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29u
dGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNp
emUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXNo
b3VsZENvbnRpbnVlIHx8ICFxdWV1ZS5pc0VtcHR5KCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKQEAgLTEzMSw3
ICsxMzEsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgc2xlZXAoZGVsYXkpOwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtUHJvZHVjZXJzOyBpLS07KSB7Ci0gICAgICAgIFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgUmVmUHRyPFRocmVh
ZD4gdGhyZWFkSWRlbnRpZmllciA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIlByb2R1
Y2VyIFRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKQEAgLTE0
Miw3ICsxNDIsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVsbENvbmRpdGlvbiwgbG9ja2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAo
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhy
ZWFkKCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGlu
dWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUo
KSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNh
dGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXpl
KCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBxdWV1ZS5zaXplKCkgPCBtYXhRdWV1ZVNpemU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsK
QEAgLTE1NSw4ICsxNTUsOCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgIHByb2R1Y2VyVGhyZWFk
cy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCi0gICAgICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIGZvciAoUmVmUHRyPFRo
cmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKKyAgICAgICAgdGhyZWFk
SWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2tlcihsb2NrKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCB2b2lkIHJ1
blRlc3QoCiAgICAgfQogICAgIGVtcHR5Q29uZGl0aW9uLm5vdGlmeUFsbCgpOwogCi0gICAgZm9y
IChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCi0g
ICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIGZv
ciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IGNvbnN1bWVyVGhyZWFkcykKKyAg
ICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIEVYUEVD
VF9FUShudW1Qcm9kdWNlcnMgKiBudW1NZXNzYWdlc1BlclByb2R1Y2VyLCByZWNlaXZlZC5zaXpl
KCkpOwogICAgIHN0ZDo6c29ydChyZWNlaXZlZC5iZWdpbigpLCByZWNlaXZlZC5lbmQoKSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCmluZGV4IDU1NzYzMDJkNjkwZGZjYTM1
OTkyOTI4YjFjODUzYzc2MjJlNDVmYjkuLjZhNGU1MzhmNTZmNDZkMTc3YTNmNjJmMWRkZWIzYTRk
MGFmMmFmMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2su
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCkBAIC00Niwx
MyArNDYsMTMgQEAgdm9pZCBydW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cHMsIHVu
c2lnbmVkIG51bVRocmVhZHNQZXJHcm91cCwgdW5zaWduZWQKIHsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TG9ja1R5cGVbXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPExvY2tUeXBlW10+KG51bVRo
cmVhZEdyb3Vwcyk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6
bWFrZV91bmlxdWU8ZG91YmxlW10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFk
SWRlbnRpZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxSZWZQdHI8VGhyZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3Jv
dXApOwogCiAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRHcm91cEluZGV4ID0gbnVtVGhyZWFkR3Jv
dXBzOyB0aHJlYWRHcm91cEluZGV4LS07KSB7CiAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5k
ZXhdID0gMDsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFk
c1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRH
cm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhy
ZWFkKAorICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Bl
ckdyb3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAg
IkxvY2sgdGVzdCB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFt0aHJlYWRHcm91cEluZGV4LCAm
bG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRpY2FsU2VjdGlvbl0gKCkg
ewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JdGVyYXRpb25zOyBp
LS07KSB7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgcnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhy
ZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1UaHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVkCiAgICAgfQog
CiAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRo
cmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRl
eF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBkb3VibGUgZXhwZWN0ZWQgPSAwOwogICAg
IGZvciAodWludDY0X3QgaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1JdGVyYXRpb25zKSAq
IHdvcmtQZXJDcml0aWNhbFNlY3Rpb24gKiBudW1UaHJlYWRzUGVyR3JvdXA7IGktLTspCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCmluZGV4IGM2N2UxZTA4
MTVhODNhZmE5MzMzZTJhYzlhMmJkNzhiNjdiMTY0NWIuLjVhZjljN2M4MjdiMjFlMjFkOGRmOTMw
NTI2MGQ2ZmZlZTY4ZmJkMWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1BhcmtpbmdMb3QuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Bh
cmtpbmdMb3QuY3BwCkBAIC00OCwxNiArNDgsMTQgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7
CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1UaHJlYWRzOyBpLS07KSB7
CiAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBjcmVhdGVUaHJl
YWQoCisgICAgICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAg
ICJQYXJraW5nIFRlc3QgVGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9ORSgwdSwgY3VycmVudFRocmVhZCgpKTsKLQog
ICAgICAgICAgICAgICAgICAgICAgICAgZG93bigpOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXdha2UuYWRkKGN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0QXdva2VuID0gY3VycmVudFRocmVhZCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYXdha2UuYWRkKFRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RBd29rZW4gPSAmVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb24ubm90aWZ5X29uZSgpOwogICAgICAgICAgICAgICAgICAgICB9KSk7CiAg
ICAgICAgIH0KQEAgLTY1LDE2ICs2MywxNiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKIAog
ICAgIHZvaWQgdW5wYXJrT25lKHVuc2lnbmVkIHNpbmdsZVVucGFya0luZGV4KQogICAgIHsKLSAg
ICAgICAgRVhQRUNUX0VRKDB1LCBsYXN0QXdva2VuKTsKKyAgICAgICAgRVhQRUNUX1RSVUUobnVs
bHB0ciA9PSBsYXN0QXdva2VuKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRp
bmdPbkFkZHJlc3MgPSAwOwotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllciwgOD4gcXVl
dWU7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPiwgOD4gcXVldWU7CiAgICAgICAgIFBh
cmtpbmdMb3Q6OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChU
aHJlYWQmIHRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7
CisgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKCZ0aHJlYWRJZGVudGlmaWVyKTsKIAogICAg
ICAgICAgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MrKzsKICAgICAgICAgICAgIH0pOwpAQCAt
ODcsMTIgKzg1LDEyIEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CiAgICAgICAgICAgICB3aGls
ZSAoYXdha2Uuc2l6ZSgpIDwgc2luZ2xlVW5wYXJrSW5kZXggKyAxKQogICAgICAgICAgICAgICAg
IGNvbmRpdGlvbi53YWl0KGxvY2tlcik7Ci0gICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGxhc3RB
d29rZW4pOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobnVsbHB0ciAhPSBsYXN0QXdva2VuKTsK
ICAgICAgICAgICAgIGlmICghcXVldWUuaXNFbXB0eSgpICYmIHF1ZXVlWzBdICE9IGxhc3RBd29r
ZW4pIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJXb2tlIHVwIHdyb25nIHRocmVhZDogcXVl
dWUgPSAiLCBsaXN0RHVtcChxdWV1ZSksICIsIGxhc3QgYXdva2VuID0gIiwgbGFzdEF3b2tlbiwg
IlxuIik7CiAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKHF1ZXVlWzBdLCBsYXN0QXdva2VuKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxhc3RBd29rZW4gPSAwOworICAgICAgICAgICAg
bGFzdEF3b2tlbiA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwMCw3ICs5OCw3
IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVt
V2FpdGluZ09uQWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAg
ICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAg
ICAgICAgICAgIFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVzcykgewogICAgICAgICAg
ICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAKQEAgLTExNCw3ICsxMTIsNyBAQCBzdHJ1Y3QgU2luZ2xl
TGF0Y2hUZXN0IHsKIAogICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAg
UGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwg
Y29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2
b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9y
ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCkBAIC0xMjksOCAr
MTI3LDggQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgICAgICAgICAgY29uZGl0
aW9uLndhaXQobG9ja2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJZGVudGlmaWVyIDogdGhyZWFkcykKLSAgICAgICAgICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgICAgICBmb3IgKFJlZlB0cjxUaHJl
YWQ+IHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQorICAgICAgICAgICAgdGhyZWFkSWRlbnRp
Zmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICAvLyBTZW1hcGhvcmUgb3Bl
cmF0aW9ucy4KQEAgLTE3OSw5ICsxNzcsOSBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAg
ICBBdG9taWM8aW50PiBzZW1hcGhvcmU7CiAgICAgc3RkOjptdXRleCBsb2NrOwogICAgIHN0ZDo6
Y29uZGl0aW9uX3ZhcmlhYmxlIGNvbmRpdGlvbjsKLSAgICBIYXNoU2V0PFRocmVhZElkZW50aWZp
ZXI+IGF3YWtlOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwotICAgIFRo
cmVhZElkZW50aWZpZXIgbGFzdEF3b2tlbiB7IDAgfTsKKyAgICBIYXNoU2V0PFJlZjxUaHJlYWQ+
PiBhd2FrZTsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CisgICAgUmVmUHRy
PFRocmVhZD4gbGFzdEF3b2tlbiB7IG51bGxwdHIgfTsKIH07CiAKIHZvaWQgcnVuUGFya2luZ1Rl
c3QodW5zaWduZWQgbnVtTGF0Y2hlcywgdW5zaWduZWQgZGVsYXksIHVuc2lnbmVkIG51bVRocmVh
ZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVucGFya3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306619</attachid>
            <date>2017-04-09 05:56:27 -0700</date>
            <delta_ts>2017-04-09 06:15:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170502-20170409215625.patch</filename>
            <type>text/plain</type>
            <size>228778</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OTkxYzE0NWRlZjdhNjY1OTliNDJkODdkOWM0ZmUyY2I0M2M2Njk3Li41Mjc5Y2QxMDUzN2MyOWY3
ZTM5MGVjYmY0MGJiYTgyMDI0NjMzNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Om93bmVyVGhyZWFkKToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6
c2VuZCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKwogMjAxNy0wNC0wOCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUlRDIHRlc3Rz
IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCA3MzQ4N2JhMWRkMDAwOWU0NzA0YTdkMTUzMGIxMTNkMzMzZjE2OTdk
Li44MDI5OGE5ZmMwMGI4YzY2NTkwMDM3M2Y2Y2I1MzRkODIwYzkzNWMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5MSBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRy
PFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFu
dGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyBvZiBXVEYgVGhyZWFkaW5nIG1l
Y2hhbmlzbSB0byBtZXJnZSBKYXZhU2NyaXB0Q29yZSdzIHRocmVhZGluZyBleHRlbnNpb24gdG8g
V1RGIFRocmVhZGluZy4KKyAgICAgICAgUHJldmlvdXNseSwgSmF2YVNjcmlwdENvcmUgcmVxdWly
ZXMgcmljaGVyIHRocmVhZGluZyBmZWF0dXJlcyAoc3VjaCBhcyBzdXNwZW5kaW5nIGFuZCByZXN1
bWluZyB0aHJlYWRzKSwgYW5kIHRoZXkKKyAgICAgICAgYXJlIGltcGxlbWVudGVkIGZvciBQbGF0
Zm9ybVRocmVhZCBpbiBKYXZhU2NyaXB0Q29yZS4gQnV0IHRoZXNlIGZlYXR1cmVzIHNob3VsZCBi
ZSBpbXBsZW1lbnRlZCBpbiBXVEYgVGhyZWFkaW5nIHNpZGUKKyAgICAgICAgaW5zdGVhZCBvZiBt
YWludGFpbmluZyBKU0MncyBvd24gdGhyZWFkaW5nIGZlYXR1cmVzIHRvby4gVGhpcyBwYXRjaCBy
ZW1vdmVzIHRoZXNlIGZlYXR1cmVzIGZyb20gSlNDIGFuZCBtb3ZlIGl0IHRvCisgICAgICAgIFdU
RiBUaHJlYWRpbmcuCisKKyAgICAgICAgSG93ZXZlciwgY3VycmVudCBXVEYgVGhyZWFkaW5nIGhh
cyBvbmUgcHJvYmxlbTogV2luZG93cyB2ZXJzaW9uIG9mIFdURiBUaHJlYWRpbmcgaGFzIGRpZmZl
cmVudCBzZW1hbnRpY3MgZnJvbSBQdGhyZWFkcworICAgICAgICBvbmUuIEluIFdpbmRvd3MgV1RG
IFRocmVhZGluZywgd2UgY2Fubm90IHBlcmZvcm0gYW55IG9wZXJhdGlvbiBhZnRlciB0aGUgdGFy
Z2V0IHRocmVhZCBpcyBkZXRhY2hlZDogV1RGIFRocmVhZGluZyBzdG9wCisgICAgICAgIHRyYWNr
aW5nIHRoZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIG9uY2UgdGhlIHRocmVhZCBpcyBkZXRhY2hlZC4g
QnV0IHRoaXMgaXMgbm90IHRoZSBzYW1lIHRvIFB0aHJlYWRzIG9uZS4gSW4gUHRocmVhZHMsCisg
ICAgICAgIHB0aHJlYWRfZGV0YWNoIGp1c3QgbWVhbnMgdGhhdCB0aGUgcmVzb3VyY2Ugb2YgdGhl
IHRocmVhZCB3aWxsIGJlIGRlc3Ryb3llZCBhdXRvbWF0aWNhbGx5LiBXaGlsZSBzb21lIG9wZXJh
dGlvbnMgbGlrZQorICAgICAgICBwdGhyZWFkX2pvaW4gd2lsbCBiZSByZWplY3RlZCwgc29tZSBv
cGVyYXRpb25zIGxpa2UgcHRocmVhZF9raWxsIHdpbGwgYmUgYWNjZXB0ZWQuCisKKyAgICAgICAg
VGhlIHByb2JsZW0gaXMgdGhhdCBkZXRhY2hlZCB0aHJlYWQgY2FuIGJlIHN1c3BlbmRlZCBhbmQg
cmVzdW1lZCBpbiBKU0MuIEZvciBleGFtcGxlLCBpbiBqc2MuY3BwLCB3ZSBzdGFydCB0aGUgd29y
a2VyCisgICAgICAgIHRocmVhZCBhbmQgZGV0YWNoIGl0IGltbWVkaWF0ZWx5LiBJbiB3b3JrZXIg
dGhyZWFkLCB3ZSB3aWxsIGNyZWF0ZSBWTSBhbmQgdGh1cyBjb25jdXJyZW50IEdDIHdpbGwgc3Vz
cGVuZCBhbmQgcmVzdW1lCisgICAgICAgIHRoZSBkZXRhY2hlZCB0aHJlYWQuIEhvd2V2ZXIsIGlu
IFdpbmRvd3MgV1RGIFRocmVhZGluZywgd2UgaGF2ZSBubyByZWZlcmVuY2UgdG8gdGhlIGRldGFj
aGVkIHRocmVhZC4gVGh1cyB3ZSBjYW5ub3QKKyAgICAgICAgcGVyZm9ybSBzdXNwZW5kIGFuZCBy
ZXN1bWUgb3BlcmF0aW9ucyBvbnRvIHRoZSBkZXRhY2hlZCB0aHJlYWQuCisKKyAgICAgICAgVG8g
c29sdmUgdGhlIHByb2JsZW0sIHdlIGNoYW5nZSBXaW5kb3dzIFRocmVhZGluZyBtZWNoYW5pc20g
ZHJhc3RpY2FsbHkgdG8gYWxpZ24gaXQgdG8gdGhlIFB0aHJlYWQgc2VtYW50aWNzLiBJbiB0aGUK
KyAgICAgICAgbmV3IFRocmVhZGluZywgd2UgaGF2ZSBSZWZQdHI8VGhyZWFkPiBjbGFzcy4gSXQg
aG9sZHMgYSBoYW5kbGUgdG8gYSBwbGF0Zm9ybSB0aHJlYWQuIFdlIGNhbiBwZXJmb3JtIHRocmVh
ZGluZyBvcGVyYXRpb25zCisgICAgICAgIHdpdGggdGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsIFRo
cmVhZDo6c3VzcGVuZCBpcyBvZmZlcmVkLiBBbmQgd2UgdXNlIGRlc3RydWN0b3Igb2YgdGhlIHRo
cmVhZCBsb2NhbCB2YXJpYWJsZSB0byByZWxlYXNlCisgICAgICAgIHRoZSByZXNvdXJjZXMgaGVs
ZCBieSBSZWZQdHI8VGhyZWFkPi4gSW4gV2luZG93cywgVGhyZWFkOjpkZXRhY2ggZG9lcyBub3Ro
aW5nIGJlY2F1c2UgdGhlIHJlc291cmNlIHdpbGwgYmUgZGVzdHJveWVkCisgICAgICAgIGF1dG9t
YXRpY2FsbHkgYnkgUmVmUHRyPFRocmVhZD4uCisKKyAgICAgICAgVG8gZG8gc28sIHdlIGludHJv
ZHVjZSBUaHJlYWRIb2xkZXIgZm9yIFdpbmRvd3MuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJl
dmlvdXMgVGhyZWFkSWRlbnRpZmllckRhdGEgZm9yIFB0aHJlYWRzLgorICAgICAgICBJdCBob2xk
cyBSZWZQdHI8VGhyZWFkPiBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKHRlY2huaWNhbGx5
LCBpdCBpcyBGaWJlciBMb2NhbCBTdG9yYWdlIGluIFdpbmRvd3MpLiBUaHJlYWQ6OmN1cnJlbnQo
KQorICAgICAgICB3aWxsIHJldHVybiB0aGlzIHJlZmVyZW5jZS4KKworICAgICAgICBUaGUgcHJv
YmxlbWF0aWMgc2l0dWF0aW9uIGlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBkZWFsbG9jYXRpb24g
b2YgdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIGlzIG5vdCBkZWZpbmVkLiBTbyB3ZSBzaG91bGQK
KyAgICAgICAgbm90IHRvdWNoIHRocmVhZCBsb2NhbCBzdG9yYWdlIGluIHRoZSBkZXN0cnVjdG9y
IG9mIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZS4gVG8gYXZvaWQgc3VjaCBlZGdlIGNhc2VzLCB3
ZSBoYXZlCisgICAgICAgIGN1cnJlbnRUaHJlYWQoKSAvIFRocmVhZDo6Y3VycmVudElEKCkgQVBJ
cy4gVGhleSBhcmUgc2FmZSB0byBiZSBjYWxsZWQgZXZlbiBpbiB0aGUgZGVzdHJ1Y3RvciBvZiB0
aGUgb3RoZXIgdGhyZWFkIGxvY2FsCisgICAgICAgIHN0b3JhZ2UuIEFuZCBpbiBXaW5kb3dzLCBp
biB0aGUgRkxTIGRlc3RydWN0b3IsIHdlIHdpbGwgY3JlYXRlIHRoZSB0aHJlYWRfbG9jYWwgdmFy
aWFibGUgdG8gZGVmZXIgdGhlIGRlc3RydWN0aW9uIG9mCisgICAgICAgIHRoZSBUaHJlYWRIb2xk
ZXIuIFdlIGVuc3VyZSB0aGF0IHRoaXMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG90
aGVyIEZMUyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkIGluIFdpbmRvd3MgMTAuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVl
ZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6Cisg
ICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0
b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFk
LmNwcDoKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3Ip
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUp
OgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChX
VEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVJlZ2lzdGVy
cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1U
aHJlYWQuaC4KKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0cjo6
UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6CisgICAg
ICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
VEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAg
ICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5jcHAuCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UpOgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJl
YWRIb2xkZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNwcDog
QWRkZWQuCisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KToKKyAgICAgICAgKFdURjo6dGhy
ZWFkTWFwKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSk6Cisg
ICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTcGVjaWZpYy5oOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om5vcm1hbGl6
ZVRocmVhZE5hbWUpOgorICAgICAgICAoV1RGOjp0aHJlYWRFbnRyeVBvaW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0Q3VycmVu
dFRocmVhZElzVXNlckluaXRpYXRlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0R2xvYmFs
TWF4UU9TQ2xhc3MpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MpOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmR1bXApOgorICAgICAgICAoV1RGOjpub3JtYWxpemVUaHJl
YWROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6YWRqdXN0ZWRRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVh
ZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmlkKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpk
aWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkSm9pbik6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVh
ZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdU
Rjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50
VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5
UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUludGVybmFsKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2Fp
dEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElE
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6
OnJlc3VtZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Z2V0UmVnaXN0ZXJzKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gp
OgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQ
dGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3Rh
dGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmVz
dGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRldGFjaFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2ln
bmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6
d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGV0
YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRF
eGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6d2FpdEZv
clRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpjb25jdXJy
ZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiB3dGYvY29j
b2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAoV1RGOjpkaXNwYXRjaFFPU0NsYXNzKToK
KyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcDoKKyAgICAgICAgKFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZv
cm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
TGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQ
b2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKToKKyAgICAgICAgKiB3dGYvd2luL01h
aW5UaHJlYWRXaW4uY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRocmVhZFBsYXRm
b3JtKToKKwogMjAxNy0wNC0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByZW1vdmUgY29uc3RleHByIGZ1bmN0aW9uIHNpbmNl
IEdUSyBkaWRuJ3QgbGlrZSBpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MGUyZjA3OTczMGI1NDdlNjVkODRi
MjdlMDBkMjc5MWE1ZWY5NTYzLi4wNzkzYmYwNGJjOGNlYmVlY2Q5ZGQ1ZThhODU3NDY5NjVlZTAz
NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTctMDQtMDkgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRo
cmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVh
ZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBV
c2UgVGhyZWFkOjogQVBJcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVu
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OnN0YXJ0UmVuZGVyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFk
OjpnZXRUaHJlYWRJRCk6CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0
ZVRocmVhZEZvckRlYnVnZ2luZyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAg
ICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6
Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L0hSVEZEYXRhYmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VM
b2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJh
c2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0
YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9s
dmVyOjpSZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVy
Ojp+UmV2ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252
b2x2ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVh
ZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0Zp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2FkZXJSdW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0
VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6
c3RvcFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0YXJ0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
Ojp3b3JrZXJUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0wOCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtWYXJpYXRp
b24gRm9udHNdIFdpZHRoIHZhbHVlcyBvZiBHWCBmb250cyBhcmUgbm90IG1hcHBlZCBjb3JyZWN0
bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1ODA5NzdmMTI5NWQxZmJmZS4u
M2NkMjY2OWFlYWI0MWVmZDFiYmYzODU1MTI3NzNkYmRjMDAzY2QyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBBUElzLgorCisg
ICAgICAgICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRo
cmVhZDo6flN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUaHJlYWQuaDoKKwogMjAxNy0wNC0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVj
b3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVyZSBF
eHRyYSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVuIHRoZXJlIGlzIGEgV2ViIEluc3BlY3RvciBG
cm9udGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDJjYzU4MmRkZjIxYjU1MDU5NGMxNzRmYWYxYjFkY2M1M2Fl
ZGZmOGIuLjQwZGE2YzE0ODcyZDQyNjljMTBkZGI2OTA2YmFhNWE1N2FjZDkyYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFu
ZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVu
dGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBB
UElzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5j
SW5UaHJlYWQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKElQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6CisgICAgICAgICog
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5
UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRpYWxpemVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNy0wNC0wOCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3Agc3RkOjpjaHJvbm8gc3VwcG9y
dCBmcm9tIFRpbWVyIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKaW5kZXggZTc4MDg2YzNhOTYxMmEyZjBiNGQ3
YWFmMWFkYzdiYTFhMTAxYzU0Ny4uNDNhZWYwNzc5NzBjZmVkYjJjYWMwNDYzZmNkOWVjY2EyOWQx
NTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJl
QW5kU3dhcFRlc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcApAQCAtOTYsNyArOTYsNyBAQCB2b2lkIHRlc3RDb21wYXJlQW5k
U3dhcCgpCiB7CiAgICAgQml0bWFwIGJpdG1hcDsKICAgICBjb25zdCBpbnQgbnVtVGhyZWFkcyA9
IDU7Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRHNbbnVtVGhyZWFkc107CisgICAgUmVm
UHRyPFRocmVhZD4gdGhyZWFkc1tudW1UaHJlYWRzXTsKICAgICBEYXRhIGRhdGFbbnVtVGhyZWFk
c107CiAKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTEwNywxMiArMTA3LDEy
IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkKICAgICAgICAgZGF0YVtpXS5pZCA9IGk7CiAg
ICAgICAgIGRhdGFbaV0ubnVtVGhyZWFkcyA9IG51bVRocmVhZHM7CiAgICAgICAgIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiB0aHJlYWRGdW5jID0gc3RkOjpiaW5kKHNldEJpdFRocmVhZEZ1bmMsICZk
YXRhW2ldKTsKLSAgICAgICAgdGhyZWFkSURzW2ldID0gY3JlYXRlVGhyZWFkKCJzZXRCaXRUaHJl
YWRGdW5jIiwgdGhyZWFkRnVuYyk7CisgICAgICAgIHRocmVhZHNbaV0gPSBUaHJlYWQ6OmNyZWF0
ZSgic2V0Qml0VGhyZWFkRnVuYyIsIHRocmVhZEZ1bmMpOwogICAgIH0KIAogICAgIHByaW50Zigi
V2FpdGluZyBmb3IgJWQgdGhyZWFkcyB0byBqb2luXG4iLCBudW1UaHJlYWRzKTsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkSURzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKIAogICAgIHByaW50ZigiUEFTUzogQ29tcGFyZUFuZFN3YXAgdGVzdCBjb21wbGV0
ZWQgd2l0aG91dCBhIGhhbmdcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3ZjE2NmMzN2RhNDlhZGRmZmFlYjc2N2NmMWM5OGJiZWFjN2IzMGZjLi45Yjk0ZjMwYjk4N2Yz
MDk2ZTAzNWE2ZjliNmZhOWQ5MTFjNmY1YmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjQ3MSw3ICsyNDcxLDYgQEAKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExM
SW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQ5NEYyRTE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsg
fTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlGRUU0M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRTQzRkNEMUU2
NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBD
b21wYXJlQW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVz
dC5jcHAgKi87IH07CiAJCUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRkQ2
RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCkBAIC01MTAxLDcgKzUxMDAsNiBAQAogCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hkb2cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRG
IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFREE1MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZs
b3dUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tP
dmVyZmxvd1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZE
MSAvKiBQbGF0Zm9ybVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF0Zm9ybVRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MDFB
QUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9
IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NjYsNyArNjg2NCw2IEBACiAJCQkJRjY5MkE4NzgwMjU1
NTk3RDAxRkY2MEY3IC8qIE9wZXJhdGlvbnMuaCAqLywKIAkJCQkwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi8sCiAJCQkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCAqLywKLQkJCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1U
aHJlYWQuaCAqLywKIAkJCQk4Njg5MTZBOTE1NUYyODU0MDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUu
aCAqLywKIAkJCQkxNDczNDFERjFEQzJDRTk2MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwICovLAogCQkJCTE0NzM0MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJs
ZS5oICovLApAQCAtOTM0OCw3ICs5MzQ1LDYgQEAKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAz
MTggLyogU3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRTQz
RkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk2QjczMjcxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjAxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJv
bFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcAppbmRleCA4N2IzNTNhYTM3OTI1Y2ExZTJmYTg0MTE5OTc2YWRmMGIxZTA3YmFh
Li5jOTE3NzA3OTU4OGY4NmQ0MzFhMjhiYzA3NGQ0ZmUyZTNmMTNkYzQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKQEAgLTE5MTMsMTAgKzE5MTMsMTAgQEAgdm9p
ZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0
aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9m
UHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAg
ICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAg
ICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xOTMzLDggKzE5MzMsOCBAQCB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0KIAotICAg
IGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFk
IDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNy
YXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXgg
MDE5OTZhZjcxYWI0ZjA5ZWI0OWI3MDExYzE3ZGJjOTNjNDBjZTg3YS4uOTA0NjU2NDg4N2I2YjNh
NGFmYWMzNTlkYzEwYzUwMzg0ZDc0ZGVmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKQEAgLTE2ODUwLDEwICsxNjg1MCwxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
CiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFk
czsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7
CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAg
ICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQi
LAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKQEAgLTE2ODcwLDggKzE2ODcwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQog
ICAgICAgICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkIDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
KTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCmluZGV4
IGE0ZTIxZjlmYTNjZDQ3MjFlYTI2NzVlMDZlNGQ1MzBjNWJhOTViMzUuLmU5YjFmNWMyZjBiYzI3
YjAyOTMxMGM1NTgxNTIwYjFiNTUyMjU5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgaW5pdGlh
bGl6ZVN1cGVyU2FtcGxlcigpCiAgICAgaWYgKCFPcHRpb25zOjp1c2VTdXBlclNhbXBsZXIoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgY3JlYXRlVGhyZWFkKAorICAgIFRocmVhZDo6Y3JlYXRl
KAogICAgICAgICAiSlNDIFN1cGVyIFNhbXBsZXIiLAogICAgICAgICBbXSAoKSB7CiAgICAgICAg
ICAgICBjb25zdCBpbnQgc2xlZXBRdWFudHVtID0gMTA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCmluZGV4IGNlZjk5MGNiNDgzM2E2YmI5NDcxYmQwOGE1MDRlNTVm
YjQ3ZGY0NTguLmFkMGVjYzY5YTc3ZDE3MmNmNGJjMWVmYWM5M2RmOTMwMjdjMDA5ZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCkBAIC0xNDQsNyArMTQ0LDcg
QEAgY2xhc3MgV29ya2xpc3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsK
ICAgICAgICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0ZWRcbiIpOwog
ICAgICAgICAKICAgICAgICAgaWYgKG1fcmVsYXRpdmVQcmlvcml0eSkKLSAgICAgICAgICAgIGNo
YW5nZVRocmVhZFByaW9yaXR5KGN1cnJlbnRUaHJlYWQoKSwgbV9yZWxhdGl2ZVByaW9yaXR5KTsK
KyAgICAgICAgICAgIFRocmVhZDo6Y3VycmVudCgpLmNoYW5nZVByaW9yaXR5KG1fcmVsYXRpdmVQ
cmlvcml0eSk7CiAgICAgICAgIAogICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBzdGQ6Om1h
a2VfdW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7CiAgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPExvbmdMaXZlZFN0YXRlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4IDc4OGE2YzM2
MjM2OWM1OGRhZDI5YTYwYTM4NzEwNDRlNDY0ZWQzMDUuLjJiODI0ZWNmZGU1ODkzYjJjNmI3MDZm
NDcwMmVjZDIyOTVkMjM1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgQXN5bmNo
cm9ub3VzRGlzYXNzZW1ibGVyIHsKIHB1YmxpYzoKICAgICBBc3luY2hyb25vdXNEaXNhc3NlbWJs
ZXIoKQogICAgIHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJBc3luY2hyb25vdXMgRGlzYXNzZW1i
bGVyIiwgWyZdICgpIHsgcnVuKCk7IH0pOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiQXN5bmNo
cm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBlbnF1ZXVlKHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+IHRhc2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDNhZWUzMDEwNGY1MjkxYTI4NzY0YTVj
ZGVlNWFhOGYwY2E3MmFkMzEuLjcyMjNiMjBjOWRmYmExMDQzMDk4YTc4NTc0YmEyOGE2OTRjMDQ1
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDksNyArMzQ5LDcgQEAg
dm9pZCBIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiAgICAgICAgICAgICBtX3Nob3VsZFN0
b3BDb2xsZWN0aW5nQ29udGludW91c2x5ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgfQotICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQpOworICAgICAg
ICBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAg
fQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQpAQCAtMjY4MSw3ICsyNjgxLDcgQEAg
dm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQogICAgIG1faXNTYWZlVG9Db2xsZWN0
ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKSB7
Ci0gICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkID0gV1RGOjpUaHJlYWQ6OmNyZWF0ZSgK
ICAgICAgICAgICAgICJKU0MgREVCVUcgQ29udGludW91cyBHQyIsCiAgICAgICAgICAgICBbdGhp
c10gKCkgewogICAgICAgICAgICAgICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAx
NmJlZWY5YTg5ZDA2ZGYyNzk3MTdlNzcwYjE2NGE0NzE0Li5kNjc4MzdhZmVmMTMwMWY5NjcyZjYw
ZWEyOWM0M2ZjODU5N2RlYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC00OSw2
ICs0OSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjY2LDcgKzY2Nyw3
IEBAIGNsYXNzIEhlYXAgewogICAgIExvY2sgbV9jb2xsZWN0Q29udGludW91c2x5TG9jazsKICAg
ICBDb25kaXRpb24gbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uOwogICAgIGJvb2wgbV9z
aG91bGRTdG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSB7IGZhbHNlIH07Ci0gICAgVGhyZWFkSWRl
bnRpZmllciBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFdU
Rjo6VGhyZWFkPiBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyBudWxscHRyIH07CiAgICAg
CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ1N0YXJ0VGltZTsKICAgICBNb25vdG9uaWNUaW1l
IG1fbGFzdEdDRW5kVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNo
aW5lU3RhY2tNYXJrZXIuY3BwCmluZGV4IGI4NWI3NjQ4ZTJmNWQxOWZhMjJkNzYzZjdiY2RlZjhm
NDRjNDJjODguLjI3ZDNmMTIxMTMwNjMwZmFjZWYwNzMyZWY3N2JjZGU5NTNiZDI0ZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApA
QCAtMzYsOTEgKzM2LDExIEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgT1MoREFSV0lOKQotCi0jaW5jbHVkZSA8
bWFjaC9tYWNoX2luaXQuaD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgotI2luY2x1ZGUg
PG1hY2gvdGFzay5oPgotI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2luY2x1ZGUgPG1h
Y2gvdm1fbWFwLmg+Ci0KLSNlbGlmIE9TKFdJTkRPV1MpCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxzeXMv
bW1hbi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaWYgT1MoU09MQVJJUykKLSNpbmNsdWRl
IDx0aHJlYWQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLSNpZiBI
QVZFKFBUSFJFQURfTlBfSCkKLSNpbmNsdWRlIDxwdGhyZWFkX25wLmg+Ci0jZW5kaWYKLQotI2lm
IFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8
c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNo
aW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFs
TG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQot
c3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5m
b190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0
b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRU
aHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRs
ZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1
c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91
bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVz
LCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdz
dXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMg
cHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQg
c3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhh
bmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29u
bGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdz
OwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJD
b250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxs
ZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0
IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxs
IHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91
cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0
YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFy
cmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0
bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2
OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3Qo
JnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hp
bmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxl
ciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNv
IGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhp
cyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5v
dCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0Owot
ICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tl
ZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxv
Y2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0
IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9T
KFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRo
cmVhZDsKK3VzaW5nIEpTVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFz
cyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVh
ZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTE0
LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNp
ZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBM
b2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgp
OwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAg
ICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdp
c3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0Owog
ICAgICAgICBkZWxldGUgdDsKICAgICAgICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMg
TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVjaWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwg
Q2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRocmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEu
Z2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0
aHJlYWREYXRhKQotICAgIDogZGF0YSh0aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWRE
YXRhKTsKLX0KLQotVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJy
ZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQot
Ci1ib29sIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1U
aHJlYWQmIG90aGVyKSBjb25zdAotewotI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAg
ICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3Ro
ZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlz
IHBsYXRmb3JtCi0jZW5kaWYKLX0KLQogdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRo
cmVhZCgpCiB7CiAgICAgaWYgKHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JN
YWNoaW5lVGhyZWFkcykpIHsKQEAgLTIzOSw3ICsxMzEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRz
OjphZGRDdXJyZW50VGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVh
ZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJl
YWQqIHRocmVhZCA9IG5ldyBKU1RocmVhZCgpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhy
ZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKQEAgLTI0OCwxMiArMTQwLDEyIEBAIHZvaWQg
TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVh
ZHMgPSB0aHJlYWQ7CiB9CiAKLVRocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRG
b3JDdXJyZW50VGhyZWFkKCkKK0pTVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVh
ZEZvckN1cnJlbnRUaHJlYWQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRU
aHJlYWRzTXV0ZXgpOwotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVu
dFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgq
dGhyZWFkID09IHBsYXRmb3JtVGhyZWFkKQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJy
ZW50VGhyZWFkKCk7CisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVh
ZC0+dGhyZWFkSUQoKSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQog
CkBAIC0yODMsMjIgKzE3NSwyMSBAQCB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVU
aHJlYWRzOjpyZW1vdmVUaHJlYWQodm9pZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogCi0gICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQ
bGF0Zm9ybVRocmVhZCgpKTsKKyAgICAgICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElm
Rm91bmQoY3VycmVudFRocmVhZCgpKTsKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBs
YXRmb3JtVGhyZWFkPgotdm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQ
bGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92
ZVRocmVhZElmRm91bmQoVGhyZWFkSWRlbnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVy
ZWRUaHJlYWRzOwotICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIEpTVGhyZWFk
KiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkg
ewogICAgICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4
dDsKICAgICAgICAgZGVsZXRlIHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVGhyZWFkKiBsYXN0
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICAgICAgSlNUaHJlYWQqIGxhc3QgPSBtX3JlZ2lz
dGVyZWRUaHJlYWRzOwogICAgICAgICBmb3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0
OyB0OyB0ID0gdC0+bmV4dCkgewotICAgICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFk
KSB7CisgICAgICAgICAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAg
ICAgIGxhc3QtPm5leHQgPSB0LT5uZXh0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMzIwLDIwNiArMjExLDM0IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhl
ckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAg
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3Vy
cmVudFRocmVhZFN0YXRlLnN0YWNrT3JpZ2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3Mp
OwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhyZWFkKCkKKyAgICA6IG5leHQobnVsbHB0cikKKyAgICAs
IG1fdGhyZWFkKFdURjo6VGhyZWFkOjpjdXJyZW50KCkpCiB7CiAgICAgYXV0byBzdGFja0JvdW5k
cyA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwotICAgIHBsYXRmb3JtVGhyZWFkID0gY3VycmVu
dFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAgc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7
Ci0gICAgc3RhY2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgQVNTRVJUKHBsYXRmb3JtVGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKLSAgICBi
b29sIGlzU3VjY2Vzc2Z1bCA9Ci0gICAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJv
Y2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksCi0gICAgICAg
ICAgICAmcGxhdGZvcm1UaHJlYWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NF
U1MpOwotICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpICYmICFPUyhEQVJXSU4pCi0gICAgdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkLnN0b3JlKHRo
aXMpOwotCi0gICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25maWd1
cmF0aW9uLgotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplU2lnbmFsSGFuZGxl
cjsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplU2lnbmFsSGFuZGxlciwgW10gewotICAg
ICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhl
IGhhbmRsZXIuCi0gICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxv
d2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rp
b24gYWN0aW9uOwotICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAg
ICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLQot
ICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5k
UmVzdW1lOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5G
TzsKLSAgICAgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDAp
OwotICAgIH0pOwotCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgmbWFzayk7
Ci0gICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBwdGhy
ZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLQotICAgIHNlbV9pbml0KCZzZW1h
cGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3Mu
ICovIDAsIC8qIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwotI2VuZGlm
CisgICAgbV9zdGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKKyAgICBtX3N0YWNrRW5k
ID0gc3RhY2tCb3VuZHMuZW5kKCk7CiB9CiAKLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+
VGhyZWFkRGF0YSgpCitzaXplX3QgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMoSlNUaHJlYWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgQ2xvc2VIYW5kbGUocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURT
KSAmJiAhT1MoREFSV0lOKQotICAgIHNlbV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVz
dW1lKTsKLSNlbmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3Rl
cnMucmVnczsKKyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdzKTsKIH0KIAot
Ym9vbCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCgpCi17Ci0jaWYgT1MoREFS
V0lOKQotICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQocGxhdGZvcm1U
aHJlYWQpOwotICAgIHJldHVybiByZXN1bHQgPT0gS0VSTl9TVUNDRVNTOwotI2VsaWYgT1MoV0lO
RE9XUykKLSAgICBib29sIHRocmVhZElzU3VzcGVuZGVkID0gKFN1c3BlbmRUaHJlYWQocGxhdGZv
cm1UaHJlYWRIYW5kbGUpICE9IChEV09SRCktMSk7Ci0gICAgQVNTRVJUKHRocmVhZElzU3VzcGVu
ZGVkKTsKLSAgICByZXR1cm4gdGhyZWFkSXNTdXNwZW5kZWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMp
Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSAhPSBwbGF0
Zm9ybVRocmVhZCwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJl
bnQgdGhyZWFkIGl0c2VsZi4iKTsKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBz
dXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRo
cmVhZHMuCi0gICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJl
YWQgbG9jay4KLSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBh
cmUgdGhyZWFkcyBBIGFuZCBCLgotICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQg
QiBhbmQgQiBhdHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNp
Z25hbHMuIEFuZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCi0gICAg
ICAgIC8vIEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoIXN1c3BlbmRDb3Vu
dCkgewotICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVh
ZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBw
bGF0Zm9ybXMsIGxpa2UgTGludXguCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhy
ZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhl
IHNpZ25hbCBoYW5kbGVyLgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRo
cmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRS
ZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlz
IG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNz
aW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytzdXNwZW5kQ291bnQ7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3Bl
bmQgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6cmVzdW1lKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFk
X3Jlc3VtZShwbGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIFJlc3VtZVRo
cmVhZChwbGF0Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgewot
ICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJl
IGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgICAgIExvY2tIb2xkZXIgbG9j
ayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKHN1c3BlbmRDb3VudCA9PSAxKSB7Ci0g
ICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJy
dXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgICAgIC8vIHRoZSBzaWduYWwg
aGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KLSAgICAgICAgICAgIC8v
IFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2Nh
dGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgotICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZl
cmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBo
YW5kbGVyLgotICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1
aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1
ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAgICAgIC8vIDMuIFVzZSB0
aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBo
YW5kbGVyLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAo
MykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgICAg
ICBpZiAocHRocmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KSA9PSBFU1JDSCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZW1fd2Fp
dCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJh
cnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRl
ciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRl
ZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgLS1zdXNwZW5kQ291bnQ7Ci0gICAgfQotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRv
IHJlc3VtZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi1zaXplX3QgTWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3Rl
cnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShY
ODYpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsK
LSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0j
ZWxpZiBDUFUoWDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NU
QVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJF
QURfU1RBVEU2NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQ
UENfVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSBQUENfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJf
Y291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0
YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQp
Ci0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vs
c2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVy
bl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRo
cmVhZF9zdGF0ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJO
X1NVQ0NFU1MpIHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5F
X18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJK
YXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0
YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBv
ZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3Vs
dCk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6
ZW9mKHVpbnRwdHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQot
ICAgIHJlZ3MuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9M
OwotICAgIEdldFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAg
ICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVk
KF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5l
Q29udGV4dDsKLSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMp
OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJp
YnV0ZSk7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BF
TkJTRCkKLSAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAg
cHRocmVhZF9hdHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNl
bmRpZgotI2Vsc2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7
IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwot
ICAgIHB0aHJlYWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsK
LSNlbmRpZgotICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0
aHJlYWQgcmVnaXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi12b2lkKiBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAor
dm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigp
IGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoKE9TKEZSRUVCU0Qp
IHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCiAgICAgcmV0dXJuIE1hY2hp
bmVDb250ZXh0OjpzdGFja1BvaW50ZXIocmVncyk7CiAjZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAg
dm9pZCogc3RhY2tCYXNlID0gMDsKLSAgICBzaXplX3Qgc3RhY2tTaXplID0gMDsKLSNpZiBPUyhP
UEVOQlNEKQotICAgIHN0YWNrX3Qgc3M7Ci0gICAgaW50IHJjID0gcHRocmVhZF9zdGFja3NlZ19u
cChwdGhyZWFkX3NlbGYoKSwgJnNzKTsKLSAgICBzdGFja0Jhc2UgPSAodm9pZCopKChzaXplX3Qp
IHNzLnNzX3NwIC0gc3Muc3Nfc2l6ZSk7Ci0gICAgc3RhY2tTaXplID0gc3Muc3Nfc2l6ZTsKLSNl
bHNlCi0gICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZyZWdzLmF0dHJpYnV0ZSwg
JnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7Ci0jZW5kaWYKLSAgICAodm9pZClyYzsgLy8gRklYTUU6
IERlYWwgd2l0aCBlcnJvciBjb2RlIHNvbWVob3c/IFNlZW1zIGZhdGFsLgotICAgIEFTU0VSVChz
dGFja0Jhc2UpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0
YWNrU2l6ZTsKKyAgICByZXR1cm4gcmVncy5zdGFja1BvaW50ZXI7CiAjZWxzZQogI2Vycm9yIE5l
ZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBwb2ludGVyIGZvciBhbm90aGVyIHRocmVhZCBvbiB0
aGlzIHBsYXRmb3JtCiAjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
LXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRl
cigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6ZnJh
bWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChP
UyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250
ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBAIC01MjgsNyArMjQ3LDcgQEAgdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKICNl
bmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpp
bnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lO
KSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQog
ICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAt
NTM3LDcgKzI1Niw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3Rl
cnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0CiB7CiAg
ICAgLy8gTExJbnQgdXNlcyByZWdUNCBhcyBQQy4KICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRP
V1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCkBAIC01NDgsMTYgKzI2
Nyw2IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50
UEMoKSBjb25zdAogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotdm9p
ZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6ZnJlZVJlZ2lzdGVycyhUaHJlYWREYXRhOjpS
ZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikgJiYgISgoT1MoRlJFRUJTRCkgfHwgZGVmaW5l
ZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgm
cmVncy5hdHRyaWJ1dGUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVncyk7Ci0jZW5kaWYK
LX0KLQogc3RhdGljIGlubGluZSBpbnQgb3NSZWRab25lQWRqdXN0bWVudCgpCiB7CiAgICAgaW50
IHJlZFpvbmVBZGp1c3RtZW50ID0gMDsKQEAgLTU3MywxNyArMjgyLDE3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogICAgIHJldHVybiByZWRab25lQWRqdXN0bWVu
dDsKIH0KIAotc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWRE
YXRhOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCitzdGQ6OnBhaXI8dm9pZCosIHNpemVf
dD4gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3Ap
CiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tC
YXNlKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0
YWNrQmFzZSk7CiAgICAgY2hhciogZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0YWNrVG9wKSkpOwogICAgIEFTU0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5k
V2l0aFJlZFpvbmUgPSBlbmQgKyBvc1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZW5kV2l0aFJlZFpvbmUpKTsKIAotICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQot
ICAgICAgICBlbmRXaXRoUmVkWm9uZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFj
a0VuZCk7CisgICAgaWYgKGVuZFdpdGhSZWRab25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5k
V2l0aFJlZFpvbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAK
ICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVuZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhSZWRab25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzMyNSw5
IEBAIHN0YXRpYyB2b2lkIGNvcHlNZW1vcnkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNp
emVfdCBzaXplKQogLy8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFjayBpcyBvbmx5IGNhbGxlZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAv
LyBvcGVyYXRpb24uIEFzIHRoZSBoZWFwIGlzIGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRo
ZSBzdGFjayB0aGUgcGVyZm9ybWFuY2UgaGl0IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVh
ZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIs
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5
Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKIHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdp
c3RlcnM7CisgICAgSlNUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgc2l6ZV90IHJl
Z2lzdGVyc1NpemUgPSB0aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgIHN0ZDo6
cGFpcjx2b2lkKiwgc2l6ZV90PiBzdGFjayA9IHRocmVhZC0+Y2FwdHVyZVN0YWNrKHJlZ2lzdGVy
cy5zdGFja1BvaW50ZXIoKSk7CiAKQEAgLTYzMSw4ICszNDAsNiBAQCB2b2lkIE1hY2hpbmVUaHJl
YWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVy
LCBzaXplXwogICAgIGlmIChjYW5Db3B5KQogICAgICAgICBjb3B5TWVtb3J5KHN0YXRpY19jYXN0
PGNoYXIqPihidWZmZXIpICsgKnNpemUsIHN0YWNrLmZpcnN0LCBzdGFjay5zZWNvbmQpOwogICAg
ICpzaXplICs9IHN0YWNrLnNlY29uZDsKLQotICAgIHRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdp
c3RlcnMpOwogfQogCiBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
a3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwg
c2l6ZV90KiBzaXplKQpAQCAtNjQ0LDM2ICszNTEsMzQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6
dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVm
ZmUKIAogICAgICpzaXplID0gMDsKIAotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFk
ID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7CisgICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IGN1
cnJlbnRUaHJlYWQoKTsKICAgICBpbnQgbnVtYmVyT2ZUaHJlYWRzID0gMDsgLy8gVXNpbmcgMCB0
byBkZW5vdGUgdGhhdCB3ZSBoYXZlbid0IGNvdW50ZWQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHll
dC4KICAgICBpbnQgaW5kZXggPSAxOwotICAgIFRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0g
bnVsbHB0cjsKKyAgICBKU1RocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAot
ICAgIFRocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0
aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAg
aWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IHRocmVhZC0+c3VzcGVuZCgpOworICAgIEpTVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51
bGxwdHI7CisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsg
dGhyZWFkOyBpbmRleCsrKSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQp
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAjaWYgT1Mo
REFSV0lOKQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkgewogICAgICAgICAgICAgICAgIGlmICghbnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgY291bnRlZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQp
CisgICAgICAgICAgICAgICAgICAgIGZvciAoSlNUaHJlYWQqIGNvdW50ZWRUaHJlYWQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhyZWFkOyBjb3VudGVkVGhyZWFkID0gY291bnRlZFRo
cmVhZC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mVGhyZWFkcysrOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBS
ZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQgdGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3Ig
bG9nZ2luZy4KLSAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1
c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQu
ZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwogCiAgICAgICAgICAgICAgICAgV1RGUmVwb3J0RXJy
b3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLAotICAgICAgICAgICAg
ICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52
YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIHBsYXRmb3JtVGhyZWFk
ICVwLiIsCi0gICAgICAgICAgICAgICAgICAgIGVycm9yLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRz
LCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQo
KSkpOworICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24g
ZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDog
JXBdIGlkICVwLiIsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcigpLCBpbmRleCwg
bnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+
dGhyZWFkSUQoKSkpOwogCiAgICAgICAgICAgICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVh
ZCBvbiB0aGUgdGhyZWFkc1RvQmVEZWxldGVkIGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QganVzdCBkZWxldGUgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVy
CiAgICAgICAgICAgICAgICAgLy8gdGhyZWFkcywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRp
bmcgdGhlIEMgaGVhcCBsb2NrIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3Ig
ZGVsZXRpbmcgdGhlIGludmFsaWQgdGhyZWFkLiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAg
ICAgICAgIC8vIGRlZmVyIHRoZSBkZWxldGlvbiB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBh
bGwgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQt
Pm5leHQ7CisgICAgICAgICAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5l
eHQ7CiAgICAgICAgICAgICAgICAgdGhyZWFkLT5uZXh0ID0gdGhyZWFkc1RvQmVEZWxldGVkOwog
ICAgICAgICAgICAgICAgIHRocmVhZHNUb0JlRGVsZXRlZCA9IHRocmVhZDsKIApAQCAtNjg3LDI1
ICszOTIsMjUgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKICNlbHNlCiAgICAgICAgICAgICBV
TlVTRURfUEFSQU0obnVtYmVyT2ZUaHJlYWRzKTsKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShw
cmV2aW91c1RocmVhZCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7CiAjZW5kaWYK
ICAgICAgICAgfQogICAgICAgICBwcmV2aW91c1RocmVhZCA9IHRocmVhZDsKICAgICAgICAgdGhy
ZWFkID0gdGhyZWFkLT5uZXh0OwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBt
X3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAg
ICAgICBpZiAoKnRocmVhZCAhPSBwbGF0Zm9ybVRocmVhZCkKKyAgICBmb3IgKEpTVGhyZWFkKiB0
aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4
dCkgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAg
dHJ5Q29weU90aGVyVGhyZWFkU3RhY2sodGhyZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsK
ICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsg
dGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0g
cGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRo
cmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRocmVhZC0+cmVzdW1lKCk7CiAg
ICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhy
ZWFkOyApIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAg
IGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsK
KyAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgIGRl
bGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IG5leHRUaHJlYWQ7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAppbmRleCBkMTk2
ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3OTk0NDg3ZjIyLi40ZWFlODY3Yjg4NDEzZTU4Y2Q2
NmY2NDY5OTA0M2ZiZDg1OTk2ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtMjIsMjUgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaHJlYWQu
aCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKLSNpZiBVU0UoUFRIUkVBRFMpICYm
ICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRf
dCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KLS8vIFRoaXMgYnVnIGhhcyBi
ZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2Fu
IGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4KLS8vIGh0dHBzOi8v
YnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc5Ci0jaWYgT1Mo
RlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4dC5oPgotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKQEAgLTY0LDEzICs1MSwxMCBAQCBjbGFz
cyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEN1cnJl
bnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNh
biB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCiAKLSAgICBjbGFzcyBU
aHJlYWREYXRhIHsKKyAgICBjbGFzcyBKU1RocmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+
VGhyZWFkRGF0YSgpOwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJy
ZW50VGhyZWFkKCk7CisgICAgICAgIEpTVGhyZWFkKCk7CiAKICAgICAgICAgc3RydWN0IFJlZ2lz
dGVycyB7CiAgICAgICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXIoKSBjb25zdDsKQEAgLTc5LDg0
ICs2Myw0MCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgICAgICB2b2lkKiBpbnN0
cnVjdGlvblBvaW50ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25z
dDsKICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICAKLSNp
ZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpCi0gICAgICAgICAgICB1c2luZyBQbGF0Zm9ybVJl
Z2lzdGVycyA9IE1hY2hpbmVDb250ZXh0OjpQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpCi0gICAgICAgICAg
ICB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpCi0gICAgICAgICAgICBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewotICAgICAgICAgICAg
ICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIH07Ci0jZWxzZQotI2Vy
cm9yIE5lZWQgYSB0aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0jZW5k
aWYKLQotICAgICAgICAgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKKyAgICAgICAgICAgIFdU
Rjo6UGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHN1
c3BlbmQoKTsKLSAgICAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgc2l6ZV90IGdldFJlZ2lz
dGVycyhSZWdpc3RlcnMmKTsKLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYp
OworICAgICAgICBFeHBlY3RlZDx2b2lkLCBUaHJlYWQ6OlBsYXRmb3JtU3VzcGVuZEVycm9yPiBz
dXNwZW5kKCkgeyByZXR1cm4gbV90aHJlYWQtPnN1c3BlbmQoKTsgfQorICAgICAgICB2b2lkIHJl
c3VtZSgpIHsgbV90aHJlYWQtPnJlc3VtZSgpOyB9CisgICAgICAgIHNpemVfdCBnZXRSZWdpc3Rl
cnMoUmVnaXN0ZXJzJiByZWdzKTsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IGNh
cHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCk7CiAKLSAgICAgICAgUGxhdGZvcm1UaHJlYWQgcGxh
dGZvcm1UaHJlYWQ7Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogc3Rh
Y2tFbmQ7Ci0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgSEFORExFIHBsYXRmb3JtVGhyZWFkSGFu
ZGxlOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgICAgICBzZW1fdCBz
ZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOwotICAgICAgICBtY29udGV4dF90IHN1c3BlbmRlZE1h
Y2hpbmVDb250ZXh0OwotICAgICAgICBpbnQgc3VzcGVuZENvdW50IHsgMCB9OwotICAgICAgICBz
dGQ6OmF0b21pYzxib29sPiBzdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsKLQot
ICAgIGNsYXNzIFRocmVhZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
ICAgICBUaHJlYWQoVGhyZWFkRGF0YSopOwotCi0gICAgcHVibGljOgotICAgICAgICB1c2luZyBS
ZWdpc3RlcnMgPSBUaHJlYWREYXRhOjpSZWdpc3RlcnM7Ci0KLSAgICAgICAgc3RhdGljIFRocmVh
ZCogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQotCi0gICAgICAgIGJvb2wgc3VzcGVuZCgpIHsgcmV0dXJuIGRhdGEtPnN1c3Bl
bmQoKTsgfQotICAgICAgICB2b2lkIHJlc3VtZSgpIHsgZGF0YS0+cmVzdW1lKCk7IH0KLSAgICAg
ICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgcmV0dXJuIGRhdGEtPmdl
dFJlZ2lzdGVycyhyZWdzKTsgfQotICAgICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0ZXJz
JiByZWdzKSB7IGRhdGEtPmZyZWVSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgc3RkOjpwYWly
PHZvaWQqLCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkgeyByZXR1cm4gZGF0
YS0+Y2FwdHVyZVN0YWNrKHN0YWNrVG9wKTsgfQotCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGhy
ZWFkJiBwbGF0Zm9ybVRocmVhZCgpIHsgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkOyB9Ci0g
ICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrQmFzZTsg
fQotICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrRW5k
OyB9CisgICAgICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGhyZWFkLT5pZCgpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhY2tCYXNlOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFja0VuZDsgfQogCi0gICAgICAgIFRocmVhZCogbmV4dDsKLSAgICAgICAgVGhy
ZWFkRGF0YSogZGF0YTsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQ7CisgICAgICAgIFJlZjxXVEY6
OlRocmVhZD4gbV90aHJlYWQ7CisgICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOworICAgICAgICB2
b2lkKiBtX3N0YWNrRW5kOwogICAgIH07CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4g
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OyB9Ci0gICAgVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhy
ZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTVGhyZWFkKiB0aHJl
YWRzTGlzdEhlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lz
dGVyZWRUaHJlYWRzTXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB9CisgICAgSlNUaHJlYWQqIG1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290
cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRl
Jik7CiAKLSAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCosIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCopOworICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3Rh
Y2soSlNUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29s
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJ
RklDX0NBTEwgcmVtb3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBs
YXRmb3JtVGhyZWFkPgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVh
ZCk7CisgICAgdm9pZCByZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAg
ICAgTG9jayBtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVy
ZWRUaHJlYWRzOworICAgIEpTVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdURjo6
VGhyZWFkU3BlY2lmaWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgzM2Qy
ZDIzMmI4YTljZDZmM2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDljZTcy
MTMzYzQxY2RkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01OCw3
ICs1OCw3IEBAIEF0b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNTdGF0
czo6SUNTdGF0cygpCiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAgW3Ro
aXNdICgpIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04NCw3
ICs4NCw3IEBAIElDU3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5
QWxsKCk7CiAgICAgfQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFk
KTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0YXRz
OjphZGQoY29uc3QgSUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CmluZGV4IGU3NWNmZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2UxZTky
Y2U5N2RkMWQ5NTA4OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SUNTdGF0cy5oCkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRlOgog
CiAgICAgU3BlY3RydW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBM
b2NrIG1fbG9jazsKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3Vs
ZFN0b3AgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA5MDk1MGI5ODU5N2ZmMzk4
ZDQyMTNkZGY5MDkwN2JkM2MxN2QyN2I5Li4xODllNzk1YjY3MDJjY2JmYWU1NDQ5MWRhNGQzOTcw
MTJhYmViYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0
YXRlKiBleGVjKQogICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29sIGRp
ZFN0YXJ0ID0gZmFsc2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVh
dGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAg
ICAgICAgICJKU0MgQWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9jaywg
JmRpZFN0YXJ0Q29uZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1hbmRM
aW5lIGNvbW1hbmRMaW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhy
ZWFkLT5kZXRhY2goKTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soZGlkU3RhcnRMb2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0YXJ0
VGltZW91dFRocmVhZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IHRp
bWVvdXQgc3RyaW5nIGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAgICAg
ICAgICAgICAgIiBidXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQuXG4i
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRocmVh
ZE1haW4sIDAsICJqc2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6Y3Jl
YXRlKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIxZmUx
MjdlOGI3MzFmYjUzYjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUyNTRh
OGUxZWYxM2RhNWM0MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBsb2Nr
Q291bnQpCiAgICAgICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRocmVh
ZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3VycmVu
dCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVhZCA9
IHRydWU7CiAgICAgQVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5oCmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5ZGJl
NzQuLjFhY2E0YjlhN2JiNGRjYWYwNGRmMTIxNzEwOTcyMGVjOGUyZDY4ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3MgSlNM
b2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0qIHZt
KCkgeyByZXR1cm4gbV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVy
PiBvd25lclRocmVhZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFkPj4g
b3duZXJUaHJlYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJlYWQp
CiAgICAgICAgICAgICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsg
cmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFk
KCk7IH0KKyAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9o
YXNPd25lclRocmVhZCAmJiBtX293bmVyVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsg
fQogCiAgICAgdm9pZCB3aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBj
bGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAg
Ly8gZGlmZmVyZW50IHRocmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8gcmFj
ZXMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjkwNDIjYzYKICAgICBib29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRocmVh
ZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVyVGhy
ZWFkOwogICAgIGludHB0cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BE
ZXB0aDsKICAgICBib29sIG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTQxOTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0aHJl
YWQuaD4KLSNlbmRpZgotCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9T
KERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQot
I2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJXSU4p
Ci10eXBlZGVmIG1hY2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykK
LXR5cGVkZWYgRFdPUkQgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10eXBl
ZGVmIHB0aHJlYWRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0gICAg
Ci1pbmxpbmUgUGxhdGZvcm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNpZiBP
UyhEQVJXSU4pCi0gICAgcmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9zZWxm
KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7
Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2VuZGlm
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4NDkz
YjMzYmM4OWZlM2ZhZDk4YTlkLi42N2YyMGQ5MmNlY2RmMGFiM2JmZjdmNmZkMTI2NjAwYWExNWJm
MWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAgICBi
b29sIGlzVmFsaWRGcmFtZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVpbnQ4
X3QqIGZwQ2FzdCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZvciAo
TWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRz
KCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKG1f
bWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewog
ICAgICAgICAgICAgdWludDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRo
cmVhZC0+c3RhY2tCYXNlKCkpOwogICAgICAgICAgICAgdWludDhfdCogc3RhY2tMaW1pdCA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhY2tCYXNlKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBTYW1wbGluZ1Byb2Zp
bGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0
Y2gpCiAgICAgLCBtX3dlYWtSYW5kb20oKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9w
d2F0Y2gpKQogICAgICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRz
KE9wdGlvbnM6OnNhbXBsZUludGVydmFsKCkpKQotICAgICwgbV90aHJlYWRJZGVudGlmaWVyKDAp
CisgICAgLCBtX3RocmVhZChudWxscHRyKQogICAgICwgbV9qc2NFeGVjdXRpb25UaHJlYWQobnVs
bHB0cikKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2lzU2h1dERvd24oZmFsc2Up
CkBAIC0zMDAsMTEgKzMwMCwxMSBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVh
ZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICBBU1NFUlQobV9sb2Nr
LmlzTG9ja2VkKCkpOwogCi0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90
aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBw
cm9maWxlciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJq
c2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxl
cl0gewogICAgICAgICBwcm9maWxlci0+dGltZXJMb29wKCk7CiAgICAgfSk7CiB9CkBAIC0zNDQs
NyArMzQ0LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgTG9ja0hvbGRlciBj
b2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7CiAg
ICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxs
b2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkpOwogCi0gICAgICAgIGJvb2wgZGlkU3VzcGVu
ZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGF1dG8gZGlkU3Vz
cGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAgIGlmIChkaWRT
dXNwZW5kKSB7CiAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5k
ZWQsIHdlIGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFk
CiAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQs
MTMgKzM1NCwxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICAgICAgYm9vbCB0
b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0
ZXJzIHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6
OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJl
YWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFt
ZSA9IHJlZ2lzdGVycy5mcmFtZVBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBjYWxsRnJhbWUg
PSBzdGF0aWNfY2FzdDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAgICAg
IG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKICAgICAgICAgICAg
ICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hl
biB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKaW5kZXggYjQ0YTNiYTQ3ZjllNjc2OGFkNDM3YmIx
OGUwYThhYmM3OTViZDZjZi4uMDQzZGFkYmE0MDcwYjZmOTE4MDdiZDRjYTEzMjY5NGMzY2ViYWM0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuaApAQCAtMTk1LDggKzE5NSw4IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsK
ICAgICBMb2NrIG1fbG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmll
cjsKLSAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKKyAg
ICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQq
IG1fanNjRXhlY3V0aW9uVGhyZWFkOwogICAgIGJvb2wgbV9pc1BhdXNlZDsKICAgICBib29sIG1f
aXNTaHV0RG93bjsKICAgICBib29sIG1fbmVlZHNSZXBvcnRBdEV4aXQgeyBmYWxzZSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOTlhMjZmY2ExYzIxZjNkMDQ0MDQ3M2I0NDJl
ODlkYzlhNDk1ZjQ2ZS4uZTk3YzMxODVmYzZmMmM2Mjg0YWU3MWJlYjkwNWMwMmUzNDlhNzRmYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC02NTksNyArNjU5LDcgQEAgY2xhc3Mg
Vk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2Vk
TGlzdE5vZGU8Vk0+IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgbG9n
RXZlbnQoQ29kZUJsb2NrKiwgY29uc3QgY2hhciogc3VtbWFyeSwgY29uc3QgRnVuYyYgZnVuYyk7
CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFkKCkgY29u
c3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CisgICAgc3RkOjpvcHRpb25h
bDxSZWZQdHI8VGhyZWFkPj4gb3duZXJUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2st
Pm93bmVyVGhyZWFkKCk7IH0KIAogICAgIFZNVHJhcHMmIHRyYXBzKCkgeyByZXR1cm4gbV90cmFw
czsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDUy
NzYzZjg1M2Q0NjNiNzJmMzNlNDY0YjdiNWE1OWQwMTE5MzhmNjkuLjI3MmM0ZGVmYTg1NWZjMzli
MGNkNDEwMWU1ZTdlNGIyYmRjMGRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGljIEV4cGVjdGVkPHN0ZDo6cGFp
cjxWTSosIFN0YWNrQm91bmRzPiwgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWMK
ICAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3RvclN0YXR1czo6Q29udGludWU7
IC8vIFRyeSBuZXh0IFZNLgogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFk
czo6VGhyZWFkKiB0aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGlu
ZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAg
ICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMu
dGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tC
YXNlKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsK
ICAgICAgICAgICAgIGlmIChzdGFja1BvaW50ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBz
dGFja1BvaW50ZXIgPj0gdGhyZWFkLT5zdGFja0VuZCgpKSB7CkBAIC00NTUsNyArNDU1LDcgQEAg
dm9pZCBWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0g
Km1fdm07CiAgICAgICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRo
cmVhZCgpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAg
ICAgICAgICBzaWduYWxUaHJlYWQob3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLCBTSUdVU1Ix
KTsKKyAgICAgICAgICAgICAgICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChT
SUdVU1IxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDkz
LDcgKzQ5Myw3IEBAIHZvaWQgVk1UcmFwczo6ZmlyZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2
ZW50VHlwZSkKICAgICAgICAgLy8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KICAgICAgICAg
UmVmUHRyPFNpZ25hbFNlbmRlcj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2
bSgpLCBldmVudFR5cGUpKTsKICAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7
Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBb
c2VuZGVyXSB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5n
LnRocmVhZCIsIFtzZW5kZXJdIHsKICAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwogICAgICAg
ICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3Yzc3NGQ5N2RkNDE4NzJhMjBmMzk5Yzk2YTM1OTFkN2E0Y2FlMTQ5Li44YmNmZWJjNDcwMTQy
YzE4M2VkNTE1MmJiZDBmMGZiNDBhNmNmMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTMyNyw4ICszMjcsNyBAQAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICov
OyB9OwogCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24uaCAqLzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAgKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJ
CUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuaCAqLzsgfTsKIAkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
Ki87IH07CkBAIC0zNzQsNiArMzczLDkgQEAKIAkJREU1QTA5RkMxQkEzNjk5MjAwM0Q0NDI0IC8q
IENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICov
OyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1
NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi87IH07
CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGNDE4
QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oICovOyB9OworCQlFMzIw
MEFCNzFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjAwQUI0MUU5QTUzNkQwMDNCNTlE
MiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oICovOyB9OworCQlFMzIwMEFCODFFOUE1MzZEMDAzQjU5
RDIgLyogVGhyZWFkSG9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzMjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3Bw
ICovOyB9OworCQlFMzIwMEFCOTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIwMEFCNjFFOUE1
MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggKi87IH07CiAJCUU0M0E0Njk1MUUyMjhCOTEw
MDI3NkIwNSAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDNBNDY5MDFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oICovOyB9Owog
CQlFNDNBNDY5NjFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTExRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCAqLzsgfTsKIAkJRTQzQTQ2OTcxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2
OTIxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuY3BwICovOyB9OwpAQCAtNzMxLDggKzczMyw3
IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThB
NDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHJpbWl0aXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQ
cmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzcsNiArNzc4LDkg
QEAKIAkJREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25DcnlwdG9TUEkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dy
YXBoaWNVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8q
IFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjAwQUI1
MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRIb2xkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQzQTQ2OTAxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDNBNDY5MTFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwMCw2ICsxMTA0LDcgQEAKIAkJCQkwRjgyNEE2NTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi8sCisJCQkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRm
b3JtUmVnaXN0ZXJzLmggKi8sCiAJCQkJRENFRTIxRkUxQ0VBNzU1MTAwMEMyMzk2IC8qIFBsYXRm
b3JtVXNlclByZWZlcnJlZExhbmd1YWdlcy5oICovLAogCQkJCURDRUUyMUZGMUNFQTc1NTEwMDBD
MjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXNNYWMubW0gKi8sCiAJCQkJMEZG
ODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8sCkBAIC0xMTY3
LDggKzExNzIsOSBAQAogCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3Rl
bVRyYWNpbmcuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmggKi8sCi0JCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovLAotCQkJCUE4QTQ3MzMxMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8sCisJCQkJRTMyMDBB
QjUxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgKi8sCisJCQkJRTMyMDBBQjYx
RTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczMzIx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCkBAIC0xNTU2LDYgKzE1NjIsNyBAQAogCQkJ
CUE4QTQ3NDBDMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICov
LAogCQkJCURDRUUyMjAyMUNFQTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzMjAwQUI5MUU5QTUzNkQwMDNCNTlEMiAv
KiBUaHJlYWRIb2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1
MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzNjMx
NjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0
NDg4MzE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLywKQEAgLTE2
MjIsNyArMTYyOSw2IEBACiAJCQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRleHRCcmVh
a0l0ZXJhdG9ySUNVLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjQ4
LDYgKzE2NTQsNyBAQAogCQkJCUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjZCMjkzMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUzMjAwQUI3MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9y
bVJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEz
IC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJCTFGQTQ3QzhCMTUyNTAyREEwMDU2
OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU0NDc5RDFCN0FB
QTAzMDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMTgzMCw2ICsxODM3
LDcgQEAKIAkJCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxp
bWl0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYgLyog
U3RhY2tCb3VuZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTMyMDBBQjgxRTlBNTM2RDAwM0I1
OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRURBQ0QzRDE2MzBG
ODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQz
QzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xODQ3LDcgKzE4NTUsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBT
eW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERBMDBG
NUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0g
aW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1h
cmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2YWJm
NjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJjM2I3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5j
cHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKQEAg
LTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0eUNv
bmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8
VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVu
dGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25z
dW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7
CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2VpdmVk
TG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsK
LSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFk
KAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAg
ICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAg
ICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVk
aWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5z
aXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVj
a2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3Vs
ZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwg
IXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgp
KQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1bWVy
VGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhyZWFk
cy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9k
dWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZd
ICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2Fn
ZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0KAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBD
aGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1h
eFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEgKzEz
OCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0eUNv
bmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAg
ICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3IgKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChS
ZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtz
L0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVz
c1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5NGYu
LjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0
IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25l
ZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZp
ZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1U
aHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVh
ZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwogICAg
IAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03MCw3
ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAg
IGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRl
eF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRo
cmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAgICAg
ICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0
cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0g
ICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7
CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsK
ICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVk
VGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5kZXgg
NTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3MDZj
MTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMp
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3JkcyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91cHMp
OwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0g
c3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51
bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFk
PltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1UaHJl
YWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJvb2wg
a2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsK
ICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhy
ZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXgg
KiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAg
ICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3Vw
ICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJC
ZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgs
ICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1JdGVy
YXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3JkID0g
MDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2VlcEdv
aW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBu
dW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAg
ICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOwor
ICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAK
ICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291
cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2Fh
NjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3
ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBA
QCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAg
IAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAg
ICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBA
QCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQp
OworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJl
YWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUz
Y2IzMGE3NmEyYTg1NWZlYmEyYzcuLjFiYWUzYmI5MGIzNzEyMGE1MWM0ODk5ZDk4N2Q4YTM0MTI1
NDBkNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC05NSw2ICs5NSw3IEBAIHNldChXVEZfSEVB
REVSUwogICAgIFBhcmtpbmdMb3QuaAogICAgIFBhc3NSZWZQdHIuaAogICAgIFBsYXRmb3JtLmgK
KyAgICBQbGF0Zm9ybVJlZ2lzdGVycy5oCiAgICAgUHJpbnRTdHJlYW0uaAogICAgIFByb2Nlc3NJ
RC5oCiAgICAgUkFNU2l6ZS5oCkBAIC0xMjgsNyArMTI5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAg
ICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJh
Y2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisgICAgVGhyZWFkSG9s
ZGVyLmNwcAogICAgIFRocmVhZFNhZmVSZWZDb3VudGVkLmgKICAgICBUaHJlYWRTcGVjaWZpYy5o
CiAgICAgVGhyZWFkaW5nLmgKQEAgLTMyOSwxNiArMzMwLDE0IEBAIGxpc3QoQVBQRU5EIFdURl9M
SUJSQVJJRVMKIGlmIChXSU4zMikKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAg
ICBPU0FsbG9jYXRvcldpbi5jcHAKKyAgICAgICAgVGhyZWFkSG9sZGVyV2luLmNwcAogICAgICAg
ICBUaHJlYWRTcGVjaWZpY1dpbi5jcHAKICAgICAgICAgVGhyZWFkaW5nV2luLmNwcAogICAgICkK
IGVsc2UgKCkKLSAgICBsaXN0KEFQUEVORCBXVEZfSEVBREVSUwotICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmgKLSAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMK
ICAgICAgICAgT1NBbGxvY2F0b3JQb3NpeC5jcHAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHAKKyAgICAgICAgVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCiAgICAgICAg
IFRocmVhZGluZ1B0aHJlYWRzLmNwcAogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3Bw
CmluZGV4IDAyNDk1NDRjNTE4ZTgyYWZmMTcwNWRlMTllYzk2NWFiOThiMWQxMDYuLjM0Yjk0MjU1
NWFiNTYxODMyMTAxOGI0ZjA3OTBmMjgyNTBhN2RjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL01haW5UaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCkBA
IC0xODYsOSArMTg2LDkgQEAgYm9vbCBpc01haW5UaHJlYWQoKQogI2VuZGlmCiAKICNpZiAhVVNF
KFdFQl9USFJFQUQpCi1ib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkKQorYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQpCiB7Ci0gICAgcmV0dXJuIHRocmVhZElkID09
IGN1cnJlbnRUaHJlYWQoKTsKKyAgICByZXR1cm4gdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggMjVkOGY3NjZkY2ZiODc5YTFkNzY4M2Nl
NTUwOGRkOGQ3ZjFkNzdhZi4uMGU3OGU4ZTUxYWJlOGQ5NTU0NzJjNzlkZDM0NjkyZjE1NDZkYjFh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01haW5UaHJlYWQuaApAQCAtMzQsMTMgKzM0LDEyIEBACiAjaW5jbHVkZSA8c3RkaW50
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3Mg
UHJpbnRTdHJlYW07CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKLQogLy8g
TXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJl
SGFuZGxlci5oCmluZGV4IGRmZGRmMGE5NTU1MmRiM2UyYWVjZmVmNGVjMTZlZmI1YzZlNmM3YmQu
LjQxMjhmNWNkNzFhN2RiMmY0ZmQ3MDMyOTUzZjBjM2YxZjUwMGQxMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC0xNzMsNyArMTczLDcgQEAgY2xhc3MgTWVtb3J5
UHJlc3N1cmVIYW5kbGVyIHsKICNpZiBVU0UoR0xJQikKICAgICAgICAgR1JlZlB0cjxHU291cmNl
PiBtX3NvdXJjZTsKICNlbHNlCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsK
KyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAjZW5kaWYKICAgICB9OwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCmluZGV4IDQwMjNmNDNlNmYyMGEz
OGUxMDNlN2M5YTJlNGYwZjdlMDYxMDU3MTQuLmNjZTExMDZkNDY3YjcyMDgzYzFlZGIyMTNhZDU5
YzQ0MDMxN2E0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVy
aWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCkBAIC05
MywxNCArOTMsMTQgQEAgYm9vbCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0
cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9
IGNyZWF0ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2Vy
VGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisgICAgaWYgKCFtX3RocmVhZCkKKyAg
ICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhy
ZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CiAKLSAg
ICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1fcGFyZW50ID0g
cGFyZW50OwogCiAgICAgbV9tdXRleC51bmxvY2soKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsK
KyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhy
ZWFkUHJpdmF0ZTo6ZXhlY3V0ZShUaHJlYWRGdW5jdGlvbiB0aHJlYWRGdW5jdGlvbiwgdm9pZCog
cGFyYW1ldGVycykKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFBhcmFsbGVsRW52aXJvbm1lbnQ6
OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCh2b2lkKiB0aHJlYWREYXRhKQogICAgIFRocmVh
ZFByaXZhdGUqIHNoYXJlZFRocmVhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkUHJpdmF0ZSo+
KHRocmVhZERhdGEpOwogICAgIExvY2tIb2xkZXIgbG9jayhzaGFyZWRUaHJlYWQtPm1fbXV0ZXgp
OwogCi0gICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkgeworICAgIHdoaWxlIChz
aGFyZWRUaHJlYWQtPm1fdGhyZWFkKSB7CiAgICAgICAgIGlmIChzaGFyZWRUaHJlYWQtPm1fcnVu
bmluZykgewogICAgICAgICAgICAgKCpzaGFyZWRUaHJlYWQtPm1fdGhyZWFkRnVuY3Rpb24pKHNo
YXJlZFRocmVhZC0+bV9wYXJhbWV0ZXJzKTsKICAgICAgICAgICAgIHNoYXJlZFRocmVhZC0+bV9y
dW5uaW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNH
ZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKaW5kZXggNDU4
NDA3YzRjYjRhM2Y5OTVjOTBjNTU1NjI3YzFjYmQyMmI0MWI1Yy4uN2Q2OGVmMDcwZjY3YTY1MzNj
MGI4NzU4M2QyYTU3YTExOGQwNTZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxs
ZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBQYXJhbGxlbEVudmlyb25tZW50IHsKICAgICBjbGFz
cyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8VGhyZWFkUHJpdmF0ZT4gewogICAg
IHB1YmxpYzoKICAgICAgICAgVGhyZWFkUHJpdmF0ZSgpCi0gICAgICAgICAgICA6IG1fdGhyZWFk
SUQoMCkKKyAgICAgICAgICAgIDogbV90aHJlYWQobnVsbHB0cikKICAgICAgICAgICAgICwgbV9y
dW5uaW5nKGZhbHNlKQogICAgICAgICAgICAgLCBtX3BhcmVudCgwKQogICAgICAgICB7CkBAIC03
NCw3ICs3NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgICAgICBzdGF0aWMg
dm9pZCB3b3JrZXJUaHJlYWQodm9pZCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsK
ICAgICAgICAgYm9vbCBtX3J1bm5pbmc7CiAgICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQqIG1f
cGFyZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCmluZGV4IGU2YzY3OGJlZmMwZjE5MGEyMjNlOWFk
ZGIyY2M1ODEwYjU2ZTFjMTQuLmNjMWEyMWI5ZWE1Y2NjYzZmMWFjZTRjOTc0OTg5OWJiZGE1ZDdl
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0cnVjdCBUaHJlYWRE
YXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZERhdGE+IHsKICAgICBUaHJl
YWREYXRhKCk7CiAgICAgflRocmVhZERhdGEoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllcjsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQ7CiAgICAgCiAgICAgTXV0ZXgg
cGFya2luZ0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25kaXRpb247CkBAIC00
MjMsNyArNDIzLDcgQEAgdm9pZCBlbnN1cmVIYXNodGFibGVTaXplKHVuc2lnbmVkIG51bVRocmVh
ZHMpCiB9CiAKIFRocmVhZERhdGE6OlRocmVhZERhdGEoKQotICAgIDogdGhyZWFkSWRlbnRpZmll
cihjdXJyZW50VGhyZWFkKCkpCisgICAgOiB0aHJlYWQoVGhyZWFkOjpjdXJyZW50KCkpCiB7CiAg
ICAgdW5zaWduZWQgY3VycmVudE51bVRocmVhZHM7CiAgICAgZm9yICg7OykgewpAQCAtNzkzLDcg
Kzc5Myw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25zdCB2
b2lkKiBhZGRyZXNzKQogICAgIHVucGFya0NvdW50KGFkZHJlc3MsIFVJTlRfTUFYKTsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFt
YmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCitORVZF
Ul9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8
dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKIHsKICAgICBWZWN0b3I8QnVj
a2V0Kj4gYnVja2V0c1RvVW5sb2NrID0gbG9ja0hhc2h0YWJsZSgpOwogCkBAIC04MDMsNyArODAz
LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2Nv
cGVkTGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmkKICAgICAgICAgaWYgKCFidWNrZXQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChUaHJlYWREYXRhKiBjdXJyZW50VGhyZWFk
RGF0YSA9IGJ1Y2tldC0+cXVldWVIZWFkOyBjdXJyZW50VGhyZWFkRGF0YTsgY3VycmVudFRocmVh
ZERhdGEgPSBjdXJyZW50VGhyZWFkRGF0YS0+bmV4dEluUXVldWUpCi0gICAgICAgICAgICBjYWxs
YmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhyZWFkSWRlbnRpZmllciwgY3VycmVudFRocmVhZERh
dGEtPmFkZHJlc3MpOworICAgICAgICAgICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRo
cmVhZC5nZXQoKSwgY3VycmVudFRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgIH0KICAgICAKICAg
ICB1bmxvY2tIYXNodGFibGUoYnVja2V0c1RvVW5sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BhcmtpbmdMb3QuaCBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAppbmRleCA3
ZDVmYjE3ZWZhMDJhYjc2YjEyOGVhZjU5OTgxMzgwMTAwYmFiZDk2Li5iNmQ4ODMwZDE5YzdiN2Zk
NGNjNmFjYWUzNjJhZWEzYjk0M2E5ZDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJr
aW5nTG90LmgKKysrIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCkBAIC0xNTgsNyArMTU4
LDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICBzdGF0aWMgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotICAgICAgICBm
b3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2
b2lkKik+KGZ1bmMpKTsKKyAgICAgICAgZm9yRWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQo
VGhyZWFkJiwgY29uc3Qgdm9pZCopPihmdW5jKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTcx
LDcgKzE3MSw3IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB1bnBhcmtPbmVJbXBsKAogICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLCBj
b25zdCBTY29wZWRMYW1iZGE8aW50cHRyX3QoVW5wYXJrUmVzdWx0KT4mIGNhbGxiYWNrKTsKIAot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+Jik7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgyODY1ZWE4MzVhODU1
MzdjMGU3NmMxYTcwOTAwYjlhNTgyOTAzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybVJl
Z2lzdGVyc19oCisjZGVmaW5lIFBsYXRmb3JtUmVnaXN0ZXJzX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5o
PgorI2VsaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1
ZGUgPHVjb250ZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBPUyhEQVJX
SU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
UmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0
X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFk
X3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBw
Y190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5
cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFS
TTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5E
T1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZv
cm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdp
c3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFBsYXRmb3JtUmVnaXN0ZXJzX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKaW5kZXgg
ZmUxNjMwYzk3MzViNWZmNTM1M2NiMmM1NThlMzEwNTgxMjQ3ODdkOC4uMjc3ZTY3NWRiM2M1NTVk
NWU0YzZjZTA0OTQ2ODg3NGQzNjc2OTU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVm
UHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQyLDcgKzQyLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc1JlZlB0ciA9IHRydWU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cigpIDogbV9w
dHIobnVsbHB0cikgeyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgUmVmUHRyKCkgOiBt
X3B0cihudWxscHRyKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihUKiBwdHIpIDogbV9w
dHIocHRyKSB7IHJlZklmTm90TnVsbChwdHIpOyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQdHIo
Y29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsg
fQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDog
bV9wdHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCmluZGV4IDk0M2ZkNmQ3OWQwOTQ0MjU1MDNhYzg5NzMx
YjBhMDZhNmFjNDBmZmQuLmNiMjc1ZjcwMTJjZmU1NjYxZTQ5ZTBiNGZmMGQ5YzYyMWIwZTQ5OWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCkBAIC0yOSw2ICsy
OSw4IEBACiAjaWZuZGVmIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAjZGVmaW5lIFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKwogbmFtZXNw
YWNlIFdURiB7CiAKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVu
dCk7CkBAIC0zNiwxMyArMzgsMTUgQEAgdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZv
aWQqIGFyZ3VtZW50KTsKIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24gewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAgICBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIFJlZlB0cjxUaHJlYWQ+JiYg
dGhyZWFkLCB2b2lkKiBkYXRhKQogICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAg
ICAsIHRocmVhZChXVEZNb3ZlKHRocmVhZCkpCiAgICAgICAgICwgZGF0YShkYXRhKQogICAgIHsK
ICAgICB9CiAKICAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBSZWZQdHI8VGhyZWFk
PiB0aHJlYWQ7CiAgICAgdm9pZCogZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU3YmY2NDZmODVhNDhmMzg4YTc2ODU5MjkxMGQ0MTRlZTc0ZjgwZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xk
ZXIuaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGhy
ZWFkU3BlY2lmaWNLZXkgVGhyZWFkSG9sZGVyOjptX2tleSA9IEludmFsaWRUaHJlYWRTcGVjaWZp
Y0tleTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+
ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRo
cmVhZCkKK3sKKyAgICBpZiAoIWN1cnJlbnQoKSkgeworICAgICAgICAvLyBJZGVhbGx5IHdlJ2Qg
aGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQg
aHVydCBwZXJmb3JtYW5lLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBo
ZXJlIG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RG
Ojppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2Rl
LgorICAgICAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAg
ICAgICAgdGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlci5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzg5ZjQyYTBiNjM4Yjk5NmI5ZWUzYTkwNThkOTUyMjg4ZTE2YTQ2MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5oCkBAIC0wLDAgKzEsODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgVGhyZWFkSG9sZGVyX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIEhvbGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UuIFRoZSBkZXN0cnVjdG9yIG9mIHRoaXMgaG9sZGVyIHJlbGlhYmx5IGRlc3Ry
b3kgVGhyZWFkLgorLy8gRm9yIHB0aHJlYWQsIGl0IGVtcGxveXMgcHRocmVhZHMtc3BlY2lmaWMg
Mi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZSBUaHJlYWQuCisvLyBGb3IgV2lu
ZG93cywgd2UgdXNlIHRocmVhZF9sb2NhbCB0byBkZWZlciB0aHJlYWQgaG9sZGVyIGRlc3RydWN0
aW9uLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMKKy8vIHR5cGVzIGRvbid0IHVz
ZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFkSG9sZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGljOgorICAgIH5UaHJlYWRI
b2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNz
IGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGlu
aXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9m
IFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgorICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNw
ZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBzdGF0aWMgVGhyZWFkSG9s
ZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFk
LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRocmVhZCYgdGhyZWFkKQor
ICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1
Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgorICAgIC8vIC0g
Zmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJl
IGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJworICAg
IC8vIGFuZCAoMSkgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3Qg
b3IgKDIpIGNvbnN0cnVjdHMgdGhyZWFkIGxvY2FsIHZhbHVlIHRvIGNhbGwgaXQgYWdhaW4gbGF0
ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3Rv
cnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVt
b3ZlIHRoZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhl
IGNsZWFudXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgZGVzdHJ1Y3Qo
dm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBib29sIG1faXNE
ZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpY0tleSBtX2tleTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjgxNWFiYjZmNGVlZmM1
MjNlZGI5NzkzNWI5ZTI3NTVlODY0ZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKKworI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgVGhyZWFkSG9sZGVy
Ojppbml0aWFsaXplT25jZSgpCit7CisgICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJm1fa2V5
LCBkZXN0cnVjdCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkK
K3sKKyAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4odGhyZWFkU3BlY2lmaWNHZXQobV9rZXkp
KTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAg
VGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZEhv
bGRlcio+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7CisKKyAgICBp
ZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7CisgICAgICAgIGRl
bGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7CisgICAgLy8g
UmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNh
bGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxl
ZC4KKyAgICB0aHJlYWRTcGVjaWZpY1NldChtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmUzZWRiNTliNzBmZWVlNTI4NTY5NzNhMDAxODRlYzFiY2U5MDE5ODkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAgKzEs
MTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKKworI2luY2x1ZGUgPG11dGV4PgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworI2RlZmluZSBJ
bnZhbGlkVGhyZWFkSG9sZGVyICgoVGhyZWFkSG9sZGVyKikoMHhiYmFkYmVlZikpCisKK3N0YXRp
YyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxz
dGQ6Om11dGV4PiBtdXRleDsKKyAgICByZXR1cm4gbXV0ZXguZ2V0KCk7Cit9CisKK3N0YXRpYyBI
YXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVhZEhvbGRlcio+JiB0aHJlYWRNYXAoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVh
ZEhvbGRlcio+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKwordm9pZCBUaHJlYWRI
b2xkZXI6OmluaXRpYWxpemVPbmNlKCkKK3sKKyAgICB0aHJlYWRNYXBNdXRleCgpOworICAgIHRo
cmVhZE1hcCgpOworICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3Qp
OworfQorCitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAgQVNT
RVJUKG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgVGhyZWFkSG9sZGVy
KiBob2xkZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPih0aHJlYWRTcGVjaWZpY0dldCht
X2tleSkpOworICAgIGlmIChob2xkZXIpCisgICAgICAgIHJldHVybiBob2xkZXI7CisKKyAgICAv
LyBBZnRlciBGTFMgaXMgZGVzdHJveWVkLCB0aGlzIG1hcCBvZmZlcnMgdGhlIHZhbHVlIHVudGls
IHRoZSBzZWNvbmQgdGhyZWFkIGV4aXQgY2FsbGJhY2sgaXMgY2FsbGVkLgorICAgIHN0ZDo6dW5p
cXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgIHJldHVy
biB0aHJlYWRNYXAoKS5nZXQoY3VycmVudFRocmVhZCgpKTsKK30KKwordm9pZCBUaHJlYWRIb2xk
ZXI6OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAgaWYgKGRhdGEgPT0gSW52YWxpZFRocmVh
ZEhvbGRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGhyZWFkSG9sZGVyKiBob2xkZXIgPSBz
dGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQoaG9sZGVyKTsKKwor
ICAgIC8vIERlbGF5IHRoZSBkZWFsbG9jYXRpb24gb2YgVGhyZWFkSG9sZGVyIG1vcmUuCisgICAg
Ly8gSXQgZGVmZXJzIFRocmVhZEhvbGRlciBkZWFsbG9jYXRpb24gYWZ0ZXIgdGhlIG90aGVyIFRo
cmVhZFNwZWNpZmljIHZhbHVlcyBhcmUgZGVhbGxvY2F0ZWQuCisgICAgc3RhdGljIHRocmVhZF9s
b2NhbCBjbGFzcyBUaHJlYWRFeGl0Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGhy
ZWFkRXhpdENhbGxiYWNrKFRocmVhZEhvbGRlciogaG9sZGVyKQorICAgICAgICAgOiBtX2hvbGRl
cihob2xkZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5UaHJlYWRFeGl0Q2Fs
bGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KG1f
aG9sZGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFkSG9sZGVy
KiBtX2hvbGRlcjsKKyAgICB9IGNhbGxiYWNrKGhvbGRlcik7CisKKyAgICBpZiAoaG9sZGVyLT5t
X2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhob2xkZXItPm1fdGhyZWFkLT5pZCgpKSk7CisgICAg
ICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaG9sZGVyLT5tX3RocmVhZC0+aWQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlIGhvbGRlcjsKKworICAgICAgICAvLyBGaWxsIHRoZSBGTFMg
d2l0aCB0aGUgbm9uLW51bGxwdHIgdmFsdWUuIFdoaWxlIEZMUyBkZXN0cnVjdG9yIHdvbid0IGJl
IGNhbGxlZCBmb3IgdGhhdCwKKyAgICAgICAgLy8gbm9uLW51bGxwdHIgdmFsdWUgdGVsbHMgdXMg
dGhhdCB3ZSBhbHJlYWR5IGRlc3RydWN0ZWQgVGhyZWFkSG9sZGVyLiBJdCBsZWFkcyBpbmNvcnJl
Y3QKKyAgICAgICAgLy8gdXNlIG9mIFRocmVhZDo6Y3VycmVudCgpIGNyYXNoLgorICAgICAgICB0
aHJlYWRTcGVjaWZpY1NldChtX2tleSwgSW52YWxpZFRocmVhZEhvbGRlcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRl
eD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgICAgICB0aHJlYWRNYXAoKS5hZGQoaG9s
ZGVyLT5tX3RocmVhZC0+aWQoKSwgaG9sZGVyKTsKKyAgICB9CisgICAgdGhyZWFkU3BlY2lmaWNT
ZXQobV9rZXksIEludmFsaWRUaHJlYWRIb2xkZXIpOworICAgIGhvbGRlci0+bV9pc0Rlc3Ryb3ll
ZE9uY2UgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93
dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDBiZWJmZTkzYmE1YzcwYTliNGY0YjVmMjY1NzIxZGQxNjliZmYxNDMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYv
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFBUSFJFQURTKQotCi0j
aW5jbHVkZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIgotCi0jaW5jbHVkZSAiVGhy
ZWFkaW5nLmgiCi0KLSNpZiBPUyhIVVJEKQotLy8gUFRIUkVBRF9LRVlTX01BWCBpcyBub3QgZGVm
aW5lZCBpbiBiaW9uaWMgbm9yIGluIEh1cmQsIHNvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUu
Ci0jZGVmaW5lIFBUSFJFQURfS0VZU19NQVggMTAyNAotI2Vsc2UKLSNpbmNsdWRlIDxsaW1pdHMu
aD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotcHRocmVhZF9rZXlfdCBUaHJlYWRJZGVu
dGlmaWVyRGF0YTo6bV9rZXkgPSBQVEhSRUFEX0tFWVNfTUFYOwotCi12b2lkIHRocmVhZERpZEV4
aXQoVGhyZWFkSWRlbnRpZmllcik7Ci0KLVRocmVhZElkZW50aWZpZXJEYXRhOjp+VGhyZWFkSWRl
bnRpZmllckRhdGEoKQotewotICAgIHRocmVhZERpZEV4aXQobV9pZGVudGlmaWVyKTsKLX0KLQot
dm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2UoKQotewotICAgIGludCBl
cnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKLSAgICBpZiAoZXJy
b3IpCi0gICAgICAgIENSQVNIKCk7Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgVGhyZWFkSWRlbnRp
ZmllckRhdGE6OmlkZW50aWZpZXIoKQotewotICAgIEFTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tF
WVNfTUFYKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmllckRhdGEg
PSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMo
bV9rZXkpKTsKLQotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyRGF0YSA/IHRocmVhZElkZW50
aWZpZXJEYXRhLT5tX2lkZW50aWZpZXIgOiAwOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJE
YXRhOjppbml0aWFsaXplKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgQVNTRVJUKCFpZGVu
dGlmaWVyKCkpOwotICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRoaXMgYXMgYSByZWxlYXNlIGFz
c2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBlcmZvcm1hbmUuCi0gICAgLy8g
SGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVyZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2gg
ImRpZG4ndCBjYWxsCi0gICAgLy8gV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91
Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgotICAgIFJFTEVBU0VfQVNTRVJUKG1fa2V5ICE9IFBU
SFJFQURfS0VZU19NQVgpOwotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9rZXksIG5ldyBUaHJl
YWRJZGVudGlmaWVyRGF0YShpZCkpOwotfQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjpk
ZXN0cnVjdCh2b2lkKiBkYXRhKQotewotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKiB0aHJlYWRJ
ZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXJEYXRhKj4oZGF0YSk7
Ci0gICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKLQotICAgIGlmICh0aHJlYWRJZGVu
dGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKLSAgICAgICAgZGVsZXRlIHRocmVhZElk
ZW50aWZpZXJEYXRhOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhyZWFkSWRlbnRp
ZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKLSAgICAvLyBSZS1zZXR0aW5nIHRo
ZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRlciBhbGwg
b3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgotICAgIHB0aHJl
YWRfc2V0c3BlY2lmaWMobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg0MzQ5YTBjZGRhYWVjODYwYmNiZTRiYzBhNzI1YmQyNzVlNzJlYmQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0jZGVmaW5lIFRocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHNfaAotCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1u
YW1lc3BhY2UgV1RGIHsKLQotLy8gSG9sZHMgVGhyZWFkSWRlbnRpZmllciBpbiB0aGUgdGhyZWFk
LXNwZWNpZmljIHN0b3JhZ2UgYW5kIGVtcGxveXMgcHRocmVhZHMtc3BlY2lmaWMgMi1wYXNzIGRl
c3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZQotLy8gVGhyZWFkSWRlbnRpZmllciBmcm9tIHRo
cmVhZE1hcC4gSXQgYXNzdW1lcyByZWd1bGFyIFRocmVhZFNwZWNpZmljIHR5cGVzIGRvbid0IHVz
ZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhyZWFkSWRlbnRpZmllckRhdGEg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZElkZW50aWZpZXJEYXRhKTsKLXB1Ymxp
YzoKLSAgICB+VGhyZWFkSWRlbnRpZmllckRhdGEoKTsKLQotICAgIC8vIE9uZSB0aW1lIGluaXRp
YWxpemF0aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCi0gICAgLy8gVGhpcyBtZXRob2Qg
bXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1z
YWZlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGVz
IGFuZCBwdXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZElkZW50aWZpZXJEYXRhIGludG8gdGhyZWFk
LXNwZWNpZmljIHN0b3JhZ2UuCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWRJZGVu
dGlmaWVyIGlkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0dXJucyAwIGlmIHRocmVhZC1zcGVjaWZp
YyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIFRocmVhZElkZW50aWZp
ZXIgaWRlbnRpZmllcigpOwotCi1wcml2YXRlOgotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKFRo
cmVhZElkZW50aWZpZXIgaWRlbnRpZmllcikKLSAgICAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKLSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxzZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1l
cyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBv
dGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJl
bWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwotICAgIC8vIGFuZCByZS1zZXRzIGl0c2Vs
ZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCB0byBtYWtlIFB0aHJlYWRzIHRvIGNhbGwg
aXQgYWdhaW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lm
aWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMg
dGltZSwgd2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aGUgdGhy
ZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgotICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0
KHZvaWQqIGRhdGEpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAg
Ym9vbCBtX2lzRGVzdHJveWVkT25jZTsKLSAgICBzdGF0aWMgcHRocmVhZF9rZXlfdCBtX2tleTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkc19oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lm
aWMuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKaW5kZXggZjA5MDRmY2Y2MjQ0
OWUyZDNiYWM3MDNkMmRhNzQ2MDBiYjdlMzk0OC4uMWY5ODM2M2U5MzQxMzRjNDE0MzMzNmM4Yjgy
ZjhhZmM0MzgxNWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCkBAIC00OCw2ICs0OCwxNCBA
QAogCiAjaWYgVVNFKFBUSFJFQURTKQogI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworI2lmIE9TKEhV
UkQpCisvLyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5vdCBkZWZpbmVkIGluIGJpb25pYyBub3IgaW4g
SHVyZCwgc28gZXhwbGljaXRseSBkZWZpbmUgaXQgaGVyZS4KKyNkZWZpbmUgUFRIUkVBRF9LRVlT
X01BWCAxMDI0CisjZWxzZQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKICNlbGlmIE9T
KFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCkBAIC0xMDksNiArMTE3LDgg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgQ2FuQmVHQ1RocmVhZCBjYW5CZUdDVGhyZWFkID0gQ2Fu
QmVHQ1RocmVhZDo6RmFsc2U+IGNsYXNzIFQKIAogdHlwZWRlZiBwdGhyZWFkX2tleV90IFRocmVh
ZFNwZWNpZmljS2V5OwogCitzdGF0aWMgY29uc3QgY29uc3RleHByIFRocmVhZFNwZWNpZmljS2V5
IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSA9IFBUSFJFQURfS0VZU19NQVg7CisKIGlubGluZSB2
b2lkIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQg
KCpkZXN0cnVjdG9yKSh2b2lkICopKQogewogICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2Ny
ZWF0ZShrZXksIGRlc3RydWN0b3IpOwpAQCAtMTcxLDYgKzE4MSw4IEBAIFdURl9FWFBPUlRfUFJJ
VkFURSBEV09SRCogZmxzS2V5cygpOwogCiB0eXBlZGVmIERXT1JEIFRocmVhZFNwZWNpZmljS2V5
OwogCitzdGF0aWMgY29uc3QgY29uc3RleHByIFRocmVhZFNwZWNpZmljS2V5IEludmFsaWRUaHJl
YWRTcGVjaWZpY0tleSA9IEZMU19PVVRfT0ZfSU5ERVhFUzsKKwogaW5saW5lIHZvaWQgdGhyZWFk
U3BlY2lmaWNLZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNLZXkqIGtleSwgdm9pZCAoVEhSRUFEX1NQ
RUNJRklDX0NBTEwgKmRlc3RydWN0b3IpKHZvaWQgKikpCiB7CiAgICAgRFdPUkQgZmxzS2V5ID0g
RmxzQWxsb2MoZGVzdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCBjMWRjMzUwMTkwM2Fi
NzZiMzcwNDZkOTMzM2Y5MzJhM2VmMGM2YzZlLi43MTg3ODE0MTAxOGU2ODAzYzAwNzA3MWEyZjZm
YTYwZWMyMDNjZTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RydWN0
IE5ld1RocmVhZENvbnRleHQgewogICAgIE11dGV4IGNyZWF0aW9uTXV0ZXg7CiB9OwogCi1jb25z
dCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCitjb25z
dCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFt
ZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9OUCkKICAgICByZXR1cm4gdGhyZWFkTmFt
ZTsKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBj
b250ZXh0RGF0YSkKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPmNyZWF0aW9u
TXV0ZXgpOwogICAgIH0KIAotICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29u
dGV4dC0+bmFtZSk7CisgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnRleHQtPm5hbWUpOwogCiAgICAgYXV0byBlbnRyeVBvaW50ID0gV1RGTW92ZShjb250ZXh0
LT5lbnRyeVBvaW50KTsKIApAQCAtOTIsMjQgKzkyLDI0IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVu
dHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAgZW50cnlQb2ludCgpOwogfQogCi1UaHJl
YWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gZW50cnlQb2ludCkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0
IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQogewogICAgIE5l
d1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdU
Rk1vdmUoZW50cnlQb2ludCksIHsgfSB9OwogCiAgICAgLy8gUHJldmVudCB0aGUgdGhyZWFkIGJv
ZHkgZnJvbSBleGVjdXRpbmcgdW50aWwgd2UndmUgZXN0YWJsaXNoZWQgdGhlIHRocmVhZCBpZGVu
dGlmaWVyLgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsK
IAotICAgIHJldHVybiBjcmVhdGVUaHJlYWRJbnRlcm5hbCh0aHJlYWRFbnRyeVBvaW50LCBjb250
ZXh0LCBuYW1lKTsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbCh0aHJlYWRFbnRy
eVBvaW50LCBjb250ZXh0LCBuYW1lKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJl
YWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFt
ZSkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9p
bnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVRo
cmVhZChuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0geworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0
ZShuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0gewogICAgICAgICBlbnRyeVBvaW50KGRhdGEpOwog
ICAgIH0pOwogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQg
cmVsYXRpdmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50
ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykK
ICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0
eSkKICNlbmRpZgogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50
IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
aXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFPU19DTEFTU0VTKQog
ICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTM0LDEzICsxMzQsMTMgQEAg
dm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5
KQogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiBzdGF0aWMgcW9zX2NsYXNzX3QgZ2xvYmFsTWF4UU9T
Y2xhc3MgeyBRT1NfQ0xBU1NfVU5TUEVDSUZJRUQgfTsKIAotdm9pZCBzZXRHbG9iYWxNYXhRT1ND
bGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKK3ZvaWQgVGhyZWFkOjpzZXRHbG9iYWxNYXhRT1ND
bGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKIHsKICAgICBibWFsbG9jOjphcGk6OnNldFNjYXZl
bmdlclRocmVhZFFPU0NsYXNzKG1heENsYXNzKTsKICAgICBnbG9iYWxNYXhRT1NjbGFzcyA9IG1h
eENsYXNzOwogfQogCi1xb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9y
aWdpbmFsQ2xhc3MpCitxb3NfY2xhc3NfdCBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MocW9zX2Ns
YXNzX3Qgb3JpZ2luYWxDbGFzcykKIHsKICAgICBpZiAoZ2xvYmFsTWF4UU9TY2xhc3MgIT0gUU9T
X0NMQVNTX1VOU1BFQ0lGSUVEKQogICAgICAgICByZXR1cm4gc3RkOjptaW4ob3JpZ2luYWxDbGFz
cywgZ2xvYmFsTWF4UU9TY2xhc3MpOwpAQCAtMTQ4LDQgKzE0OCw5IEBAIHFvc19jbGFzc190IGFk
anVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3JpZ2luYWxDbGFzcykKIH0KICNlbmRpZgogCit2
b2lkIFRocmVhZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX2lkKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDZiNTU4
YjNlMWQ1MTdlODEwYzVlYThmNmIyY2E0NDA1YWNmMDEyZDIuLjY5YWQ5YzRiNDg0MTY5NGZiOGUw
MDdkZmZlYjJmOTllZDIwYzA5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpo
YXlnb29kQHJlYWt0aXguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29k
IDxqaGF5Z29vZEByZWFrdGl4LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM1LDc1ICszNiwxNzIgQEAKIC8vIE5vdGhpbmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5k
cyBvbiBBc3NlcnRpb25zLCBBdG9taWNzLCBMb2NrZXIsIE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZl
UmVmQ291bnRlZCwgb3IgVGhyZWFkaW5nUHJpbWl0aXZlcy4KIAogI2luY2x1ZGUgPGZ1bmN0aW9u
YWw+CisjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9F
eHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaD4KIAorI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKKyNpbmNsdWRlIDxzZW1h
cGhvcmUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsK
IAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgVGhyZWFkSWRlbnRp
ZmllciA9IHVpbnQzMl90OwogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFy
Z3VtZW50KTsKIAotLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWlu
IHRocmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMg
YW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0
aHJlYWQsIHRoZSBvbmx5IAotLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5v
dCByZWVudHJhbnQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5n
KCk7CitjbGFzcyBUaHJlYWRIb2xkZXI7CitjbGFzcyBQcmludFN0cmVhbTsKKworY2xhc3MgVGhy
ZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4geworcHVibGljOgorICAg
IGZyaWVuZCBjbGFzcyBUaHJlYWRIb2xkZXI7CiAKLS8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3Jl
YXRpb24gZmFpbGVkLgotLy8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNl
IG9uIHNvbWUgcGxhdGZvcm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1XVEZfRVhQ
T1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogdGhy
ZWFkTmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
flRocmVhZCgpOwogCi0vLyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkg
cmVzcG9uc2l2ZW5lc3MuCi0vLyByZWxhdGl2ZVByaW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhlIHJh
bmdlIFstMTUsIDBdIHdoZXJlIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJpb3Jp
dHkuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJh
Y3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAw
KTsKKyAgICAvLyBSZXR1cm5zIG51bGxwdHIgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KKyAg
ICAvLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0
Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVm
UHRyPFRocmVhZD4gY3JlYXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEs
IGNvbnN0IGNoYXIqIG5hbWUpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmll
ciBjdXJyZW50VGhyZWFkKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VUaHJlYWRQ
cmlvcml0eShUaHJlYWRJZGVudGlmaWVyLCBpbnQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGludCB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyKTsKLVdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICAvLyBSZXR1cm5z
IFRocmVhZCBvYmplY3QuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1
cnJlbnQoKTsKIAotLy8gRGVwcmVjYXRlZCBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIHRocmVhZCBj
cmVhdGlvbi4KLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVh
ZChUaHJlYWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIC8v
IFJldHVybnMgVGhyZWFkSWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1
c2VyIG9ubHkgY2FyZXMgYWJvdXQgaWRlbnRpdHkKKyAgICAvLyBvZiB0aHJlYWRzIGFuZCBlbnN1
cmUgdGhlIHRocmVhZCBsaWZldGltZS4gV2hpbGUgVGhyZWFkOjpjdXJyZW50KCkgaXMgbm90IHNh
ZmUgaWYgaXQgaXMgY2FsbGVkCisgICAgLy8gZnJvbSB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgb3Ro
ZXIgVExTIGRhdGEsIGN1cnJlbnRJRCgpIGFsd2F5cyByZXR1cm5zIG1lYW5pbmdmdWwgdGhyZWFk
IElELgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBjdXJy
ZW50SUQoKTsKIAotLy8gSW50ZXJuYWwgcGxhdGZvcm0tc3BlY2lmaWMgY3JlYXRlVGhyZWFkIGlt
cGxlbWVudGF0aW9uLgotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJl
YWRGdW5jdGlvbiwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGNoYW5nZVByaW9yaXR5KGludCk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIGludCB3YWl0Rm9yQ29tcGxldGlvbigpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGRldGFjaCgpOwogCi0vLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRp
b24uCi0vLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3Qg
YmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhy
ZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisjaWYgT1MoREFSV0lOKQorICAg
IHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9yID0ga2Vybl9yZXR1cm5fdDsKKyNlbGlmIFVTRShQ
VEhSRUFEUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IGludDsKKyNlbGlmIE9T
KFdJTkRPV1MpCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBEV09SRDsKKyNlbmRp
ZgogCi1jb25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3Bl
bmRFcnJvcj4gc3VzcGVuZCgpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc3VtZSgp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZ2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVn
aXN0ZXJzJik7CiAKICNpZiBVU0UoUFRIUkVBRFMpCi1ib29sIHNpZ25hbFRocmVhZChUaHJlYWRJ
ZGVudGlmaWVyLCBpbnQgc2lnbmFsTnVtYmVyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBzaWduYWwoaW50IHNpZ25hbE51bWJlcik7CiAjZW5kaWYKIAorICAgIC8vIE1hcmsgdGhlIGN1
cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmluZyBVSSByZXNwb25zaXZlbmVzcy4KKyAgICAvLyByZWxh
dGl2ZVByaW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTUsIDBdIHdoZXJlIGEgbG93
ZXIgdmFsdWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJpb3JpdHkuCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVs
YXRpdmVQcmlvcml0eSA9IDApOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7
CisKICNpZiBIQVZFKFFPU19DTEFTU0VTKQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2xv
YmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QpOwotV1RGX0VYUE9SVF9QUklWQVRFIHFvc19jbGFz
c190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBxb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19j
bGFzc190KTsKICNlbmRpZgogCi19IC8vIG5hbWVzcGFjZSBXVEYKKyAgICAvLyBJbnRlcm5hbCBw
bGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICBzdGF0
aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBj
b25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAotdXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwot
dXNpbmcgV1RGOjpjcmVhdGVUaHJlYWQ7Ci11c2luZyBXVEY6OmN1cnJlbnRUaHJlYWQ7Ci11c2lu
ZyBXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5OwotdXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11
c2luZyBXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0aW9uOworICAgIC8vIENhbGxlZCBpbiB0aGUg
dGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAgICAvLyBIZWxwZnVsIGZvciBwbGF0Zm9y
bXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJl
YWQuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25z
dCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbm9ybWFsaXplVGhy
ZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLXVz
aW5nIFdURjo6c2lnbmFsVGhyZWFkOworICAgIHZvaWQgZXN0YWJsaXNoKHB0aHJlYWRfdCk7Cisj
ZWxzZQorICAgIHZvaWQgZXN0YWJsaXNoKEhBTkRMRSwgVGhyZWFkSWRlbnRpZmllcik7CiAjZW5k
aWYKIAotI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi11c2luZyBXVEY6OnNldEdsb2JhbE1heFFPU0Ns
YXNzOwotdXNpbmcgV1RGOjphZGp1c3RlZFFPU0NsYXNzOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKKyNpZiBVU0UoUFRIUkVBRFMp
ICYmICFPUyhEQVJXSU4pCisgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1
bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CiAjZW5kaWYKIAorICAgIFRocmVh
ZElkZW50aWZpZXIgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVGhyZWFkJiB0aHJlYWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQoKSA9
PSB0aHJlYWQuaWQoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGhyZWFk
JiB0aHJlYWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQoKSAhPSB0aHJlYWQuaWQoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkKCk7CisKKyAgICBlbnVtIEpvaW5hYmxlU3RhdGUg
eworICAgICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUuIFRoZSB0aHJlYWQgY2FuIGJl
IGpvaW5lZCBvbi4KKyAgICAgICAgSm9pbmFibGUsCisKKyAgICAgICAgLy8gU29tZWJvZHkgd2Fp
dGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhpdGVk
LiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYQorICAgICAgICAvLyBw
ZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hpY2ggY2F1c2Vz
IHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2FpdE9uVGhyZWFk
Q29tcGxldGlvbiB0byBydW4pCisgICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERpZEV4aXQgaXMg
Y2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0
aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncworICAgICAgICAvLyBub2JvZHkgZWxzZSB0byBw
aWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVhZENvbXBsZXRp
b24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgorICAgICAgICBKb2luZWQsCisKKyAgICAgICAgLy8g
VGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQg
b24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcg
dXAgYWZ0ZXIgaXRzZWxmLgorICAgICAgICBEZXRhY2hlZCwKKyAgICB9OworCisgICAgSm9pbmFi
bGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRlOyB9CisgICAg
dm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRlID0gRGV0YWNoZWQ7IH0K
KyAgICB2b2lkIGRpZEV4aXQoKTsKKyAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0
ZSA9IEpvaW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9
CisKKyAgICAvLyBXb3JkTG9jayAmIExvY2sgcmVseSBvbiBUaHJlYWRTcGVjaWZpYy4gQnV0IFRo
cmVhZCBvYmplY3QgY2FuIGJlIGRlc3Ryb3llZCBldmVuIGFmdGVyIFRocmVhZFNwZWNpZmljIHRo
aW5ncyBhcmUgZGVzdHJveWVkLgorICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsKKyAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1faWQgeyAwIH07CisgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUg
eyBKb2luYWJsZSB9OworICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsKKyNpZiBVU0UoUFRI
UkVBRFMpCisgICAgcHRocmVhZF90IG1faGFuZGxlOworI2lmIE9TKERBUldJTikKKyAgICBtYWNo
X3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOworI2Vsc2UKKyAgICBzZW1fdCBtX3NlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWU7CisgICAgbWNvbnRleHRfdCBtX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0
OworICAgIHVuc2lnbmVkIG1fc3VzcGVuZENvdW50IHsgMCB9OworICAgIHN0ZDo6YXRvbWljPGJv
b2w+IG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKKyNlbmRpZgorI2VsaWYgT1MoV0lORE9XUykKKyAg
ICBIQU5ETEUgbV9oYW5kbGU7CisjZWxzZQorI2Vycm9yIFVua25vd24gU3lzdGVtCisjZW5kaWYK
K307CisKKy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJl
YWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5LgorLy8gRGFyd2luIGlzIGFuIGV4
Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNhbGwgaXQgZnJvbSBhbnkgdGhyZWFk
LCB0aGUgb25seQorLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVu
dHJhbnQuCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CisK
K2lubGluZSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQoreworICAgIHJldHVybiBU
aHJlYWQ6OmN1cnJlbnRJRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgV1RGOjpUaHJlYWQ7Cit1c2luZyBXVEY6OmN1cnJl
bnRUaHJlYWQ7CisKICNlbmRpZiAvLyBUaHJlYWRpbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRo
cmVhZHMuY3BwCmluZGV4IGY1Y2VlM2MxNzc4MmY2NmFmOWIwNGNjN2Q1NmNhMWRhNWE2OTJkMGYu
LjU3NTJlZWUyODY4ODM5ZDllMmI1NTg3OGM4MDhkNjFjOGQ2ZmM4MWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAgLTEsNyArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgPGpoYXlnb29kQHJlYWt0aXguY29t
PgogICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDEsMTMgKzQyLDE3IEBACiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgogI2luY2x1ZGUg
IlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIgot
I2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLSNpbmNsdWRlICJUaHJl
YWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlci5oIgorI2luY2x1ZGUgPGVycm5v
Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJl
YWREYXRhLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4K
KworI2lmIE9TKExJTlVYKQorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2VuZGlmCiAKICNpZiAh
Q09NUElMRVIoTVNWQykKICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTU1LDEyNyArNjAsMTQzIEBA
CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi0jaWYgT1MoTElOVVgpCi0jaW5jbHVk
ZSA8c3lzL3ByY3RsLmg+Ci0jZW5kaWYKLQotI2lmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2ln
bmFsLmg+Ci0jZW5kaWYKKyNpZiAhT1MoREFSV0lOKSAmJiBPUyhVTklYKQogCi1uYW1lc3BhY2Ug
V1RGIHsKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi1jbGFz
cyBQdGhyZWFkU3RhdGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIGVudW0gSm9pbmFibGVTdGF0ZSB7Ci0gICAgICAgIEpvaW5hYmxlLCAvLyBUaGUgZGVmYXVs
dCB0aHJlYWQgc3RhdGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KLQotICAgICAgICBK
b2luZWQsIC8vIFNvbWVib2R5IHdhaXRlZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlz
IHRocmVhZCBmaW5hbGx5IGV4aXRlZC4gVGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUg
Y2FuIGJlIGEgCi0gICAgICAgICAgICAgICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVu
IHRoZSB0aHJlYWQgZXhpdHMgKHdoaWNoIGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFu
ZCB0aGUgcmVtYWluZGVyIG9mIHdhaXRPblRocmVhZENvbXBsZXRpb24gdG8gcnVuKSAKLSAgICAg
ICAgICAgICAgICAvLyBhbmQgd2hlbiB0aHJlYWREaWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0
aHJlYWREaWRFeGl0IHRvIHRha2UgY2hhcmdlIGFuZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNp
bmNlIHRoZXJlJ3MgCi0gICAgICAgICAgICAgICAgLy8gbm9ib2R5IGVsc2UgdG8gcGljayB1cCB0
aGUgc2xhY2sgaW4gdGhpcyBjYXNlIChzaW5jZSB3YWl0T25UaHJlYWRDb21wbGV0aW9uIGhhcyBh
bHJlYWR5IHJldHVybmVkKS4KLQotICAgICAgICBEZXRhY2hlZCAvLyBUaGUgdGhyZWFkIGhhcyBi
ZWVuIGRldGFjaGVkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2lu
dCwgdGhlIHRocmVhZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYu
Ci0gICAgfTsKLQotICAgIC8vIEN1cnJlbnRseSBhbGwgdGhyZWFkcyBjcmVhdGVkIGJ5IFdURiBz
dGFydCBvdXQgYXMgam9pbmFibGUuIAotICAgIFB0aHJlYWRTdGF0ZShwdGhyZWFkX3QgaGFuZGxl
KQotICAgICAgICA6IG1fam9pbmFibGVTdGF0ZShKb2luYWJsZSkKLSAgICAgICAgLCBtX2RpZEV4
aXQoZmFsc2UpCi0gICAgICAgICwgbV9wdGhyZWFkSGFuZGxlKGhhbmRsZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJs
ZVN0YXRlOyB9Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUoKSB7IHJldHVybiBtX3B0aHJl
YWRIYW5kbGU7IH0KLSAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3Rh
dGUgPSBEZXRhY2hlZDsgfQotICAgIHZvaWQgZGlkRXhpdCgpIHsgbV9kaWRFeGl0ID0gdHJ1ZTsg
fQotICAgIHZvaWQgZGlkSm9pbigpIHsgbV9qb2luYWJsZVN0YXRlID0gSm9pbmVkOyB9Ci0gICAg
Ym9vbCBoYXNFeGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4aXQ7IH0KKyNpZiBPUyhTT0xBUklTKQor
I2luY2x1ZGUgPHRocmVhZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYK
IAotcHJpdmF0ZToKLSAgICBKb2luYWJsZVN0YXRlIG1fam9pbmFibGVTdGF0ZTsKLSAgICBib29s
IG1fZGlkRXhpdDsKLSAgICBwdGhyZWFkX3QgbV9wdGhyZWFkSGFuZGxlOwotfTsKKyNpZiBIQVZF
KFBUSFJFQURfTlBfSCkKKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisjZW5kaWYKIAotdHlwZWRl
ZiBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxQdGhyZWFkU3RhdGU+
PiBUaHJlYWRNYXA7CisjZW5kaWYKIAotdm9pZCB1bnNhZmVUaHJlYWRXYXNEZXRhY2hlZChUaHJl
YWRJZGVudGlmaWVyKTsKLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyKTsKLXZv
aWQgdGhyZWFkV2FzSm9pbmVkKFRocmVhZElkZW50aWZpZXIpOworbmFtZXNwYWNlIFdURiB7CiAK
LXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQorVGhyZWFkOjpUaHJlYWQoKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4Owor
I2lmICFPUyhEQVJXSU4pCisgICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3Vt
ZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZh
bHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKKyNlbmRpZgogfQogCi12b2lkIGluaXRpYWxp
emVUaHJlYWRpbmcoKQorVGhyZWFkOjp+VGhyZWFkKCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc0lu
aXRpYWxpemVkOwotCi0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6
aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3Ry
dWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAotICAgIC8vIHNv
IGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCi0gICAgU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAgIGluaXRpYWxpemVSYW5kb21O
dW1iZXJHZW5lcmF0b3IoKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9u
Y2UoKTsKLSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlhbGl6ZURhdGVzKCk7CisjaWYg
IU9TKERBUldJTikKKyAgICBzZW1fZGVzdHJveSgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1l
KTsKKyNlbmRpZgogfQogCi1zdGF0aWMgVGhyZWFkTWFwJiB0aHJlYWRNYXAoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxUaHJlYWRNYXA+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQor
I2lmICFPUyhEQVJXSU4pCiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVB0
aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxlKQotewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKy8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1
c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCitzdGF0
aWMgY29uc3RleHByIGNvbnN0IGludCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lID0gU0lHVVNSMjsK
K3N0YXRpYyBzdGQ6OmF0b21pYzxUaHJlYWQqPiB0YXJnZXRUaHJlYWQgeyBudWxscHRyIH07Citz
dGF0aWMgU3RhdGljV29yZExvY2sgZ2xvYmFsU3VzcGVuZExvY2s7CiAKLSAgICBUaHJlYWRNYXA6
Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAoKS5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IHRocmVh
ZE1hcCgpLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwoaS0+dmFsdWUt
PnB0aHJlYWRIYW5kbGUoKSwgcHRocmVhZEhhbmRsZSkgJiYgIWktPnZhbHVlLT5oYXNFeGl0ZWQo
KSkKLSAgICAgICAgICAgIHJldHVybiBpLT5rZXk7Cit2b2lkIFRocmVhZDo6c2lnbmFsSGFuZGxl
clN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCkKK3sKKyAgICAv
LyBUb3VjaGluZyB0aHJlYWQgbG9jYWwgYXRvbWljIHR5cGVzIGZyb20gc2lnbmFsIGhhbmRsZXJz
IGlzIGFsbG93ZWQuCisgICAgVGhyZWFkKiB0aHJlYWQgPSB0YXJnZXRUaHJlYWQubG9hZCgpOwor
CisgICAgaWYgKHRocmVhZC0+bV9zdXNwZW5kZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gdGhh
dCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlc3VtZSBzaWdzdXNwZW5kLgorICAgICAgICAv
LyBTbyB0aGlzIGhhbmRsZXIgaW52b2NhdGlvbiBpdHNlbGYgc2hvdWxkIG5vdCBwcm9jZXNzLgor
ICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHNpZ25hbCBjb21lcywgZmlyc3QsIHRoZSBzeXN0
ZW0gY2FsbHMgc2lnbmFsIGhhbmRsZXIuIEFuZCBsYXRlciwgc2lnc3VzcGVuZCB3aWxsIGJlIHJl
c3VtZWQuIFNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gYWx3YXlzIHByZWNlZGVzLgorICAgICAg
ICAvLyBTbywgdGhlIHByb2JsZW0gbmV2ZXIgaGFwcGVucyB0aGF0IHN1c3BlbmRlZC5zdG9yZSh0
cnVlLCAuLi4pIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBoYW5kbGVyIGlzIGNhbGxlZC4K
KyAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5
OS9mdW5jdGlvbnMvc2lnc3VzcGVuZC5odG1sCisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICByZXR1cm4gMDsKKyAgICB1Y29udGV4dF90KiB1c2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PHVj
b250ZXh0X3QqPih1Y29udGV4dCk7CisjaWYgQ1BVKFBQQykKKyAgICB0aHJlYWQtPm1fc3VzcGVu
ZGVkTWFjaGluZUNvbnRleHQgPSAqdXNlckNvbnRleHQtPnVjX21jb250ZXh0LnVjX3JlZ3M7Cisj
ZWxzZQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0
LT51Y19tY29udGV4dDsKKyNlbmRpZgorCisgICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8g
c2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgorICAgIC8vIHNlbV9wb3N0IGlzIGFz
eW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMg
ZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgorICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcv
b25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJf
MDRfMDMKKyAgICAvLworICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0
aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2
ZWQuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3
OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCisgICAgc2VtX3Bvc3QoJnRocmVh
ZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKworICAgIC8vIFJlYWNoaW5nIGhlcmUs
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYmxvY2tlZCBpbiB0aGlzIGhhbmRsZXIgKHRoaXMg
aXMgY29uZmlndXJlZCBieSBzaWdhY3Rpb24ncyBzYV9tYXNrKS4KKyAgICAvLyBTbyBiZWZvcmUg
Y2FsbGluZyBzaWdzdXNwZW5kLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHRvIHRoaXMgdGhyZWFk
IGlzIGRlZmVycmVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgZXhlY3V0
ZWQgcmVjdXJzaXZlbHkuCisgICAgc2lnc2V0X3QgYmxvY2tlZFNpZ25hbFNldDsKKyAgICBzaWdm
aWxsc2V0KCZibG9ja2VkU2lnbmFsU2V0KTsKKyAgICBzaWdkZWxzZXQoJmJsb2NrZWRTaWduYWxT
ZXQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHNpZ3N1c3BlbmQoJmJsb2NrZWRTaWdu
YWxTZXQpOworCisgICAgLy8gQWxsb3cgcmVzdW1lIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRo
cmVhZCBpcyByZXN1bWVkLgorICAgIHNlbV9wb3N0KCZ0aHJlYWQtPm1fc2VtYXBob3JlRm9yU3Vz
cGVuZFJlc3VtZSk7CiB9CiAKLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGVzdGFibGlzaElkZW50
aWZpZXJGb3JQdGhyZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKKyNl
bmRpZiAvLyAhT1MoREFSV0lOKQorCit2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogewotICAg
IEFTU0VSVCghaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBUaHJlYWRJ
ZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50
aWZpZXJDb3VudCwgc3RkOjptYWtlX3VuaXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRIYW5kbGUp
KTsKLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgW10g
eworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CisgICAgICAg
IFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8gU3RyaW5nSW1wbDo6
ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRz
YWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXpl
ZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGluaXRp
YWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpOwor
ICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKworI2lmICFPUyhEQVJXSU4pCisgICAgICAgIC8v
IFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmlndXJhdGlvbi4KKyAgICAg
ICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBo
YW5kbGVyLgorICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxsb3dl
ZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgorICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9u
IGFjdGlvbjsKKyAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAg
c2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisKKyAg
ICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IFRocmVhZDo6c2lnbmFsSGFuZGxlclN1c3BlbmRS
ZXN1bWU7CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZP
OworICAgICAgICBzaWdhY3Rpb24oU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSwgJmFjdGlvbiwgMCk7
CisjZW5kaWYKKyAgICB9KTsKIH0KIAotc3RhdGljIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlRm9y
SWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQoVGhyZWFkSWRlbnRpZmllciBpZCkKK3N0YXRp
YyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCiB7Ci0g
ICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCktPnB0aHJlYWRIYW5kbGUoKTsKKyNpZiAhT1Mo
REFSV0lOKQorICAgIHNpZ3NldF90IG1hc2s7CisgICAgc2lnZW1wdHlzZXQoJm1hc2spOworICAg
IHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgcHRocmVhZF9z
aWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQq
IHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgLy8gQmFsYW5jZWQgYnkg
LmxlYWtQdHIoKSBpbiBjcmVhdGVUaHJlYWRJbnRlcm5hbC4KKyAgICAvLyBCYWxhbmNlZCBieSAu
bGVha1B0cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwuCiAgICAgYXV0byBpbnZvY2F0aW9u
ID0gc3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oc3RhdGljX2Nhc3Q8
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKKworICAgIFRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQg
PSBudWxscHRyOworCiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
SW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hh
ciopCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9u
IGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQogewotICAgIGF1dG8gaW52b2Nh
dGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBv
aW50LCBkYXRhKTsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhy
ZWFkKCkpOworICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCB0aHJlYWQuZ2V0KCksIGRhdGEpOwogICAgIHB0
aHJlYWRfdCB0aHJlYWRIYW5kbGU7CiAgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKICAgICBwdGhy
ZWFkX2F0dHJfaW5pdCgmYXR0cik7CkBAIC0xODYsMTcgKzIwNywxOCBAQCBUaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQq
IGRhdGEsIGNvbgogICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyKTsKICAgICBpZiAoZXJy
b3IpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHB0aHJlYWQgYXQgZW50
cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgd3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlv
bi5nZXQoKSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICAvLyBCYWxhbmNlZCBieSBzdGQ6OnVuaXF1ZV9wdHIgY29uc3RydWN0b3IgaW4g
d3RmVGhyZWFkRW50cnlQb2ludC4KICAgICBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qIGxlYWtl
ZEludm9jYXRpb24gPSBpbnZvY2F0aW9uLnJlbGVhc2UoKTsKICAgICBVTlVTRURfUEFSQU0obGVh
a2VkSW52b2NhdGlvbik7CiAKLSAgICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJl
YWRIYW5kbGUodGhyZWFkSGFuZGxlKTsKKyAgICB0aHJlYWQtPmVzdGFibGlzaCh0aHJlYWRIYW5k
bGUpOworICAgIHJldHVybiB0aHJlYWQ7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJl
YWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKICNpZiBI
QVZFKFBUSFJFQURfU0VUTkFNRV9OUCkKICAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXpl
VGhyZWFkTmFtZSh0aHJlYWROYW1lKSk7CkBAIC0yMDUsMTIzICsyMjcsMjM0IEBAIHZvaWQgaW5p
dGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0odGhyZWFkTmFtZSk7CiAjZW5kaWYKLQotICAgIFRocmVhZElk
ZW50aWZpZXIgaWQgPSBpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJlYWRfc2VsZigpKTsK
LSAgICBBU1NFUlQoaWQpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplKGlk
KTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKIH0K
LSAgICAKLXZvaWQgY2hhbmdlVGhyZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCwgaW50IGRlbHRhKQotewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFTU0VS
VCh0aHJlYWRJRCk7CiAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRN
YXBNdXRleCgpKTsKLSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVu
dGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhy
ZWFkSGFuZGxlKTsKLSAgICB9Cit2b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRlbHRh
KQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwog
CiAgICAgaW50IHBvbGljeTsKICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CiAKLSAgICBp
ZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsICZwb2xpY3ksICZwYXJhbSkp
CisgICAgaWYgKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShtX2hhbmRsZSwgJnBvbGljeSwgJnBhcmFt
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgKz0gZGVsdGE7
CiAKLSAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZEhhbmRsZSwgcG9saWN5LCAmcGFy
YW0pOworICAgIHB0aHJlYWRfc2V0c2NoZWRwYXJhbShtX2hhbmRsZSwgcG9saWN5LCAmcGFyYW0p
OwogfQogCi1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCkKK2ludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKIHsKLSAgICBwdGhyZWFkX3Qg
cHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCisgICAgcHRocmVhZF90IGhh
bmRsZTsKICAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbG9jayBhY3Jvc3MgdGhl
IGNhbGwgdG8gam9pbiwgc2luY2UgdGhhdCBjYW4gYmxvY2sgb3VyIHRocmVhZCBhbmQgY2F1c2Ug
ZGVhZGxvY2suCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsK
LSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExv
Y2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsK
KyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7Cisg
ICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOwogICAgIH0KIAotICAgIGludCBqb2luUmVzdWx0ID0g
cHRocmVhZF9qb2luKHB0aHJlYWRIYW5kbGUsIDApOworICAgIGludCBqb2luUmVzdWx0ID0gcHRo
cmVhZF9qb2luKGhhbmRsZSwgMCk7CiAKICAgICBpZiAoam9pblJlc3VsdCA9PSBFREVBRExLKQot
ICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRl
YWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAgICAgIExPR19FUlJPUigi
VGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8g
cXVpdCIsIG1faWQpOwogICAgIGVsc2UgaWYgKGpvaW5SZXN1bHQpCi0gICAgICAgIExPR19FUlJP
UigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGpvaW5lZC5cbiIsIHRocmVh
ZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUg
dG8gYmUgam9pbmVkLlxuIiwgbV9pZCk7CiAKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
TWFwTXV0ZXgoKSk7Ci0gICAgUHRocmVhZFN0YXRlKiBzdGF0ZSA9IHRocmVhZE1hcCgpLmdldCh0
aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICBBU1NFUlQoc3RhdGUtPmpvaW5hYmxl
U3RhdGUoKSA9PSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2Nr
PHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgp
ID09IEpvaW5hYmxlKTsKIAotICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCBz
byBjbGVhbiB1cCBhZnRlciBpdC4KLSAgICBpZiAoc3RhdGUtPmhhc0V4aXRlZCgpKQotICAgICAg
ICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOworICAgIC8vIFRoZSB0aHJlYWQgaGFzIGFs
cmVhZHkgZXhpdGVkLCBkbyBub3RoaW5nLgogICAgIC8vIFRoZSB0aHJlYWQgaGFzbid0IGV4aXRl
ZCB5ZXQsIHNvIGRvbid0IGNsZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0aGF0IHdlJ3Zl
IGFscmVhZHkgam9pbmVkIG9uIGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBhZnRlciBpdHNl
bGYuCi0gICAgZWxzZQotICAgICAgICBzdGF0ZS0+ZGlkSm9pbigpOworICAgIGlmICghaGFzRXhp
dGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQog
Ci12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJl
YWQ6OmRldGFjaCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7
Ci0gICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotCi0gICAgaW50IGRldGFjaFJlc3VsdCA9IHB0
aHJlYWRfZGV0YWNoKHB0aHJlYWRIYW5kbGUpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBkZXRhY2hSZXN1bHQgPSBwdGhyZWFkX2Rl
dGFjaChtX2hhbmRsZSk7CiAgICAgaWYgKGRldGFjaFJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9S
KCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRocmVh
ZElEKTsKLQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFk
SUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAg
ICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLSAgICBlbHNlCi0gICAgICAgIHRo
cmVhZE1hcCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIExP
R19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4i
LCBtX2lkKTsKKworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFj
aGVkKCk7CiB9CiAKLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
KQorVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCku
Z2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRF
eGl0KCk7CisgICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7
CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKIAotICAgIGlm
IChzdGF0ZS0+am9pbmFibGVTdGF0ZSgpICE9IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpCi0gICAg
ICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0
ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAg
UmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICB0aHJl
YWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYoKSk7CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFs
aXplKCp0aHJlYWQpOworICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCgpOworICAgIHJldHVybiAqdGhyZWFkOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKQorVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiB7Ci0gICAg
VGhyZWFkSWRlbnRpZmllciBpZCA9IFRocmVhZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCk7
Ci0gICAgaWYgKGlkKQotICAgICAgICByZXR1cm4gaWQ7CisgICAgcmV0dXJuIGN1cnJlbnQoKS5p
ZCgpOworfQogCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlm
aWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVy
Rm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRh
dGE6OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsKK2Jvb2wgVGhyZWFkOjpzaWduYWwo
aW50IHNpZ25hbE51bWJlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNp
Z25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nl
c3MuCiB9CiAKLWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGlu
dCBzaWduYWxOdW1iZXIpCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQs
IFBsYXRmb3JtU3VzcGVuZEVycm9yPgogewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwot
ICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0aGlzICE9ICZj
dXJyZW50KCksICJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50
IHRocmVhZCBpdHNlbGYuIik7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
ZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0g
dGhyZWFkX3N1c3BlbmQobV9wbGF0Zm9ybVRocmVhZCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJO
X1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgIHJl
dHVybiB7IH07CisjZWxzZQogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVh
ZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklk
ZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0
aHJlYWRIYW5kbGUpOworICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1
bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgorICAgICAg
ICAvLyBXZSB1c2UgZ2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCisgICAg
ICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBh
bmQgQi4KKyAgICAgICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1w
dCB0byBzdXNwZW5kIEEuCisgICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0
ZXIsIHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgorICAgICAgICAvLyBJbiB0aGF0
IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxv
Y2tlcihnbG9iYWxTdXNwZW5kTG9jayk7CisgICAgICAgIGlmICghbV9zdXNwZW5kQ291bnQpIHsK
KyAgICAgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2ln
cXVldWUuIEl0IGFsbG93cyB1cyB0byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhh
bmRsZXIuCisgICAgICAgICAgICAvLyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZv
cm1zLCBsaWtlIExpbnV4LgorICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCog
c3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KKyAgICAgICAgICAgIHRhcmdldFRocmVhZC5zdG9yZSh0aGlzKTsKKyAgICAg
ICAgICAgIGludCByZXN1bHQgPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIFNpZ1RocmVhZFN1c3Bl
bmRSZXN1bWUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsKKyAgICAgICAgICAgIHNlbV93YWl0KCZtX3NlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVu
c3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRo
ZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUuCisgICAgICAgICAgICBtX3N1c3BlbmRlZC5zdG9y
ZSh0cnVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQorICAgICAgICAr
K21fc3VzcGVuZENvdW50OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyNlbmRpZgorfQor
Cit2b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdGhyZWFkX3Jlc3VtZSht
X3BsYXRmb3JtVGhyZWFkKTsKKyNlbHNlCisgICAgeworICAgICAgICAvLyBEdXJpbmcgcmVzdW1l
LCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVy
IHRocmVhZHMuCisgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9j
ayk7CisgICAgICAgIGlmIChtX3N1c3BlbmRDb3VudCA9PSAxKSB7CisgICAgICAgICAgICAvLyBX
aGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWdu
YWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFj
dHVhbGx5IGlzc3VlZCwKKyAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYg
d2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZl
cmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVu
ZCBhbmQgcmVzdW1lLgorICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVt
YmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgorICAgICAg
ICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5k
IHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwg
d2UgY2FuIHRha2UgdGhpcy4KKyAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3Rv
cmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAg
ICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBm
bGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQu
c3RvcmUodGhpcyk7CisgICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAg
ICAgICAgIC8vIFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMg
YWx3YXlzIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgor
ICAgICAgICAgICAgbV9zdXNwZW5kZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGVhc2UpOworICAgICAgICB9CisgICAgICAgIC0tbV9zdXNwZW5kQ291bnQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK3NpemVfdCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVnaXN0ZXJzKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1f
bXV0ZXgpOworI2lmIE9TKERBUldJTikKKyNpZiBDUFUoWDg2KQorICAgIHVuc2lnbmVkIHVzZXJD
b3VudCA9IHNpemVvZihyZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkK
KyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAg
dGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlm
IENQVShQUEMpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VO
VDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsK
KyNlbGlmIENQVShQUEM2NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NU
QVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJF
QURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJN
X1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0g
QVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291
bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90
IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNo
aXRlY3R1cmUKKyNlbmRpZgorCisgICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfZ2V0
X3N0YXRlKG1fcGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3Rl
cnMsICZ1c2VyQ291bnQpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAg
ICAgIFdURlJlcG9ydEZhdGFsRXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZV
TkNUSU9OLCAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZmFpbGVkIGJlY2F1c2UgdGhy
ZWFkX2dldF9zdGF0ZSByZXR1cm5lZCBhbiBlcnJvciAoJWQpLiBUaGlzIGlzIHByb2JhYmx5IHRo
ZSByZXN1bHQgb2YgcnVubmluZyBpbnNpZGUgUm9zZXR0YSwgd2hpY2ggaXMgbm90IHN1cHBvcnRl
ZC4iLCByZXN1bHQpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gdXNlckNv
dW50ICogc2l6ZW9mKHVpbnRwdHJfdCk7CisjZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChf
X0dMSUJDX18pKSAmJiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTSkgfHwgQ1BV
KEFSTTY0KSB8fCBDUFUoTUlQUykpCisgICAgcmVnaXN0ZXJzID0gbV9zdXNwZW5kZWRNYWNoaW5l
Q29udGV4dDsKKyAgICByZXR1cm4gc2l6ZW9mKFBsYXRmb3JtUmVnaXN0ZXJzKTsKKyNlbGlmIE9T
KE9QRU5CU0QpCisgICAgLy8gaHR0cDovL21hbi5vcGVuYnNkLm9yZy9wdGhyZWFkX3N0YWNrc2Vn
X25wLjMKKyAgICBzdGFja190IHNzOworICAgIGludCByYyA9IHB0aHJlYWRfc3RhY2tzZWdfbnAo
bV9oYW5kbGUsICZzcyk7CisgICAgcmVnaXN0ZXJzLnN0YWNrUG9pbnRlciA9IHNzLnNzX3NwOwor
ICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7CisgICAg
cHRocmVhZF9hdHRyX2luaXQoJmF0dHJpYnV0ZSk7CisjaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8
IE9TKE5FVEJTRCkKKyAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3Jn
CisgICAgcHRocmVhZF9hdHRyX2dldF9ucChtX2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZWxzZQor
ICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1wb3J0YWJsZTsgb3RoZXIgUE9TSVgg
c3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0ZXJuYXRpdmVzCisgICAgcHRocmVhZF9n
ZXRhdHRyX25wKG1faGFuZGxlLCAmYXR0cmlidXRlKTsKKyNlbmRpZgorCisgICAgdm9pZCogc3Rh
Y2tCYXNlID0gMDsKKyAgICBzaXplX3Qgc3RhY2tTaXplID0gMDsKKyAgICBpbnQgcmMgPSBwdGhy
ZWFkX2F0dHJfZ2V0c3RhY2soJmF0dHJpYnV0ZSwgJnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyYywgIXJjKTsKKyAgICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICBy
ZWdpc3RlcnMuc3RhY2tQb2ludGVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBz
dGFja1NpemU7CisKKyAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cmlidXRlKTsKKworICAg
IHJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2RpZEV4
aXQgPSB0cnVlOworfQorCit2b2lkIFRocmVhZDo6ZXN0YWJsaXNoKHB0aHJlYWRfdCBoYW5kbGUp
Cit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7Cisg
ICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAgaWYgKCFtX2lkKSB7CisgICAgICAgIHN0YXRpYyBz
dGQ6OmF0b21pYzxUaHJlYWRJZGVudGlmaWVyPiBwcm92aWRlciB7IDAgfTsKKyAgICAgICAgbV9p
ZCA9ICsrcHJvdmlkZXI7CisjaWYgT1MoREFSV0lOKQorICAgICAgICBtX3BsYXRmb3JtVGhyZWFk
ID0gcHRocmVhZF9tYWNoX3RocmVhZF9ucChoYW5kbGUpOworI2VuZGlmCiAgICAgfQotICAgIGlu
dCBlcnJObyA9IHB0aHJlYWRfa2lsbChwdGhyZWFkSGFuZGxlLCBzaWduYWxOdW1iZXIpOwotICAg
IHJldHVybiAhZXJyTm87IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNzLgogfQogCiBNdXRleDo6
TXV0ZXgoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggNTRiNDNlZmVmMzVjZDY2MzJhNzAw
ODE1MDdhNWIzNzk5ZGVmYjZmYi4uZGUxMTY2NDFjYjhkOTkxOTQzY2RiNDQ2OWZiNDZlZjk0NDc5
ZWNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC05NCw2ICs5NCw3IEBACiAKICNpbmNs
dWRlICJNYWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgi
CisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTEwOSw2ICsx
MTAsMTQgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK1RocmVhZDo6VGhyZWFkKCkKK3sKK30KKwor
VGhyZWFkOjp+VGhyZWFkKCkKK3sKK30KKwogLy8gTVNfVkNfRVhDRVBUSU9OLCBUSFJFQUROQU1F
X0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNvbWUgZnJvbSA8aHR0cDovL21z
ZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhzLmFzcHg+Lgogc3RhdGljIGNv
bnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CiAKQEAgLTEyMSw3ICsxMzAs
NyBAQCB0eXBlZGVmIHN0cnVjdCB0YWdUSFJFQUROQU1FX0lORk8gewogfSBUSFJFQUROQU1FX0lO
Rk87CiAjcHJhZ21hIHBhY2socG9wKQogCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVD
dXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQogewogI2lmIENP
TVBJTEVSKE1JTkdXKQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhyZWFkIG5hbWUgc2V0dGlu
ZyB3aXRoIE1pbmdXLgpAQCAtMTI5LDcgKzEzOCw3IEBAIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiAjZWxzZQogICAgIFRIUkVB
RE5BTUVfSU5GTyBpbmZvOwogICAgIGluZm8uZHdUeXBlID0gMHgxMDAwOwotICAgIGluZm8uc3pO
YW1lID0gbm9ybWFsaXplVGhyZWFkTmFtZShzelRocmVhZE5hbWUpOworICAgIGluZm8uc3pOYW1l
ID0gVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKHN6VGhyZWFkTmFtZSk7CiAgICAgaW5mby5k
d1RocmVhZElEID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAgICAgaW5mby5kd0ZsYWdzID0gMDsK
IApAQCAtMTQwLDcwICsxNDksMzkgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVy
bmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbmRpZgogfQogCi1zdGF0aWMgTXV0ZXgm
IHRocmVhZE1hcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11
dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KLQogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkK
IHsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkOwotICAgIAotICAgIGlmIChpc0luaXRp
YWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQot
ICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKLSAgICAvLyBTdHJpbmdJ
bXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRo
cmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6
ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0
ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgd3RmVGhy
ZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOwotfQotCi1zdGF0aWMgSGFzaE1hcDxE
V09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaE1hcDxEV09SRCwgSEFORExFPj4gbWFwOwotICAgIHJldHVybiBtYXA7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlh
bGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXpl
KCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgLy8g
U3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcg
aW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVl
biBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7Cisg
ICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgd3RmVGhy
ZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICB9KTsKIH0KIAotc3Rh
dGljIHZvaWQgc3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIoRFdPUkQgdGhyZWFkSUQsIEhB
TkRMRSB0aHJlYWRIYW5kbGUpCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVu
dHJ5UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1h
cE11dGV4KCkpOwotICAgIEFTU0VSVCghdGhyZWFkTWFwKCkuY29udGFpbnModGhyZWFkSUQpKTsK
LSAgICB0aHJlYWRNYXAoKS5hZGQodGhyZWFkSUQsIHRocmVhZEhhbmRsZSk7Ci19CisgICAgLy8g
QmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgorICAgIGF1
dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+
KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAKLXN0YXRp
YyBIQU5ETEUgdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQot
ewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICByZXR1cm4g
dGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KKyAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKmlu
dm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0gbnVsbHB0cjsKIAot
c3RhdGljIHZvaWQgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZp
ZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAg
IEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwotICAgIHRocmVhZE1hcCgpLnJlbW92
ZShpZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2lu
dCh2b2lkKiBwYXJhbSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uPiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+
KHBhcmFtKSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7Ci0K
ICAgICByZXR1cm4gMDsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5h
bChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJl
YWROYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5j
dGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogewor
ICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwogICAgIHVu
c2lnbmVkIHRocmVhZElkZW50aWZpZXIgPSAwOwogICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQgPSAwOwotICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50LCBkYXRhKTsKKyAgICBhdXRvIGludm9jYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwg
dGhyZWFkLnB0cigpLCBkYXRhKTsKICAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gcmVpbnRlcnBy
ZXRfY2FzdDxIQU5ETEU+KF9iZWdpbnRocmVhZGV4KDAsIDAsIHd0ZlRocmVhZEVudHJ5UG9pbnQs
IGludm9jYXRpb24uZ2V0KCksIDAsICZ0aHJlYWRJZGVudGlmaWVyKSk7CiAgICAgaWYgKCF0aHJl
YWRIYW5kbGUpIHsKICNpZiAhSEFWRShFUlJOT19IKQpAQCAtMjE5LDU1ICsxOTcsMTIwIEBAIFRo
cmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQ
b2ludCwgdm9pZCogZGF0YSwgY29uCiAgICAgVU5VU0VEX1BBUkFNKGxlYWtlZEludm9jYXRpb24p
OwogCiAgICAgdGhyZWFkSUQgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPih0aHJlYWRJ
ZGVudGlmaWVyKTsKLSAgICBzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcih0aHJlYWRJZGVu
dGlmaWVyLCB0aHJlYWRIYW5kbGUpOwogCi0gICAgcmV0dXJuIHRocmVhZElEOworICAgIHRocmVh
ZC0+ZXN0YWJsaXNoKHRocmVhZEhhbmRsZSwgdGhyZWFkSWRlbnRpZmllcik7CisgICAgcmV0dXJu
IHRocmVhZDsKIH0KIAotdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElELCBpbnQgZGVsdGEpCit2b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRl
bHRhKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxl
ID0gdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRI
YW5kbGUpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkb2VzIG5vdCBj
b3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQiLCB0aHJlYWRJRCk7Ci0KLSAgICBTZXRUaHJl
YWRQcmlvcml0eSh0aHJlYWRIYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0YSk7
CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAg
U2V0VGhyZWFkUHJpb3JpdHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklUWV9OT1JNQUwgKyBkZWx0
YSk7CiB9CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQoraW50IFRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24oKQogewotICAgIEFTU0VSVCh0
aHJlYWRJRCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBM
T0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFj
dGl2ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKLSAKLSAgICBEV09S
RCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRIYW5kbGUsIElORklOSVRF
KTsKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGhhbmRsZSA9IG1faGFuZGxlOwor
ICAgIH0KKworICAgIERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhhbmRs
ZSwgSU5GSU5JVEUpOwogICAgIGlmIChqb2luUmVzdWx0ID09IFdBSVRfRkFJTEVEKQotICAgICAg
ICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2Nr
ZWQgdHJ5aW5nIHRvIHF1aXQiLCB0aHJlYWRJRCk7CisgICAgICAgIExPR19FUlJPUigiVGhyZWFk
SWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIs
IG1faWQpOworCisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRl
eCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CiAKLSAgICBDbG9z
ZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwotICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cih0aHJlYWRJRCk7CisgICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIGRvIG5v
dGhpbmcuCisgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xl
YW4gYW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24g
aXQgc28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KKyAgICBpZiAoIWhhc0V4
aXRlZCgpKQorICAgICAgICBkaWRKb2luKCk7CiAKICAgICByZXR1cm4gam9pblJlc3VsdDsKIH0K
IAotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3ZvaWQgVGhy
ZWFkOjpkZXRhY2goKQoreworICAgIC8vIFdlIGZvbGxvdyB0aGUgcHRocmVhZCBzZW1hbnRpY3M6
IGV2ZW4gYWZ0ZXIgdGhlIGRldGFjaCBpcyBjYWxsZWQsCisgICAgLy8gd2UgY2FuIHN0aWxsIHBl
cmZvcm0gdmFyaW91cyBvcGVyYXRpb25zIG9udG8gdGhlIHRocmVhZC4gRm9yIGV4YW1wbGUsCisg
ICAgLy8gd2UgY2FuIGRvIHB0aHJlYWRfa2lsbCBmb3IgdGhlIGRldGFjaGVkIHRocmVhZC4gVGhl
IHByb2JsZW0gaW4gV2luZG93cworICAgIC8vIGlzIHRoYXQgY2xvc2luZyBIQU5ETEUgbG9zZXMg
dGhlIHdheSB0byBkbyBzdWNoIG9wZXJhdGlvbnMuCisgICAgLy8gVG8gZG8gc28sIHdlIGRvIG5v
dGhpbmcgaGVyZSBpbiBXaW5kb3dzLiBPcmlnaW5hbCBkZXRhY2gncyBwdXJwb3NlLAorICAgIC8v
IHJlbGVhc2luZyB0aHJlYWQgcmVzb3VyY2Ugd2hlbiB0aGUgdGhyZWFkIGV4aXRzLCB3aWxsIGJl
IGFjaGlldmVkIGJ5CisgICAgLy8gRmxzQ2FsbGJhY2sgYXV0b21hdGljYWxseS4gRmxzQ2FsbGJh
Y2sgd2lsbCBjYWxsIENsb3NlSGFuZGxlIHRvIGNsZWFuIHVwCisgICAgLy8gcmVzb3VyY2UuIFNv
IGluIHRoaXMgZnVuY3Rpb24sIHdlIGp1c3QgbWFyayB0aGUgdGhyZWFkIGFzIGRldGFjaGVkIHRv
CisgICAgLy8gYXZvaWQgY2FsbGluZyB3YWl0Rm9yQ29tcGxldGlvbiBmb3IgdGhpcyB0aHJlYWQu
CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAg
aWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKK30KKworYXV0
byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJv
cj4KK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsK
KyAgICBEV09SRCByZXN1bHQgPSBTdXNwZW5kVGhyZWFkKG1faGFuZGxlKTsKKyAgICBpZiAocmVz
dWx0ICE9IChEV09SRCktMSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQocmVzdWx0KTsKK30KKworLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciByZXN1
bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgordm9pZCBU
aHJlYWQ6OnJlc3VtZSgpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
ZXIobV9tdXRleCk7CisgICAgUmVzdW1lVGhyZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90IFRo
cmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCiB7Ci0gICAg
QVNTRVJUKHRocmVhZElEKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tl
cihtX211dGV4KTsKKyAgICByZWdpc3RlcnMuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VS
IHwgQ09OVEVYVF9DT05UUk9MOworICAgIEdldFRocmVhZENvbnRleHQobV9oYW5kbGUsICZyZWdp
c3RlcnMpOworICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7Cit9CisKK1RocmVhZCYgVGhyZWFk
OjpjdXJyZW50KCkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1
cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgpOwor
CisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5v
dCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5l
dyBUaHJlYWQoKSk7CisKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGJvb2wgaXNTdWNjZXNzZnVs
ID0gRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQo
KSwgR2V0Q3VycmVudFByb2Nlc3MoKSwgJmhhbmRsZSwgMCwgRkFMU0UsIERVUExJQ0FURV9TQU1F
X0FDQ0VTUyk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVsKTsKIAotICAgIEhBTkRM
RSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAg
ICBpZiAodGhyZWFkSGFuZGxlKQotICAgICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwot
ICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgdGhyZWFk
LT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7CisgICAgVGhyZWFkSG9sZGVyOjppbml0
aWFsaXplKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJuIHRocmVhZC5nZXQoKTsKIH0KIAotVGhy
ZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpj
dXJyZW50SUQoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihH
ZXRDdXJyZW50VGhyZWFkSWQoKSk7CiB9CiAKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2Rp
ZEV4aXQgPSB0cnVlOworICAgIC8vIEl0IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxsYmFj
ayB3aWxsIGJlIGNhbGxlZCBldmVuIGJlZm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRsZXMu
CisgICAgLy8gVGhpcyBlYXNpbHkgZW5zdXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291cmNl
cyBhcmUgYXV0b21hdGljYWxseSBjbG9zZWQuCisgICAgaWYgKG1faGFuZGxlKQorICAgICAgICBD
bG9zZUhhbmRsZShtX2hhbmRsZSk7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2goSEFORExF
IGhhbmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9s
b2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsK
KyAgICBtX2lkID0gdGhyZWFkSUQ7Cit9CisKIE11dGV4OjpNdXRleCgpCiB7CiAgICAgbV9tdXRl
eC5tX3JlY3Vyc2lvbkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtR
dWV1ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IGIyYTBhNzlmNGFi
NWFhYzI4OWIxNjlmOTJiYmMxYTgwNTg1MmNhMzIuLjk3MzBmY2YwZjA5MjFmZGVkOTBmODlmMTI5
MGU3NzQ5MGI1Mzk3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lk
IFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25zdCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKHNpegogCiAgICAgICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSh0aHJlYWRDb3VudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBl
bmQoY3JlYXRlVGhyZWFkKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQb29sIFdvcmtlciAldSIsIGkp
LnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVu
ZChUaHJlYWQ6OmNyZWF0ZShTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBp
KS51dGY4KCkuZGF0YSgpLCBbdGhpc10gewogICAgICAgICAgICAgICAgICAgICB0aHJlYWRCb2R5
KCk7CiAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgfQpAQCAtMTE0LDcgKzExNCw3
IEBAIHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNv
bnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAgICAgICAgIENvbmRpdGlvbiBtX2NvbmRpdGlv
bjsKICAgICAgICAgRGVxdWU8Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPio+IG1fcXVldWU7
CiAKLSAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fd29ya2VyczsKKyAgICAgICAg
VmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBtX3dvcmtlcnM7CiAgICAgfTsKIAogICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8VGhyZWFkUG9vbD4gdGhyZWFkUG9vbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKaW5k
ZXggYTQ3ZjIxZTIwZDMxYmM4YmY3MzE4ZjQxYjk1N2FiMzY2YzE5MTUwMy4uNzYzNDVjMDY5MzE2
NGY2OGNhNGIxYzY2NDQ4NGEyNzNjYzZlOGJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTEwMyw3ICsx
MDMsNyBAQCBjbGFzcyBXb3JrUXVldWUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25EaXNwYXRjaGVy
IHsKIAogICAgIEhBTkRMRSBtX3RpbWVyUXVldWU7CiAjZWxpZiBVU0UoR0xJQl9FVkVOVF9MT09Q
KSB8fCBVU0UoR0VORVJJQ19FVkVOVF9MT09QKQotICAgIFRocmVhZElkZW50aWZpZXIgbV93b3Jr
UXVldWVUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrUXVldWVUaHJlYWQ7CiAgICAg
TG9jayBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1f
aW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgUnVuTG9vcCogbV9ydW5Mb29wOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwIGIvU291cmNl
L1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCmluZGV4IDFhNzIxOWFkMjU5ZWQ3NTk3
MmE1YTQ1OGM1YzQ4NDk3YTM4OGU0ZDMuLjU5ZWUxZjg1YjQzNWNlMWE3MmY1MDUwZjRkZjYyZWZj
ZmJiYzgyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29h
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKQEAgLTQ5
LDE1ICs0OSwxNSBAQCBzdGF0aWMgZGlzcGF0Y2hfcW9zX2NsYXNzX3QgZGlzcGF0Y2hRT1NDbGFz
cyhXb3JrUXVldWU6OlFPUyBxb3MpCiB7CiAgICAgc3dpdGNoIChxb3MpIHsKICAgICBjYXNlIFdv
cmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmU6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKTsKKyAgICAgICAgcmV0dXJuIFRocmVh
ZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CiAgICAgY2Fz
ZSBXb3JrUXVldWU6OlFPUzo6VXNlckluaXRpYXRlZDoKLSAgICAgICAgcmV0dXJuIGFkanVzdGVk
UU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKTsKKyAgICAgICAgcmV0dXJuIFRocmVh
ZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOwogICAgIGNhc2Ug
V29ya1F1ZXVlOjpRT1M6OkRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNz
KFFPU19DTEFTU19ERUZBVUxUKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1ND
bGFzcyhRT1NfQ0xBU1NfREVGQVVMVCk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXRpbGl0
eToKLSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VUSUxJVFkpOwor
ICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZ
KTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kOgotICAgICAgICByZXR1cm4g
YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dST1VORCk7CisgICAgICAgIHJldHVybiBU
aHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOwogICAgIH0KIH0K
ICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVy
aWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcAppbmRl
eCA5MzRhMzhjYmJlNjRiYmZmYWViNGQzN2RmMWI4ZDk5NTJiODg1MzQ0Li5kYTg3NWQxZmEwNGNl
ZjUyNGIwZGMxODZiMzlhNDYyZDY4MDQ0NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9n
ZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMv
V29ya1F1ZXVlR2VuZXJpYy5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIHZvaWQgV29ya1F1ZXVlOjpw
bGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7Ci0gICAg
bV93b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVUaHJlYWQobmFtZSwgW3RoaXNdIHsKKyAgICBtX3dv
cmtRdWV1ZVRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKG5hbWUsIFt0aGlzXSB7CiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRp
b25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgpOwpA
QCAtNTEsOCArNTEsOCBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAg
ICBpZiAobV9ydW5Mb29wKQogICAgICAgICBtX3J1bkxvb3AtPnN0b3AoKTsKICAgICBpZiAobV93
b3JrUXVldWVUaHJlYWQpIHsKLSAgICAgICAgZGV0YWNoVGhyZWFkKG1fd29ya1F1ZXVlVGhyZWFk
KTsKLSAgICAgICAgbV93b3JrUXVldWVUaHJlYWQgPSAwOworICAgICAgICBtX3dvcmtRdWV1ZVRo
cmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gbnVsbHB0cjsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJl
SGFuZGxlckxpbnV4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFu
ZGxlckxpbnV4LmNwcAppbmRleCBiMjk0MTk0NDRlNzQyNzM2YTY3ZGMwYzFhYTg1MWRlYzNhZTU4
N2U0Li5mZmQ0MDA4NTViODI5M2E4YjVhM2MzYWViMjNhYjc3YWFmNWE3ZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3BwCkBA
IC0xMTksNyArMTE5LDEwIEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6RXZlbnRGRFBvbGxlcjo6
RXZlbnRGRFBvbGxlcihpbnQgZmQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoCiAgICAgfSwgdGhpcywg
bnVsbHB0cik7CiAgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBudWxscHRyKTsK
ICNlbHNlCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgiV1RGOiBNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIiLCBbdGhpc10geyByZWFkQW5kTm90aWZ5KCk7IH0KKyAgICBtX3RocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKCJXVEY6IE1lbW9yeVByZXNzdXJlSGFuZGxlciIsCisgICAgICAgIFt0aGlz
XSB7CisgICAgICAgICAgICByZWFkQW5kTm90aWZ5KCk7CisgICAgICAgIH0pOwogI2VuZGlmCiB9
CiAKQEAgLTEyOSw3ICsxMzIsNyBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xs
ZXI6On5FdmVudEZEUG9sbGVyKCkKICNpZiBVU0UoR0xJQikKICAgICBnX3NvdXJjZV9kZXN0cm95
KG1fc291cmNlLmdldCgpKTsKICNlbHNlCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQpOwor
ICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vTWFpblRo
cmVhZFdpbi5jcHAKaW5kZXggZjMyNGU4YjYxZGQ0MWZhMDU2MDg2M2I2YzU4MTkxMGY4NjdkMzZl
Yi4uYTY0NzNkMDdiNjdlYWNjODZiZTdhNGViNjk3NDk4OTNlYzYxNDk3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3dpbi9NYWluVGhyZWFkV2luLmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIGluaXRpYWxpemVN
YWluVGhyZWFkUGxhdGZvcm0oKQogICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZB
VUxULCAwLCBIV05EX01FU1NBR0UsIDAsIDAsIDApOwogICAgIHRocmVhZGluZ0ZpcmVkTWVzc2Fn
ZSA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZVcoTCJjb20uYXBwbGUuV2ViS2l0Lk1haW5UaHJlYWRG
aXJlZCIpOwogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCgiTWFpbiBUaHJl
YWQiKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoIk1haW4g
VGhyZWFkIik7CiB9CiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVh
ZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwCmluZGV4IDg3NDc2NDM4Y2FlNjVhNjM4N2Q5MDFhNzUyODgxNWVjOTU0N2Yy
MzIuLjljZDNkYjRkMWJjMTRhMzYxNzMyMWFiMDA1YTAxOTYyMDUyNzgyNzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
CkBAIC01Niw3ICs1Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKElEQkJhY2tpbmdTdG9yZVRl
bXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikKICAgICA6IG1fYmFja2luZ1N0b3JlVGVt
cG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRl
VGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRh
YmFzZSBTZXJ2ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNlcnZlcjo6
ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0K
IAogSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBh
dGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikKQEAg
LTY2LDcgKzY2LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmEKICAgICBMT0coSW5kZXhlZERC
LCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aC51
dGY4KCkuZGF0YSgpKTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRocmVh
ZENyZWF0aW9uTG9jayk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6
OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7Cisg
ICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50
cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9CiAKIHZvaWQgSURCU2VydmVy
OjpyZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCmluZGV4IDI1NmNkNTA3ZTZlNmQ3ZjY1NmVlY2UwYzExOTg5NDhmZDkyM2RhMWQuLjkzNGEx
ZDE3NDUyOTA4NDI4YTNhZTZlMGVkN2U1MTBhOWE5Y2E2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTEyNSw3ICsx
MjUsNyBAQCBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+IHsK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SURCQ29ubmVjdGlvblRvQ2xpZW50Pj4gbV9j
b25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlmaWVyLCBSZWZQdHI8
VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwOwogCi0gICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFk
IHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jazsKICAg
ICBMb2NrIG1fbWFpblRocmVhZFJlcGx5TG9jazsKICAgICBib29sIG1fbWFpblRocmVhZFJlcGx5
U2NoZWR1bGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKaW5kZXggMjkyZjA1YjhjZDUwNmUyMjlhZTZi
OGJkODYyOWMwOTU0ZDE4NDU5Yi4uN2NmN2FmOGZlYTJlMWU2N2Q1MjM3Yzg3MWEwMTViM2M0OTAw
YTI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1
ZGlvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3lu
Y0F1ZGlvRGVjb2Rlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgQXN5bmNBdWRpb0RlY29kZXI6OkFz
eW5jQXVkaW9EZWNvZGVyKCkKIHsKICAgICAvLyBTdGFydCB3b3JrZXIgdGhyZWFkLgogICAgIExv
Y2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkSUQgPSBj
cmVhdGVUaHJlYWQoQXN5bmNBdWRpb0RlY29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8g
RGVjb2RlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoQXN5bmNBdWRpb0RlY29k
ZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVjb2RlciIpOwogfQogCiBBc3luY0F1ZGlv
RGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKQEAgLTQ3LDggKzQ3LDggQEAgQXN5bmNBdWRp
b0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCiAgICAgbV9xdWV1ZS5raWxsKCk7CiAgICAg
CiAgICAgLy8gU3RvcCB0aHJlYWQuCi0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJl
YWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0
aW9uKCk7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2b2lkIEFzeW5jQXVkaW9EZWNv
ZGVyOjpkZWNvZGVBc3luYyhSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9hdCBzYW1w
bGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJl
ZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCkBAIC03Miw3ICs3Miw3
IEBAIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3AoKQogICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogCiAgICAgewotICAgICAgICAvLyBXYWl0IGZvciB1bnRpbCB3ZSBoYXZlIG1f
dGhyZWFkSUQgZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4gbG9vcC4KKyAgICAg
ICAgLy8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVhZCBlc3RhYmxpc2hlZCBiZWZvcmUg
c3RhcnRpbmcgdGhlIHJ1biBsb29wLgogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRD
cmVhdGlvbk11dGV4KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAppbmRleCBiYjVjNWUzMzdiNWVjZjFmOGU2MTc1
M2EyOWY4ZDBmOTcxNDE1NTNkLi5mMTI1MTBkMTk3YzNkZjk2Y2MwNTY4NTQ2Y2JjM2ZiNDZlYWFh
OGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVk
aW9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1
ZGlvRGVjb2Rlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEFzeW5jQXVkaW9EZWNvZGVyIHsK
ICAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKICAgICB2b2lk
IHJ1bkxvb3AoKTsKIAotICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAg
IFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIExvY2sgbV90aHJlYWRDcmVhdGlvbk11dGV4
OwogICAgIE1lc3NhZ2VRdWV1ZTxEZWNvZGluZ1Rhc2s+IG1fcXVldWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwCmluZGV4IDUwNTIzMDQxOTdjZGVkZGU0N2ZkY2JiOTEyZWM0NzQw
NTU3OTc0MjguLmU3ZDU2N2RmZWFkNDQyYzM5NmFmMGY3MDUxMDk3M2ZmZTE0OGFiMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgY29uc3Qgc2l6ZV90
IHJlbmRlclF1YW50dW1TaXplID0gMTI4OwogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpP
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBBdWRpb0J1
ZmZlciogcmVuZGVyVGFyZ2V0KQogICAgIDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwg
cmVuZGVyVGFyZ2V0LT5zYW1wbGVSYXRlKCkpCiAgICAgLCBtX3JlbmRlclRhcmdldChyZW5kZXJU
YXJnZXQpCi0gICAgLCBtX3JlbmRlclRocmVhZCgwKQorICAgICwgbV9yZW5kZXJUaHJlYWQobnVs
bHB0cikKICAgICAsIG1fc3RhcnRlZFJlbmRlcmluZyhmYWxzZSkKIHsKICAgICBtX3JlbmRlckJ1
cyA9IEF1ZGlvQnVzOjpjcmVhdGUocmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCksIHJl
bmRlclF1YW50dW1TaXplKTsKQEAgLTY2LDggKzY2LDggQEAgdm9pZCBPZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
X3JlbmRlclRocmVhZCkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3JlbmRl
clRocmVhZCk7Ci0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9yZW5kZXJU
aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gbnVs
bHB0cjsKICAgICB9CiAKICAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwpAQCAtODMsNyAr
ODMsNyBAQCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmco
KQogICAgIGlmICghbV9zdGFydGVkUmVuZGVyaW5nKSB7CiAgICAgICAgIG1fc3RhcnRlZFJlbmRl
cmluZyA9IHRydWU7CiAgICAgICAgIHJlZigpOyAvLyBTZWUgY29ycmVzcG9uZGluZyBkZXJlZigp
IGNhbGwgaW4gbm90aWZ5Q29tcGxldGVEaXNwYXRjaCgpLgotICAgICAgICBtX3JlbmRlclRocmVh
ZCA9IGNyZWF0ZVRocmVhZChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om9mZmxpbmVSZW5k
ZXJFbnRyeSwgdGhpcywgIm9mZmxpbmUgcmVuZGVyZXIiKTsKKyAgICAgICAgbV9yZW5kZXJUaHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZShPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om9mZmxpbmVS
ZW5kZXJFbnRyeSwgdGhpcywgIm9mZmxpbmUgcmVuZGVyZXIiKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oCmluZGV4IDc1NTYwNDY0NzIzMmM0YmM1MTNjYzllMzlkZDQ0NWYz
OGI2MmNlZjQuLjU2OTAxMzhiMTY1NzBiM2Y5ZDIzN2Y5ZGQ0YThlYTIzZDczZmZhYTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBPZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5vZGUgewogICAgIFJl
ZlB0cjxBdWRpb0J1cz4gbV9yZW5kZXJCdXM7CiAgICAgCiAgICAgLy8gUmVuZGVyaW5nIHRocmVh
ZC4KLSAgICB2b2xhdGlsZSBUaHJlYWRJZGVudGlmaWVyIG1fcmVuZGVyVGhyZWFkOworICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fcmVuZGVyVGhyZWFkOwogICAgIGJvb2wgbV9zdGFydGVkUmVuZGVyaW5n
OwogICAgIHN0YXRpYyB2b2lkIG9mZmxpbmVSZW5kZXJFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsK
ICAgICB2b2lkIG9mZmxpbmVSZW5kZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKaW5kZXggODg2OWY2YmYyMjMyMzJlNjNjYzNmYjUyZTE2
YWUxZGIzZWI0MWJlNi4uOGM5MmQ2ZTUzOTZhZGYxMmZiZGQ2OGQ3YWM5N2Y5ZWQxOWFkYzAxNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAK
QEAgLTc3MCw4ICs3NzAsNyBAQCBTZWN1cml0eU9yaWdpbkRhdGEgRGF0YWJhc2U6OnNlY3VyaXR5
T3JpZ2luKCkKIHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5
T3JpZ2luKG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLSAgICBhdXRvJiB0
aHJlYWQgPSBkYXRhYmFzZVRocmVhZCgpOwotICAgIGlmIChjdXJyZW50VGhyZWFkKCkgPT0gdGhy
ZWFkLmdldFRocmVhZElEKCkpCisgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZVRo
cmVhZCgpLmdldFRocmVhZElEKCkpCiAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6
OmZyb21TZWN1cml0eU9yaWdpbihtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCmluZGV4IDBk
ZGU1ZjcyNjhlZTY0MmMwMDQzMDVjZWZlMzZiMWM5ZTQ0Yjg3ZDMuLmQ3MDgxNGY5YjU1YjI0OGZk
NjRlMWFmZjQzZTM3Njc0ZjE2OTJkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCkBAIC02MCwxMiArNjAsMTIgQEAg
Ym9vbCBEYXRhYmFzZVRocmVhZDo6c3RhcnQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3Ro
cmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1fdGhy
ZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJl
YWQoRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBE
YXRhYmFzZSIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoRGF0YWJhc2VUaHJlYWQ6
OmRhdGFiYXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFzZSIpOwogCi0gICAg
cmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIERhdGFi
YXNlVGhyZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBj
bGVhbnVwU3luYykKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRh
YmFzZVRocmVhZCgpCiAgICAgLy8gQ2xlYW4gdXAgdGhlIGxpc3Qgb2YgYWxsIHBlbmRpbmcgdHJh
bnNhY3Rpb25zIG9uIHRoaXMgZGF0YWJhc2UgdGhyZWFkCiAgICAgbV90cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLT5zaHV0ZG93bigpOwogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRh
Y2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGlj
aCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNvdW50KCkp
OworICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xl
YXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSBy
ZWYocykiLCBtX3RocmVhZC0+aWQoKSwgdGhpcywgcmVmQ291bnQoKSk7CiAKICAgICAvLyBDbG9z
ZSB0aGUgZGF0YWJhc2VzIHRoYXQgd2UgcmFuIHRyYW5zYWN0aW9ucyBvbi4gVGhpcyBlbnN1cmVz
IHRoYXQgaWYgYW55IHRyYW5zYWN0aW9ucyBhcmUgc3RpbGwgb3BlbiwgdGhleSBhcmUgcm9sbGVk
IGJhY2sgYW5kIHdlIGRvbid0IGxlYXZlIHRoZSBkYXRhYmFzZSBpbiBhbgogICAgIC8vIGluY29u
c2lzdGVudCBvciBsb2NrZWQgc3RhdGUuCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBEYXRhYmFz
ZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBvcGVuRGF0YWJhc2UtPnBlcmZvcm1D
bG9zZSgpOwogCiAgICAgLy8gRGV0YWNoIHRoZSB0aHJlYWQgc28gaXRzIHJlc291cmNlcyBhcmUg
bm8gbG9uZ2VyIG9mIGFueSBjb25jZXJuIHRvIGFueW9uZSBlbHNlCi0gICAgZGV0YWNoVGhyZWFk
KG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKIAogICAgIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciogY2xlYW51cFN5bmMgPSBtX2NsZWFudXBTeW5jOwogCkBAIC0xNDIsNyAr
MTQyLDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNl
JiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0YWJhc2VTZXRNdXRl
eCk7CiAKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPmlkKCkpOwogICAgIEFTU0VSVCghbV9v
cGVuRGF0YWJhc2VTZXQuY29udGFpbnMoJmRhdGFiYXNlKSk7CiAgICAgbV9vcGVuRGF0YWJhc2VT
ZXQuYWRkKCZkYXRhYmFzZSk7CiB9CkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBEYXRhYmFzZVRo
cmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UmIGRhdGFiYXNlKQogewogICAgIExv
Y2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAotICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9
PSBtX3RocmVhZC0+aWQoKSk7CiAgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkgfHwgbV9vcGVu
RGF0YWJhc2VTZXQuY29udGFpbnMoJmRhdGFiYXNlKSk7CiAgICAgbV9vcGVuRGF0YWJhc2VTZXQu
cmVtb3ZlKCZkYXRhYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKaW5kZXggZWMwNDFlMzE4MTcyNDkyZWNhNmJjZWZl
OGYxZGEyNWVjOTJlZDI2Yy4uYTUyMTJkZmI4YjE3MmNlMmZmNmE5ODg4ZGUwYTlkYjk3N2FlMmQy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUaHJlYWQuaApAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4gewogCiAgICAgdm9pZCByZWNv
cmREYXRhYmFzZU9wZW4oRGF0YWJhc2UmKTsKICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2Vk
KERhdGFiYXNlJik7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJu
IG1fdGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1
cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KIAogICAgIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IHJldHVybiBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KIApAQCAtNjksNyArNjksNyBAQCBjbGFzcyBEYXRhYmFz
ZVRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4gewog
ICAgIHZvaWQgZGF0YWJhc2VUaHJlYWQoKTsKIAogICAgIExvY2sgbV90aHJlYWRDcmVhdGlvbk11
dGV4OwotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQdHI8
VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+
IG1fc2VsZlJlZjsKIAogICAgIE1lc3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAppbmRleCA2ZjlmY2E2
N2YzYzQ3YWRkYzgzZGVjOGNiMGQ1ZWI4Y2NiNDBkNzQzLi4xMzlhYTk5MWExNmVhZDIyZjY4ZjUw
MWJlN2I5NDU5NjMyMjEzNWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHAKQEAgLTEwMSwxNCArMTAxLDE0IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJi
YWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KCkKIAogdm9pZCBHQ0NvbnRyb2xsZXI6Omdh
cmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcoYm9vbCB3YWl0VW50aWxE
b25lKQogewotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoY29s
bGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOworICAgIFJlZlB0cjxUaHJlYWQ+IHRo
cmVhZCA9IFRocmVhZDo6Y3JlYXRlKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xsZXIi
KTsKIAogICAgIGlmICh3YWl0VW50aWxEb25lKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKHRocmVhZElEKTsKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsKKyAg
ICB0aHJlYWQtPmRldGFjaCgpOwogfQogCiB2b2lkIEdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlw
dEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXggMTY4ZTRlMjc3OTVkNDI1ZjQwNGYx
NzVjOWJjYmE5M2Y3MzY4MDc0Yy4uNTVjN2NiMDIzOTg1OTljOTcxZTZhMzdhMGY5YTcyNDg0ODQy
ZTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcApAQCAt
NzQsNyArNzQsNyBAQCBzdGF0aWMgdm9pZCBjYWxsT25GaWxlVGhyZWFkKEZ1bmN0aW9uPHZvaWQg
KCk+JiYgZnVuY3Rpb24pCiAKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgY3JlYXRlRmlsZVRo
cmVhZE9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2UoY3JlYXRlRmlsZVRocmVhZE9uY2UsIFtdIHsK
LSAgICAgICAgY3JlYXRlVGhyZWFkKCJXZWJDb3JlOiBBc3luY0ZpbGVTdHJlYW0iLCBbXSB7Cisg
ICAgICAgIFRocmVhZDo6Y3JlYXRlKCJXZWJDb3JlOiBBc3luY0ZpbGVTdHJlYW0iLCBbXSB7CiAg
ICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgQXV0b2RyYWluZWRQb29sIHBv
b2w7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmluZGV4
IDRjZGNmYWFkNmU4MzJhMzlhNWMzNTI2NTgwNTg1MDg2YjNkOWY3MmYuLmE0OGJmZjYwNTFmMGYx
NzRkYTE4ZDJmZjlkMzdhYjNiYzY2ODRmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBBU1NFUlRfTk9U
X1NZTkNfVEhSRUFEKCkgQVNTRVJUKCFtX3N5bmNUaHJlYWRSdW5uaW5nIHx8ICFJU19JQ09OX1NZ
TkNfVEhSRUFEKCkpCiAKIC8vIEZvciBtZXRob2RzIHRoYXQgYXJlIG1lYW50IHRvIHN1cHBvcnQg
dGhlIHN5bmMgdGhyZWFkIE9OTFkKLSNkZWZpbmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5
bmNUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpKQorI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFE
KCkgKG1fc3luY1RocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCkpCiAjZGVmaW5lIEFTU0VS
VF9JQ09OX1NZTkNfVEhSRUFEKCkgQVNTRVJUKElTX0lDT05fU1lOQ19USFJFQUQoKSkKIAogI2lm
IFBMQVRGT1JNKEdUSykKQEAgLTE0MSw3ICsxNDEsNyBAQCBib29sIEljb25EYXRhYmFzZTo6b3Bl
bihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAgICAv
LyBMb2NrIGhlcmUgYXMgd2VsbCBhcyBmaXJzdCB0aGluZyBpbiB0aGUgdGhyZWFkIHNvIHRoZSB0
aHJlYWQgZG9lc24ndCBhY3R1YWxseSBjb21tZW5jZSB1bnRpbCB0aGUgY3JlYXRlVGhyZWFkKCkg
Y2FsbCAKICAgICAvLyBjb21wbGV0ZXMgYW5kIG1fc3luY1RocmVhZFJ1bm5pbmcgaXMgcHJvcGVy
bHkgc2V0CiAgICAgbV9zeW5jTG9jay5sb2NrKCk7Ci0gICAgbV9zeW5jVGhyZWFkID0gY3JlYXRl
VGhyZWFkKEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlzLCAi
V2ViQ29yZTogSWNvbkRhdGFiYXNlIik7CisgICAgbV9zeW5jVGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoSWNvbkRhdGFiYXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJD
b3JlOiBJY29uRGF0YWJhc2UiKTsKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gbV9zeW5jVGhy
ZWFkOwogICAgIG1fc3luY0xvY2sudW5sb2NrKCk7CiAgICAgaWYgKCFtX3N5bmNUaHJlYWQpCkBA
IC0xNjEsNyArMTYxLDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OmNsb3NlKCkKICAgICAgICAgd2Fr
ZVN5bmNUaHJlYWQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBzeW5jIHRo
cmVhZCB0byB0ZXJtaW5hdGUKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9zeW5j
VGhyZWFkKTsKKyAgICAgICAgbV9zeW5jVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
IH0KIAogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBmYWxzZTsgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oCmluZGV4IDA2MWFmNGExMjU1NzcxZGUxMWEzMmY1
NjgzYzBlZmRhNTkyOTNiOWQuLjg2NDA5NTU0NzUzM2ZkODkwZjAzYWZlOTJiYjA2ZjYwODdlZTcz
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oCkBAIC0xMTks
NyArMTE5LDcgQEAgY2xhc3MgSWNvbkRhdGFiYXNlIGZpbmFsIDogcHVibGljIEljb25EYXRhYmFz
ZUJhc2UgewogICAgIHZvaWQgc3luY1RpbWVyRmlyZWQoKTsKICAgICAKICAgICBUaW1lciBtX3N5
bmNUaW1lcjsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fc3luY1RocmVhZDsKKyAgICBSZWZQdHI8
VGhyZWFkPiBtX3N5bmNUaHJlYWQ7CiAgICAgYm9vbCBtX3N5bmNUaHJlYWRSdW5uaW5nOwogICAg
IAogICAgIEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50TG9hZGVyPj4gbV9sb2FkZXJzUGVuZGluZ0Rl
Y2lzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhy
ZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKaW5k
ZXggOTEyMDBjMzQ1ZjQ1NWY5NmQ0OTRiZmQyYWQ3MDNmMjhjNWM2MjlkMS4uZDliNmY3MmZhMzZm
YTcwMGM4MjZmM2M5N2Q2YmFhMDJkNDJlOGI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c291cmNlVXNhZ2VUaHJlYWQuY3BwCkBAIC05NiwxMSArOTYsMTEgQEAgdm9pZCBSZXNvdXJjZVVz
YWdlVGhyZWFkOjpub3RpZnlPYnNlcnZlcnMoUmVzb3VyY2VVc2FnZURhdGEmJiBkYXRhKQogCiB2
b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAgICBp
ZiAobV90aHJlYWRJZGVudGlmaWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV92bSA9ICZjb21tb25WTSgpOwotICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNy
ZWF0ZVRocmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2Ui
KTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlzLCAi
V2ViQ29yZTogUmVzb3VyY2VVc2FnZSIpOwogfQogCiB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6
OnRocmVhZENhbGxiYWNrKHZvaWQqIHJlc291cmNlVXNhZ2VUaHJlYWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oCmluZGV4IDE4YTFlNjc1NDNkMjIwOWMxNzk1NzQ3
MzY2MjJhNzhiMzg0YmI4ZmMuLmVmZGUyN2VmZTZiMGFjNDU0NjRkZTg5MWM2N2NlNzlmOWNmMmUx
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oCkBAIC02Miw3
ICs2Miw3IEBAIGNsYXNzIFJlc291cmNlVXNhZ2VUaHJlYWQgewogICAgIHZvaWQgdGhyZWFkQm9k
eSgpOwogICAgIHZvaWQgcGxhdGZvcm1UaHJlYWRCb2R5KEpTQzo6Vk0qLCBSZXNvdXJjZVVzYWdl
RGF0YSYpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXIgeyAwIH07
CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgTG9jayBtX2xv
Y2s7CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIEhhc2hNYXA8dm9pZCosIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmKT4+IG1fb2JzZXJ2ZXJzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAK
aW5kZXggNzMwYzBhNmJkOTNmNDU3OGQxZWRiZjlhY2UxY2Q4NjU2NmU2Yzk4OC4uZDIwNzg0MDU2
MGRkZjkwNTkwYTBkYWRkMjczMDg0YzkxYzlmYjEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQo
KQotICAgIDogbV90aHJlYWRJZGVudGlmaWVyKDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQog
ewogfQogCiBib29sIFNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKCkKIHsKLSAgICBh
dXRvIHRocmVhZElkZW50aWZpZXIgPSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhy
ZWFkSWRlbnRpZmllcjsKLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllciAmJiBjdXJyZW50VGhy
ZWFkKCkgPT0gdGhyZWFkSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBT
Y3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkOworICAgIHJldHVybiB0aHJlYWQg
JiYgdGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdU
aHJlYWQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCkBAIC03NCwxNCAr
NzQsMTQgQEAgU2Nyb2xsaW5nVGhyZWFkJiBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpCiAK
IHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYg
KG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3Au
CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9pbml0aWFsaXpl
UnVuTG9vcE11dGV4KTsKIAotICAgICAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJl
YWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKKyAgICAgICAg
bV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6
IFNjcm9sbGluZyIpOwogICAgICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgbV9p
bml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdeyByZXR1
cm4gbV90aHJlYWRSdW5Mb29wOyB9KTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBTY3JvbGxpbmdU
aHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OnRo
cmVhZENhbGxiYWNrKHZvaWQqIHNjcm9sbGluZ1RocmVhZCkKIHsKLSAgICBXVEY6OnNldEN1cnJl
bnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50
VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxpbmdUaHJl
YWQqPihzY3JvbGxpbmdUaHJlYWQpLT50aHJlYWRCb2R5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXggZGUwNjJkNzdhYzAx
ZGY5ZDJhMDk4NjBlYmU2YjhlOWZkM2NmZjVjMC4uZDg4OTJmMDViZTY0MzdkNGFhY2MwYTc1MWE3
Y2E3ZTkzYmVlMGRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVGhyZWFkLmgKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgU2Nyb2xsaW5nVGhyZWFkIHsK
ICAgICB2b2lkIHRocmVhZFJ1bkxvb3BTb3VyY2VDYWxsYmFjaygpOwogI2VuZGlmCiAKLSAgICBU
aHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFkPiBt
X3RocmVhZDsKIAogICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFy
aWFibGU7CiAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAppbmRleCBm
NzEzMzNjNWEzN2E5OTg5NjRmM2E3NDFjNzMxNTJlOTUxNDY2Y2Y2Li5kZGJlM2JhOTgwZTQ1MGE0
OTRjZDA2NDhmNDFiNWUzNmFmZWViNWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgUGFz
c1JlZlB0cjxIUlRGRGF0YWJhc2VMb2FkZXI+IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5k
TG9hZEFzeW5jaHJvbm91c2x5SWYKIH0KIAogSFJURkRhdGFiYXNlTG9hZGVyOjpIUlRGRGF0YWJh
c2VMb2FkZXIoZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQo
MCkKKyAgICA6IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQobnVsbHB0cikKICAgICAsIG1fZGF0YWJh
c2VTYW1wbGVSYXRlKHNhbXBsZVJhdGUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
QEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZEFzeW5jaHJv
bm91c2x5KCkKICAgICAKICAgICBpZiAoIW1faHJ0ZkRhdGFiYXNlLmdldCgpICYmICFtX2RhdGFi
YXNlTG9hZGVyVGhyZWFkKSB7CiAgICAgICAgIC8vIFN0YXJ0IHRoZSBhc3luY2hyb25vdXMgZGF0
YWJhc2UgbG9hZGluZyBwcm9jZXNzLgotICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0g
Y3JlYXRlVGhyZWFkKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNlIGxv
YWRlciIpOworICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
ZGF0YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJhc2UgbG9hZGVyIik7CiAgICAg
fQogfQogCkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6OndhaXRG
b3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKCkKICAgICAKICAgICAvLyB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbigpIHNob3VsZCBub3QgYmUgY2FsbGVkIHR3aWNlIGZvciB0aGUgc2FtZSB0aHJlYWQu
CiAgICAgaWYgKG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQpOwotICAgIG1fZGF0YWJhc2VMb2FkZXJU
aHJlYWQgPSAwOworICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkLT53YWl0Rm9yQ29tcGxl
dGlvbigpOworICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBudWxscHRyOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0hSVEZEYXRhYmFzZUxvYWRlci5oCmluZGV4IGM4NjlkMTM3YTFkYjJmNTI0OThkMGUxYjY1ZDU4
N2U2YzgxOWIzODEuLjNhZDI1MWYyMTk5MDlmNGJjNjQ1NGQwMTMyMDFiNmE3Y2E3MDI2ODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRl
ci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEhSVEZEYXRhYmFzZUxvYWRlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEhSVEZEYXRhYmFzZUxvYWRlcj4gewogCiAgICAgLy8gSG9sZGluZyBhIG1fdGhy
ZWFkTG9jayBpcyByZXF1aXJlZCB3aGVuIGFjY2Vzc2luZyBtX2RhdGFiYXNlTG9hZGVyVGhyZWFk
LgogICAgIExvY2sgbV90aHJlYWRMb2NrOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9kYXRhYmFz
ZUxvYWRlclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFk
OwogCiAgICAgZmxvYXQgbV9kYXRhYmFzZVNhbXBsZVJhdGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKaW5kZXggOTZmMzMwODI4
MDc5YTc5YWQ2NDgyMGQwNzIxYzU5YzVlYTE2ZmRiMS4uMjFiZTk5NmVmMzdlNTNkYjcwMzEwMDE5
NjI3YzBjNDBkMmIyMTBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiQ29udm9sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9SZXZlcmJDb252b2x2ZXIuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgUmV2ZXJiQ29udm9sdmVy
OjpSZXZlcmJDb252b2x2ZXIoQXVkaW9DaGFubmVsKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVfdCBy
ZW5kZXJTbGkKICAgICAvLyBTdGFydCB1cCBiYWNrZ3JvdW5kIHRocmVhZAogICAgIC8vIEZJWE1F
OiB3b3VsZCBiZSBiZXR0ZXIgdG8gdXAgdGhlIHRocmVhZCBwcmlvcml0eSBoZXJlLiAgSXQgZG9l
c24ndCBuZWVkIHRvIGJlIHJlYWwtdGltZSwgYnV0IGhpZ2hlciB0aGFuIHRoZSBkZWZhdWx0Li4u
CiAgICAgaWYgKHRoaXMtPnVzZUJhY2tncm91bmRUaHJlYWRzKCkgJiYgbV9iYWNrZ3JvdW5kU3Rh
Z2VzLnNpemUoKSA+IDApCi0gICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IGNyZWF0ZVRocmVh
ZChXZWJDb3JlOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnksIHRoaXMsICJjb252b2x1dGlvbiBiYWNr
Z3JvdW5kIHRocmVhZCIpOworICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZShXZWJDb3JlOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnksIHRoaXMsICJjb252b2x1dGlvbiBi
YWNrZ3JvdW5kIHRocmVhZCIpOwogfQogCiBSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2
ZXIoKQpAQCAtMTQ2LDcgKzE0Niw3IEBAIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZvbHZl
cigpCiAgICAgICAgICAgICBtX2JhY2tncm91bmRUaHJlYWRDb25kaXRpb25WYXJpYWJsZS5ub3Rp
ZnlPbmUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1f
YmFja2dyb3VuZFRocmVhZCk7CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiQ29udm9sdmVyLmgKaW5kZXggNmJhZWI3Y2NlMjk4OTZjOTg5NjM1MTJmNDFiNDNh
MmYxMjg4NTQxYy4uMDU5NjMzNjdhZTI4MzQ5NDg3OTBiYTdjY2I3MjA2MGVjNTk4MTA3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKQEAg
LTg2LDcgKzg2LDcgQEAgY2xhc3MgUmV2ZXJiQ29udm9sdmVyIHsKIAogICAgIC8vIEJhY2tncm91
bmQgdGhyZWFkIGFuZCBzeW5jaHJvbml6YXRpb24KICAgICBib29sIG1fdXNlQmFja2dyb3VuZFRo
cmVhZHM7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2JhY2tncm91bmRUaHJlYWQ7CisgICAgUmVm
UHRyPFRocmVhZD4gbV9iYWNrZ3JvdW5kVGhyZWFkOwogICAgIGJvb2wgbV93YW50c1RvRXhpdDsK
ICAgICBib29sIG1fbW9yZUlucHV0QnVmZmVyZWQ7CiAgICAgbXV0YWJsZSBMb2NrIG1fYmFja2dy
b3VuZFRocmVhZE11dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcApp
bmRleCA2Y2Q4YmQ3ZjgxYmZmMjIyN2ZlMTRmYmNhMGZiZmQwNTVkMDljNTcxLi4xZjI1ZThlNTRl
OWVlODVmYTBjY2E2YTMxYjkyZTExMWU2ZGYwY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVh
ZGVyR1N0cmVhbWVyLmNwcApAQCAtMzcwLDIwICszNzAsMjAgQEAgUGFzc1JlZlB0cjxBdWRpb0J1
cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhU
b01vbm8KIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3Qg
Y2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAg
IFJlZlB0cjxBdWRpb0J1cz4gcmV0dXJuVmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0
ZVRocmVhZCgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRv
TW9ubywgc2FtcGxlUmF0ZV0geworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIkF1
ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBs
ZVJhdGVdIHsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIoZmlsZVBhdGgp
LmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0pOwotICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9u
KCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQYXNzUmVmUHRyPEF1ZGlvQnVzPiBj
cmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRh
dGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8
QXVkaW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQo
IkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01v
bm8sIHNhbXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJBdWRp
b0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBz
YW1wbGVSYXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVhZGVyKGRhdGEs
IGRhdGFTaXplKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9KTsKLSAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCAxYzVjMzBmMzc3YTQyYmUwMDE3
NzE2NTFlODdmNzA0M2E1ZDY1YzkwLi4yNjQ2NmY1M2I0ODIxOGQzMzdhNWE4OTRmMWRiNzI4ZGY0
YzQ3YzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApA
QCAtMTA4LDcgKzEwOCw3IEBAIGNsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDog
cHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtCiAgICAgICAgIHZvaWQg
d2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGNhbm5v
dFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKIAotICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyIG1fdGhyZWFkIHsgMCB9OworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7
IG51bGxwdHIgfTsKICAgICAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0
ZXg7CiAgICAgICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwogICAg
ICAgICBSdW5Mb29wKiBtX3J1bkxvb3AgeyBudWxscHRyIH07CkBAIC0xMDc3LDcgKzEwNzcsNyBA
QCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsCiAgICAgOiBTdHJlYW1pbmdDbGllbnQoc3JjKQogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7
Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoIlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CisgICAgbV90aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBbdGhpcywg
cmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKICAgICAgICAgewogICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKICAgICAg
ICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CkBAIC0xMTEzLDggKzExMTMs
OCBAQCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsCiBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCkKIHsKICAgICBpZiAobV90aHJlYWQp
IHsKLSAgICAgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkKTsKLSAgICAgICAgbV90aHJlYWQgPSAw
OworICAgICAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0
cjsKICAgICB9CiAKICAgICBpZiAobV9ydW5Mb29wID09ICZSdW5Mb29wOjpjdXJyZW50KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxv
b3BDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxv
b3BDRi5jcHAKaW5kZXggNDZiODk5NGE4NDFlZjcxZWEyNzljZTc3Y2JjOGZiNDNjMjlmMGE2Mi4u
ZmZiZmRhOWI4OTM0ODM1NDkwYzlhNDBiYTFmNDgzMzZlNDc2MGM4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcApA
QCAtNzcsNyArNzcsNyBAQCBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVuTG9vcCgpCiAgICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNMb2NrPiBsb2NrKGxvYWRlclJ1bkxvb3BNdXRleCk7CiAKICAgICBp
ZiAoIWxvYWRlclJ1bkxvb3BPYmplY3QpIHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKHJ1bkxvYWRl
clRocmVhZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsKKyAgICAgICAgVGhyZWFk
OjpjcmVhdGUocnVuTG9hZGVyVGhyZWFkLCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRlciIp
OwogCiAgICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFtd
IHsgcmV0dXJuIGxvYWRlclJ1bkxvb3BPYmplY3Q7IH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXgg
NDQwOGNkMTk4NzA1YmE4NmNjOGMxOTg2ZmIzZTJjYWRlNzk2ZGNjNi4uZjEwNTcxNWVkOGQ4Nzkz
NzNiNjMzMWNiMjZlMDgyYzNlMWFiOGIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKQEAgLTk0LDEwICs5NCwxMCBA
QCBpbnQgQ3VybERvd25sb2FkTWFuYWdlcjo6Z2V0UGVuZGluZ0Rvd25sb2FkQ291bnQoKSBjb25z
dAogdm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKIHsKICAg
ICBpZiAoIXJ1blRocmVhZCgpKSB7Ci0gICAgICAgIGlmIChtX3RocmVhZElkKQotICAgICAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7CisgICAgICAgIGlmIChtX3Ro
cmVhZCkKKyAgICAgICAgICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgICAg
ICBzZXRSdW5UaHJlYWQodHJ1ZSk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSBjcmVhdGVUaHJlYWQo
ZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOworICAgICAgICBtX3RocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJlYWQi
KTsKICAgICB9CiB9CiAKQEAgLTEwNSw5ICsxMDUsOSBAQCB2b2lkIEN1cmxEb3dubG9hZE1hbmFn
ZXI6OnN0b3BUaHJlYWQoKQogewogICAgIHNldFJ1blRocmVhZChmYWxzZSk7CiAKLSAgICBpZiAo
bV90aHJlYWRJZCkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElk
KTsKLSAgICAgICAgbV90aHJlYWRJZCA9IDA7CisgICAgaWYgKG1fdGhyZWFkKSB7CisgICAgICAg
IG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3RocmVhZCA9IG51bGxw
dHI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmgKaW5kZXggMDJjZTczMWJkMTBhODAxOWI3ZWJlMWZhYzUyYjQ1
ZTQwOTI1NjIzMS4uZjZiYmM3N2Y0ZDNjZTBiOTY4N2QxZDhmY2E2MDkxNTg3YzlhZTQ5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuaApAQCAtNjksNyArNjksNyBAQCBjbGFzcyBDdXJsRG93bmxvYWRNYW5hZ2VyIHsKIAogICAg
IHN0YXRpYyB2b2lkIGRvd25sb2FkVGhyZWFkKHZvaWQqIGRhdGEpOwogCi0gICAgVGhyZWFkSWRl
bnRpZmllciBtX3RocmVhZElkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIENV
UkxNKiBtX2N1cmxNdWx0aUhhbmRsZTsKICAgICBWZWN0b3I8Q1VSTCo+IG1fcGVuZGluZ0hhbmRs
ZUxpc3Q7CiAgICAgVmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZUltcGwuaAppbmRleCA3YmQ3YjJkMzcwMmY1ZjljZDU3MTM2MWUxY2JiODVlYjk3MTFl
OTJkLi44MmJiNGE4MDUwNDEwMzdjNWFlZWViMjg1ZjQyNjQ2ZmZkYzg4N2Q4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRT
dHJlYW1IYW5kbGVJbXBsLmgKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbCA6IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGUgewogICAgICAgICBzaXplX3Qgc2l6
ZSB7IDAgfTsKICAgICB9OwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtlclRocmVhZCB7
IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3dvcmtlclRocmVhZCB7IG51bGxwdHIgfTsKICAg
ICBzdGQ6OmF0b21pYzxib29sPiBtX3N0b3BUaHJlYWQgeyBmYWxzZSB9OwogICAgIExvY2sgbV9t
dXRleFNlbmQ7CiAgICAgTG9jayBtX211dGV4UmVjZWl2ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwCmluZGV4IDFlMzc5ZDFiMDBkMDk1NWZjMmRhMDBiZTNmOTZmOTkyYTkx
Yjk0M2YuLmVjYjlmNTRiNjVhMzM1MjRlM2EzNTZhM2JjMTNkMGUyZjZmNmFjYjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVJbXBsQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3RhcnRUaHJlYWQoKQogCiAgICAgcmVmKCk7IC8vIHN0
b3BUaHJlYWQoKSB3aWxsIGNhbGwgZGVyZWYoKS4KIAotICAgIG1fd29ya2VyVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKCJXZWJTb2NrZXQgdGhyZWFkIiwgW3RoaXNdIHsKKyAgICBtX3dvcmtlclRocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKCJXZWJTb2NrZXQgdGhyZWFkIiwgW3RoaXNdIHsKIAogICAgICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6c3RvcFRocmVhZCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fc3RvcFRocmVhZCA9IHRydWU7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV93b3Jr
ZXJUaHJlYWQpOwotICAgIG1fd29ya2VyVGhyZWFkID0gMDsKKyAgICBtX3dvcmtlclRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX3dvcmtlclRocmVhZCA9IG51bGxwdHI7CiAgICAg
ZGVyZWYoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCmluZGV4
IDdhZDViNTc5MTNhMTY3MmRmOTE5NmU5ZWIwMTMzZTIzZTIzMjk4NWQuLmRlZTZjZTZkNjczZDc2
YjQxZjI3NDU0MDRmYjA3OWYyMTk2NTNiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
clRocmVhZC5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6Oldv
cmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHIKIH0K
IAogV29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmlu
ZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBXb3Jr
ZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtlclRocmVhZFN0YXJ0
TW9kZSBzdGFydE1vZGUsIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
cyYgY29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLCBib29sIHNob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRv
cE9yaWdpbiwgTW9ub3RvbmljVGltZSB0aW1lT3JpZ2luLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Qcm94eSogY29ubmVjdGlvblByb3h5LCBTb2NrZXRQcm92aWRlciogc29ja2V0UHJvdmlkZXIs
IEpTQzo6UnVudGltZUZsYWdzIHJ1bnRpbWVGbGFncykKLSAgICA6IG1fdGhyZWFkSUQoMCkKKyAg
ICA6IG1fdGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxv
YWRlclByb3h5KQogICAgICwgbV93b3JrZXJSZXBvcnRpbmdQcm94eSh3b3JrZXJSZXBvcnRpbmdQ
cm94eSkKICAgICAsIG1fcnVudGltZUZsYWdzKHJ1bnRpbWVGbGFncykKQEAgLTEzMywxNSArMTMz
LDE1IEBAIFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCgpCiAKIGJvb2wgV29ya2VyVGhyZWFk
OjpzdGFydCgpCiB7Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5z
dXJlIHRoYXQgbV90aHJlYWRJRCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRz
LgorICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1f
dGhyZWFkIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCiAgICAgTG9ja0hv
bGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkK
KyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJ
RCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAi
V2ViQ29yZTogV29ya2VyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShXb3JrZXJU
aHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7CiAKLSAg
ICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgV29y
a2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2b2lkKiB0aHJlYWQpCkBAIC0xOTMsNyArMTkz
LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpCiAgICAgZ19tYWluX2NvbnRl
eHRfcG9wX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0LmdldCgpKTsKICNlbmRpZgogCi0gICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVh
ZD4gcHJvdGVjdG9yID0gbV90aHJlYWQ7CiAKICAgICBBU1NFUlQobV93b3JrZXJHbG9iYWxTY29w
ZS0+aGFzT25lUmVmKCkpOwogCkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6
OndvcmtlclRocmVhZCgpCiAgICAgdGhyZWFkR2xvYmFsRGF0YSgpLmRlc3Ryb3koKTsKIAogICAg
IC8vIFRoZSB0aHJlYWQgb2JqZWN0IG1heSBiZSBhbHJlYWR5IGRlc3Ryb3llZCBmcm9tIG5vdGlm
aWNhdGlvbiBub3csIGRvbid0IHRyeSB0byBhY2Nlc3MgInRoaXMiLgotICAgIGRldGFjaFRocmVh
ZCh0aHJlYWRJRCk7CisgICAgcHJvdGVjdG9yLT5kZXRhY2goKTsKIH0KIAogdm9pZCBXb3JrZXJU
aHJlYWQ6OnN0YXJ0UnVubmluZ0RlYnVnZ2VyVGFza3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyVGhyZWFkLmgKaW5kZXggMDdhZDNjZTc4NGY5MTlmNzBjNDU2ODFiOTU0YzAwOTk5NmY1NTdm
Mi4uZjgwOWVlNjY3MjdlZTEzOWRjNGYxOWQyY2I2MWIyMjY1ZTRlYTRiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIFdvcmtlclRo
cmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4gewogICAgIGJvb2wgc3RhcnQo
KTsKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBj
b25zdCB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAgICAg
V29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQogICAgIFdvcmtl
ckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2Vy
TG9hZGVyUHJveHk7IH0KICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5n
UHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OyB9CkBAIC05OCw3
ICs5OCw3IEBAIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRo
cmVhZD4gewogICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQqKTsKICAgICB2
b2lkIHdvcmtlclRocmVhZCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIFdvcmtlclJ1bkxvb3AgbV9ydW5Mb29w
OwogICAgIFdvcmtlckxvYWRlclByb3h5JiBtX3dvcmtlckxvYWRlclByb3h5OwogICAgIFdvcmtl
clJlcG9ydGluZ1Byb3h5JiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYktpdC9TdG9y
YWdlL1N0b3JhZ2VUaHJlYWQuY3BwCmluZGV4IGJiNjZmY2VhN2U1MjhiYzI3ZjYzM2EzZTUyODc4
YjUwMWVmMGUxODcuLjM1NzY3OTQ2YWRlMzcyYTQ3OTQ1Zjg1ZDNmODk1OGI1MjU0YWJlNDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAg
c3RhdGljIEhhc2hTZXQ8U3RvcmFnZVRocmVhZCo+JiBhY3RpdmVTdG9yYWdlVGhyZWFkcygpCiB9
CiAKIFN0b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQor
ICAgIDogbV90aHJlYWQobnVsbHB0cikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
fQpAQCAtNDgsMTYgKzQ4LDE2IEBAIFN0b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQoKQogU3Rv
cmFnZVRocmVhZDo6flN0b3JhZ2VUaHJlYWQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKCFtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkKTsKIH0K
IAogYm9vbCBTdG9yYWdlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2Vi
Q29yZTogTG9jYWxTdG9yYWdlIik7CisgICAgaWYgKCFtX3RocmVhZCkKKyAgICAgICAgbV90aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZShTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJh
Y2ssIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKICAgICBhY3RpdmVTdG9yYWdlVGhy
ZWFkcygpLmFkZCh0aGlzKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90
aHJlYWQ7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNr
KHZvaWQqIHRocmVhZCkKQEAgLTc4LDI1ICs3OCwyNSBAQCB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRo
cmVhZEVudHJ5UG9pbnQoKQogdm9pZCBTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2
b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
QVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV9x
dWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZCk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4oV1RGTW92ZShmdW5jdGlvbikpKTsKIH0KIAogdm9p
ZCBTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFT
U0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZCk7CiAgICAgYWN0aXZlU3RvcmFnZVRo
cmVhZHMoKS5yZW1vdmUodGhpcyk7CiAgICAgLy8gRXZlbiBpbiB3ZWlyZCwgZXhjZXB0aW9uYWwg
Y2FzZXMsIGRvbid0IHdhaXQgb24gYSBub25leGlzdGVudCB0aHJlYWQgdG8gdGVybWluYXRlLgot
ICAgIGlmICghbV90aHJlYWRJRCkKKyAgICBpZiAoIW1fdGhyZWFkKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uPHZvaWQgKCk+
PihbdGhpc10gewogICAgICAgICBwZXJmb3JtVGVybWluYXRlKCk7CiAgICAgfSkpOwotICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpKTsKLSAgICBtX3RocmVh
ZElEID0gMDsKKyAgICBtX3RocmVhZCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVh
ZDo6cGVyZm9ybVRlcm1pbmF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2Uv
U3RvcmFnZVRocmVhZC5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaApp
bmRleCA5NTY0YjhhYTA2ZTUyNDNlMzBlNDY3YzVmYmZlMmNkYWRiMjQwYzU2Li44Y2YxYjNkNGFk
YzVhMzA2YTc3ZWM3N2M5YzMyNjY2MTY4N2JlYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9y
YWdlVGhyZWFkLmgKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgU3RvcmFnZVRocmVhZCB7CiAgICAg
Ly8gQmFja2dyb3VuZCB0aHJlYWQgcGFydCBvZiB0aGUgdGVybWluYXRlIHByb2NlZHVyZS4KICAg
ICB2b2lkIHBlcmZvcm1UZXJtaW5hdGUoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJl
YWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBNZXNzYWdlUXVldWU8RnVu
Y3Rpb248dm9pZCAoKT4+IG1fcXVldWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggM2I4NWYyMmZmYWUwMWUyOGFhYjk5
ODE2Njk4YWRhZDdhMzg0M2M1Zi4uYjA0YWNjOGMzMWM1ZWNhODJhNTE3NDE2NjdkYjcwZTA1M2Yx
ZDJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcApAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiB7CiAg
ICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CiAKLSAgICBX
VEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKKyAgICBXVEY6OlRocmVhZDo6
c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCgpOwogCiAgICAgbV9zdXBwcmVzc01lbW9y
eVByZXNzdXJlSGFuZGxlciA9IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXI7CiAgICAgbV9sb2FkVGhyb3R0bGVMYXRlbmN5ID0gcGFyYW1ldGVycy5sb2FkVGhy
b3R0bGVMYXRlbmN5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAppbmRleCBlZjdi
YTg5OTgyMDIzMjU4OWU3MzkxZjI3ZmNkM2Q2ZTE2OWY2ODk0Li5mYTAzMGZiM2EyYTBmODJkNmEy
NDViZjg1NmIzNmFhMjczMjAwNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNw
cApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luY0luVGhyZWFkKHNp
emVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzCiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAKICAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsKHRoaXMp
OwotICAgIGRldGFjaFRocmVhZChjcmVhdGVUaHJlYWQoIklPQ2hhbm5lbDo6cmVhZFN5bmMiLCBb
Y2hhbm5lbCwgc2l6ZSwgcXVldWUsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgVGhyZWFkOjpj
cmVhdGUoIklPQ2hhbm5lbDo6cmVhZFN5bmMiLCBbY2hhbm5lbCwgc2l6ZSwgcXVldWUsIGNvbXBs
ZXRpb25IYW5kbGVyXSB7CiAgICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RkOjptaW4oc2l6
ZSwgZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CiAgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlckRhdGEg
PSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhidWZmZXJTaXplKSk7CiAgICAgICAg
IEdSZWZQdHI8U291cEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZlcl9u
ZXdfd2l0aF9vd25lcihidWZmZXJEYXRhLCBidWZmZXJTaXplLCBidWZmZXJEYXRhLCBmYXN0RnJl
ZSkpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luY0luVGhyZWFk
KHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzCiAgICAgICAg
ICAgICBEYXRhIGRhdGEgPSB7IFdURk1vdmUoYnVmZmVyKSB9OwogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZGF0YSwgMCk7CiAgICAgICAgIH0sIHF1ZXVlKTsKLSAgICB9KSk7CisgICAg
fSktPmRldGFjaCgpOwogfQogCiBzdHJ1Y3QgV3JpdGVBc3luY0RhdGEgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGJhZjUzMDY2YmUyMDA5ZTI2ZGJl
YjdhYzg4OGM0MDVlM2JkYmE2ZmYuLmIzODdiNmI0NDVlMzdkM2RhM2U4YTcyYzdjMGJhMzVjODYz
ZjI3MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKQEAg
LTY3NSw3ICs2NzUsNyBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Uo
c3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IG1lc3NhZ2UpCiAKICNpZiBIQVZFKFFPU19DTEFTU0VT
KQogICAgIGlmIChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkgJiYgbV9zaG91bGRCb29zdE1haW5U
aHJlYWRPblN5bmNNZXNzYWdlKSB7Ci0gICAgICAgIHB0aHJlYWRfb3ZlcnJpZGVfdCBvdmVycmlk
ZSA9IHB0aHJlYWRfb3ZlcnJpZGVfcW9zX2NsYXNzX3N0YXJ0X25wKG1fbWFpblRocmVhZCwgYWRq
dXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSksIDApOworICAgICAgICBw
dGhyZWFkX292ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFzc19z
dGFydF9ucChtX21haW5UaHJlYWQsIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1Nf
VVNFUl9JTlRFUkFDVElWRSksIDApOwogICAgICAgICBtZXNzYWdlLT5zZXRRT1NDbGFzc092ZXJy
aWRlKG92ZXJyaWRlKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRy
eVBvaW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMv
WFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCmluZGV4IDNiYjdjNmQ0N2Q0M2M2OTc2
YjAzY2ZmNzczNjQ0ZjQ4Nzg0OTNkNDEuLmYyM2RiNDNjMDIzNGRjN2M4MTA0OTUzZjA0ZWY4Nzk1
MmY5Yjg3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRp
bGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2Vy
dmljZUVudHJ5UG9pbnQuaApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgWFBDU2VydmljZUluaXRp
YWxpemVyKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19vYmpl
Y3RfCiAKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogICAgIGlmIChwYXJhbWV0ZXJzLmV4dHJhSW5p
dGlhbGl6YXRpb25EYXRhLmNvbnRhaW5zKEFTQ0lJTGl0ZXJhbCgiYWx3YXlzLXJ1bnMtYXQtYmFj
a2dyb3VuZC1wcmlvcml0eSIpKSkKLSAgICAgICAgc2V0R2xvYmFsTWF4UU9TQ2xhc3MoUU9TX0NM
QVNTX1VUSUxJVFkpOworICAgICAgICBUaHJlYWQ6OnNldEdsb2JhbE1heFFPU0NsYXNzKFFPU19D
TEFTU19VVElMSVRZKTsKICNlbmRpZgogCiAgICAgWFBDU2VydmljZVR5cGU6OnNpbmdsZXRvbigp
LmluaXRpYWxpemUocGFyYW1ldGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCmluZGV4IDA2MDhhYjcyZjk5
MjQ4ZWYyNGNkMmQ1MjQ1ZWU1MzMzYTAwZDlkMGQuLjQ4ZDEwNjk3NzY1YTk1YThiMzU4NzIzMGUx
MDJkODAzYWQ1OGMwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51
eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgTWVt
b3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IoKQogICAgIGlmIChtX2V2
ZW50RkQgPT0gLTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgiTWVtb3J5UHJlc3N1cmVNb25pdG9yIiwgW3Ro
aXNdIHsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiTWVtb3J5
UHJlc3N1cmVNb25pdG9yIiwgW3RoaXNdIHsKICAgICAgICAgZG91YmxlIHBvbGxJbnRlcnZhbCA9
IHNfbWF4UG9sbGluZ0ludGVydmFsSW5TZWNvbmRzOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICAgICAgc2xlZXAocG9sbEludGVydmFsKTsKQEAgLTI3MSw3ICsyNzEsNyBAQCBNZW1v
cnlQcmVzc3VyZU1vbml0b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgICAgIH0KICAg
ICAgICAgY2xvc2UobV9ldmVudEZEKTsKICAgICB9KTsKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFk
SWRlbnRpZmllcik7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogSVBDOjpBdHRhY2htZW50
IE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6Y3JlYXRlSGFuZGxlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGYxM2JjYTBkYzczM2QwOWUwMTQzYTk5
MGE0ZDQ3YWY0YWI0ZTg5NDguLjBlZmVlMjIxYWE0YzgyZWE2ZmI4NzAxNDgwYzc0MDI0MzUxODFi
ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMjU4LDcg
KzI1OCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgcGxhdGZvcm1Jbml0aWFsaXpl
V2ViUHJvY2VzcyhXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIAogICAgIC8vIE1hdGNoIHRoZSBRb1Mg
b2YgdGhlIFVJUHJvY2VzcyBhbmQgdGhlIHNjcm9sbGluZyB0aHJlYWQgYnV0IHVzZSBhIHNsaWdo
dGx5IGxvd2VyIHByaW9yaXR5LgotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVy
YWN0aXZlKC0xKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVy
YWN0aXZlKC0xKTsKIAogICAgIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJh
bWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIGlmICghbV9z
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcikgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQxMjA3M2FkMmQ1MDI3YzAzZDI4NjhiZjFmNTQx
ZjlhOWUxZGVmN2MuLjIyYzJlYTQ0MWMwMGRhMGEzMDA0ZDFiOGI4MmRhNmM4ZmE5YzJlMGIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMyBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRy
PFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFu
dGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBBUElzLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAgICAgIChy
dW5KYXZhU2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMpOgor
ICAgICAgICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgICh0ZXN0VGhyZWFkSWRlbnRpZmllck1h
cCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcDoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9QYXJraW5nTG90LmNwcDoKKwogMjAxNy0wNC0wOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgQ1NTUHJvcGVydGllcy5qc29uIHdpdGgg
Y29ycmVjdCBmaWxsLWFuZC1zdHJva2Ugc3RhdHVzLCBhbmQgb3RoZXIgY2xlYW51cApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcAppbmRleCBlMmY5YmFkZTZj
YTdjMjY5NDg1YTRjZGNiZTYwOTljMzZiYTAyMTk4Li43MTBkMmE1OWRhOTI5MDE2ZTYwOGE0Y2Y3
ZDk0NmZhODdmYWQ5MzJjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2Ny
aXB0VGhyZWFkaW5nLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhy
ZWFkaW5nLmNwcApAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgTG9jayYgamF2YVNjcmlwdFRocmVh
ZHNNdXRleCgpCiAgICAgcmV0dXJuIHN0YXRpY011dGV4OwogfQogCi10eXBlZGVmIEhhc2hTZXQ8
VGhyZWFkSWRlbnRpZmllcj4gVGhyZWFkU2V0OwordHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxUaHJl
YWQ+PiBUaHJlYWRTZXQ7CiBzdGF0aWMgVGhyZWFkU2V0JiBqYXZhU2NyaXB0VGhyZWFkcygpCiB7
CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFRocmVhZFNldCwgc3RhdGljSmF2
YVNjcmlwdFRocmVhZHMsICgpKTsKQEAgLTEwOCwxMCArMTA4LDEwIEBAIHZvaWQgcnVuSmF2YVNj
cmlwdFRocmVhZCh2b2lkKikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7Ci0gICAgICAgIFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkID0gY3VycmVudFRocmVhZCgpOwotICAgICAgICBkZXRhY2hUaHJlYWQo
dGhyZWFkKTsKLSAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5yZW1vdmUodGhyZWFkKTsKLSAg
ICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0
VGhyZWFkLCAwLCAwKSk7CisgICAgICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50
KCk7CisgICAgICAgIHRocmVhZC5kZXRhY2goKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMo
KS5yZW1vdmUoJnRocmVhZCk7CisgICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVh
ZDo6Y3JlYXRlKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgc3RhcnRKYXZhU2NyaXB0VGhyZWFkcygp
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytpKQotICAg
ICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFTY3JpcHRU
aHJlYWQsIDAsIDApKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhyZWFkOjpj
cmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKIH0KIAogdm9pZCBzdG9wSmF2YVNj
cmlwdFRocmVhZHMoKQpAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJl
YWRzKCkKICAgICAgICAgamF2YVNjcmlwdFRocmVhZHNTaG91bGRUZXJtaW5hdGUgPSB0cnVlOwog
ICAgIH0KIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyLCBqYXZhU2NyaXB0VGhyZWFkc0Nv
dW50PiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPiwgamF2YVNjcmlwdFRocmVh
ZHNDb3VudD4gdGhyZWFkczsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFT
Y3JpcHRUaHJlYWRzTXV0ZXgoKSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihqYXZhU2NyaXB0VGhy
ZWFkcygpLCB0aHJlYWRzKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0
VGhyZWFkcygpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0
VGhyZWFkc0NvdW50OyArK2kpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVh
ZHNbaV0pOworICAgICAgICB0aHJlYWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAg
ewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGZiNGQyNmZj
Y2ViNzBjNGI1MzIwMTBkYTg1ZmI5Y2U3ODU1YzEzODQuLjNjZWFhNmYzZTY1NzM1ZDMwZWYxYTRm
ODk3ZDVlNjljNGZhNWZmMDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9E
dW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0KQEAgLTEwNzIsOCArMTA3Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RUaHJlYWRJZGVu
dGlmaWVyTWFwKCkKICAgICBwdGhyZWFkX2pvaW4ocHRocmVhZCwgMCk7CiAKICAgICAvLyBOb3cg
Y3JlYXRlIGFub3RoZXIgdGhyZWFkIHVzaW5nIFdURi4gT24gT1NYLCBpdCB3aWxsIGhhdmUgdGhl
IHNhbWUgcHRocmVhZCBoYW5kbGUKLSAgICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBU
aHJlYWRJZGVudGlmaWVyLgotICAgIGNyZWF0ZVRocmVhZChydW5UaHJlYWQsIDAsICJEdW1wUmVu
ZGVyVHJlZTogdGVzdCIpOworICAgIC8vIGJ1dCBzaG91bGQgZ2V0IGEgZGlmZmVyZW50IFJlZlB0
cjxUaHJlYWQ+LgorICAgIFRocmVhZDo6Y3JlYXRlKHJ1blRocmVhZCwgMCwgIkR1bXBSZW5kZXJU
cmVlOiB0ZXN0Iik7CiB9CiAKIHN0YXRpYyB2b2lkIGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMo
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKaW5kZXggODQ4
NTI3MzUxZjYwNjNmYzI2MzY4NzgwNTZkOWMyNGRiYWJlODNkYy4uNzcyMTYzNmI3NzgwN2YxMzk1
MWVhMTEyZmJkNDEzZThmYWM0NjBiYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Db25kaXRpb24uY3BwCkBAIC04OSwxNCArODksMTQgQEAgdm9pZCBydW5UZXN0KAogICAgIENv
bmRpdGlvbiBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25kaXRpb24gZnVsbENvbmRpdGlvbjsKIAot
ICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1lclRocmVhZHM7Ci0gICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRo
cmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1
Y2VyVGhyZWFkczsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7CiAgICAgTG9jayBy
ZWNlaXZlZExvY2s7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQ29uc3VtZXJzOyBp
LS07KSB7Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0
ZVRocmVhZCgKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA9IFRocmVh
ZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkNvbnN1bWVyIHRocmVhZCIsCiAgICAgICAgICAgICBb
Jl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlDb25kaXRpb24s
IGxvY2tlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hl
Y2tpbmcgY29uc3VtcHRpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91
bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJl
YWQ6OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcgY29uc3VtcHRpb24gcHJlZGljYXRlIHdpdGggc2hv
dWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1
ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIXNob3VsZENvbnRpbnVlIHx8ICFxdWV1ZS5pc0VtcHR5KCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKQEAg
LTEzMSw3ICsxMzEsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgc2xlZXAoZGVsYXkpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtUHJvZHVjZXJzOyBpLS07KSB7Ci0gICAgICAgIFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgUmVmUHRy
PFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAg
IlByb2R1Y2VyIFRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsK
QEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVsbENvbmRpdGlvbiwgbG9ja2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxk
Q29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVl
LnNpemUoKSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBxdWV1ZS5zaXplKCkgPCBtYXhRdWV1ZVNpemU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
b3V0KTsKQEAgLTE1NSw4ICsxNTUsOCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgIHByb2R1Y2Vy
VGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CiAgICAgfQogCi0gICAgZm9yIChUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCi0gICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIGZvciAoUmVm
UHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKKyAgICAgICAg
dGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihsb2NrKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgfQogICAgIGVtcHR5Q29uZGl0aW9uLm5vdGlmeUFsbCgpOwogCi0g
ICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVh
ZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOwor
ICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IGNvbnN1bWVyVGhyZWFk
cykKKyAgICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAg
IEVYUEVDVF9FUShudW1Qcm9kdWNlcnMgKiBudW1NZXNzYWdlc1BlclByb2R1Y2VyLCByZWNlaXZl
ZC5zaXplKCkpOwogICAgIHN0ZDo6c29ydChyZWNlaXZlZC5iZWdpbigpLCByZWNlaXZlZC5lbmQo
KSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCmluZGV4IDU1NzYzMDJkNjkw
ZGZjYTM1OTkyOTI4YjFjODUzYzc2MjJlNDVmYjkuLjZhNGU1MzhmNTZmNDZkMTc3YTNmNjJmMWRk
ZWIzYTRkMGFmMmFmMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0xvY2suY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCkBA
IC00NiwxMyArNDYsMTMgQEAgdm9pZCBydW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91
cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cCwgdW5zaWduZWQKIHsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TG9ja1R5cGVbXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPExvY2tUeXBlW10+
KG51bVRocmVhZEdyb3Vwcyk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiB3b3JkcyA9
IHN0ZDo6bWFrZV91bmlxdWU8ZG91YmxlW10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8
VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXAp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZWZQdHI8VGhyZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRz
UGVyR3JvdXApOwogCiAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRHcm91cEluZGV4ID0gbnVtVGhy
ZWFkR3JvdXBzOyB0aHJlYWRHcm91cEluZGV4LS07KSB7CiAgICAgICAgIHdvcmRzW3RocmVhZEdy
b3VwSW5kZXhdID0gMDsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVt
VGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgdGhyZWFkc1t0
aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gY3Jl
YXRlVGhyZWFkKAorICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhy
ZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAg
ICAgICAgIkxvY2sgdGVzdCB0aHJlYWQiLAogICAgICAgICAgICAgICAgIFt0aHJlYWRHcm91cElu
ZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRpY2FsU2VjdGlv
bl0gKCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JdGVyYXRp
b25zOyBpLS07KSB7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgcnVuTG9ja1Rlc3QodW5zaWduZWQg
bnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1UaHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVkCiAg
ICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAq
IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAgdGhyZWFkc1t0aHJl
YWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICBkb3VibGUgZXhwZWN0ZWQgPSAw
OwogICAgIGZvciAodWludDY0X3QgaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1JdGVyYXRp
b25zKSAqIHdvcmtQZXJDcml0aWNhbFNlY3Rpb24gKiBudW1UaHJlYWRzUGVyR3JvdXA7IGktLTsp
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCmluZGV4IGM2
N2UxZTA4MTVhODNhZmE5MzMzZTJhYzlhMmJkNzhiNjdiMTY0NWIuLjVhZjljN2M4MjdiMjFlMjFk
OGRmOTMwNTI2MGQ2ZmZlZTY4ZmJkMWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1BhcmtpbmdMb3QuY3BwCkBAIC00OCwxNiArNDgsMTQgQEAgc3RydWN0IFNpbmdsZUxhdGNo
VGVzdCB7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1UaHJlYWRzOyBp
LS07KSB7CiAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBjcmVh
dGVUaHJlYWQoCisgICAgICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAg
ICAgICAgICJQYXJraW5nIFRlc3QgVGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgWyZdICgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9ORSgwdSwgY3VycmVudFRocmVhZCgp
KTsKLQogICAgICAgICAgICAgICAgICAgICAgICAgZG93bigpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXdha2UuYWRkKGN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsYXN0QXdva2VuID0gY3VycmVudFRocmVhZCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXdha2UuYWRkKFRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3RBd29rZW4gPSAmVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5X29uZSgpOwogICAgICAgICAgICAgICAgICAgICB9
KSk7CiAgICAgICAgIH0KQEAgLTY1LDE2ICs2MywxNiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0
IHsKIAogICAgIHZvaWQgdW5wYXJrT25lKHVuc2lnbmVkIHNpbmdsZVVucGFya0luZGV4KQogICAg
IHsKLSAgICAgICAgRVhQRUNUX0VRKDB1LCBsYXN0QXdva2VuKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUobnVsbHB0ciA9PSBsYXN0QXdva2VuKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIG51
bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllciwg
OD4gcXVldWU7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPiwgOD4gcXVldWU7CiAgICAg
ICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAg
WyZdIChUaHJlYWQmIHRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAg
ICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQodGhyZWFkSWRlbnRp
Zmllcik7CisgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKCZ0aHJlYWRJZGVudGlmaWVyKTsK
IAogICAgICAgICAgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MrKzsKICAgICAgICAgICAgIH0p
OwpAQCAtODcsMTIgKzg1LDEyIEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CiAgICAgICAgICAg
ICB3aGlsZSAoYXdha2Uuc2l6ZSgpIDwgc2luZ2xlVW5wYXJrSW5kZXggKyAxKQogICAgICAgICAg
ICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlcik7Ci0gICAgICAgICAgICBFWFBFQ1RfTkUoMHUs
IGxhc3RBd29rZW4pOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobnVsbHB0ciAhPSBsYXN0QXdv
a2VuKTsKICAgICAgICAgICAgIGlmICghcXVldWUuaXNFbXB0eSgpICYmIHF1ZXVlWzBdICE9IGxh
c3RBd29rZW4pIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJXb2tlIHVwIHdyb25nIHRocmVh
ZDogcXVldWUgPSAiLCBsaXN0RHVtcChxdWV1ZSksICIsIGxhc3QgYXdva2VuID0gIiwgbGFzdEF3
b2tlbiwgIlxuIik7CiAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKHF1ZXVlWzBdLCBsYXN0QXdv
a2VuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxhc3RBd29rZW4gPSAwOworICAgICAg
ICAgICAgbGFzdEF3b2tlbiA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwMCw3
ICs5OCw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgIHsKICAgICAgICAgdW5zaWdu
ZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2go
Ci0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3Mp
IHsKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVzcykgewogICAg
ICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAKQEAgLTExNCw3ICsxMTIsNyBAQCBzdHJ1Y3Qg
U2luZ2xlTGF0Y2hUZXN0IHsKIAogICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAg
ICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRp
ZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBj
b25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNl
bWFwaG9yZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCkBAIC0x
MjksOCArMTI3LDggQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uLndhaXQobG9ja2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogdGhyZWFkcykKLSAgICAgICAgICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgICAgICBmb3IgKFJlZlB0
cjxUaHJlYWQ+IHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQorICAgICAgICAgICAgdGhyZWFk
SWRlbnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICAvLyBTZW1hcGhv
cmUgb3BlcmF0aW9ucy4KQEAgLTE3OSw5ICsxNzcsOSBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0
IHsKICAgICBBdG9taWM8aW50PiBzZW1hcGhvcmU7CiAgICAgc3RkOjptdXRleCBsb2NrOwogICAg
IHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIGNvbmRpdGlvbjsKLSAgICBIYXNoU2V0PFRocmVhZElk
ZW50aWZpZXI+IGF3YWtlOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwot
ICAgIFRocmVhZElkZW50aWZpZXIgbGFzdEF3b2tlbiB7IDAgfTsKKyAgICBIYXNoU2V0PFJlZjxU
aHJlYWQ+PiBhd2FrZTsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CisgICAg
UmVmUHRyPFRocmVhZD4gbGFzdEF3b2tlbiB7IG51bGxwdHIgfTsKIH07CiAKIHZvaWQgcnVuUGFy
a2luZ1Rlc3QodW5zaWduZWQgbnVtTGF0Y2hlcywgdW5zaWduZWQgZGVsYXksIHVuc2lnbmVkIG51
bVRocmVhZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVucGFya3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306620</attachid>
            <date>2017-04-09 06:15:49 -0700</date>
            <delta_ts>2017-04-11 01:19:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170502-20170409221548.patch</filename>
            <type>text/plain</type>
            <size>228783</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OTkxYzE0NWRlZjdhNjY1OTliNDJkODdkOWM0ZmUyY2I0M2M2Njk3Li41Mjc5Y2QxMDUzN2MyOWY3
ZTM5MGVjYmY0MGJiYTgyMDI0NjMzNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGlu
ZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZElmRm91bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhy
ZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6
c3RhY2tQb2ludGVyKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpS
ZWdpc3RlcnM6OmZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpK
U1RocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQyk6CisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgIChw
dGhyZWFkU2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp0aHJlYWREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OnJlc3Vt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpn
ZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmZyZWVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OnJlc3VtZSk6CisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpKU1RocmVhZDo6dGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJl
YWRzOjpKU1RocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6
dGhyZWFkc0xpc3RIZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQ6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpyZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpnZXRSZWdpc3RlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6Y2FwdHVyZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OlRocmVhZDo6cGxhdGZvcm1UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0Jhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpzdGFja0VuZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L0lDU3RhdHMuY3BwOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjpJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6fklDU3RhdHMpOgorICAgICAgICAqIGppdC9JQ1N0
YXRzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRT
dGFydCk6CisgICAgICAgIChzdGFydFRpbWVvdXRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgICog
cnVudGltZS9KU0xvY2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChKU0M6OkpTTG9jazo6b3duZXJUaHJlYWQp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAg
ICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGcmFt
ZVdhbGtlcjo6aXNWYWxpZEZyYW1lUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVy
OjpjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06Om93bmVyVGhyZWFkKToK
KyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAgICAoSlNDOjpmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6
c2VuZCk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmZpcmVUcmFwKToKKwogMjAxNy0wNC0wOCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUlRDIHRlc3Rz
IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCA3MzQ4N2JhMWRkMDAwOWU0NzA0YTdkMTUzMGIxMTNkMzMzZjE2OTdk
Li44MDI5OGE5ZmMwMGI4YzY2NTkwMDM3M2Y2Y2I1MzRkODIwYzkzNWMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5MSBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRy
PFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFu
dGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyBvZiBXVEYgVGhyZWFkaW5nIG1l
Y2hhbmlzbSB0byBtZXJnZSBKYXZhU2NyaXB0Q29yZSdzIHRocmVhZGluZyBleHRlbnNpb24gdG8g
V1RGIFRocmVhZGluZy4KKyAgICAgICAgUHJldmlvdXNseSwgSmF2YVNjcmlwdENvcmUgcmVxdWly
ZXMgcmljaGVyIHRocmVhZGluZyBmZWF0dXJlcyAoc3VjaCBhcyBzdXNwZW5kaW5nIGFuZCByZXN1
bWluZyB0aHJlYWRzKSwgYW5kIHRoZXkKKyAgICAgICAgYXJlIGltcGxlbWVudGVkIGZvciBQbGF0
Zm9ybVRocmVhZCBpbiBKYXZhU2NyaXB0Q29yZS4gQnV0IHRoZXNlIGZlYXR1cmVzIHNob3VsZCBi
ZSBpbXBsZW1lbnRlZCBpbiBXVEYgVGhyZWFkaW5nIHNpZGUKKyAgICAgICAgaW5zdGVhZCBvZiBt
YWludGFpbmluZyBKU0MncyBvd24gdGhyZWFkaW5nIGZlYXR1cmVzIHRvby4gVGhpcyBwYXRjaCBy
ZW1vdmVzIHRoZXNlIGZlYXR1cmVzIGZyb20gSlNDIGFuZCBtb3ZlIGl0IHRvCisgICAgICAgIFdU
RiBUaHJlYWRpbmcuCisKKyAgICAgICAgSG93ZXZlciwgY3VycmVudCBXVEYgVGhyZWFkaW5nIGhh
cyBvbmUgcHJvYmxlbTogV2luZG93cyB2ZXJzaW9uIG9mIFdURiBUaHJlYWRpbmcgaGFzIGRpZmZl
cmVudCBzZW1hbnRpY3MgZnJvbSBQdGhyZWFkcworICAgICAgICBvbmUuIEluIFdpbmRvd3MgV1RG
IFRocmVhZGluZywgd2UgY2Fubm90IHBlcmZvcm0gYW55IG9wZXJhdGlvbiBhZnRlciB0aGUgdGFy
Z2V0IHRocmVhZCBpcyBkZXRhY2hlZDogV1RGIFRocmVhZGluZyBzdG9wCisgICAgICAgIHRyYWNr
aW5nIHRoZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIG9uY2UgdGhlIHRocmVhZCBpcyBkZXRhY2hlZC4g
QnV0IHRoaXMgaXMgbm90IHRoZSBzYW1lIHRvIFB0aHJlYWRzIG9uZS4gSW4gUHRocmVhZHMsCisg
ICAgICAgIHB0aHJlYWRfZGV0YWNoIGp1c3QgbWVhbnMgdGhhdCB0aGUgcmVzb3VyY2Ugb2YgdGhl
IHRocmVhZCB3aWxsIGJlIGRlc3Ryb3llZCBhdXRvbWF0aWNhbGx5LiBXaGlsZSBzb21lIG9wZXJh
dGlvbnMgbGlrZQorICAgICAgICBwdGhyZWFkX2pvaW4gd2lsbCBiZSByZWplY3RlZCwgc29tZSBv
cGVyYXRpb25zIGxpa2UgcHRocmVhZF9raWxsIHdpbGwgYmUgYWNjZXB0ZWQuCisKKyAgICAgICAg
VGhlIHByb2JsZW0gaXMgdGhhdCBkZXRhY2hlZCB0aHJlYWQgY2FuIGJlIHN1c3BlbmRlZCBhbmQg
cmVzdW1lZCBpbiBKU0MuIEZvciBleGFtcGxlLCBpbiBqc2MuY3BwLCB3ZSBzdGFydCB0aGUgd29y
a2VyCisgICAgICAgIHRocmVhZCBhbmQgZGV0YWNoIGl0IGltbWVkaWF0ZWx5LiBJbiB3b3JrZXIg
dGhyZWFkLCB3ZSB3aWxsIGNyZWF0ZSBWTSBhbmQgdGh1cyBjb25jdXJyZW50IEdDIHdpbGwgc3Vz
cGVuZCBhbmQgcmVzdW1lCisgICAgICAgIHRoZSBkZXRhY2hlZCB0aHJlYWQuIEhvd2V2ZXIsIGlu
IFdpbmRvd3MgV1RGIFRocmVhZGluZywgd2UgaGF2ZSBubyByZWZlcmVuY2UgdG8gdGhlIGRldGFj
aGVkIHRocmVhZC4gVGh1cyB3ZSBjYW5ub3QKKyAgICAgICAgcGVyZm9ybSBzdXNwZW5kIGFuZCBy
ZXN1bWUgb3BlcmF0aW9ucyBvbnRvIHRoZSBkZXRhY2hlZCB0aHJlYWQuCisKKyAgICAgICAgVG8g
c29sdmUgdGhlIHByb2JsZW0sIHdlIGNoYW5nZSBXaW5kb3dzIFRocmVhZGluZyBtZWNoYW5pc20g
ZHJhc3RpY2FsbHkgdG8gYWxpZ24gaXQgdG8gdGhlIFB0aHJlYWQgc2VtYW50aWNzLiBJbiB0aGUK
KyAgICAgICAgbmV3IFRocmVhZGluZywgd2UgaGF2ZSBSZWZQdHI8VGhyZWFkPiBjbGFzcy4gSXQg
aG9sZHMgYSBoYW5kbGUgdG8gYSBwbGF0Zm9ybSB0aHJlYWQuIFdlIGNhbiBwZXJmb3JtIHRocmVh
ZGluZyBvcGVyYXRpb25zCisgICAgICAgIHdpdGggdGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsIFRo
cmVhZDo6c3VzcGVuZCBpcyBvZmZlcmVkLiBBbmQgd2UgdXNlIGRlc3RydWN0b3Igb2YgdGhlIHRo
cmVhZCBsb2NhbCB2YXJpYWJsZSB0byByZWxlYXNlCisgICAgICAgIHRoZSByZXNvdXJjZXMgaGVs
ZCBieSBSZWZQdHI8VGhyZWFkPi4gSW4gV2luZG93cywgVGhyZWFkOjpkZXRhY2ggZG9lcyBub3Ro
aW5nIGJlY2F1c2UgdGhlIHJlc291cmNlIHdpbGwgYmUgZGVzdHJveWVkCisgICAgICAgIGF1dG9t
YXRpY2FsbHkgYnkgUmVmUHRyPFRocmVhZD4uCisKKyAgICAgICAgVG8gZG8gc28sIHdlIGludHJv
ZHVjZSBUaHJlYWRIb2xkZXIgZm9yIFdpbmRvd3MuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJl
dmlvdXMgVGhyZWFkSWRlbnRpZmllckRhdGEgZm9yIFB0aHJlYWRzLgorICAgICAgICBJdCBob2xk
cyBSZWZQdHI8VGhyZWFkPiBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKHRlY2huaWNhbGx5
LCBpdCBpcyBGaWJlciBMb2NhbCBTdG9yYWdlIGluIFdpbmRvd3MpLiBUaHJlYWQ6OmN1cnJlbnQo
KQorICAgICAgICB3aWxsIHJldHVybiB0aGlzIHJlZmVyZW5jZS4KKworICAgICAgICBUaGUgcHJv
YmxlbWF0aWMgc2l0dWF0aW9uIGlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBkZWFsbG9jYXRpb24g
b2YgdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIGlzIG5vdCBkZWZpbmVkLiBTbyB3ZSBzaG91bGQK
KyAgICAgICAgbm90IHRvdWNoIHRocmVhZCBsb2NhbCBzdG9yYWdlIGluIHRoZSBkZXN0cnVjdG9y
IG9mIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZS4gVG8gYXZvaWQgc3VjaCBlZGdlIGNhc2VzLCB3
ZSBoYXZlCisgICAgICAgIGN1cnJlbnRUaHJlYWQoKSAvIFRocmVhZDo6Y3VycmVudElEKCkgQVBJ
cy4gVGhleSBhcmUgc2FmZSB0byBiZSBjYWxsZWQgZXZlbiBpbiB0aGUgZGVzdHJ1Y3RvciBvZiB0
aGUgb3RoZXIgdGhyZWFkIGxvY2FsCisgICAgICAgIHN0b3JhZ2UuIEFuZCBpbiBXaW5kb3dzLCBp
biB0aGUgRkxTIGRlc3RydWN0b3IsIHdlIHdpbGwgY3JlYXRlIHRoZSB0aHJlYWRfbG9jYWwgdmFy
aWFibGUgdG8gZGVmZXIgdGhlIGRlc3RydWN0aW9uIG9mCisgICAgICAgIHRoZSBUaHJlYWRIb2xk
ZXIuIFdlIGVuc3VyZSB0aGF0IHRoaXMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG90
aGVyIEZMUyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkIGluIFdpbmRvd3MgMTAuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVl
ZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6Cisg
ICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0
b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFk
LmNwcDoKKyAgICAgICAgKFdURjo6Y2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKToK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3Ip
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3Jr
ZXJUaHJlYWQpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUp
OgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xv
dDo6Zm9yRWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChX
VEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVJlZ2lzdGVy
cy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1U
aHJlYWQuaC4KKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0cjo6
UmVmUHRyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6CisgICAg
ICAgIChXVEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
VEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAg
ICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhv
bGRlcjo6VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhy
ZWFkcy5jcHAuCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UpOgor
ICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJl
YWRIb2xkZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNwcDog
QWRkZWQuCisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KToKKyAgICAgICAgKFdURjo6dGhy
ZWFkTWFwKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSk6Cisg
ICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVh
ZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTcGVjaWZpYy5oOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om5vcm1hbGl6
ZVRocmVhZE5hbWUpOgorICAgICAgICAoV1RGOjp0aHJlYWRFbnRyeVBvaW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0Q3VycmVu
dFRocmVhZElzVXNlckluaXRpYXRlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0R2xvYmFs
TWF4UU9TQ2xhc3MpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MpOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmR1bXApOgorICAgICAgICAoV1RGOjpub3JtYWxpemVUaHJl
YWROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6YWRqdXN0ZWRRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVh
ZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmlkKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpk
aWRCZWNvbWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkSm9pbik6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVh
ZCk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdU
Rjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50
VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5
UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUludGVybmFsKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2Fp
dEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElE
KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6
OnJlc3VtZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Z2V0UmVnaXN0ZXJzKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gp
OgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQ
dGhyZWFkU3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3Rh
dGU6Omhhc0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6aWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmVz
dGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6cHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRldGFjaFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2ln
bmFsVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJl
YWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6
d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJu
YWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGV0
YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRF
eGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjpp
bml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcik6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmNoYW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6d2FpdEZv
clRocmVhZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpjb25jdXJy
ZW50QXBwbHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiB3dGYvY29j
b2EvV29ya1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAoV1RGOjpkaXNwYXRjaFFPU0NsYXNzKToK
KyAgICAgICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcDoKKyAgICAgICAgKFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZv
cm1JbnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
TGludXguY3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQ
b2xsZXI6OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRs
ZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKToKKyAgICAgICAgKiB3dGYvd2luL01h
aW5UaHJlYWRXaW4uY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRocmVhZFBsYXRm
b3JtKToKKwogMjAxNy0wNC0wNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByZW1vdmUgY29uc3RleHByIGZ1bmN0aW9uIHNpbmNl
IEdUSyBkaWRuJ3QgbGlrZSBpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MGUyZjA3OTczMGI1NDdlNjVkODRi
MjdlMDBkMjc5MWE1ZWY5NTYzLi4wNzkzYmYwNGJjOGNlYmVlY2Q5ZGQ1ZThhODU3NDY5NjVlZTAz
NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTctMDQtMDkgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRo
cmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVh
ZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBV
c2UgVGhyZWFkOjogQVBJcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVu
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OnN0YXJ0UmVuZGVyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFk
OjpnZXRUaHJlYWRJRCk6CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0
ZVRocmVhZEZvckRlYnVnZ2luZyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAg
ICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6
Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L0hSVEZEYXRhYmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VM
b2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJh
c2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0
YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9s
dmVyOjpSZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVy
Ojp+UmV2ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252
b2x2ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVh
ZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0Zp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2FkZXJSdW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0
VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6
c3RvcFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0YXJ0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
Ojp3b3JrZXJUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0wOCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtWYXJpYXRp
b24gRm9udHNdIFdpZHRoIHZhbHVlcyBvZiBHWCBmb250cyBhcmUgbm90IG1hcHBlZCBjb3JyZWN0
bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMmIzOWI5OGM3NDk2OTY2NGQyNzBkYWM1ODA5NzdmMTI5NWQxZmJmZS4u
M2NkMjY2OWFlYWI0MWVmZDFiYmYzODU1MTI3NzNkYmRjMDAzY2QyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBBUElzLgorCisg
ICAgICAgICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRo
cmVhZDo6flN0b3JhZ2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVRocmVhZDo6dGVybWluYXRlKToKKyAgICAgICAgKiBTdG9y
YWdlL1N0b3JhZ2VUaHJlYWQuaDoKKwogMjAxNy0wNC0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVj
b3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE9ubHkgQ2FwdHVyZSBF
eHRyYSBOZXR3b3JrIExvYWQgTWV0cmljcyB3aGVuIHRoZXJlIGlzIGEgV2ViIEluc3BlY3RvciBG
cm9udGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDJjYzU4MmRkZjIxYjU1MDU5NGMxNzRmYWYxYjFkY2M1M2Fl
ZGZmOGIuLjQwZGE2YzE0ODcyZDQyNjljMTBkZGI2OTA2YmFhNWE1N2FjZDkyYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNy0wNC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFu
ZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVu
dGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBB
UElzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWRTeW5j
SW5UaHJlYWQpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKElQQzo6Q29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6CisgICAgICAgICog
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5
UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRpYWxpemVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxNy0wNC0wOCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3Agc3RkOjpjaHJvbm8gc3VwcG9y
dCBmcm9tIFRpbWVyIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHAKaW5kZXggZTc4MDg2YzNhOTYxMmEyZjBiNGQ3
YWFmMWFkYzdiYTFhMTAxYzU0Ny4uNDNhZWYwNzc5NzBjZmVkYjJjYWMwNDYzZmNkOWVjY2EyOWQx
NTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJl
QW5kU3dhcFRlc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcApAQCAtOTYsNyArOTYsNyBAQCB2b2lkIHRlc3RDb21wYXJlQW5k
U3dhcCgpCiB7CiAgICAgQml0bWFwIGJpdG1hcDsKICAgICBjb25zdCBpbnQgbnVtVGhyZWFkcyA9
IDU7Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRHNbbnVtVGhyZWFkc107CisgICAgUmVm
UHRyPFRocmVhZD4gdGhyZWFkc1tudW1UaHJlYWRzXTsKICAgICBEYXRhIGRhdGFbbnVtVGhyZWFk
c107CiAKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTEwNywxMiArMTA3LDEy
IEBAIHZvaWQgdGVzdENvbXBhcmVBbmRTd2FwKCkKICAgICAgICAgZGF0YVtpXS5pZCA9IGk7CiAg
ICAgICAgIGRhdGFbaV0ubnVtVGhyZWFkcyA9IG51bVRocmVhZHM7CiAgICAgICAgIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiB0aHJlYWRGdW5jID0gc3RkOjpiaW5kKHNldEJpdFRocmVhZEZ1bmMsICZk
YXRhW2ldKTsKLSAgICAgICAgdGhyZWFkSURzW2ldID0gY3JlYXRlVGhyZWFkKCJzZXRCaXRUaHJl
YWRGdW5jIiwgdGhyZWFkRnVuYyk7CisgICAgICAgIHRocmVhZHNbaV0gPSBUaHJlYWQ6OmNyZWF0
ZSgic2V0Qml0VGhyZWFkRnVuYyIsIHRocmVhZEZ1bmMpOwogICAgIH0KIAogICAgIHByaW50Zigi
V2FpdGluZyBmb3IgJWQgdGhyZWFkcyB0byBqb2luXG4iLCBudW1UaHJlYWRzKTsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkSURzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKIAogICAgIHByaW50ZigiUEFTUzogQ29tcGFyZUFuZFN3YXAgdGVzdCBjb21wbGV0
ZWQgd2l0aG91dCBhIGhhbmdcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3ZjE2NmMzN2RhNDlhZGRmZmFlYjc2N2NmMWM5OGJiZWFjN2IzMGZjLi45Yjk0ZjMwYjk4N2Yz
MDk2ZTAzNWE2ZjliNmZhOWQ5MTFjNmY1YmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjQ3MSw3ICsyNDcxLDYgQEAKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExM
SW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUQyODdCMTE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQ5NEYyRTE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsg
fTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlGRUU0M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRTQzRkNEMUU2
NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBD
b21wYXJlQW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVz
dC5jcHAgKi87IH07CiAJCUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRkQ2
RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCkBAIC01MTAxLDcgKzUxMDAsNiBAQAogCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hkb2cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRG
IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFREE1MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZs
b3dUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tP
dmVyZmxvd1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZE
MSAvKiBQbGF0Zm9ybVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF0Zm9ybVRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MDFB
QUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkv
dGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9
IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY4NjYsNyArNjg2NCw2IEBACiAJCQkJRjY5MkE4NzgwMjU1
NTk3RDAxRkY2MEY3IC8qIE9wZXJhdGlvbnMuaCAqLywKIAkJCQkwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi8sCiAJCQkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuaCAqLywKLQkJCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1U
aHJlYWQuaCAqLywKIAkJCQk4Njg5MTZBOTE1NUYyODU0MDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUu
aCAqLywKIAkJCQkxNDczNDFERjFEQzJDRTk2MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwICovLAogCQkJCTE0NzM0MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJs
ZS5oICovLApAQCAtOTM0OCw3ICs5MzQ1LDYgQEAKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAz
MTggLyogU3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRTQz
RkNFMUU2NjQxNzEwMDc3RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk2QjczMjcxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjAxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJv
bFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90
ZXN0YWlyLmNwcAppbmRleCA4N2IzNTNhYTM3OTI1Y2ExZTJmYTg0MTE5OTc2YWRmMGIxZTA3YmFh
Li5jOTE3NzA3OTU4OGY4NmQ0MzFhMjhiYzA3NGQ0ZmUyZTNmMTNkYzQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKQEAgLTE5MTMsMTAgKzE5MTMsMTAgQEAgdm9p
ZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0
aHJlYWRzOwogICAgIGZvciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9m
UHJvY2Vzc29yQ29yZXMoKTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAg
ICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAg
ICAgICAgICAgICJ0ZXN0YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CkBAIC0xOTMzLDggKzE5MzMsOCBAQCB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0KIAotICAg
IGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFk
IDogdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNy
YXNoTG9jay5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXgg
MDE5OTZhZjcxYWI0ZjA5ZWI0OWI3MDExYzE3ZGJjOTNjNDBjZTg3YS4uOTA0NjU2NDg4N2I2YjNh
NGFmYWMzNTlkYzEwYzUwMzg0ZDc0ZGVmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKQEAgLTE2ODUwLDEwICsxNjg1MCwxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
CiAKICAgICBMb2NrIGxvY2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFk
czsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmlsdGVyID8gMSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7
CiAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAg
ICAgICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQi
LAogICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzsp
IHsKQEAgLTE2ODcwLDggKzE2ODcwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQog
ICAgICAgICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkIDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
KTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCmluZGV4
IGE0ZTIxZjlmYTNjZDQ3MjFlYTI2NzVlMDZlNGQ1MzBjNWJhOTViMzUuLmU5YjFmNWMyZjBiYzI3
YjAyOTMxMGM1NTgxNTIwYjFiNTUyMjU5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgaW5pdGlh
bGl6ZVN1cGVyU2FtcGxlcigpCiAgICAgaWYgKCFPcHRpb25zOjp1c2VTdXBlclNhbXBsZXIoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgY3JlYXRlVGhyZWFkKAorICAgIFRocmVhZDo6Y3JlYXRl
KAogICAgICAgICAiSlNDIFN1cGVyIFNhbXBsZXIiLAogICAgICAgICBbXSAoKSB7CiAgICAgICAg
ICAgICBjb25zdCBpbnQgc2xlZXBRdWFudHVtID0gMTA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCmluZGV4IGNlZjk5MGNiNDgzM2E2YmI5NDcxYmQwOGE1MDRlNTVm
YjQ3ZGY0NTguLmFkMGVjYzY5YTc3ZDE3MmNmNGJjMWVmYWM5M2RmOTMwMjdjMDA5ZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCkBAIC0xNDQsNyArMTQ0LDcg
QEAgY2xhc3MgV29ya2xpc3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsK
ICAgICAgICAgICAgIGRhdGFMb2cobV93b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0ZWRcbiIpOwog
ICAgICAgICAKICAgICAgICAgaWYgKG1fcmVsYXRpdmVQcmlvcml0eSkKLSAgICAgICAgICAgIGNo
YW5nZVRocmVhZFByaW9yaXR5KGN1cnJlbnRUaHJlYWQoKSwgbV9yZWxhdGl2ZVByaW9yaXR5KTsK
KyAgICAgICAgICAgIFRocmVhZDo6Y3VycmVudCgpLmNoYW5nZVByaW9yaXR5KG1fcmVsYXRpdmVQ
cmlvcml0eSk7CiAgICAgICAgIAogICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBzdGQ6Om1h
a2VfdW5pcXVlPENvbXBpbGF0aW9uU2NvcGU+KCk7CiAgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPExvbmdMaXZlZFN0YXRlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4IDc4OGE2YzM2
MjM2OWM1OGRhZDI5YTYwYTM4NzEwNDRlNDY0ZWQzMDUuLjJiODI0ZWNmZGU1ODkzYjJjNmI3MDZm
NDcwMmVjZDIyOTVkMjM1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgQXN5bmNo
cm9ub3VzRGlzYXNzZW1ibGVyIHsKIHB1YmxpYzoKICAgICBBc3luY2hyb25vdXNEaXNhc3NlbWJs
ZXIoKQogICAgIHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJBc3luY2hyb25vdXMgRGlzYXNzZW1i
bGVyIiwgWyZdICgpIHsgcnVuKCk7IH0pOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiQXN5bmNo
cm9ub3VzIERpc2Fzc2VtYmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBlbnF1ZXVlKHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+IHRhc2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDNhZWUzMDEwNGY1MjkxYTI4NzY0YTVj
ZGVlNWFhOGYwY2E3MmFkMzEuLjcyMjNiMjBjOWRmYmExMDQzMDk4YTc4NTc0YmEyOGE2OTRjMDQ1
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDksNyArMzQ5LDcgQEAg
dm9pZCBIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiAgICAgICAgICAgICBtX3Nob3VsZFN0
b3BDb2xsZWN0aW5nQ29udGludW91c2x5ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29sbGVjdENv
bnRpbnVvdXNseUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgfQotICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQpOworICAgICAg
ICBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAg
fQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQpAQCAtMjY4MSw3ICsyNjgxLDcgQEAg
dm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQogICAgIG1faXNTYWZlVG9Db2xsZWN0
ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKSB7
Ci0gICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkID0gV1RGOjpUaHJlYWQ6OmNyZWF0ZSgK
ICAgICAgICAgICAgICJKU0MgREVCVUcgQ29udGludW91cyBHQyIsCiAgICAgICAgICAgICBbdGhp
c10gKCkgewogICAgICAgICAgICAgICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAx
NmJlZWY5YTg5ZDA2ZGYyNzk3MTdlNzcwYjE2NGE0NzE0Li5kNjc4MzdhZmVmMTMwMWY5NjcyZjYw
ZWEyOWM0M2ZjODU5N2RlYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC00OSw2
ICs0OSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjY2LDcgKzY2Nyw3
IEBAIGNsYXNzIEhlYXAgewogICAgIExvY2sgbV9jb2xsZWN0Q29udGludW91c2x5TG9jazsKICAg
ICBDb25kaXRpb24gbV9jb2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uOwogICAgIGJvb2wgbV9z
aG91bGRTdG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSB7IGZhbHNlIH07Ci0gICAgVGhyZWFkSWRl
bnRpZmllciBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFdU
Rjo6VGhyZWFkPiBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyBudWxscHRyIH07CiAgICAg
CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RHQ1N0YXJ0VGltZTsKICAgICBNb25vdG9uaWNUaW1l
IG1fbGFzdEdDRW5kVGltZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNo
aW5lU3RhY2tNYXJrZXIuY3BwCmluZGV4IGI4NWI3NjQ4ZTJmNWQxOWZhMjJkNzYzZjdiY2RlZjhm
NDRjNDJjODguLjI3ZDNmMTIxMTMwNjMwZmFjZWYwNzMyZWY3N2JjZGU5NTNiZDI0ZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApA
QCAtMzYsOTEgKzM2LDExIEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgT1MoREFSV0lOKQotCi0jaW5jbHVkZSA8
bWFjaC9tYWNoX2luaXQuaD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgotI2luY2x1ZGUg
PG1hY2gvdGFzay5oPgotI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2luY2x1ZGUgPG1h
Y2gvdm1fbWFwLmg+Ci0KLSNlbGlmIE9TKFdJTkRPV1MpCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+
Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxzeXMv
bW1hbi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaWYgT1MoU09MQVJJUykKLSNpbmNsdWRl
IDx0aHJlYWQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLSNpZiBI
QVZFKFBUSFJFQURfTlBfSCkKLSNpbmNsdWRlIDxwdGhyZWFkX25wLmg+Ci0jZW5kaWYKLQotI2lm
IFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8
c2lnbmFsLmg+Ci0KLS8vIFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNo
aW5lIHRocmVhZHMgaW4gSmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFs
TG9jazsKLXRocmVhZF9sb2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YSo+IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQot
c3RhdGljIHZvaWQgcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5m
b190Kiwgdm9pZCogdWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0
b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRU
aHJlYWQubG9hZCgpOwotCi0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRs
ZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1
c3BlbmQuCi0gICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91
bGQgbm90IHByb2Nlc3MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVz
LCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdz
dXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMg
cHJlY2VkZXMuCi0gICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQg
c3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhh
bmRsZXIgaXMgY2FsbGVkLgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29u
bGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1
c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdz
OwotI2Vsc2UKLSAgICB0aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJD
b250ZXh0LT51Y19tY29udGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxs
ZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0
IGlzIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxs
IHRoaXMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91
cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0
YWdfMDJfMDRfMDMKLSAgICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFy
cmllciB0aGF0IGVuc3VyZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0
bHkgc2F2ZWQuCi0gICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2
OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3Qo
JnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hp
bmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxl
ciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNv
IGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhp
cyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5v
dCBleGVjdXRlZCByZWN1cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0Owot
ICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tl
ZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxv
Y2tlZFNpZ25hbFNldCk7Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0
IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFw
aG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9T
KFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRo
cmVhZDsKK3VzaW5nIEpTVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOwogCiBjbGFz
cyBBY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXI7CiBzdGF0aWMgQWN0aXZlTWFjaGluZVRocmVh
ZHNNYW5hZ2VyJiBhY3RpdmVNYWNoaW5lVGhyZWFkc01hbmFnZXIoKTsKQEAgLTE5NCw0MSArMTE0
LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNp
ZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBM
b2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgp
OwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAg
ICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKEpTVGhyZWFkKiB0ID0gbV9yZWdp
c3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQgPSB0LT5uZXh0Owog
ICAgICAgICBkZWxldGUgdDsKICAgICAgICAgdCA9IG5leHQ7CiAgICAgfQogfQogCi1zdGF0aWMg
TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGEqIHRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxUaHJlYWRTcGVjaWZpYzxNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSwg
Q2FuQmVHQ1RocmVhZDo6VHJ1ZT4+IHRocmVhZERhdGE7Ci0gICAgcmV0dXJuIHRocmVhZERhdGEu
Z2V0KCk7Ci19Ci0KLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZChUaHJlYWREYXRhKiB0
aHJlYWREYXRhKQotICAgIDogZGF0YSh0aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWRE
YXRhKTsKLX0KLQotVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjcmVhdGVGb3JDdXJy
ZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gbmV3IFRocmVhZCh0aHJlYWREYXRhKCkpOwotfQot
Ci1ib29sIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1U
aHJlYWQmIG90aGVyKSBjb25zdAotewotI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykKLSAg
ICByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQgPT0gb3RoZXI7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpCi0gICAgcmV0dXJuICEhcHRocmVhZF9lcXVhbChkYXRhLT5wbGF0Zm9ybVRocmVhZCwgb3Ro
ZXIpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGNvbXBhcmUgdGhyZWFkcyBvbiB0aGlz
IHBsYXRmb3JtCi0jZW5kaWYKLX0KLQogdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRo
cmVhZCgpCiB7CiAgICAgaWYgKHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JN
YWNoaW5lVGhyZWFkcykpIHsKQEAgLTIzOSw3ICsxMzEsNyBAQCB2b2lkIE1hY2hpbmVUaHJlYWRz
OjphZGRDdXJyZW50VGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRocmVh
ZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgSlNUaHJl
YWQqIHRocmVhZCA9IG5ldyBKU1RocmVhZCgpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhy
ZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKQEAgLTI0OCwxMiArMTQwLDEyIEBAIHZvaWQg
TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVh
ZHMgPSB0aHJlYWQ7CiB9CiAKLVRocmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRG
b3JDdXJyZW50VGhyZWFkKCkKK0pTVGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVh
ZEZvckN1cnJlbnRUaHJlYWQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRU
aHJlYWRzTXV0ZXgpOwotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVu
dFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgq
dGhyZWFkID09IHBsYXRmb3JtVGhyZWFkKQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJy
ZW50VGhyZWFkKCk7CisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVh
ZC0+dGhyZWFkSUQoKSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQog
CkBAIC0yODMsMjIgKzE3NSwyMSBAQCB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVU
aHJlYWRzOjpyZW1vdmVUaHJlYWQodm9pZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRp
ZgogCi0gICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQ
bGF0Zm9ybVRocmVhZCgpKTsKKyAgICAgICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElm
Rm91bmQoY3VycmVudFRocmVhZCgpKTsKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBs
YXRmb3JtVGhyZWFkPgotdm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQ
bGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92
ZVRocmVhZElmRm91bmQoVGhyZWFkSWRlbnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVy
ZWRUaHJlYWRzOwotICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIEpTVGhyZWFk
KiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkg
ewogICAgICAgICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4
dDsKICAgICAgICAgZGVsZXRlIHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVGhyZWFkKiBsYXN0
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICAgICAgSlNUaHJlYWQqIGxhc3QgPSBtX3JlZ2lz
dGVyZWRUaHJlYWRzOwogICAgICAgICBmb3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0
OyB0OyB0ID0gdC0+bmV4dCkgewotICAgICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFk
KSB7CisgICAgICAgICAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAg
ICAgIGxhc3QtPm5leHQgPSB0LT5uZXh0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtMzIwLDIwNiArMjExLDM0IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhl
ckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAg
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3Vy
cmVudFRocmVhZFN0YXRlLnN0YWNrT3JpZ2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3Mp
OwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5l
VGhyZWFkczo6SlNUaHJlYWQ6OkpTVGhyZWFkKCkKKyAgICA6IG5leHQobnVsbHB0cikKKyAgICAs
IG1fdGhyZWFkKFdURjo6VGhyZWFkOjpjdXJyZW50KCkpCiB7CiAgICAgYXV0byBzdGFja0JvdW5k
cyA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwotICAgIHBsYXRmb3JtVGhyZWFkID0gY3VycmVu
dFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAgc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7
Ci0gICAgc3RhY2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgQVNTRVJUKHBsYXRmb3JtVGhyZWFkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKLSAgICBi
b29sIGlzU3VjY2Vzc2Z1bCA9Ci0gICAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJv
Y2VzcygpLCBHZXRDdXJyZW50VGhyZWFkKCksIEdldEN1cnJlbnRQcm9jZXNzKCksCi0gICAgICAg
ICAgICAmcGxhdGZvcm1UaHJlYWRIYW5kbGUsIDAsIEZBTFNFLCBEVVBMSUNBVEVfU0FNRV9BQ0NF
U1MpOwotICAgIFJFTEVBU0VfQVNTRVJUKGlzU3VjY2Vzc2Z1bCk7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpICYmICFPUyhEQVJXSU4pCi0gICAgdGhyZWFkTG9jYWxDdXJyZW50VGhyZWFkLnN0b3JlKHRo
aXMpOwotCi0gICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25maWd1
cmF0aW9uLgotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplU2lnbmFsSGFuZGxl
cjsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplU2lnbmFsSGFuZGxlciwgW10gewotICAg
ICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4gdGhl
IGhhbmRsZXIuCi0gICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxv
d2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rp
b24gYWN0aW9uOwotICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAg
ICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLQot
ICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcHRocmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5k
UmVzdW1lOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5G
TzsKLSAgICAgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDAp
OwotICAgIH0pOwotCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgmbWFzayk7
Ci0gICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBwdGhy
ZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLQotICAgIHNlbV9pbml0KCZzZW1h
cGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3Mu
ICovIDAsIC8qIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwotI2VuZGlm
CisgICAgbV9zdGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKKyAgICBtX3N0YWNrRW5k
ID0gc3RhY2tCb3VuZHMuZW5kKCk7CiB9CiAKLU1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjp+
VGhyZWFkRGF0YSgpCitzaXplX3QgTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpnZXRSZWdpc3Rl
cnMoSlNUaHJlYWQ6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgQ2xvc2VIYW5kbGUocGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURT
KSAmJiAhT1MoREFSV0lOKQotICAgIHNlbV9kZXN0cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVz
dW1lKTsKLSNlbmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3Rl
cnMucmVnczsKKyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdzKTsKIH0KIAot
Ym9vbCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCgpCi17Ci0jaWYgT1MoREFS
V0lOKQotICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQocGxhdGZvcm1U
aHJlYWQpOwotICAgIHJldHVybiByZXN1bHQgPT0gS0VSTl9TVUNDRVNTOwotI2VsaWYgT1MoV0lO
RE9XUykKLSAgICBib29sIHRocmVhZElzU3VzcGVuZGVkID0gKFN1c3BlbmRUaHJlYWQocGxhdGZv
cm1UaHJlYWRIYW5kbGUpICE9IChEV09SRCktMSk7Ci0gICAgQVNTRVJUKHRocmVhZElzU3VzcGVu
ZGVkKTsKLSAgICByZXR1cm4gdGhyZWFkSXNTdXNwZW5kZWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMp
Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjdXJyZW50UGxhdGZvcm1UaHJlYWQoKSAhPSBwbGF0
Zm9ybVRocmVhZCwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJl
bnQgdGhyZWFkIGl0c2VsZi4iKTsKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBz
dXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRo
cmVhZHMuCi0gICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJl
YWQgbG9jay4KLSAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBh
cmUgdGhyZWFkcyBBIGFuZCBCLgotICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQg
QiBhbmQgQiBhdHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNp
Z25hbHMuIEFuZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCi0gICAg
ICAgIC8vIEluIHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoIXN1c3BlbmRDb3Vu
dCkgewotICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVh
ZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBw
bGF0Zm9ybXMsIGxpa2UgTGludXguCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhy
ZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhl
IHNpZ25hbCBoYW5kbGVyLgotICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChwbGF0Zm9ybVRo
cmVhZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2VtX3dhaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRS
ZXN1bWUpOwotICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlz
IG9wZXJhdGlvbiBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNz
aW5nIGlzIGRvbmUuCi0gICAgICAgICAgICBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgKytzdXNwZW5kQ291bnQ7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3Bl
bmQgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotdm9pZCBNYWNoaW5lVGhy
ZWFkczo6VGhyZWFkRGF0YTo6cmVzdW1lKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFk
X3Jlc3VtZShwbGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIFJlc3VtZVRo
cmVhZChwbGF0Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgewot
ICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJl
IGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgICAgIExvY2tIb2xkZXIgbG9j
ayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAgaWYgKHN1c3BlbmRDb3VudCA9PSAxKSB7Ci0g
ICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJy
dXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBzaWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNw
ZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwKLSAgICAgICAgICAgIC8vIHRoZSBzaWduYWwg
aGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2Fpbi4KLSAgICAgICAgICAgIC8v
IFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2Nh
dGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgotICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZl
cmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNrIHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBo
YW5kbGVyLgotICAgICAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1
aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1
ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAgICAgIC8vIDMuIFVzZSB0
aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21pYyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBo
YW5kbGVyLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAo
MykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgICAg
ICBpZiAocHRocmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KSA9PSBFU1JDSCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZW1fd2Fp
dCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJh
cnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRl
ciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRl
ZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgLS1zdXNwZW5kQ291bnQ7Ci0gICAgfQotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRv
IHJlc3VtZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi1zaXplX3QgTWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGE6OmdldFJlZ2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3Rl
cnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShY
ODYpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsK
LSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0j
ZWxpZiBDUFUoWDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NU
QVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJF
QURfU1RBVEU2NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQ
UENfVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSBQUENfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJf
Y291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0
YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQp
Ci0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vs
c2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVy
bl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUocGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRo
cmVhZF9zdGF0ZV90KSZyZWdzLCAmdXNlcl9jb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJO
X1NVQ0NFU1MpIHsKLSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5F
X18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJK
YXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0
YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBv
ZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3Vs
dCk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6
ZW9mKHVpbnRwdHJfdCk7Ci0vLyBlbmQgT1MoREFSV0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQot
ICAgIHJlZ3MuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9M
OwotICAgIEdldFRocmVhZENvbnRleHQocGxhdGZvcm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAg
ICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotI2VsaWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVk
KF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQotICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5l
Q29udGV4dDsKLSAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMp
OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJp
YnV0ZSk7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BF
TkJTRCkKLSAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAg
cHRocmVhZF9hdHRyX2dldF9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNl
bmRpZgotI2Vsc2UKLSAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7
IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwot
ICAgIHB0aHJlYWRfZ2V0YXR0cl9ucChwbGF0Zm9ybVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsK
LSNlbmRpZgotICAgIHJldHVybiAwOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0
aHJlYWQgcmVnaXN0ZXJzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi12b2lkKiBNYWNo
aW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAor
dm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRlcigp
IGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoKE9TKEZSRUVCU0Qp
IHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCiAgICAgcmV0dXJuIE1hY2hp
bmVDb250ZXh0OjpzdGFja1BvaW50ZXIocmVncyk7CiAjZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAg
dm9pZCogc3RhY2tCYXNlID0gMDsKLSAgICBzaXplX3Qgc3RhY2tTaXplID0gMDsKLSNpZiBPUyhP
UEVOQlNEKQotICAgIHN0YWNrX3Qgc3M7Ci0gICAgaW50IHJjID0gcHRocmVhZF9zdGFja3NlZ19u
cChwdGhyZWFkX3NlbGYoKSwgJnNzKTsKLSAgICBzdGFja0Jhc2UgPSAodm9pZCopKChzaXplX3Qp
IHNzLnNzX3NwIC0gc3Muc3Nfc2l6ZSk7Ci0gICAgc3RhY2tTaXplID0gc3Muc3Nfc2l6ZTsKLSNl
bHNlCi0gICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZyZWdzLmF0dHJpYnV0ZSwg
JnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7Ci0jZW5kaWYKLSAgICAodm9pZClyYzsgLy8gRklYTUU6
IERlYWwgd2l0aCBlcnJvciBjb2RlIHNvbWVob3c/IFNlZW1zIGZhdGFsLgotICAgIEFTU0VSVChz
dGFja0Jhc2UpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0
YWNrU2l6ZTsKKyAgICByZXR1cm4gcmVncy5zdGFja1BvaW50ZXI7CiAjZWxzZQogI2Vycm9yIE5l
ZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBwb2ludGVyIGZvciBhbm90aGVyIHRocmVhZCBvbiB0
aGlzIHBsYXRmb3JtCiAjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
LXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRl
cigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6ZnJh
bWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChP
UyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250
ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBAIC01MjgsNyArMjQ3LDcgQEAgdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKICNl
bmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpp
bnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6OkpTVGhyZWFk
OjpSZWdpc3RlcnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lO
KSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQog
ICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAt
NTM3LDcgKzI1Niw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3Rl
cnM6Omluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBN
YWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0CiB7CiAg
ICAgLy8gTExJbnQgdXNlcyByZWdUNCBhcyBQQy4KICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRP
V1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCkBAIC01NDgsMTYgKzI2
Nyw2IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OmxsaW50
UEMoKSBjb25zdAogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIAotdm9p
ZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6ZnJlZVJlZ2lzdGVycyhUaHJlYWREYXRhOjpS
ZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWREYXRhOjpSZWdpc3RlcnM6OlBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7Ci0jaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikgJiYgISgoT1MoRlJFRUJTRCkgfHwgZGVmaW5l
ZChfX0dMSUJDX18pKSAmJiBFTkFCTEUoSklUKSkKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgm
cmVncy5hdHRyaWJ1dGUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVncyk7Ci0jZW5kaWYK
LX0KLQogc3RhdGljIGlubGluZSBpbnQgb3NSZWRab25lQWRqdXN0bWVudCgpCiB7CiAgICAgaW50
IHJlZFpvbmVBZGp1c3RtZW50ID0gMDsKQEAgLTU3MywxNyArMjgyLDE3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQoKQogICAgIHJldHVybiByZWRab25lQWRqdXN0bWVu
dDsKIH0KIAotc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWRE
YXRhOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCitzdGQ6OnBhaXI8dm9pZCosIHNpemVf
dD4gTWFjaGluZVRocmVhZHM6OkpTVGhyZWFkOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3Ap
CiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tC
YXNlKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0
YWNrQmFzZSk7CiAgICAgY2hhciogZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0YWNrVG9wKSkpOwogICAgIEFTU0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5k
V2l0aFJlZFpvbmUgPSBlbmQgKyBvc1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZW5kV2l0aFJlZFpvbmUpKTsKIAotICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQot
ICAgICAgICBlbmRXaXRoUmVkWm9uZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFj
a0VuZCk7CisgICAgaWYgKGVuZFdpdGhSZWRab25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5k
V2l0aFJlZFpvbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAK
ICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVuZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhSZWRab25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzMyNSw5
IEBAIHN0YXRpYyB2b2lkIGNvcHlNZW1vcnkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNp
emVfdCBzaXplKQogLy8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3Ro
ZXJUaHJlYWRTdGFjayBpcyBvbmx5IGNhbGxlZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAv
LyBvcGVyYXRpb24uIEFzIHRoZSBoZWFwIGlzIGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRo
ZSBzdGFjayB0aGUgcGVyZm9ybWFuY2UgaGl0IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVh
ZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIs
IHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90KiBzaXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5
Q29weU90aGVyVGhyZWFkU3RhY2soSlNUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKIHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdp
c3RlcnM7CisgICAgSlNUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgc2l6ZV90IHJl
Z2lzdGVyc1NpemUgPSB0aHJlYWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgIHN0ZDo6
cGFpcjx2b2lkKiwgc2l6ZV90PiBzdGFjayA9IHRocmVhZC0+Y2FwdHVyZVN0YWNrKHJlZ2lzdGVy
cy5zdGFja1BvaW50ZXIoKSk7CiAKQEAgLTYzMSw4ICszNDAsNiBAQCB2b2lkIE1hY2hpbmVUaHJl
YWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVy
LCBzaXplXwogICAgIGlmIChjYW5Db3B5KQogICAgICAgICBjb3B5TWVtb3J5KHN0YXRpY19jYXN0
PGNoYXIqPihidWZmZXIpICsgKnNpemUsIHN0YWNrLmZpcnN0LCBzdGFjay5zZWNvbmQpOwogICAg
ICpzaXplICs9IHN0YWNrLnNlY29uZDsKLQotICAgIHRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdp
c3RlcnMpOwogfQogCiBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFj
a3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwg
c2l6ZV90KiBzaXplKQpAQCAtNjQ0LDM2ICszNTEsMzQgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6
dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVm
ZmUKIAogICAgICpzaXplID0gMDsKIAotICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFk
ID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7CisgICAgVGhyZWFkSWRlbnRpZmllciBpZCA9IGN1
cnJlbnRUaHJlYWQoKTsKICAgICBpbnQgbnVtYmVyT2ZUaHJlYWRzID0gMDsgLy8gVXNpbmcgMCB0
byBkZW5vdGUgdGhhdCB3ZSBoYXZlbid0IGNvdW50ZWQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHll
dC4KICAgICBpbnQgaW5kZXggPSAxOwotICAgIFRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0g
bnVsbHB0cjsKKyAgICBKU1RocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAot
ICAgIFRocmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0
aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAg
aWYgKCp0aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IHRocmVhZC0+c3VzcGVuZCgpOworICAgIEpTVGhyZWFkKiBwcmV2aW91c1RocmVhZCA9IG51
bGxwdHI7CisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsg
dGhyZWFkOyBpbmRleCsrKSB7CisgICAgICAgIGlmICh0aHJlYWQtPnRocmVhZElEKCkgIT0gaWQp
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFkLT5zdXNwZW5kKCk7CiAjaWYgT1Mo
REFSV0lOKQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkgewogICAgICAgICAgICAgICAgIGlmICghbnVtYmVyT2ZUaHJlYWRzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoVGhyZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhy
ZWFkczsgY291bnRlZFRocmVhZDsgY291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQp
CisgICAgICAgICAgICAgICAgICAgIGZvciAoSlNUaHJlYWQqIGNvdW50ZWRUaHJlYWQgPSBtX3Jl
Z2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhyZWFkOyBjb3VudGVkVGhyZWFkID0gY291bnRlZFRo
cmVhZC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mVGhyZWFkcysrOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBS
ZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQgdGhlIGFjdHVhbCBmYWlsdXJlIHJlc3VsdCBmb3Ig
bG9nZ2luZy4KLSAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0gdGhyZWFkX3N1
c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQu
ZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwogCiAgICAgICAgICAgICAgICAgV1RGUmVwb3J0RXJy
b3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLAotICAgICAgICAgICAg
ICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52
YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIHBsYXRmb3JtVGhyZWFk
ICVwLiIsCi0gICAgICAgICAgICAgICAgICAgIGVycm9yLCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRz
LCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+cGxhdGZvcm1UaHJlYWQo
KSkpOworICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24g
ZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDog
JXBdIGlkICVwLiIsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcigpLCBpbmRleCwg
bnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+
dGhyZWFkSUQoKSkpOwogCiAgICAgICAgICAgICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVh
ZCBvbiB0aGUgdGhyZWFkc1RvQmVEZWxldGVkIGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QganVzdCBkZWxldGUgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVy
CiAgICAgICAgICAgICAgICAgLy8gdGhyZWFkcywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRp
bmcgdGhlIEMgaGVhcCBsb2NrIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3Ig
ZGVsZXRpbmcgdGhlIGludmFsaWQgdGhyZWFkLiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAg
ICAgICAgIC8vIGRlZmVyIHRoZSBkZWxldGlvbiB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBh
bGwgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQt
Pm5leHQ7CisgICAgICAgICAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5l
eHQ7CiAgICAgICAgICAgICAgICAgdGhyZWFkLT5uZXh0ID0gdGhyZWFkc1RvQmVEZWxldGVkOwog
ICAgICAgICAgICAgICAgIHRocmVhZHNUb0JlRGVsZXRlZCA9IHRocmVhZDsKIApAQCAtNjg3LDI1
ICszOTIsMjUgQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmUKICNlbHNlCiAgICAgICAgICAgICBV
TlVTRURfUEFSQU0obnVtYmVyT2ZUaHJlYWRzKTsKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShw
cmV2aW91c1RocmVhZCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7CiAjZW5kaWYK
ICAgICAgICAgfQogICAgICAgICBwcmV2aW91c1RocmVhZCA9IHRocmVhZDsKICAgICAgICAgdGhy
ZWFkID0gdGhyZWFkLT5uZXh0OwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBt
X3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAg
ICAgICBpZiAoKnRocmVhZCAhPSBwbGF0Zm9ybVRocmVhZCkKKyAgICBmb3IgKEpTVGhyZWFkKiB0
aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4
dCkgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAg
dHJ5Q29weU90aGVyVGhyZWFkU3RhY2sodGhyZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsK
ICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsg
dGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0g
cGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChKU1RocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRo
cmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRocmVhZC0+cmVzdW1lKCk7CiAg
ICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhy
ZWFkOyApIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OworICAg
IGZvciAoSlNUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNUb0JlRGVsZXRlZDsgdGhyZWFkOyApIHsK
KyAgICAgICAgSlNUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgICAgIGRl
bGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IG5leHRUaHJlYWQ7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAppbmRleCBkMTk2
ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3OTk0NDg3ZjIyLi40ZWFlODY3Yjg4NDEzZTU4Y2Q2
NmY2NDY5OTA0M2ZiZDg1OTk2ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtMjIsMjUgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaHJlYWQu
aCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKLSNpZiBVU0UoUFRIUkVBRFMpICYm
ICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1ha2UgbWNvbnRleHRf
dCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KLS8vIFRoaXMgYnVnIGhhcyBi
ZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdvcmthcm91bmQgY2Fu
IGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4KLS8vIGh0dHBzOi8v
YnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc5Ci0jaWYgT1Mo
RlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4dC5oPgotI2VuZGlmCi0jZW5kaWYKLQogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKQEAgLTY0LDEzICs1MSwxMCBAQCBjbGFz
cyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEN1cnJl
bnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0byBiZSBjYWxsZWQgYnkgY2xpZW50cyB0aGF0IGNh
biB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCiAKLSAgICBjbGFzcyBU
aHJlYWREYXRhIHsKKyAgICBjbGFzcyBKU1RocmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+
VGhyZWFkRGF0YSgpOwotCi0gICAgICAgIHN0YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJy
ZW50VGhyZWFkKCk7CisgICAgICAgIEpTVGhyZWFkKCk7CiAKICAgICAgICAgc3RydWN0IFJlZ2lz
dGVycyB7CiAgICAgICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXIoKSBjb25zdDsKQEAgLTc5LDg0
ICs2Myw0MCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgICAgICB2b2lkKiBpbnN0
cnVjdGlvblBvaW50ZXIoKSBjb25zdDsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEMoKSBjb25z
dDsKICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgICAgICAKLSNp
ZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpCi0gICAgICAgICAgICB1c2luZyBQbGF0Zm9ybVJl
Z2lzdGVycyA9IE1hY2hpbmVDb250ZXh0OjpQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpCi0gICAgICAgICAg
ICB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpCi0gICAgICAgICAgICBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewotICAgICAgICAgICAg
ICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsKLSAgICAgICAgICAgIH07Ci0jZWxzZQotI2Vy
cm9yIE5lZWQgYSB0aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0jZW5k
aWYKLQotICAgICAgICAgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKKyAgICAgICAgICAgIFdU
Rjo6UGxhdGZvcm1SZWdpc3RlcnMgcmVnczsKICAgICAgICAgfTsKIAotICAgICAgICBib29sIHN1
c3BlbmQoKTsKLSAgICAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgc2l6ZV90IGdldFJlZ2lz
dGVycyhSZWdpc3RlcnMmKTsKLSAgICAgICAgdm9pZCBmcmVlUmVnaXN0ZXJzKFJlZ2lzdGVycyYp
OworICAgICAgICBFeHBlY3RlZDx2b2lkLCBUaHJlYWQ6OlBsYXRmb3JtU3VzcGVuZEVycm9yPiBz
dXNwZW5kKCkgeyByZXR1cm4gbV90aHJlYWQtPnN1c3BlbmQoKTsgfQorICAgICAgICB2b2lkIHJl
c3VtZSgpIHsgbV90aHJlYWQtPnJlc3VtZSgpOyB9CisgICAgICAgIHNpemVfdCBnZXRSZWdpc3Rl
cnMoUmVnaXN0ZXJzJiByZWdzKTsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IGNh
cHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCk7CiAKLSAgICAgICAgUGxhdGZvcm1UaHJlYWQgcGxh
dGZvcm1UaHJlYWQ7Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogc3Rh
Y2tFbmQ7Ci0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgSEFORExFIHBsYXRmb3JtVGhyZWFkSGFu
ZGxlOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgICAgICBzZW1fdCBz
ZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOwotICAgICAgICBtY29udGV4dF90IHN1c3BlbmRlZE1h
Y2hpbmVDb250ZXh0OwotICAgICAgICBpbnQgc3VzcGVuZENvdW50IHsgMCB9OwotICAgICAgICBz
dGQ6OmF0b21pYzxib29sPiBzdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0gICAgfTsKLQot
ICAgIGNsYXNzIFRocmVhZCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
ICAgICBUaHJlYWQoVGhyZWFkRGF0YSopOwotCi0gICAgcHVibGljOgotICAgICAgICB1c2luZyBS
ZWdpc3RlcnMgPSBUaHJlYWREYXRhOjpSZWdpc3RlcnM7Ci0KLSAgICAgICAgc3RhdGljIFRocmVh
ZCogY3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQotCi0gICAgICAgIGJvb2wgc3VzcGVuZCgpIHsgcmV0dXJuIGRhdGEtPnN1c3Bl
bmQoKTsgfQotICAgICAgICB2b2lkIHJlc3VtZSgpIHsgZGF0YS0+cmVzdW1lKCk7IH0KLSAgICAg
ICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgcmV0dXJuIGRhdGEtPmdl
dFJlZ2lzdGVycyhyZWdzKTsgfQotICAgICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0ZXJz
JiByZWdzKSB7IGRhdGEtPmZyZWVSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgc3RkOjpwYWly
PHZvaWQqLCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkgeyByZXR1cm4gZGF0
YS0+Y2FwdHVyZVN0YWNrKHN0YWNrVG9wKTsgfQotCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtVGhy
ZWFkJiBwbGF0Zm9ybVRocmVhZCgpIHsgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkOyB9Ci0g
ICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrQmFzZTsg
fQotICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnN0YWNrRW5k
OyB9CisgICAgICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGhyZWFkLT5pZCgpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhY2tCYXNlOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFja0VuZDsgfQogCi0gICAgICAgIFRocmVhZCogbmV4dDsKLSAgICAgICAgVGhy
ZWFkRGF0YSogZGF0YTsKKyAgICAgICAgSlNUaHJlYWQqIG5leHQ7CisgICAgICAgIFJlZjxXVEY6
OlRocmVhZD4gbV90aHJlYWQ7CisgICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOworICAgICAgICB2
b2lkKiBtX3N0YWNrRW5kOwogICAgIH07CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4g
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OyB9Ci0gICAgVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhy
ZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOworICAgIEpTVGhyZWFkKiB0aHJl
YWRzTGlzdEhlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lz
dGVyZWRUaHJlYWRzTXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB9CisgICAgSlNUaHJlYWQqIG1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290
cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0JiwgQ3VycmVudFRocmVhZFN0YXRl
Jik7CiAKLSAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCosIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCopOworICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3Rh
Y2soSlNUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29s
IHRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJ
RklDX0NBTEwgcmVtb3ZlVGhyZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBs
YXRmb3JtVGhyZWFkPgotICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVh
ZCk7CisgICAgdm9pZCByZW1vdmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAg
ICAgTG9jayBtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVy
ZWRUaHJlYWRzOworICAgIEpTVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdURjo6
VGhyZWFkU3BlY2lmaWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgzM2Qy
ZDIzMmI4YTljZDZmM2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDljZTcy
MTMzYzQxY2RkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01OCw3
ICs1OCw3IEBAIEF0b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNTdGF0
czo6SUNTdGF0cygpCiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAgW3Ro
aXNdICgpIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04NCw3
ICs4NCw3IEBAIElDU3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5
QWxsKCk7CiAgICAgfQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFk
KTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0YXRz
OjphZGQoY29uc3QgSUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5o
CmluZGV4IGU3NWNmZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2UxZTky
Y2U5N2RkMWQ5NTA4OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SUNTdGF0cy5oCkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRlOgog
CiAgICAgU3BlY3RydW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBM
b2NrIG1fbG9jazsKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3Nob3Vs
ZFN0b3AgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA5MDk1MGI5ODU5N2ZmMzk4
ZDQyMTNkZGY5MDkwN2JkM2MxN2QyN2I5Li4xODllNzk1YjY3MDJjY2JmYWU1NDQ5MWRhNGQzOTcw
MTJhYmViYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0
YXRlKiBleGVjKQogICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29sIGRp
ZFN0YXJ0ID0gZmFsc2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjcmVh
dGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoCiAg
ICAgICAgICJKU0MgQWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9jaywg
JmRpZFN0YXJ0Q29uZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1hbmRM
aW5lIGNvbW1hbmRMaW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhy
ZWFkLT5kZXRhY2goKTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soZGlkU3RhcnRMb2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0YXJ0
VGltZW91dFRocmVhZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IHRp
bWVvdXQgc3RyaW5nIGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAgICAg
ICAgICAgICAgIiBidXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQuXG4i
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRocmVh
ZE1haW4sIDAsICJqc2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6Y3Jl
YXRlKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIxZmUx
MjdlOGI3MzFmYjUzYjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUyNTRh
OGUxZWYxM2RhNWM0MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBsb2Nr
Q291bnQpCiAgICAgICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRocmVh
ZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3VycmVu
dCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVhZCA9
IHRydWU7CiAgICAgQVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5oCmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5ZGJl
NzQuLjFhY2E0YjlhN2JiNGRjYWYwNGRmMTIxNzEwOTcyMGVjOGUyZDY4ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3MgSlNM
b2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0qIHZt
KCkgeyByZXR1cm4gbV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlmaWVy
PiBvd25lclRocmVhZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFkPj4g
b3duZXJUaHJlYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJlYWQp
CiAgICAgICAgICAgICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHsg
cmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFk
KCk7IH0KKyAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9o
YXNPd25lclRocmVhZCAmJiBtX293bmVyVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsg
fQogCiAgICAgdm9pZCB3aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBj
bGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAgICAg
Ly8gZGlmZmVyZW50IHRocmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8gcmFj
ZXMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjkwNDIjYzYKICAgICBib29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRocmVh
ZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVyVGhy
ZWFkOwogICAgIGludHB0cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BE
ZXB0aDsKICAgICBib29sIG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTQxOTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0aHJl
YWQuaD4KLSNlbmRpZgotCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9T
KERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQot
I2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJXSU4p
Ci10eXBlZGVmIG1hY2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykK
LXR5cGVkZWYgRFdPUkQgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10eXBl
ZGVmIHB0aHJlYWRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0gICAg
Ci1pbmxpbmUgUGxhdGZvcm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNpZiBP
UyhEQVJXSU4pCi0gICAgcmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9zZWxm
KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7
Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2VuZGlm
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4NDkz
YjMzYmM4OWZlM2ZhZDk4YTlkLi42N2YyMGQ5MmNlY2RmMGFiM2JmZjdmNmZkMTI2NjAwYWExNWJm
MWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAgICBi
b29sIGlzVmFsaWRGcmFtZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVpbnQ4
X3QqIGZwQ2FzdCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZvciAo
TWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRz
KCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVh
ZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKG1f
bWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewog
ICAgICAgICAgICAgdWludDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRo
cmVhZC0+c3RhY2tCYXNlKCkpOwogICAgICAgICAgICAgdWludDhfdCogc3RhY2tMaW1pdCA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhY2tCYXNlKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBTYW1wbGluZ1Byb2Zp
bGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0
Y2gpCiAgICAgLCBtX3dlYWtSYW5kb20oKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9w
d2F0Y2gpKQogICAgICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRz
KE9wdGlvbnM6OnNhbXBsZUludGVydmFsKCkpKQotICAgICwgbV90aHJlYWRJZGVudGlmaWVyKDAp
CisgICAgLCBtX3RocmVhZChudWxscHRyKQogICAgICwgbV9qc2NFeGVjdXRpb25UaHJlYWQobnVs
bHB0cikKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2lzU2h1dERvd24oZmFsc2Up
CkBAIC0zMDAsMTEgKzMwMCwxMSBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVh
ZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKIHsKICAgICBBU1NFUlQobV9sb2Nr
LmlzTG9ja2VkKCkpOwogCi0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90
aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBw
cm9maWxlciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJq
c2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3Byb2ZpbGVyXSB7CisgICAgbV90aHJlYWQg
PSBUaHJlYWQ6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxl
cl0gewogICAgICAgICBwcm9maWxlci0+dGltZXJMb29wKCk7CiAgICAgfSk7CiB9CkBAIC0zNDQs
NyArMzQ0LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb24KICAgICAgICAgTG9ja0hvbGRlciBj
b2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7CiAg
ICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxs
b2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkpOwogCi0gICAgICAgIGJvb2wgZGlkU3VzcGVu
ZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGF1dG8gZGlkU3Vz
cGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7CiAgICAgICAgIGlmIChkaWRT
dXNwZW5kKSB7CiAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5k
ZWQsIHdlIGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFk
CiAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQs
MTMgKzM1NCwxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICAgICAgYm9vbCB0
b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7CiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0
ZXJzIHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQ6
OlJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJl
YWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFt
ZSA9IHJlZ2lzdGVycy5mcmFtZVBvaW50ZXIoKTsKICAgICAgICAgICAgICAgICBjYWxsRnJhbWUg
PSBzdGF0aWNfY2FzdDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAgICAg
IG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKICAgICAgICAgICAg
ICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hl
biB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKaW5kZXggYjQ0YTNiYTQ3ZjllNjc2OGFkNDM3YmIx
OGUwYThhYmM3OTViZDZjZi4uMDQzZGFkYmE0MDcwYjZmOTE4MDdiZDRjYTEzMjY5NGMzY2ViYWM0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuaApAQCAtMTk1LDggKzE5NSw4IEBAIGNsYXNzIFNhbXBsaW5nUHJvZmlsZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtcGxpbmdQcm9maWxlcj4gewogICAgIHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHMgbV90aW1pbmdJbnRlcnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsK
ICAgICBMb2NrIG1fbG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmll
cjsKLSAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKKyAg
ICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBNYWNoaW5lVGhyZWFkczo6SlNUaHJlYWQq
IG1fanNjRXhlY3V0aW9uVGhyZWFkOwogICAgIGJvb2wgbV9pc1BhdXNlZDsKICAgICBib29sIG1f
aXNTaHV0RG93bjsKICAgICBib29sIG1fbmVlZHNSZXBvcnRBdEV4aXQgeyBmYWxzZSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOTlhMjZmY2ExYzIxZjNkMDQ0MDQ3M2I0NDJl
ODlkYzlhNDk1ZjQ2ZS4uZTk3YzMxODVmYzZmMmM2Mjg0YWU3MWJlYjkwNWMwMmUzNDlhNzRmYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC02NTksNyArNjU5LDcgQEAgY2xhc3Mg
Vk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2Vk
TGlzdE5vZGU8Vk0+IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgbG9n
RXZlbnQoQ29kZUJsb2NrKiwgY29uc3QgY2hhciogc3VtbWFyeSwgY29uc3QgRnVuYyYgZnVuYyk7
CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFkKCkgY29u
c3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CisgICAgc3RkOjpvcHRpb25h
bDxSZWZQdHI8VGhyZWFkPj4gb3duZXJUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2FwaUxvY2st
Pm93bmVyVGhyZWFkKCk7IH0KIAogICAgIFZNVHJhcHMmIHRyYXBzKCkgeyByZXR1cm4gbV90cmFw
czsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDUy
NzYzZjg1M2Q0NjNiNzJmMzNlNDY0YjdiNWE1OWQwMTE5MzhmNjkuLjI3MmM0ZGVmYTg1NWZjMzli
MGNkNDEwMWU1ZTdlNGIyYmRjMGRiZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGljIEV4cGVjdGVkPHN0ZDo6cGFp
cjxWTSosIFN0YWNrQm91bmRzPiwgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWMK
ICAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3RvclN0YXR1czo6Q29udGludWU7
IC8vIFRyeSBuZXh0IFZNLgogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFk
czo6VGhyZWFkKiB0aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGlu
ZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAg
ICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpKU1RocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMu
dGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tC
YXNlKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsK
ICAgICAgICAgICAgIGlmIChzdGFja1BvaW50ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBz
dGFja1BvaW50ZXIgPj0gdGhyZWFkLT5zdGFja0VuZCgpKSB7CkBAIC00NTUsNyArNDU1LDcgQEAg
dm9pZCBWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0g
Km1fdm07CiAgICAgICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRo
cmVhZCgpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAg
ICAgICAgICBzaWduYWxUaHJlYWQob3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLCBTSUdVU1Ix
KTsKKyAgICAgICAgICAgICAgICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChT
SUdVU1IxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDkz
LDcgKzQ5Myw3IEBAIHZvaWQgVk1UcmFwczo6ZmlyZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2
ZW50VHlwZSkKICAgICAgICAgLy8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KICAgICAgICAg
UmVmUHRyPFNpZ25hbFNlbmRlcj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2
bSgpLCBldmVudFR5cGUpKTsKICAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7
Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBb
c2VuZGVyXSB7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5n
LnRocmVhZCIsIFtzZW5kZXJdIHsKICAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwogICAgICAg
ICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3Yzc3NGQ5N2RkNDE4NzJhMjBmMzk5Yzk2YTM1OTFkN2E0Y2FlMTQ5Li44YmNmZWJjNDcwMTQy
YzE4M2VkNTE1MmJiZDBmMGZiNDBhNmNmMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTMyNyw4ICszMjcsNyBAQAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICov
OyB9OwogCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0
MTIzRkYgLyogV1RGU3RyaW5nLmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24uaCAqLzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAgKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJ
CUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuaCAqLzsgfTsKIAkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
Ki87IH07CkBAIC0zNzQsNiArMzczLDkgQEAKIAkJREU1QTA5RkMxQkEzNjk5MjAwM0Q0NDI0IC8q
IENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICov
OyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1
NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi87IH07
CiAJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGNDE4
QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oICovOyB9OworCQlFMzIw
MEFCNzFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjAwQUI0MUU5QTUzNkQwMDNCNTlE
MiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oICovOyB9OworCQlFMzIwMEFCODFFOUE1MzZEMDAzQjU5
RDIgLyogVGhyZWFkSG9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzMjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3Bw
ICovOyB9OworCQlFMzIwMEFCOTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIwMEFCNjFFOUE1
MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggKi87IH07CiAJCUU0M0E0Njk1MUUyMjhCOTEw
MDI3NkIwNSAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDNBNDY5MDFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oICovOyB9Owog
CQlFNDNBNDY5NjFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTExRTIyOEI5MTAwMjc2QjA1IC8q
IEVuY29kZXIuaCAqLzsgfTsKIAkJRTQzQTQ2OTcxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2
OTIxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuY3BwICovOyB9OwpAQCAtNzMxLDggKzczMyw3
IEBACiAJCUE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1
bmN0aW9uSW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThB
NDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHJpbWl0aXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQ
cmltaXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzcsNiArNzc4LDkg
QEAKIAkJREU1QTA5RkIxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25DcnlwdG9TUEkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dy
YXBoaWNVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8q
IFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjAwQUI1
MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRIb2xkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQzQTQ2OTAxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDNBNDY5MTFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwMCw2ICsxMTA0LDcgQEAKIAkJCQkwRjgyNEE2NTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi8sCisJCQkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRm
b3JtUmVnaXN0ZXJzLmggKi8sCiAJCQkJRENFRTIxRkUxQ0VBNzU1MTAwMEMyMzk2IC8qIFBsYXRm
b3JtVXNlclByZWZlcnJlZExhbmd1YWdlcy5oICovLAogCQkJCURDRUUyMUZGMUNFQTc1NTEwMDBD
MjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXNNYWMubW0gKi8sCiAJCQkJMEZG
ODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8sCkBAIC0xMTY3
LDggKzExNzIsOSBAQAogCQkJCTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6
ZWRGaXhlZFF1ZXVlLmggKi8sCiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3Rl
bVRyYWNpbmcuaCAqLywKIAkJCQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmggKi8sCi0JCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovLAotCQkJCUE4QTQ3MzMxMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8sCisJCQkJRTMyMDBB
QjUxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgKi8sCisJCQkJRTMyMDBBQjYx
RTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczMzIx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8sCkBAIC0xNTU2LDYgKzE1NjIsNyBAQAogCQkJ
CUE4QTQ3NDBDMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODc2REJEODE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICov
LAogCQkJCURDRUUyMjAyMUNFQTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzMjAwQUI5MUU5QTUzNkQwMDNCNTlEMiAv
KiBUaHJlYWRIb2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1
MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzNjMx
NjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0
NDg4MzE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLywKQEAgLTE2
MjIsNyArMTYyOSw2IEBACiAJCQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRleHRCcmVh
a0l0ZXJhdG9ySUNVLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjQ4
LDYgKzE2NTQsNyBAQAogCQkJCUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjZCMjkzMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUzMjAwQUI3MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9y
bVJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEz
IC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJCTFGQTQ3QzhCMTUyNTAyREEwMDU2
OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU0NDc5RDFCN0FB
QTAzMDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMTgzMCw2ICsxODM3
LDcgQEAKIAkJCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxp
bWl0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYgLyog
U3RhY2tCb3VuZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTMyMDBBQjgxRTlBNTM2RDAwM0I1
OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRURBQ0QzRDE2MzBG
ODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQz
QzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xODQ3LDcgKzE4NTUsNyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBT
eW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERBMDBG
NUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTYxRDMwODAwQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0g
aW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1h
cmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2YWJm
NjBlYzM4ZWEwYjhkZGU3Mi4uNGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJjM2I3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5j
cHAKKysrIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKQEAg
LTc5LDE0ICs3OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0eUNv
bmRpdGlvbjsKICAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8
VGhyZWFkSWRlbnRpZmllcj4gY29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVu
dGlmaWVyPiBwcm9kdWNlclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25z
dW1lclRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7
CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2VpdmVk
TG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsK
LSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFk
KAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAg
ICAgICAgICJDb25zdW1lciB0aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAg
ICAgICAgICBmb3IgKDs7KSB7CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVk
aWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5z
aXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVj
a2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3Vs
ZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwg
IXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgp
KQpAQCAtMTE0LDExICsxMTQsMTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1bWVy
VGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhyZWFk
cy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9k
dWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZd
ICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2Fn
ZXNQZXJQcm9kdWNlcjsgKytpKSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0KAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBD
aGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1h
eFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEgKzEz
OCwxMSBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0eUNv
bmRpdGlvbiwgbXVzdE5vdGlmeSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAg
ICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3IgKFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChS
ZWZQdHI8VGhyZWFkPiYgdGhyZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrVHlwZT4gbG9ja2VyKGxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtz
L0xvY2tGYWlybmVzc1Rlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVz
c1Rlc3QuY3BwCmluZGV4IGYwODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5NGYu
LjY4Y2U4NGM0OGEzZmQ0YzhmODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0
IEJlbmNobWFyayB7CiAgICAgewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8dW5zaWduZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25l
ZFtdPihudW1UaHJlYWRzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZp
ZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1U
aHJlYWRzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVh
ZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwogICAg
IAogICAgICAgICB2b2xhdGlsZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03MCw3
ICs3MCw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAg
IGNvdW50c1t0aHJlYWRJbmRleF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRl
eF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRo
cmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAgICAg
ICAgICAgICAgICBbJiwgdGhyZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0
cnVjdCBCZW5jaG1hcmsgewogICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0g
ICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7
CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsK
ICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVk
VGVzdC5jcHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5kZXgg
NTQ1ZDJlMGIwNDg4ZjMzODk0YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3MDZj
MTljZTRmMjk0YzliNjFiMmFiYjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1h
cmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcApAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdpdGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMp
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3JkcyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91cHMp
OwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0g
c3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51
bVRocmVhZHNQZXJHcm91cCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFk
PltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1UaHJl
YWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJvb2wg
a2VlcEdvaW5nID0gdHJ1ZTsKIApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsK
ICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhy
ZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXgg
KiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAg
ICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3Vw
ICsgdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJC
ZW5jaG1hcmsgdGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgs
ICZsb2NrcywgJndvcmRzLCAma2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1JdGVy
YXRpb25zXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3JkID0g
MDsKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2VlcEdv
aW5nID0gZmFsc2U7CiAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBu
dW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAg
ICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOwor
ICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAK
ICAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291
cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2Fh
NjFjZDZhNmE4NzQ5ZWEwN2M3ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3
ZGFkMjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBA
QCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAg
IAogICAgIG1faGFzVW5kZXJseWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAg
ICAgIFs9XSAoKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBA
QCB2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQp
OworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJl
YWREaWRTdGFydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUz
Y2IzMGE3NmEyYTg1NWZlYmEyYzcuLjFiYWUzYmI5MGIzNzEyMGE1MWM0ODk5ZDk4N2Q4YTM0MTI1
NDBkNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC05NSw2ICs5NSw3IEBAIHNldChXVEZfSEVB
REVSUwogICAgIFBhcmtpbmdMb3QuaAogICAgIFBhc3NSZWZQdHIuaAogICAgIFBsYXRmb3JtLmgK
KyAgICBQbGF0Zm9ybVJlZ2lzdGVycy5oCiAgICAgUHJpbnRTdHJlYW0uaAogICAgIFByb2Nlc3NJ
RC5oCiAgICAgUkFNU2l6ZS5oCkBAIC0xMjgsNyArMTI5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAg
ICAgU3RyaW5nRXh0cmFzLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJh
Y2luZy5oCi0gICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisgICAgVGhyZWFkSG9s
ZGVyLmNwcAogICAgIFRocmVhZFNhZmVSZWZDb3VudGVkLmgKICAgICBUaHJlYWRTcGVjaWZpYy5o
CiAgICAgVGhyZWFkaW5nLmgKQEAgLTMyOSwxNiArMzMwLDE0IEBAIGxpc3QoQVBQRU5EIFdURl9M
SUJSQVJJRVMKIGlmIChXSU4zMikKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAg
ICBPU0FsbG9jYXRvcldpbi5jcHAKKyAgICAgICAgVGhyZWFkSG9sZGVyV2luLmNwcAogICAgICAg
ICBUaHJlYWRTcGVjaWZpY1dpbi5jcHAKICAgICAgICAgVGhyZWFkaW5nV2luLmNwcAogICAgICkK
IGVsc2UgKCkKLSAgICBsaXN0KEFQUEVORCBXVEZfSEVBREVSUwotICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmgKLSAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMK
ICAgICAgICAgT1NBbGxvY2F0b3JQb3NpeC5jcHAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHAKKyAgICAgICAgVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCiAgICAgICAg
IFRocmVhZGluZ1B0aHJlYWRzLmNwcAogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3Bw
CmluZGV4IDAyNDk1NDRjNTE4ZTgyYWZmMTcwNWRlMTllYzk2NWFiOThiMWQxMDYuLjM0Yjk0MjU1
NWFiNTYxODMyMTAxOGI0ZjA3OTBmMjgyNTBhN2RjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL01haW5UaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCkBA
IC0xODYsOSArMTg2LDkgQEAgYm9vbCBpc01haW5UaHJlYWQoKQogI2VuZGlmCiAKICNpZiAhVVNF
KFdFQl9USFJFQUQpCi1ib29sIGNhbkFjY2Vzc1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkKQorYm9vbCBjYW5BY2Nlc3NUaHJlYWRMb2NhbERhdGFGb3JU
aHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQpCiB7Ci0gICAgcmV0dXJuIHRocmVhZElkID09
IGN1cnJlbnRUaHJlYWQoKTsKKyAgICByZXR1cm4gdGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9T
b3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggMjVkOGY3NjZkY2ZiODc5YTFkNzY4M2Nl
NTUwOGRkOGQ3ZjFkNzdhZi4uMGU3OGU4ZTUxYWJlOGQ5NTU0NzJjNzlkZDM0NjkyZjE1NDZkYjFh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL01haW5UaHJlYWQuaApAQCAtMzQsMTMgKzM0LDEyIEBACiAjaW5jbHVkZSA8c3RkaW50
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3Mg
UHJpbnRTdHJlYW07CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKLQogLy8g
TXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJl
SGFuZGxlci5oCmluZGV4IGRmZGRmMGE5NTU1MmRiM2UyYWVjZmVmNGVjMTZlZmI1YzZlNmM3YmQu
LjQxMjhmNWNkNzFhN2RiMmY0ZmQ3MDMyOTUzZjBjM2YxZjUwMGQxMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC0xNzMsNyArMTczLDcgQEAgY2xhc3MgTWVtb3J5
UHJlc3N1cmVIYW5kbGVyIHsKICNpZiBVU0UoR0xJQikKICAgICAgICAgR1JlZlB0cjxHU291cmNl
PiBtX3NvdXJjZTsKICNlbHNlCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsK
KyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAjZW5kaWYKICAgICB9OwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCmluZGV4IDQwMjNmNDNlNmYyMGEz
OGUxMDNlN2M5YTJlNGYwZjdlMDYxMDU3MTQuLmNjZTExMDZkNDY3YjcyMDgzYzFlZGIyMTNhZDU5
YzQ0MDMxN2E0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVy
aWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCkBAIC05
MywxNCArOTMsMTQgQEAgYm9vbCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp0
cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9
IGNyZWF0ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2Vy
VGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisgICAgaWYgKCFtX3RocmVhZCkKKyAg
ICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhy
ZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CiAKLSAg
ICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1fcGFyZW50ID0g
cGFyZW50OwogCiAgICAgbV9tdXRleC51bmxvY2soKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsK
KyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhy
ZWFkUHJpdmF0ZTo6ZXhlY3V0ZShUaHJlYWRGdW5jdGlvbiB0aHJlYWRGdW5jdGlvbiwgdm9pZCog
cGFyYW1ldGVycykKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFBhcmFsbGVsRW52aXJvbm1lbnQ6
OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCh2b2lkKiB0aHJlYWREYXRhKQogICAgIFRocmVh
ZFByaXZhdGUqIHNoYXJlZFRocmVhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkUHJpdmF0ZSo+
KHRocmVhZERhdGEpOwogICAgIExvY2tIb2xkZXIgbG9jayhzaGFyZWRUaHJlYWQtPm1fbXV0ZXgp
OwogCi0gICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkgeworICAgIHdoaWxlIChz
aGFyZWRUaHJlYWQtPm1fdGhyZWFkKSB7CiAgICAgICAgIGlmIChzaGFyZWRUaHJlYWQtPm1fcnVu
bmluZykgewogICAgICAgICAgICAgKCpzaGFyZWRUaHJlYWQtPm1fdGhyZWFkRnVuY3Rpb24pKHNo
YXJlZFRocmVhZC0+bV9wYXJhbWV0ZXJzKTsKICAgICAgICAgICAgIHNoYXJlZFRocmVhZC0+bV9y
dW5uaW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNH
ZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgKaW5kZXggNDU4
NDA3YzRjYjRhM2Y5OTVjOTBjNTU1NjI3YzFjYmQyMmI0MWI1Yy4uN2Q2OGVmMDcwZjY3YTY1MzNj
MGI4NzU4M2QyYTU3YTExOGQwNTZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxs
ZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBQYXJhbGxlbEVudmlyb25tZW50IHsKICAgICBjbGFz
cyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8VGhyZWFkUHJpdmF0ZT4gewogICAg
IHB1YmxpYzoKICAgICAgICAgVGhyZWFkUHJpdmF0ZSgpCi0gICAgICAgICAgICA6IG1fdGhyZWFk
SUQoMCkKKyAgICAgICAgICAgIDogbV90aHJlYWQobnVsbHB0cikKICAgICAgICAgICAgICwgbV9y
dW5uaW5nKGZhbHNlKQogICAgICAgICAgICAgLCBtX3BhcmVudCgwKQogICAgICAgICB7CkBAIC03
NCw3ICs3NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgICAgICBzdGF0aWMg
dm9pZCB3b3JrZXJUaHJlYWQodm9pZCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsK
ICAgICAgICAgYm9vbCBtX3J1bm5pbmc7CiAgICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQqIG1f
cGFyZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCmluZGV4IGU2YzY3OGJlZmMwZjE5MGEyMjNlOWFk
ZGIyY2M1ODEwYjU2ZTFjMTQuLmNjMWEyMWI5ZWE1Y2NjYzZmMWFjZTRjOTc0OTg5OWJiZGE1ZDdl
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0cnVjdCBUaHJlYWRE
YXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZERhdGE+IHsKICAgICBUaHJl
YWREYXRhKCk7CiAgICAgflRocmVhZERhdGEoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllcjsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQ7CiAgICAgCiAgICAgTXV0ZXgg
cGFya2luZ0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25kaXRpb247CkBAIC00
MjMsNyArNDIzLDcgQEAgdm9pZCBlbnN1cmVIYXNodGFibGVTaXplKHVuc2lnbmVkIG51bVRocmVh
ZHMpCiB9CiAKIFRocmVhZERhdGE6OlRocmVhZERhdGEoKQotICAgIDogdGhyZWFkSWRlbnRpZmll
cihjdXJyZW50VGhyZWFkKCkpCisgICAgOiB0aHJlYWQoVGhyZWFkOjpjdXJyZW50KCkpCiB7CiAg
ICAgdW5zaWduZWQgY3VycmVudE51bVRocmVhZHM7CiAgICAgZm9yICg7OykgewpAQCAtNzkzLDcg
Kzc5Myw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25zdCB2
b2lkKiBhZGRyZXNzKQogICAgIHVucGFya0NvdW50KGFkZHJlc3MsIFVJTlRfTUFYKTsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFt
YmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCitORVZF
Ul9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8
dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKIHsKICAgICBWZWN0b3I8QnVj
a2V0Kj4gYnVja2V0c1RvVW5sb2NrID0gbG9ja0hhc2h0YWJsZSgpOwogCkBAIC04MDMsNyArODAz
LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2Nv
cGVkTGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmkKICAgICAgICAgaWYgKCFidWNrZXQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChUaHJlYWREYXRhKiBjdXJyZW50VGhyZWFk
RGF0YSA9IGJ1Y2tldC0+cXVldWVIZWFkOyBjdXJyZW50VGhyZWFkRGF0YTsgY3VycmVudFRocmVh
ZERhdGEgPSBjdXJyZW50VGhyZWFkRGF0YS0+bmV4dEluUXVldWUpCi0gICAgICAgICAgICBjYWxs
YmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhyZWFkSWRlbnRpZmllciwgY3VycmVudFRocmVhZERh
dGEtPmFkZHJlc3MpOworICAgICAgICAgICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRo
cmVhZC5nZXQoKSwgY3VycmVudFRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgIH0KICAgICAKICAg
ICB1bmxvY2tIYXNodGFibGUoYnVja2V0c1RvVW5sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BhcmtpbmdMb3QuaCBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAppbmRleCA3
ZDVmYjE3ZWZhMDJhYjc2YjEyOGVhZjU5OTgxMzgwMTAwYmFiZDk2Li5iNmQ4ODMwZDE5YzdiN2Zk
NGNjNmFjYWUzNjJhZWEzYjk0M2E5ZDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJr
aW5nTG90LmgKKysrIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCkBAIC0xNTgsNyArMTU4
LDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAg
ICBzdGF0aWMgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgewotICAgICAgICBm
b3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2
b2lkKik+KGZ1bmMpKTsKKyAgICAgICAgZm9yRWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQo
VGhyZWFkJiwgY29uc3Qgdm9pZCopPihmdW5jKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTcx
LDcgKzE3MSw3IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB1bnBhcmtPbmVJbXBsKAogICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLCBj
b25zdCBTY29wZWRMYW1iZGE8aW50cHRyX3QoVW5wYXJrUmVzdWx0KT4mIGNhbGxiYWNrKTsKIAot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+Jik7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgyODY1ZWE4MzVhODU1
MzdjMGU3NmMxYTcwOTAwYjlhNTgyOTAzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybVJl
Z2lzdGVyc19oCisjZGVmaW5lIFBsYXRmb3JtUmVnaXN0ZXJzX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5o
PgorI2VsaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1
ZGUgPHVjb250ZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBPUyhEQVJX
SU4pCisKKyNpZiBDUFUoWDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
UmVnaXN0ZXJzOworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0
X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFk
X3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVmIHBw
Y190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFSTSkKK3R5
cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2VsaWYgQ1BVKEFS
TTY0KQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxpZiBPUyhXSU5E
T1dTKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CisKKyNlbGlmIChPUyhG
UkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKwordXNpbmcgUGxhdGZv
cm1SZWdpc3RlcnMgPSBtY29udGV4dF90OworCisjZWxzZQorCitzdHJ1Y3QgUGxhdGZvcm1SZWdp
c3RlcnMgeworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKK307CisKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFBsYXRmb3JtUmVnaXN0ZXJzX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKaW5kZXgg
ZmUxNjMwYzk3MzViNWZmNTM1M2NiMmM1NThlMzEwNTgxMjQ3ODdkOC4uMjc3ZTY3NWRiM2M1NTVk
NWU0YzZjZTA0OTQ2ODg3NGQzNjc2OTU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVm
UHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQyLDcgKzQyLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc1JlZlB0ciA9IHRydWU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cigpIDogbV9w
dHIobnVsbHB0cikgeyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdGV4cHIgUmVmUHRyKCkgOiBt
X3B0cihudWxscHRyKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihUKiBwdHIpIDogbV9w
dHIocHRyKSB7IHJlZklmTm90TnVsbChwdHIpOyB9CiAgICAgQUxXQVlTX0lOTElORSBSZWZQdHIo
Y29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsg
fQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8pIDog
bV9wdHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCmluZGV4IDk0M2ZkNmQ3OWQwOTQ0MjU1MDNhYzg5NzMx
YjBhMDZhNmFjNDBmZmQuLmNiMjc1ZjcwMTJjZmU1NjYxZTQ5ZTBiNGZmMGQ5YzYyMWIwZTQ5OWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oCkBAIC0yOSw2ICsy
OSw4IEBACiAjaWZuZGVmIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAjZGVmaW5lIFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbl9oCiAKKyNpbmNsdWRlICJUaHJlYWRpbmcuaCIKKwogbmFtZXNw
YWNlIFdURiB7CiAKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVu
dCk7CkBAIC0zNiwxMyArMzgsMTUgQEAgdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZv
aWQqIGFyZ3VtZW50KTsKIHN0cnVjdCBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24gewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZGF0YSkKKyAgICBUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24oVGhyZWFkRnVuY3Rpb24gZnVuY3Rpb24sIFJlZlB0cjxUaHJlYWQ+JiYg
dGhyZWFkLCB2b2lkKiBkYXRhKQogICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAg
ICAsIHRocmVhZChXVEZNb3ZlKHRocmVhZCkpCiAgICAgICAgICwgZGF0YShkYXRhKQogICAgIHsK
ICAgICB9CiAKICAgICBUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBSZWZQdHI8VGhyZWFk
PiB0aHJlYWQ7CiAgICAgdm9pZCogZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU3YmY2NDZmODVhNDhmMzg4YTc2ODU5MjkxMGQ0MTRlZTc0ZjgwZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xk
ZXIuaCIKKworI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGhy
ZWFkU3BlY2lmaWNLZXkgVGhyZWFkSG9sZGVyOjptX2tleSA9IEludmFsaWRUaHJlYWRTcGVjaWZp
Y0tleTsKKworVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKK3sKKyAgICBtX3RocmVhZC0+
ZGlkRXhpdCgpOworfQorCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRo
cmVhZCkKK3sKKyAgICBpZiAoIWN1cnJlbnQoKSkgeworICAgICAgICAvLyBJZGVhbGx5IHdlJ2Qg
aGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQg
aHVydCBwZXJmb3JtYW5lLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBo
ZXJlIG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RG
Ojppbml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2Rl
LgorICAgICAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAg
ICAgICAgdGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlci5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzg5ZjQyYTBiNjM4Yjk5NmI5ZWUzYTkwNThkOTUyMjg4ZTE2YTQ2MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5oCkBAIC0wLDAgKzEsODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgVGhyZWFkSG9sZGVyX2gKKyNkZWZpbmUgVGhyZWFkSG9sZGVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIEhvbGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2UuIFRoZSBkZXN0cnVjdG9yIG9mIHRoaXMgaG9sZGVyIHJlbGlhYmx5IGRlc3Ry
b3kgVGhyZWFkLgorLy8gRm9yIHB0aHJlYWQsIGl0IGVtcGxveXMgcHRocmVhZHMtc3BlY2lmaWMg
Mi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZSBUaHJlYWQuCisvLyBGb3IgV2lu
ZG93cywgd2UgdXNlIHRocmVhZF9sb2NhbCB0byBkZWZlciB0aHJlYWQgaG9sZGVyIGRlc3RydWN0
aW9uLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMKKy8vIHR5cGVzIGRvbid0IHVz
ZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgorY2xhc3MgVGhyZWFkSG9sZGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOworcHVibGljOgorICAgIH5UaHJlYWRI
b2xkZXIoKTsKKworICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIGNsYXNz
IGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGlu
aXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgorICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVPbmNlKCk7CisKKyAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9m
IFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgorICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoVGhyZWFkJik7CisKKyAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNw
ZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KKyAgICBzdGF0aWMgVGhyZWFkSG9s
ZGVyKiBjdXJyZW50KCk7CisKKyAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFk
LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgVGhyZWFkSG9sZGVyKFRocmVhZCYgdGhyZWFkKQor
ICAgICAgICA6IG1fdGhyZWFkKHRocmVhZCkKKyAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1
Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgorICAgIC8vIC0g
Zmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJl
IGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJworICAg
IC8vIGFuZCAoMSkgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3Qg
b3IgKDIpIGNvbnN0cnVjdHMgdGhyZWFkIGxvY2FsIHZhbHVlIHRvIGNhbGwgaXQgYWdhaW4gbGF0
ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3Rv
cnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVt
b3ZlIHRoZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhl
IGNsZWFudXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgZGVzdHJ1Y3Qo
dm9pZCogZGF0YSk7CisKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVhZDsKKyAgICBib29sIG1faXNE
ZXN0cm95ZWRPbmNlOworICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpY0tleSBtX2tleTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVGhyZWFkSG9sZGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjgxNWFiYjZmNGVlZmM1
MjNlZGI5NzkzNWI5ZTI3NTVlODY0ZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKKworI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgVGhyZWFkSG9sZGVy
Ojppbml0aWFsaXplT25jZSgpCit7CisgICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJm1fa2V5
LCBkZXN0cnVjdCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkK
K3sKKyAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4odGhyZWFkU3BlY2lmaWNHZXQobV9rZXkp
KTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAg
VGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZEhv
bGRlcio+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7CisKKyAgICBp
ZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7CisgICAgICAgIGRl
bGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7CisgICAgLy8g
UmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNh
bGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxl
ZC4KKyAgICB0aHJlYWRTcGVjaWZpY1NldChtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlcldpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhkM2M4ZjZkYTk2ZWE5OTgxMWIyMTAyNWQzYzM2ZGE3NzlmZWM1ZWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwCkBAIC0wLDAgKzEs
MTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKKworI2luY2x1ZGUgPG11dGV4PgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworI2RlZmluZSBJ
bnZhbGlkVGhyZWFkSG9sZGVyICgoVGhyZWFkSG9sZGVyKikoMHhiYmFkYmVlZikpCisKK3N0YXRp
YyBzdGQ6Om11dGV4JiB0aHJlYWRNYXBNdXRleCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPHN0ZDo6bXV0ZXg+IG11dGV4OworICAgIHJldHVybiBtdXRleC5nZXQoKTsKK30KKworc3Rh
dGljIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgVGhyZWFkSG9sZGVyKj4mIHRocmVhZE1hcCgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwg
VGhyZWFkSG9sZGVyKj4+IG1hcDsKKyAgICByZXR1cm4gbWFwLmdldCgpOworfQorCit2b2lkIFRo
cmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIHRocmVhZE1hcE11dGV4KCk7Cisg
ICAgdGhyZWFkTWFwKCk7CisgICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJm1fa2V5LCBkZXN0
cnVjdCk7Cit9CisKK1RocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKK3sKKyAg
ICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICBUaHJlYWRI
b2xkZXIqIGhvbGRlciA9IHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHRocmVhZFNwZWNpZmlj
R2V0KG1fa2V5KSk7CisgICAgaWYgKGhvbGRlcikKKyAgICAgICAgcmV0dXJuIGhvbGRlcjsKKwor
ICAgIC8vIEFmdGVyIEZMUyBpcyBkZXN0cm95ZWQsIHRoaXMgbWFwIG9mZmVycyB0aGUgdmFsdWUg
dW50aWwgdGhlIHNlY29uZCB0aHJlYWQgZXhpdCBjYWxsYmFjayBpcyBjYWxsZWQuCisgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7CisgICAg
cmV0dXJuIHRocmVhZE1hcCgpLmdldChjdXJyZW50VGhyZWFkKCkpOworfQorCit2b2lkIFRocmVh
ZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBpZiAoZGF0YSA9PSBJbnZhbGlk
VGhyZWFkSG9sZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBUaHJlYWRIb2xkZXIqIGhvbGRl
ciA9IHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KGRhdGEpOworICAgIEFTU0VSVChob2xkZXIp
OworCisgICAgLy8gRGVsYXkgdGhlIGRlYWxsb2NhdGlvbiBvZiBUaHJlYWRIb2xkZXIgbW9yZS4K
KyAgICAvLyBJdCBkZWZlcnMgVGhyZWFkSG9sZGVyIGRlYWxsb2NhdGlvbiBhZnRlciB0aGUgb3Ro
ZXIgVGhyZWFkU3BlY2lmaWMgdmFsdWVzIGFyZSBkZWFsbG9jYXRlZC4KKyAgICBzdGF0aWMgdGhy
ZWFkX2xvY2FsIGNsYXNzIFRocmVhZEV4aXRDYWxsYmFjayB7CisgICAgcHVibGljOgorICAgICAg
ICBUaHJlYWRFeGl0Q2FsbGJhY2soVGhyZWFkSG9sZGVyKiBob2xkZXIpCisgICAgICAgICA6IG1f
aG9sZGVyKGhvbGRlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgflRocmVhZEV4
aXRDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocmVhZEhvbGRlcjo6ZGVzdHJ1
Y3QobV9ob2xkZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBUaHJlYWRI
b2xkZXIqIG1faG9sZGVyOworICAgIH0gY2FsbGJhY2soaG9sZGVyKTsKKworICAgIGlmIChob2xk
ZXItPm1faXNEZXN0cm95ZWRPbmNlKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgICAgICAg
ICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGhvbGRlci0+bV90aHJlYWQtPmlkKCkpKTsK
KyAgICAgICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZShob2xkZXItPm1fdGhyZWFkLT5pZCgpKTsK
KyAgICAgICAgfQorICAgICAgICBkZWxldGUgaG9sZGVyOworCisgICAgICAgIC8vIEZpbGwgdGhl
IEZMUyB3aXRoIHRoZSBub24tbnVsbHB0ciB2YWx1ZS4gV2hpbGUgRkxTIGRlc3RydWN0b3Igd29u
J3QgYmUgY2FsbGVkIGZvciB0aGF0LAorICAgICAgICAvLyBub24tbnVsbHB0ciB2YWx1ZSB0ZWxs
cyB1cyB0aGF0IHdlIGFscmVhZHkgZGVzdHJ1Y3RlZCBUaHJlYWRIb2xkZXIuIEl0IGxlYWRzIGlu
Y29ycmVjdAorICAgICAgICAvLyB1c2Ugb2YgVGhyZWFkOjpjdXJyZW50KCkgY3Jhc2guCisgICAg
ICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5LCBJbnZhbGlkVGhyZWFkSG9sZGVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6
Om11dGV4PiBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7CisgICAgICAgIHRocmVhZE1hcCgpLmFk
ZChob2xkZXItPm1fdGhyZWFkLT5pZCgpLCBob2xkZXIpOworICAgIH0KKyAgICB0aHJlYWRTcGVj
aWZpY1NldChtX2tleSwgSW52YWxpZFRocmVhZEhvbGRlcik7CisgICAgaG9sZGVyLT5tX2lzRGVz
dHJveWVkT25jZSA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGJlYmZlOTNiYTVjNzBhOWI0ZjRiNWYyNjU3MjFkZDE2OWJmZjE0My4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoUFRIUkVBRFMp
Ci0KLSNpbmNsdWRlICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCi0KLSNpbmNsdWRl
ICJUaHJlYWRpbmcuaCIKLQotI2lmIE9TKEhVUkQpCi0vLyBQVEhSRUFEX0tFWVNfTUFYIGlzIG5v
dCBkZWZpbmVkIGluIGJpb25pYyBub3IgaW4gSHVyZCwgc28gZXhwbGljaXRseSBkZWZpbmUgaXQg
aGVyZS4KLSNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCAxMDI0Ci0jZWxzZQotI2luY2x1ZGUgPGxp
bWl0cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi1wdGhyZWFkX2tleV90IFRocmVh
ZElkZW50aWZpZXJEYXRhOjptX2tleSA9IFBUSFJFQURfS0VZU19NQVg7Ci0KLXZvaWQgdGhyZWFk
RGlkRXhpdChUaHJlYWRJZGVudGlmaWVyKTsKLQotVGhyZWFkSWRlbnRpZmllckRhdGE6On5UaHJl
YWRJZGVudGlmaWVyRGF0YSgpCi17Ci0gICAgdGhyZWFkRGlkRXhpdChtX2lkZW50aWZpZXIpOwot
fQotCi12b2lkIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgpCi17Ci0gICAg
aW50IGVycm9yID0gcHRocmVhZF9rZXlfY3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOwotICAgIGlm
IChlcnJvcikKLSAgICAgICAgQ1JBU0goKTsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBUaHJlYWRJ
ZGVudGlmaWVyRGF0YTo6aWRlbnRpZmllcigpCi17Ci0gICAgQVNTRVJUKG1fa2V5ICE9IFBUSFJF
QURfS0VZU19NQVgpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRhKiB0aHJlYWRJZGVudGlmaWVy
RGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXJEYXRhKj4ocHRocmVhZF9nZXRzcGVj
aWZpYyhtX2tleSkpOwotCi0gICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXJEYXRhID8gdGhyZWFk
SWRlbnRpZmllckRhdGEtPm1faWRlbnRpZmllciA6IDA7Ci19Ci0KLXZvaWQgVGhyZWFkSWRlbnRp
ZmllckRhdGE6OmluaXRpYWxpemUoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBBU1NFUlQo
IWlkZW50aWZpZXIoKSk7Ci0gICAgLy8gSWRlYWxseSB3ZSdkIGhhdmUgdGhpcyBhcyBhIHJlbGVh
c2UgYXNzZXJ0IGV2ZXJ5d2hlcmUsIGJ1dCB0aGF0IHdvdWxkIGh1cnQgcGVyZm9ybWFuZS4KLSAg
ICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJlIG1lYW5zIHRoYXQgd2Ugd2lsbCBj
YXRjaCAiZGlkbid0IGNhbGwKLSAgICAvLyBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKSBzb29u
IGVub3VnaCIgYnVncyBpbiByZWxlYXNlIG1vZGUuCi0gICAgUkVMRUFTRV9BU1NFUlQobV9rZXkg
IT0gUFRIUkVBRF9LRVlTX01BWCk7Ci0gICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgbmV3
IFRocmVhZElkZW50aWZpZXJEYXRhKGlkKSk7Ci19Ci0KLXZvaWQgVGhyZWFkSWRlbnRpZmllckRh
dGE6OmRlc3RydWN0KHZvaWQqIGRhdGEpCi17Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEqIHRo
cmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEqPihk
YXRhKTsKLSAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmllckRhdGEpOwotCi0gICAgaWYgKHRocmVh
ZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSkgewotICAgICAgICBkZWxldGUgdGhy
ZWFkSWRlbnRpZmllckRhdGE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0aHJlYWRJ
ZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOwotICAgIC8vIFJlLXNldHRp
bmcgdGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3QoKSBjYWxsIGFmdGVy
IGFsbCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQuCi0gICAg
cHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggODQzNDlhMGNkZGFhZWM4NjBiY2JlNGJjMGE3MjViZDI3NWU3MmViZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzX2gKLSNkZWZpbmUgVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkc19oCi0KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBIb2xkcyBUaHJlYWRJZGVudGlmaWVyIGluIHRoZSB0
aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBhbmQgZW1wbG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBh
c3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlCi0vLyBUaHJlYWRJZGVudGlmaWVyIGZy
b20gdGhyZWFkTWFwLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMgdHlwZXMgZG9u
J3QgdXNlIG11bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCi1jbGFzcyBUaHJlYWRJZGVudGlmaWVy
RGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkSWRlbnRpZmllckRhdGEpOwot
cHVibGljOgotICAgIH5UaHJlYWRJZGVudGlmaWVyRGF0YSgpOwotCi0gICAgLy8gT25lIHRpbWUg
aW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9sZS4KLSAgICAvLyBUaGlzIG1l
dGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgpIGFuZCBpdCBpcyBub3QgdGhy
ZWFkLXNhZmUuCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKLQotICAgIC8vIENy
ZWF0ZXMgYW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkSWRlbnRpZmllckRhdGEgaW50byB0
aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFRocmVh
ZElkZW50aWZpZXIgaWRlbnRpZmllcik7Ci0KLSAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNw
ZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KLSAgICBzdGF0aWMgVGhyZWFkSWRl
bnRpZmllciBpZGVudGlmaWVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgVGhyZWFkSWRlbnRpZmllckRh
dGEoVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyKQotICAgICAgICA6IG1faWRlbnRpZmllcihp
ZGVudGlmaWVyKQotICAgICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICAvLyBUaGlzIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNhbGxlZCAy
IHRpbWVzIHdoZW4gdGhyZWFkIHRlcm1pbmF0ZXM6Ci0gICAgLy8gLSBmaXJzdCwgd2hlbiBhbGwg
dGhlIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBpdCBzaW1w
bHkgcmVtZW1iZXJzIGl0IHdhcyAnZGVzdHJveWVkIG9uY2UnCi0gICAgLy8gYW5kIHJlLXNldHMg
aXRzZWxmIGludG8gdGhlIHRocmVhZC1zcGVjaWZpYyBzbG90IHRvIG1ha2UgUHRocmVhZHMgdG8g
Y2FsbCBpdCBhZ2FpbiBsYXRlci4KLSAgICAvLyAtIHNlY29uZCwgYWZ0ZXIgYWxsIHRocmVhZC1z
cGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGludm9rZWQsIGl0IGdldHMgY2FsbGVkIGFnYWluIC0g
dGhpcyB0aW1lLCB3ZSByZW1vdmUgdGhlCi0gICAgLy8gVGhyZWFkSWRlbnRpZmllciBmcm9tIHRo
ZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAuCi0gICAgc3RhdGljIHZvaWQgZGVz
dHJ1Y3Qodm9pZCogZGF0YSk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsK
LSAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOwotICAgIHN0YXRpYyBwdGhyZWFkX2tleV90IG1f
a2V5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzX2gKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRT
cGVjaWZpYy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaAppbmRleCBmMDkwNGZj
ZjYyNDQ5ZTJkM2JhYzcwM2QyZGE3NDYwMGJiN2UzOTQ4Li4xZjk4MzYzZTkzNDEzNGM0MTQzMzM2
YzhiODJmOGFmYzQzODE1ZTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVj
aWZpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKQEAgLTQ4LDYgKzQ4
LDE0IEBACiAKICNpZiBVU0UoUFRIUkVBRFMpCiAjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaWYg
T1MoSFVSRCkKKy8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQgaW4gYmlvbmljIG5v
ciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgorI2RlZmluZSBQVEhSRUFE
X0tFWVNfTUFYIDEwMjQKKyNlbHNlCisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKwogI2Vs
aWYgT1MoV0lORE9XUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKQEAgLTEwOSw2ICsx
MTcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBDYW5CZUdDVGhyZWFkIGNhbkJlR0NUaHJlYWQg
PSBDYW5CZUdDVGhyZWFkOjpGYWxzZT4gY2xhc3MgVAogCiB0eXBlZGVmIHB0aHJlYWRfa2V5X3Qg
VGhyZWFkU3BlY2lmaWNLZXk7CiAKK3N0YXRpYyBjb25zdCBjb25zdGV4cHIgVGhyZWFkU3BlY2lm
aWNLZXkgSW52YWxpZFRocmVhZFNwZWNpZmljS2V5ID0gUFRIUkVBRF9LRVlTX01BWDsKKwogaW5s
aW5lIHZvaWQgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNLZXkqIGtleSwg
dm9pZCAoKmRlc3RydWN0b3IpKHZvaWQgKikpCiB7CiAgICAgaW50IGVycm9yID0gcHRocmVhZF9r
ZXlfY3JlYXRlKGtleSwgZGVzdHJ1Y3Rvcik7CkBAIC0xNzEsNiArMTgxLDggQEAgV1RGX0VYUE9S
VF9QUklWQVRFIERXT1JEKiBmbHNLZXlzKCk7CiAKIHR5cGVkZWYgRFdPUkQgVGhyZWFkU3BlY2lm
aWNLZXk7CiAKK3N0YXRpYyBjb25zdCBjb25zdGV4cHIgVGhyZWFkU3BlY2lmaWNLZXkgSW52YWxp
ZFRocmVhZFNwZWNpZmljS2V5ID0gRkxTX09VVF9PRl9JTkRFWEVTOworCiBpbmxpbmUgdm9pZCB0
aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVjaWZpY0tleSoga2V5LCB2b2lkIChUSFJF
QURfU1BFQ0lGSUNfQ0FMTCAqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKIHsKICAgICBEV09SRCBmbHNL
ZXkgPSBGbHNBbGxvYyhkZXN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmluZGV4IGMxZGMzNTAx
OTAzYWI3NmIzNzA0NmQ5MzMzZjkzMmEzZWYwYzZjNmUuLjcxODc4MTQxMDE4ZTY4MDNjMDA3MDcx
YTJmNmZhNjBlYzIwM2NlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtNDUsNyArNDUsNyBAQCBz
dHJ1Y3QgTmV3VGhyZWFkQ29udGV4dCB7CiAgICAgTXV0ZXggY3JlYXRpb25NdXRleDsKIH07CiAK
LWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkK
K2NvbnN0IGNoYXIqIFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJl
YWROYW1lKQogewogI2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQogICAgIHJldHVybiB0aHJl
YWROYW1lOwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZv
aWQqIGNvbnRleHREYXRhKQogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3Jl
YXRpb25NdXRleCk7CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5h
bChjb250ZXh0LT5uYW1lKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29udGV4dC0+bmFtZSk7CiAKICAgICBhdXRvIGVudHJ5UG9pbnQgPSBXVEZNb3ZlKGNv
bnRleHQtPmVudHJ5UG9pbnQpOwogCkBAIC05MiwyNCArOTIsMjQgQEAgc3RhdGljIHZvaWQgdGhy
ZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICBlbnRyeVBvaW50KCk7CiB9CiAK
LVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBlbnRyeVBvaW50KQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUo
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQpCiB7CiAg
ICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFt
ZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgeyB9IH07CiAKICAgICAvLyBQcmV2ZW50IHRoZSB0aHJl
YWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1bnRpbCB3ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgdGhyZWFk
IGlkZW50aWZpZXIuCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0
ZXgpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVRocmVhZEludGVybmFsKHRocmVhZEVudHJ5UG9pbnQs
IGNvbnRleHQsIG5hbWUpOworICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKHRocmVh
ZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0
ZVRocmVhZChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFy
KiBuYW1lKQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50
cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlVGhyZWFkKG5hbWUsIFtlbnRyeVBvaW50LCBkYXRhXSB7CisgICAgcmV0dXJuIFRocmVhZDo6
Y3JlYXRlKG5hbWUsIFtlbnRyeVBvaW50LCBkYXRhXSB7CiAgICAgICAgIGVudHJ5UG9pbnQoZGF0
YSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZl
KGludCByZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1Vz
ZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFPU19DTEFT
U0VTKQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTIwLDcgKzEyMCw3
IEBAIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVBy
aW9yaXR5KQogI2VuZGlmCiB9CiAKLXZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRl
ZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNV
c2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNT
RVMpCiAgICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMzQsMTMgKzEzNCwx
MyBAQCB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJp
b3JpdHkpCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKIHN0YXRpYyBxb3NfY2xhc3NfdCBnbG9iYWxN
YXhRT1NjbGFzcyB7IFFPU19DTEFTU19VTlNQRUNJRklFRCB9OwogCi12b2lkIHNldEdsb2JhbE1h
eFFPU0NsYXNzKHFvc19jbGFzc190IG1heENsYXNzKQordm9pZCBUaHJlYWQ6OnNldEdsb2JhbE1h
eFFPU0NsYXNzKHFvc19jbGFzc190IG1heENsYXNzKQogewogICAgIGJtYWxsb2M6OmFwaTo6c2V0
U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MobWF4Q2xhc3MpOwogICAgIGdsb2JhbE1heFFPU2NsYXNz
ID0gbWF4Q2xhc3M7CiB9CiAKLXFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNz
X3Qgb3JpZ2luYWxDbGFzcykKK3Fvc19jbGFzc190IFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhx
b3NfY2xhc3NfdCBvcmlnaW5hbENsYXNzKQogewogICAgIGlmIChnbG9iYWxNYXhRT1NjbGFzcyAh
PSBRT1NfQ0xBU1NfVU5TUEVDSUZJRUQpCiAgICAgICAgIHJldHVybiBzdGQ6Om1pbihvcmlnaW5h
bENsYXNzLCBnbG9iYWxNYXhRT1NjbGFzcyk7CkBAIC0xNDgsNCArMTQ4LDkgQEAgcW9zX2NsYXNz
X3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvcmlnaW5hbENsYXNzKQogfQogI2VuZGlm
CiAKK3ZvaWQgVGhyZWFkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1faWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXgg
NmI1NThiM2UxZDUxN2U4MTBjNWVhOGY2YjJjYTQ0MDVhY2YwMTJkMi4uNjlhZDljNGI0ODQxNjk0
ZmI4ZTAwN2RmZmViMmY5OWVkMjBjMDljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTEsNiArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29v
ZCAoamhheWdvb2RAcmVha3RpeC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhh
eWdvb2QgPGpoYXlnb29kQHJlYWt0aXguY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsNzUgKzM2LDE3MiBAQAogLy8gTm90aGluZyBpbiB0aGlzIGhlYWRlciBk
ZXBlbmRzIG9uIEFzc2VydGlvbnMsIEF0b21pY3MsIExvY2tlciwgTm9uY29weWFibGUsIFRocmVh
ZFNhZmVSZWZDb3VudGVkLCBvciBUaHJlYWRpbmdQcmltaXRpdmVzLgogCiAjaW5jbHVkZSA8ZnVu
Y3Rpb25hbD4KKyNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJp
bWl0aXZlcy5oPgogCisjaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQorI2luY2x1ZGUg
PHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
VEYgewogCi10eXBlZGVmIHVpbnQzMl90IFRocmVhZElkZW50aWZpZXI7Cit1c2luZyBUaHJlYWRJ
ZGVudGlmaWVyID0gdWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9p
ZCogYXJndW1lbnQpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhl
IG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8vIERhcndp
biBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20g
YW55IHRocmVhZCwgdGhlIG9ubHkgCi0vLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBjYWxscyBh
cmUgbm90IHJlZW50cmFudC4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJl
YWRpbmcoKTsKK2NsYXNzIFRocmVhZEhvbGRlcjsKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFz
cyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CitwdWJsaWM6
CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKIAotLy8gUmV0dXJucyAwIGlmIHRocmVh
ZCBjcmVhdGlvbiBmYWlsZWQuCi0vLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwg
c2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KLVdU
Rl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFy
KiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB+VGhyZWFkKCk7CiAKLS8vIE1hcmsgdGhlIGN1cnJlbnQgdGhyZWFkIGFzIHJlcXVpcmlu
ZyBVSSByZXNwb25zaXZlbmVzcy4KLS8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0
aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBw
cmlvcml0eS4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJ
bnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0
eSA9IDApOworICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVk
LgorICAgIC8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBvbiBzb21l
IHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlKGNvbnN0IGNoYXIqIHRocmVhZE5h
bWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCog
ZGF0YSwgY29uc3QgY2hhciogbmFtZSk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRJZGVu
dGlmaWVyIGN1cnJlbnRUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNoYW5nZVRo
cmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIsIGludCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
aW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIpOwotV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworICAgIC8vIFJl
dHVybnMgVGhyZWFkIG9iamVjdC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVh
ZCYgY3VycmVudCgpOwogCi0vLyBEZXByZWNhdGVkIGZ1bmN0aW9uLXBvaW50ZXItYmFzZWQgdGhy
ZWFkIGNyZWF0aW9uLgotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRl
VGhyZWFkKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7Cisg
ICAgLy8gUmV0dXJucyBUaHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYg
dGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCBpZGVudGl0eQorICAgIC8vIG9mIHRocmVhZHMgYW5k
IGVuc3VyZSB0aGUgdGhyZWFkIGxpZmV0aW1lLiBXaGlsZSBUaHJlYWQ6OmN1cnJlbnQoKSBpcyBu
b3Qgc2FmZSBpZiBpdCBpcyBjYWxsZWQKKyAgICAvLyBmcm9tIHRoZSBkZXN0cnVjdG9yIG9mIHRo
ZSBvdGhlciBUTFMgZGF0YSwgY3VycmVudElEKCkgYWx3YXlzIHJldHVybnMgbWVhbmluZ2Z1bCB0
aHJlYWQgSUQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBjcmVhdGVUaHJl
YWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVybmFs
KFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHkoaW50KTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFs
aXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUg
bXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4KLXZvaWQgaW5pdGlhbGl6ZUN1cnJl
bnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyNpZiBPUyhEQVJXSU4p
CisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBrZXJuX3JldHVybl90OworI2VsaWYg
VVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9yID0gaW50OworI2Vs
aWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IERXT1JEOwor
I2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhy
ZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPHZvaWQsIFBsYXRmb3Jt
U3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVz
dW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLWJvb2wgc2lnbmFsVGhyZWFkKFRo
cmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNlbmRpZgogCisgICAgLy8gTWFyayB0
aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJlc3BvbnNpdmVuZXNzLgorICAgIC8v
IHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0xNSwgMF0gd2hlcmUg
YSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlvcml0eS4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKGlu
dCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkg
PSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgcW9z
X2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFzc190IGFkanVzdGVkUU9TQ2xhc3Mo
cW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlIFdURgorICAgIC8vIEludGVy
bmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgorICAg
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiwgdm9p
ZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCi11c2luZyBXVEY6OlRocmVhZElkZW50aWZp
ZXI7Ci11c2luZyBXVEY6OmNyZWF0ZVRocmVhZDsKLXVzaW5nIFdURjo6Y3VycmVudFRocmVhZDsK
LXVzaW5nIFdURjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHk7Ci11c2luZyBXVEY6OmRldGFjaFRocmVh
ZDsKLXVzaW5nIFdURjo6d2FpdEZvclRocmVhZENvbXBsZXRpb247CisgICAgLy8gQ2FsbGVkIGlu
IHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICAgIC8vIEhlbHBmdWwgZm9yIHBs
YXRmb3JtcyB3aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhl
IHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub3JtYWxp
emVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOwogCiAjaWYgVVNFKFBUSFJFQURT
KQotdXNpbmcgV1RGOjpzaWduYWxUaHJlYWQ7CisgICAgdm9pZCBlc3RhYmxpc2gocHRocmVhZF90
KTsKKyNlbHNlCisgICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJlYWRJZGVudGlmaWVyKTsK
ICNlbmRpZgogCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLXVzaW5nIFdURjo6c2V0R2xvYmFsTWF4
UU9TQ2xhc3M7Ci11c2luZyBXVEY6OmFkanVzdGVkUU9TQ2xhc3M7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworI2lmIFVTRShQVEhS
RUFEUykgJiYgIU9TKERBUldJTikKKyAgICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyU3VzcGVu
ZFJlc3VtZShpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVjb250ZXh0KTsKICNlbmRpZgogCisgICAg
VGhyZWFkSWRlbnRpZmllciBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBUaHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJldHVybiBp
ZCgpID09IHRocmVhZC5pZCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBU
aHJlYWQmIHRocmVhZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpZCgpICE9IHRocmVhZC5pZCgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWQoKTsKKworICAgIGVudW0gSm9pbmFibGVT
dGF0ZSB7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBj
YW4gYmUgam9pbmVkIG9uLgorICAgICAgICBKb2luYWJsZSwKKworICAgICAgICAvLyBTb21lYm9k
eSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0aHJlYWQgZmluYWxseSBl
eGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBhCisgICAgICAg
IC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0aGUgdGhyZWFkIGV4aXRzICh3aGljaCBj
YXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQgdGhlIHJlbWFpbmRlciBvZiB3YWl0T25U
aHJlYWRDb21wbGV0aW9uIHRvIHJ1bikKKyAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhp
dCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhyZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVs
ZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5jZSB0aGVyZSdzCisgICAgICAgIC8vIG5vYm9keSBlbHNl
IHRvIHBpY2sgdXAgdGhlIHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29t
cGxldGlvbiBoYXMgYWxyZWFkeSByZXR1cm5lZCkuCisgICAgICAgIEpvaW5lZCwKKworICAgICAg
ICAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIGpv
aW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0IHRha2UgY2FyZSBvZiBjbGVh
bmluZyB1cCBhZnRlciBpdHNlbGYuCisgICAgICAgIERldGFjaGVkLAorICAgIH07CisKKyAgICBK
b2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0K
KyAgICB2b2lkIGRpZEJlY29tZURldGFjaGVkKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBEZXRhY2hl
ZDsgfQorICAgIHZvaWQgZGlkRXhpdCgpOworICAgIHZvaWQgZGlkSm9pbigpIHsgbV9qb2luYWJs
ZVN0YXRlID0gSm9pbmVkOyB9CisgICAgYm9vbCBoYXNFeGl0ZWQoKSB7IHJldHVybiBtX2RpZEV4
aXQ7IH0KKworICAgIC8vIFdvcmRMb2NrICYgTG9jayByZWx5IG9uIFRocmVhZFNwZWNpZmljLiBC
dXQgVGhyZWFkIG9iamVjdCBjYW4gYmUgZGVzdHJveWVkIGV2ZW4gYWZ0ZXIgVGhyZWFkU3BlY2lm
aWMgdGhpbmdzIGFyZSBkZXN0cm95ZWQuCisgICAgc3RkOjptdXRleCBtX211dGV4OworICAgIFRo
cmVhZElkZW50aWZpZXIgbV9pZCB7IDAgfTsKKyAgICBKb2luYWJsZVN0YXRlIG1fam9pbmFibGVT
dGF0ZSB7IEpvaW5hYmxlIH07CisgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9OworI2lmIFVT
RShQVEhSRUFEUykKKyAgICBwdGhyZWFkX3QgbV9oYW5kbGU7CisjaWYgT1MoREFSV0lOKQorICAg
IG1hY2hfcG9ydF90IG1fcGxhdGZvcm1UaHJlYWQ7CisjZWxzZQorICAgIHNlbV90IG1fc2VtYXBo
b3JlRm9yU3VzcGVuZFJlc3VtZTsKKyAgICBtY29udGV4dF90IG1fc3VzcGVuZGVkTWFjaGluZUNv
bnRleHQ7CisgICAgdW5zaWduZWQgbV9zdXNwZW5kQ291bnQgeyAwIH07CisgICAgc3RkOjphdG9t
aWM8Ym9vbD4gbV9zdXNwZW5kZWQgeyBmYWxzZSB9OworI2VuZGlmCisjZWxpZiBPUyhXSU5ET1dT
KQorICAgIEhBTkRMRSBtX2hhbmRsZTsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBTeXN0ZW0KKyNl
bmRpZgorfTsKKworLy8gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWlu
IHRocmVhZC4gSXQgaXMgc2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCisvLyBEYXJ3aW4gaXMg
YW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0
aHJlYWQsIHRoZSBvbmx5CisvLyByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBjYWxscyBhcmUgbm90
IHJlZW50cmFudC4KK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmco
KTsKKworaW5saW5lIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCgpCit7CisgICAgcmV0
dXJuIFRocmVhZDo6Y3VycmVudElEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2lu
ZyBXVEY6OlRocmVhZElkZW50aWZpZXI7Cit1c2luZyBXVEY6OlRocmVhZDsKK3VzaW5nIFdURjo6
Y3VycmVudFRocmVhZDsKKwogI2VuZGlmIC8vIFRocmVhZGluZ19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKaW5kZXggZjVjZWUzYzE3NzgyZjY2YWY5YjA0Y2M3ZDU2Y2ExZGE1YTY5
MmQwZi4uNTc1MmVlZTI4Njg4MzlkOWUyYjU1ODc4YzgwOGQ2MWM4ZDZmYzgxYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNv
bSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3Rp
eC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSwxMyArNDIsMTcgQEAKICNpbmNsdWRlICJSYW5kb21OdW1iZXJTZWVkLmgiCiAjaW5j
bHVkZSAiU3RkTGliRXh0cmFzLmgiCiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
LmgiCi0jaW5jbHVkZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIgotI2luY2x1ZGUg
IlRocmVhZFNwZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCisjaW5jbHVkZSA8
ZXJybm8uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1dU
RlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JkTG9j
ay5oPgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKIAog
I2lmICFDT01QSUxFUihNU1ZDKQogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNTUsMTI3ICs2MCwx
NDMgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKLSNpZiBPUyhMSU5VWCkKLSNp
bmNsdWRlIDxzeXMvcHJjdGwuaD4KLSNlbmRpZgotCi0jaWYgIU9TKERBUldJTikKLSNpbmNsdWRl
IDxzaWduYWwuaD4KLSNlbmRpZgorI2lmICFPUyhEQVJXSU4pICYmIE9TKFVOSVgpCiAKLW5hbWVz
cGFjZSBXVEYgeworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAK
LWNsYXNzIFB0aHJlYWRTdGF0ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgZW51bSBKb2luYWJsZVN0YXRlIHsKLSAgICAgICAgSm9pbmFibGUsIC8vIFRoZSBk
ZWZhdWx0IHRocmVhZCBzdGF0ZS4gVGhlIHRocmVhZCBjYW4gYmUgam9pbmVkIG9uLgotCi0gICAg
ICAgIEpvaW5lZCwgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5k
IHRoaXMgdGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0
aGVyZSBjYW4gYmUgYSAKLSAgICAgICAgICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVu
IHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1
cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pIAot
ICAgICAgICAgICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBu
ZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRh
dGEgc2luY2UgdGhlcmUncyAKLSAgICAgICAgICAgICAgICAvLyBub2JvZHkgZWxzZSB0byBwaWNr
IHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVhZENvbXBsZXRpb24g
aGFzIGFscmVhZHkgcmV0dXJuZWQpLgotCi0gICAgICAgIERldGFjaGVkIC8vIFRoZSB0aHJlYWQg
aGFzIGJlZW4gZGV0YWNoZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgam9pbmVkIG9uLiBBdCB0aGlz
IHBvaW50LCB0aGUgdGhyZWFkIG11c3QgdGFrZSBjYXJlIG9mIGNsZWFuaW5nIHVwIGFmdGVyIGl0
c2VsZi4KLSAgICB9OwotCi0gICAgLy8gQ3VycmVudGx5IGFsbCB0aHJlYWRzIGNyZWF0ZWQgYnkg
V1RGIHN0YXJ0IG91dCBhcyBqb2luYWJsZS4gCi0gICAgUHRocmVhZFN0YXRlKHB0aHJlYWRfdCBo
YW5kbGUpCi0gICAgICAgIDogbV9qb2luYWJsZVN0YXRlKEpvaW5hYmxlKQotICAgICAgICAsIG1f
ZGlkRXhpdChmYWxzZSkKLSAgICAgICAgLCBtX3B0aHJlYWRIYW5kbGUoaGFuZGxlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxlU3RhdGUoKSB7IHJldHVybiBtX2pv
aW5hYmxlU3RhdGU7IH0KLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSgpIHsgcmV0dXJuIG1f
cHRocmVhZEhhbmRsZTsgfQotICAgIHZvaWQgZGlkQmVjb21lRGV0YWNoZWQoKSB7IG1fam9pbmFi
bGVTdGF0ZSA9IERldGFjaGVkOyB9Ci0gICAgdm9pZCBkaWRFeGl0KCkgeyBtX2RpZEV4aXQgPSB0
cnVlOyB9Ci0gICAgdm9pZCBkaWRKb2luKCkgeyBtX2pvaW5hYmxlU3RhdGUgPSBKb2luZWQ7IH0K
LSAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1fZGlkRXhpdDsgfQorI2lmIE9TKFNPTEFS
SVMpCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjZWxzZQorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNl
bmRpZgogCi1wcml2YXRlOgotICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlOwotICAg
IGJvb2wgbV9kaWRFeGl0OwotICAgIHB0aHJlYWRfdCBtX3B0aHJlYWRIYW5kbGU7Ci19OworI2lm
IEhBVkUoUFRIUkVBRF9OUF9IKQorI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyNlbmRpZgogCi10
eXBlZGVmIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFB0aHJlYWRT
dGF0ZT4+IFRocmVhZE1hcDsKKyNlbmRpZgogCi12b2lkIHVuc2FmZVRocmVhZFdhc0RldGFjaGVk
KFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIp
Owotdm9pZCB0aHJlYWRXYXNKb2luZWQoVGhyZWFkSWRlbnRpZmllcik7CituYW1lc3BhY2UgV1RG
IHsKIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCitUaHJlYWQ6OlRocmVhZCgpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0
ZXg7CisjaWYgIU9TKERBUldJTikKKyAgICBzZW1faW5pdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5k
UmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MuICovIDAsIC8qIEluaXRp
YWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOworI2VuZGlmCiB9CiAKLXZvaWQgaW5p
dGlhbGl6ZVRocmVhZGluZygpCitUaHJlYWQ6On5UaHJlYWQoKQogewotICAgIHN0YXRpYyBib29s
IGlzSW5pdGlhbGl6ZWQ7Ci0KLSAgICBpZiAoaXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBXVEY6OmRvdWJsZV9jb252ZXJz
aW9uOjppbml0aWFsaXplKCk7Ci0gICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBj
b25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCi0gICAg
Ly8gc28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KLSAgICBTdHJp
bmdJbXBsOjplbXB0eSgpOwotICAgIHRocmVhZE1hcE11dGV4KCk7Ci0gICAgaW5pdGlhbGl6ZVJh
bmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRhOjppbml0aWFs
aXplT25jZSgpOwotICAgIHd0ZlRocmVhZERhdGEoKTsKLSAgICBpbml0aWFsaXplRGF0ZXMoKTsK
KyNpZiAhT1MoREFSV0lOKQorICAgIHNlbV9kZXN0cm95KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRS
ZXN1bWUpOworI2VuZGlmCiB9CiAKLXN0YXRpYyBUaHJlYWRNYXAmIHRocmVhZE1hcCgpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZE1hcD4gbWFwOwotICAgIHJldHVybiBtYXA7
Ci19CisjaWYgIU9TKERBUldJTikKIAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmll
ckJ5UHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCi17Ci0gICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworLy8gV2UgdXNlIFNJR1VTUjIg
dG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBpbiBKYXZhU2NyaXB0Q29yZS4K
K3N0YXRpYyBjb25zdGV4cHIgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgPSBTSUdV
U1IyOworc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZCo+IHRhcmdldFRocmVhZCB7IG51bGxwdHIg
fTsKK3N0YXRpYyBTdGF0aWNXb3JkTG9jayBnbG9iYWxTdXNwZW5kTG9jazsKIAotICAgIFRocmVh
ZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0g
dGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAocHRocmVhZF9lcXVhbChpLT52
YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxlKSAmJiAhaS0+dmFsdWUtPmhhc0V4
aXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmtleTsKK3ZvaWQgVGhyZWFkOjpzaWduYWxI
YW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVjb250ZXh0KQorewor
ICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2NhbCBhdG9taWMgdHlwZXMgZnJvbSBzaWduYWwgaGFu
ZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJlYWQqIHRocmVhZCA9IHRhcmdldFRocmVhZC5sb2Fk
KCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlv
biB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCisgICAg
ICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nl
c3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhl
IHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwg
YmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCisg
ICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0
b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2Fs
bGVkLgorICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5
Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHJldHVybiAwOworICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKKyNpZiBDUFUoUFBDKQorICAgIHRocmVhZC0+bV9z
dXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9ICp1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQudWNfcmVn
czsKKyNlbHNlCisgICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1hY2hpbmVDb250ZXh0ID0gdXNlckNv
bnRleHQtPnVjX21jb250ZXh0OworI2VuZGlmCisKKyAgICAvLyBBbGxvdyBzdXNwZW5kIGNhbGxl
ciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQuCisgICAgLy8gc2VtX3Bvc3Qg
aXMgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb24uIEl0IG1lYW5zIHRoYXQgd2UgY2FuIGNhbGwg
dGhpcyBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuCisgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3Vw
Lm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3Rh
Z18wMl8wNF8wMworICAgIC8vCisgICAgLy8gQW5kIHNlbV9wb3N0IGVtaXRzIG1lbW9yeSBiYXJy
aWVyIHRoYXQgZW5zdXJlcyB0aGF0IHN1c3BlbmRlZE1hY2hpbmVDb250ZXh0IGlzIGNvcnJlY3Rs
eSBzYXZlZC4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5
OTkxOTc5OS9iYXNlZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdfMDRfMTEKKyAgICBzZW1fcG9zdCgm
dGhyZWFkLT5tX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworCisgICAgLy8gUmVhY2hpbmcg
aGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAo
dGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgorICAgIC8vIFNvIGJl
Zm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0
aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBl
eGVjdXRlZCByZWN1cnNpdmVseS4KKyAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OworICAg
IHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOworICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNp
Z25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7CisgICAgc2lnc3VzcGVuZCgmYmxvY2tl
ZFNpZ25hbFNldCk7CisKKyAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRo
aXMgdGhyZWFkIGlzIHJlc3VtZWQuCisgICAgc2VtX3Bvc3QoJnRocmVhZC0+bV9zZW1hcGhvcmVG
b3JTdXNwZW5kUmVzdW1lKTsKIH0KIAotc3RhdGljIFRocmVhZElkZW50aWZpZXIgZXN0YWJsaXNo
SWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUoY29uc3QgcHRocmVhZF90JiBwdGhyZWFkSGFuZGxl
KQorI2VuZGlmIC8vICFPUyhEQVJXSU4pCisKK3ZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7
Ci0gICAgQVNTRVJUKCFpZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKHB0aHJlYWRIYW5kbGUpKTsK
LSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgc3RhdGljIFRo
cmVhZElkZW50aWZpZXIgaWRlbnRpZmllckNvdW50ID0gMTsKLSAgICB0aHJlYWRNYXAoKS5hZGQo
aWRlbnRpZmllckNvdW50LCBzdGQ6Om1ha2VfdW5pcXVlPFB0aHJlYWRTdGF0ZT4ocHRocmVhZEhh
bmRsZSkpOwotICAgIHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplS2V5
LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKKyAg
ICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpOworICAgICAgICAvLyBTdHJpbmdJ
bXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRo
cmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8gc28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRp
YWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAg
aW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOworICAgICAgICB3dGZUaHJlYWREYXRh
KCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygpOworCisjaWYgIU9TKERBUldJTikKKyAgICAg
ICAgLy8gU2lnbmFsIGhhbmRsZXJzIGFyZSBwcm9jZXNzIGdsb2JhbCBjb25maWd1cmF0aW9uLgor
ICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsb2NrIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaW4g
dGhlIGhhbmRsZXIuCisgICAgICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBh
bGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCisgICAgICAgIHN0cnVjdCBzaWdh
Y3Rpb24gYWN0aW9uOworICAgICAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOworICAg
ICAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsK
KworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gVGhyZWFkOjpzaWduYWxIYW5kbGVyU3Vz
cGVuZFJlc3VtZTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJ
R0lORk87CisgICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9u
LCAwKTsKKyNlbmRpZgorICAgIH0pOwogfQogCi1zdGF0aWMgcHRocmVhZF90IHB0aHJlYWRIYW5k
bGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZChUaHJlYWRJZGVudGlmaWVyIGlkKQor
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCkK
IHsKLSAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKS0+cHRocmVhZEhhbmRsZSgpOworI2lm
ICFPUyhEQVJXSU4pCisgICAgc2lnc2V0X3QgbWFzazsKKyAgICBzaWdlbXB0eXNldCgmbWFzayk7
CisgICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKKyAgICBwdGhy
ZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMg
dm9pZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAgICAvLyBCYWxhbmNl
ZCBieSAubGVha1B0cigpIGluIGNyZWF0ZVRocmVhZEludGVybmFsLgorICAgIC8vIEJhbGFuY2Vk
IGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbC4KICAgICBhdXRvIGludm9j
YXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihzdGF0aWNf
Y2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOworCisgICAgVGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplKCppbnZvY2F0aW9uLT50aHJlYWQpOworICAgIGludm9jYXRpb24tPnRo
cmVhZCA9IG51bGxwdHI7CisKICAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5k
YXRhKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVU
aHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25z
dCBjaGFyKikKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVu
Y3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciopCiB7Ci0gICAgYXV0byBp
bnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVu
dHJ5UG9pbnQsIGRhdGEpOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKG5l
dyBUaHJlYWQoKSk7CisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIHRocmVhZC5nZXQoKSwgZGF0YSk7CiAg
ICAgcHRocmVhZF90IHRocmVhZEhhbmRsZTsKICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOwogICAg
IHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKQEAgLTE4NiwxNyArMjA3LDE4IEBAIFRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uCiAgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHIpOwogICAgIGlm
IChlcnJvcikgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcHRocmVhZCBh
dCBlbnRyeSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZv
Y2F0aW9uLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIC8vIEJhbGFuY2VkIGJ5IHN0ZDo6dW5pcXVlX3B0ciBjb25zdHJ1Y3Rv
ciBpbiB3dGZUaHJlYWRFbnRyeVBvaW50LgogICAgIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiog
bGVha2VkSW52b2NhdGlvbiA9IGludm9jYXRpb24ucmVsZWFzZSgpOwogICAgIFVOVVNFRF9QQVJB
TShsZWFrZWRJbnZvY2F0aW9uKTsKIAotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9y
UHRocmVhZEhhbmRsZSh0aHJlYWRIYW5kbGUpOworICAgIHRocmVhZC0+ZXN0YWJsaXNoKHRocmVh
ZEhhbmRsZSk7CisgICAgcmV0dXJuIHRocmVhZDsKIH0KIAotdm9pZCBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCit2b2lkIFRocmVhZDo6aW5p
dGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKQogewog
I2lmIEhBVkUoUFRIUkVBRF9TRVROQU1FX05QKQogICAgIHB0aHJlYWRfc2V0bmFtZV9ucChub3Jt
YWxpemVUaHJlYWROYW1lKHRocmVhZE5hbWUpKTsKQEAgLTIwNSwxMjMgKzIyNywyMzQgQEAgdm9p
ZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUp
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh0aHJlYWROYW1lKTsKICNlbmRpZgotCi0gICAgVGhy
ZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUocHRocmVhZF9zZWxm
KCkpOwotICAgIEFTU0VSVChpZCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxp
emUoaWQpOworICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgp
OwogfQotICAgIAotdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElELCBpbnQgZGVsdGEpCi17Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGU7Ci0gICAg
QVNTRVJUKHRocmVhZElEKTsKIAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRo
cmVhZE1hcE11dGV4KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZv
cklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJU
KHB0aHJlYWRIYW5kbGUpOwotICAgIH0KK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0eShpbnQg
ZGVsdGEpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRl
eCk7CiAKICAgICBpbnQgcG9saWN5OwogICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKIAot
ICAgIGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0ocHRocmVhZEhhbmRsZSwgJnBvbGljeSwgJnBh
cmFtKSkKKyAgICBpZiAocHRocmVhZF9nZXRzY2hlZHBhcmFtKG1faGFuZGxlLCAmcG9saWN5LCAm
cGFyYW0pKQogICAgICAgICByZXR1cm47CiAKICAgICBwYXJhbS5zY2hlZF9wcmlvcml0eSArPSBk
ZWx0YTsKIAotICAgIHB0aHJlYWRfc2V0c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxlLCBwb2xpY3ks
ICZwYXJhbSk7CisgICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKG1faGFuZGxlLCBwb2xpY3ksICZw
YXJhbSk7CiB9CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEKQoraW50IFRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24oKQogewotICAgIHB0aHJl
YWRfdCBwdGhyZWFkSGFuZGxlOwotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KKyAgICBwdGhyZWFk
X3QgaGFuZGxlOwogICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBsb2NrIGFjcm9z
cyB0aGUgY2FsbCB0byBqb2luLCBzaW5jZSB0aGF0IGNhbiBibG9jayBvdXIgdGhyZWFkIGFuZCBj
YXVzZSBkZWFkbG9jay4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4
KCkpOwotICAgICAgICBwdGhyZWFkSGFuZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJX
aXRoTG9ja0FscmVhZHlIZWxkKHRocmVhZElEKTsKLSAgICAgICAgQVNTRVJUKHB0aHJlYWRIYW5k
bGUpOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4
KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7CiAgICAgfQogCi0gICAgaW50IGpvaW5SZXN1
bHQgPSBwdGhyZWFkX2pvaW4ocHRocmVhZEhhbmRsZSwgMCk7CisgICAgaW50IGpvaW5SZXN1bHQg
PSBwdGhyZWFkX2pvaW4oaGFuZGxlLCAwKTsKIAogICAgIGlmIChqb2luUmVzdWx0ID09IEVERUFE
TEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8g
YmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VS
Uk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWlu
ZyB0byBxdWl0IiwgbV9pZCk7CiAgICAgZWxzZSBpZiAoam9pblJlc3VsdCkKLSAgICAgICAgTE9H
X0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgam9pbmVkLlxuIiwg
dGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVu
YWJsZSB0byBiZSBqb2luZWQuXG4iLCBtX2lkKTsKIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCku
Z2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIEFTU0VSVChzdGF0ZS0+am9p
bmFibGVTdGF0ZSgpID09IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpOworICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIEFTU0VSVChqb2luYWJsZVN0
YXRlKCkgPT0gSm9pbmFibGUpOwogCi0gICAgLy8gVGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0
ZWQsIHNvIGNsZWFuIHVwIGFmdGVyIGl0LgotICAgIGlmIChzdGF0ZS0+aGFzRXhpdGVkKCkpCi0g
ICAgICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7CisgICAgLy8gVGhlIHRocmVhZCBo
YXMgYWxyZWFkeSBleGl0ZWQsIGRvIG5vdGhpbmcuCiAgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3Qg
ZXhpdGVkIHlldCwgc28gZG9uJ3QgY2xlYW4gYW55dGhpbmcgdXAuIEp1c3Qgc2lnbmFsIHRoYXQg
d2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQgc28gdGhhdCBpdCB3aWxsIGNsZWFuIHVwIGFmdGVy
IGl0c2VsZi4KLSAgICBlbHNlCi0gICAgICAgIHN0YXRlLT5kaWRKb2luKCk7CisgICAgaWYgKCFo
YXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkSm9pbigpOwogCiAgICAgcmV0dXJuIGpvaW5SZXN1bHQ7
CiB9CiAKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit2b2lk
IFRocmVhZDo6ZGV0YWNoKCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotCi0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFu
ZGxlID0gcHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKHRocmVh
ZElEKTsKLSAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Ci0KLSAgICBpbnQgZGV0YWNoUmVzdWx0
ID0gcHRocmVhZF9kZXRhY2gocHRocmVhZEhhbmRsZSk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgaW50IGRldGFjaFJlc3VsdCA9IHB0aHJl
YWRfZGV0YWNoKG1faGFuZGxlKTsKICAgICBpZiAoZGV0YWNoUmVzdWx0KQotICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwg
dGhyZWFkSUQpOwotCi0gICAgUHRocmVhZFN0YXRlKiBzdGF0ZSA9IHRocmVhZE1hcCgpLmdldCh0
aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICBpZiAoc3RhdGUtPmhhc0V4aXRlZCgp
KQotICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOwotICAgIGVsc2UKLSAgICAg
ICAgdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElEKS0+ZGlkQmVjb21lRGV0YWNoZWQoKTsKKyAgICAg
ICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNo
ZWRcbiIsIG1faWQpOworCisgICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkQmVjb21l
RGV0YWNoZWQoKTsKIH0KIAotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQpCitUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRN
YXAoKS5nZXQodGhyZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgCi0gICAgc3RhdGUt
PmRpZEV4aXQoKTsKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJl
bnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgpOwogCi0g
ICAgaWYgKHN0YXRlLT5qb2luYWJsZVN0YXRlKCkgIT0gUHRocmVhZFN0YXRlOjpKb2luYWJsZSkK
LSAgICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKKyAgICAvLyBOb3QgYSBXVEYt
Y3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4K
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOworICAg
IHRocmVhZC0+ZXN0YWJsaXNoKHB0aHJlYWRfc2VsZigpKTsKKyAgICBUaHJlYWRIb2xkZXI6Omlu
aXRpYWxpemUoKnRocmVhZCk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKCk7CisgICAgcmV0dXJuICp0aHJlYWQ7CiB9CiAKLVRocmVhZElkZW50aWZpZXIg
Y3VycmVudFRocmVhZCgpCitUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKIHsK
LSAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gVGhyZWFkSWRlbnRpZmllckRhdGE6OmlkZW50aWZp
ZXIoKTsKLSAgICBpZiAoaWQpCi0gICAgICAgIHJldHVybiBpZDsKKyAgICByZXR1cm4gY3VycmVu
dCgpLmlkKCk7Cit9CiAKLSAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElk
ZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KLSAgICBpZCA9IGVzdGFibGlzaElkZW50
aWZpZXJGb3JQdGhyZWFkSGFuZGxlKHB0aHJlYWRfc2VsZigpKTsKLSAgICBUaHJlYWRJZGVudGlm
aWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Ci0gICAgcmV0dXJuIGlkOworYm9vbCBUaHJlYWQ6OnNp
Z25hbChpbnQgc2lnbmFsTnVtYmVyKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRl
eD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBlcnJObyA9IHB0aHJlYWRfa2lsbChtX2hhbmRs
ZSwgc2lnbmFsTnVtYmVyKTsKKyAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMg
c3VjY2Vzcy4KIH0KIAotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCwgaW50IHNpZ25hbE51bWJlcikKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0ZWQ8
dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+CiB7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5k
bGU7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRoaXMg
IT0gJmN1cnJlbnQoKSwgIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1
cnJlbnQgdGhyZWFkIGl0c2VsZi4iKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+
IGxvY2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAga2Vybl9yZXR1cm5fdCByZXN1
bHQgPSB0aHJlYWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFkKTsKKyAgICBpZiAocmVzdWx0ICE9
IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHsgfTsKKyNlbHNlCiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxl
Rm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NF
UlQocHRocmVhZEhhbmRsZSk7CisgICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9y
IHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisg
ICAgICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4K
KyAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFk
cyBBIGFuZCBCLgorICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBh
dHRlbXB0IHRvIHN1c3BlbmQgQS4KKyAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFu
ZCBsYXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCisgICAgICAgIC8vIElu
IHRoYXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAgICAgV29yZExvY2tIb2xk
ZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRDb3Vu
dCkgeworICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVh
ZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KKyAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBw
bGF0Zm9ybXMsIGxpa2UgTGludXguCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhy
ZWFkKiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhl
IHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOwor
ICAgICAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFk
U3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgICAgICAgICAgc2VtX3dhaXQoJm1f
c2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJp
ZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBh
bGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVk
LnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAg
ICAgICsrbV9zdXNwZW5kQ291bnQ7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlm
Cit9CisKK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3Rk
OjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyAgICB0aHJlYWRfcmVz
dW1lKG1fcGxhdGZvcm1UaHJlYWQpOworI2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyBy
ZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUg
b3RoZXIgdGhyZWFkcy4KKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3Bl
bmRMb2NrKTsKKyAgICAgICAgaWYgKG1fc3VzcGVuZENvdW50ID09IDEpIHsKKyAgICAgICAgICAg
IC8vIFdoZW4gYWxsb3dpbmcgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpbnRlcnJ1cHQgaW4gdGhl
IHNpZ25hbCBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQgYW5kIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
aXMgYWN0dWFsbHkgaXNzdWVkLAorICAgICAgICAgICAgLy8gdGhlIHNpZ25hbCBoYW5kbGVyIGl0
c2VsZiB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWluLgorICAgICAgICAgICAgLy8gVGhlcmUgYXJl
IHNldmVyYWwgd2F5cyB0byBkaXN0aW5ndWlzaCB0aGUgaGFuZGxlciBpbnZvY2F0aW9uIGZvciBz
dXNwZW5kIGFuZCByZXN1bWUuCisgICAgICAgICAgICAvLyAxLiBVc2UgZGlmZmVyZW50IHNpZ25h
bCBudW1iZXJzLiBBbmQgY2hlY2sgdGhlIHNpZ25hbCBudW1iZXIgaW4gdGhlIGhhbmRsZXIuCisg
ICAgICAgICAgICAvLyAyLiBVc2Ugc29tZSBhcmd1bWVudHMgdG8gZGlzdGluZ3Vpc2ggc3VzcGVu
ZCBhbmQgcmVzdW1lIGluIHRoZSBoYW5kbGVyLiBJZiBwdGhyZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1
c2VkLCB3ZSBjYW4gdGFrZSB0aGlzLgorICAgICAgICAgICAgLy8gMy4gVXNlIHRocmVhZCBsb2Nh
bCBzdG9yYWdlIHdpdGggYXRvbWljIHZhcmlhYmxlcyBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuCisg
ICAgICAgICAgICAvLyBJbiB0aGlzIGltcGxlbWVudGFpdG9uLCB3ZSB0YWtlICgzKS4gc3VzcGVu
ZGVkIGZsYWcgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBpdC4KKyAgICAgICAgICAgIHRhcmdldFRo
cmVhZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwobV9oYW5kbGUs
IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHNlbV93YWl0KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwor
ICAgICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlv
biBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRv
bmUuCisgICAgICAgICAgICBtX3N1c3BlbmRlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSk7CisgICAgICAgIH0KKyAgICAgICAgLS1tX3N1c3BlbmRDb3VudDsKKyAgICB9
CisjZW5kaWYKK30KKworc2l6ZV90IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0
ZXJzJiByZWdpc3RlcnMpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
ZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorI2lmIENQVShYODYpCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0gc2l6ZW9mKHJlZ2lzdGVycykgLyBzaXplb2YoaW50KTsKKyAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoWDg2
XzY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHg4Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsK
KyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0geDg2X1RIUkVBRF9TVEFURTY0Owor
I2VsaWYgQ1BVKFBQQykKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRF
X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NU
QVRFOworI2VsaWYgQ1BVKFBQQzY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJF
QURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBD
X1RIUkVBRF9TVEFURTY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQg
PSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2
b3IgPSBBUk1fVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHVuc2lnbmVkIHVz
ZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxh
dm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OworI2Vsc2UKKyNlcnJvciBVbmtub3du
IEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVh
ZF9nZXRfc3RhdGUobV9wbGF0Zm9ybVRocmVhZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJl
Z2lzdGVycywgJnVzZXJDb3VudCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsK
KyAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVU
VFlfRlVOQ1RJT04sICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVz
ZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFi
bHkgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3Vw
cG9ydGVkLiIsIHJlc3VsdCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiB1
c2VyQ291bnQgKiBzaXplb2YodWludHB0cl90KTsKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZp
bmVkKF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8
fCBDUFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKyAgICByZWdpc3RlcnMgPSBtX3N1c3BlbmRlZE1h
Y2hpbmVDb250ZXh0OworICAgIHJldHVybiBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpOworI2Vs
aWYgT1MoT1BFTkJTRCkKKyAgICAvLyBodHRwOi8vbWFuLm9wZW5ic2Qub3JnL3B0aHJlYWRfc3Rh
Y2tzZWdfbnAuMworICAgIHN0YWNrX3Qgc3M7CisgICAgaW50IHJjID0gcHRocmVhZF9zdGFja3Nl
Z19ucChtX2hhbmRsZSwgJnNzKTsKKyAgICByZWdpc3RlcnMuc3RhY2tQb2ludGVyID0gc3Muc3Nf
c3A7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsK
KyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlKTsKKyNpZiBIQVZFKFBUSFJFQURfTlBf
SCkgfHwgT1MoTkVUQlNEKQorICAgIC8vIGUuZy4gb24gRnJlZUJTRCA1LjQsIG5ldW5kb3JmQGtk
ZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKG1faGFuZGxlLCAmYXR0cmlidXRlKTsKKyNl
bHNlCisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQ
T1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKKyAgICBwdGhy
ZWFkX2dldGF0dHJfbnAobV9oYW5kbGUsICZhdHRyaWJ1dGUpOworI2VuZGlmCisKKyAgICB2b2lk
KiBzdGFja0Jhc2UgPSAwOworICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAgIGludCByYyA9
IHB0aHJlYWRfYXR0cl9nZXRzdGFjaygmYXR0cmlidXRlLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXpl
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJjLCAhcmMpOworICAgIEFTU0VSVChzdGFja0Jhc2UpOwor
ICAgIHJlZ2lzdGVycy5zdGFja1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNl
KSArIHN0YWNrU2l6ZTsKKworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyaWJ1dGUpOwor
CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQorewor
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIG1f
ZGlkRXhpdCA9IHRydWU7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2gocHRocmVhZF90IGhh
bmRsZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4
KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBpZiAoIW1faWQpIHsKKyAgICAgICAgc3Rh
dGljIHN0ZDo6YXRvbWljPFRocmVhZElkZW50aWZpZXI+IHByb3ZpZGVyIHsgMCB9OworICAgICAg
ICBtX2lkID0gKytwcm92aWRlcjsKKyNpZiBPUyhEQVJXSU4pCisgICAgICAgIG1fcGxhdGZvcm1U
aHJlYWQgPSBwdGhyZWFkX21hY2hfdGhyZWFkX25wKGhhbmRsZSk7CisjZW5kaWYKICAgICB9Ci0g
ICAgaW50IGVyck5vID0gcHRocmVhZF9raWxsKHB0aHJlYWRIYW5kbGUsIHNpZ25hbE51bWJlcik7
Ci0gICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9CiAKIE11
dGV4OjpNdXRleCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3Bw
IGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAppbmRleCA1NGI0M2VmZWYzNWNkNjYz
MmE3MDA4MTUwN2E1YjM3OTlkZWZiNmZiLi5kZTExNjY0MWNiOGQ5OTE5NDNjZGI0NDY5ZmI0NmVm
OTQ0NzllY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKQEAgLTk0LDYgKzk0LDcgQEAKIAog
I2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAj
aW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTA5
LDYgKzExMCwxNCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorVGhyZWFkOjpUaHJlYWQoKQorewor
fQorCitUaHJlYWQ6On5UaHJlYWQoKQoreworfQorCiAvLyBNU19WQ19FWENFUFRJT04sIFRIUkVB
RE5BTUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9tIDxodHRw
Oi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4uCiBzdGF0
aWMgY29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAtMTIxLDcg
KzEzMCw3IEBAIHR5cGVkZWYgc3RydWN0IHRhZ1RIUkVBRE5BTUVfSU5GTyB7CiB9IFRIUkVBRE5B
TUVfSU5GTzsKICNwcmFnbWEgcGFjayhwb3ApCiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJl
YWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCit2b2lkIFRocmVhZDo6aW5pdGlh
bGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiB7CiAj
aWYgQ09NUElMRVIoTUlOR1cpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aHJlYWQgbmFtZSBz
ZXR0aW5nIHdpdGggTWluZ1cuCkBAIC0xMjksNyArMTM4LDcgQEAgdm9pZCBpbml0aWFsaXplQ3Vy
cmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbHNlCiAgICAg
VEhSRUFETkFNRV9JTkZPIGluZm87CiAgICAgaW5mby5kd1R5cGUgPSAweDEwMDA7Ci0gICAgaW5m
by5zek5hbWUgPSBub3JtYWxpemVUaHJlYWROYW1lKHN6VGhyZWFkTmFtZSk7CisgICAgaW5mby5z
ek5hbWUgPSBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoc3pUaHJlYWROYW1lKTsKICAgICBp
bmZvLmR3VGhyZWFkSUQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICAgICBpbmZvLmR3RmxhZ3Mg
PSAwOwogCkBAIC0xNDAsNzAgKzE0OSwzOSBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFk
SW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBN
dXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRl
eD4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCiB2b2lkIGluaXRpYWxpemVUaHJlYWRp
bmcoKQogewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQ7Ci0gICAgCi0gICAgaWYgKGlz
SW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVl
OwotCi0gICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0
cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGlu
IGEgdGhyZWFkc2FmZSBmYXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0
aWFsaXplZCBmcm9tIGhlcmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRN
YXBNdXRleCgpOwotICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICB3
dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlhbGl6ZURhdGVzKCk7Ci19Ci0KLXN0YXRpYyBIYXNo
TWFwPERXT1JELCBIQU5ETEU+JiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxIYXNoTWFwPERXT1JELCBIQU5ETEU+PiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShp
bml0aWFsaXplS2V5LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKKyAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpOworICAgICAg
ICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0
cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8gc28gZW5zdXJlIGl0IGhh
cyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHko
KTsKKyAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOworICAgICAgICB3
dGZUaHJlYWREYXRhKCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygpOworICAgIH0pOwogfQog
Ci1zdGF0aWMgdm9pZCBzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcihEV09SRCB0aHJlYWRJ
RCwgSEFORExFIHRocmVhZEhhbmRsZSkKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhy
ZWFkRW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhy
ZWFkTWFwTXV0ZXgoKSk7Ci0gICAgQVNTRVJUKCF0aHJlYWRNYXAoKS5jb250YWlucyh0aHJlYWRJ
RCkpOwotICAgIHRocmVhZE1hcCgpLmFkZCh0aHJlYWRJRCwgdGhyZWFkSGFuZGxlKTsKLX0KKyAg
ICAvLyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwuCisg
ICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbj4oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKIAot
c3RhdGljIEhBTkRMRSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIg
aWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHJl
dHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQorICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZSgqaW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRy
OwogCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRl
bnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7
Ci0gICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgdGhyZWFkTWFwKCku
cmVtb3ZlKGlkKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRy
eVBvaW50KHZvaWQqIHBhcmFtKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlv
bkludm9jYXRpb24+IGludm9jYXRpb24oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0
aW9uKj4ocGFyYW0pKTsKICAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5kYXRh
KTsKLQogICAgIHJldHVybiAwOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZElu
dGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIq
IHRocmVhZE5hbWUpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVh
ZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUp
CiB7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAg
ICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJRCA9IDA7Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRhdGEpOworICAgIGF1dG8gaW52b2Nh
dGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBv
aW50LCB0aHJlYWQucHRyKCksIGRhdGEpOwogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWlu
dGVycHJldF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQ
b2ludCwgaW52b2NhdGlvbi5nZXQoKSwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKICAgICBpZiAo
IXRocmVhZEhhbmRsZSkgewogI2lmICFIQVZFKEVSUk5PX0gpCkBAIC0yMTksNTUgKzE5NywxMjAg
QEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBl
bnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURfUEFSQU0obGVha2VkSW52b2Nh
dGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KHRo
cmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKHRocmVh
ZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1cm4gdGhyZWFkSUQ7CisgICAg
dGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBy
ZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0eShp
bnQgZGVsdGEpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIEhBTkRMRSB0aHJlYWRI
YW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXRo
cmVhZEhhbmRsZSkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRvZXMg
bm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCIsIHRocmVhZElEKTsKLQotICAgIFNl
dFRocmVhZFByaW9yaXR5KHRocmVhZEhhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1BTCArIGRl
bHRhKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsK
KyAgICBTZXRUaHJlYWRQcmlvcml0eShtX2hhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1BTCAr
IGRlbHRhKTsKIH0KIAotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSUQpCitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgQVNT
RVJUKHRocmVhZElEKTsKLSAgICAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFu
ZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkaWQgbm90IGNvcnJlc3BvbmQgdG8g
YW4gYWN0aXZlIHRocmVhZCB3aGVuIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotIAotICAg
IERXT1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZEhhbmRsZSwgSU5G
SU5JVEUpOworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5k
bGU7CisgICAgfQorCisgICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3Qo
aGFuZGxlLCBJTkZJTklURSk7CiAgICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0g
ICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVh
ZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJU
aHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBx
dWl0IiwgbV9pZCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlciht
X211dGV4KTsKKyAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgpID09IEpvaW5hYmxlKTsKIAotICAg
IENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVu
dGlmaWVyKHRocmVhZElEKTsKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwg
ZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24n
dCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5l
ZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICgh
aGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0
OwogfQogCi12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9p
ZCBUaHJlYWQ6OmRldGFjaCgpCit7CisgICAgLy8gV2UgZm9sbG93IHRoZSBwdGhyZWFkIHNlbWFu
dGljczogZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNhbGxlZCwKKyAgICAvLyB3ZSBjYW4gc3Rp
bGwgcGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgb250byB0aGUgdGhyZWFkLiBGb3IgZXhhbXBs
ZSwKKyAgICAvLyB3ZSBjYW4gZG8gcHRocmVhZF9raWxsIGZvciB0aGUgZGV0YWNoZWQgdGhyZWFk
LiBUaGUgcHJvYmxlbSBpbiBXaW5kb3dzCisgICAgLy8gaXMgdGhhdCBjbG9zaW5nIEhBTkRMRSBs
b3NlcyB0aGUgd2F5IHRvIGRvIHN1Y2ggb3BlcmF0aW9ucy4KKyAgICAvLyBUbyBkbyBzbywgd2Ug
ZG8gbm90aGluZyBoZXJlIGluIFdpbmRvd3MuIE9yaWdpbmFsIGRldGFjaCdzIHB1cnBvc2UsCisg
ICAgLy8gcmVsZWFzaW5nIHRocmVhZCByZXNvdXJjZSB3aGVuIHRoZSB0aHJlYWQgZXhpdHMsIHdp
bGwgYmUgYWNoaWV2ZWQgYnkKKyAgICAvLyBGbHNDYWxsYmFjayBhdXRvbWF0aWNhbGx5LiBGbHND
YWxsYmFjayB3aWxsIGNhbGwgQ2xvc2VIYW5kbGUgdG8gY2xlYW4gdXAKKyAgICAvLyByZXNvdXJj
ZS4gU28gaW4gdGhpcyBmdW5jdGlvbiwgd2UganVzdCBtYXJrIHRoZSB0aHJlYWQgYXMgZGV0YWNo
ZWQgdG8KKyAgICAvLyBhdm9pZCBjYWxsaW5nIHdhaXRGb3JDb21wbGV0aW9uIGZvciB0aGlzIHRo
cmVhZC4KKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsK
KyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOworfQor
CithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVu
ZEVycm9yPgoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0
ZXgpOworICAgIERXT1JEIHJlc3VsdCA9IFN1c3BlbmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlm
IChyZXN1bHQgIT0gKERXT1JEKS0xKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChyZXN1bHQpOworfQorCisvLyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9y
IHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2
b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+
IGxvY2tlcihtX211dGV4KTsKKyAgICBSZXN1bWVUaHJlYWQobV9oYW5kbGUpOworfQorCitzaXpl
X3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsK
LSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4g
bG9ja2VyKG1fbXV0ZXgpOworICAgIHJlZ2lzdGVycy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lO
VEVHRVIgfCBDT05URVhUX0NPTlRST0w7CisgICAgR2V0VGhyZWFkQ29udGV4dChtX2hhbmRsZSwg
JnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVvZihDT05URVhUKTsKK30KKworVGhyZWFkJiBU
aHJlYWQ6OmN1cnJlbnQoKQoreworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRl
cjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFk
KCk7CisKKyAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIg
aXMgbm90IGVzdGFibGlzaGVkIHlldC4KKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJl
ZigqbmV3IFRocmVhZCgpKTsKKworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgYm9vbCBpc1N1Y2Nl
c3NmdWwgPSBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRo
cmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLCAmaGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRF
X1NBTUVfQUNDRVNTKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwogCi0gICAg
SEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQp
OwotICAgIGlmICh0aHJlYWRIYW5kbGUpCi0gICAgICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRs
ZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICB0
aHJlYWQtPmVzdGFibGlzaChoYW5kbGUsIGN1cnJlbnRJRCgpKTsKKyAgICBUaHJlYWRIb2xkZXI6
OmluaXRpYWxpemUodGhyZWFkLmdldCgpKTsKKyAgICByZXR1cm4gdGhyZWFkLmdldCgpOwogfQog
Ci1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQorVGhyZWFkSWRlbnRpZmllciBUaHJl
YWQ6OmN1cnJlbnRJRCgpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZp
ZXI+KEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKIH0KIAordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQor
eworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAg
IG1fZGlkRXhpdCA9IHRydWU7CisgICAgLy8gSXQgaXMgT0sgYmVjYXVzZSBGTFNBbGxvYydzIGNh
bGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZXJlIGFyZSBzb21lIG9wZW4gaGFu
ZGxlcy4KKyAgICAvLyBUaGlzIGVhc2lseSBlbnN1cmVzIHRoYXQgYWxsIHRoZSB0aHJlYWQgcmVz
b3VyY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KKyAgICBpZiAobV9oYW5kbGUpCisgICAg
ICAgIENsb3NlSGFuZGxlKG1faGFuZGxlKTsKK30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChI
QU5ETEUgaGFuZGxlLCBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoreworICAgIHN0ZDo6dW5p
cXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0gaGFu
ZGxlOworICAgIG1faWQgPSB0aHJlYWRJRDsKK30KKwogTXV0ZXg6Ok11dGV4KCkKIHsKICAgICBt
X211dGV4Lm1fcmVjdXJzaW9uQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKaW5kZXggYjJhMGE3
OWY0YWI1YWFjMjg5YjE2OWY5MmJiYzFhODA1ODUyY2EzMi4uOTczMGZjZjBmMDkyMWZkZWQ5MGY4
OWYxMjkwZTc3NDkwYjUzOTcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVl
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCkBAIC03NCw3ICs3NCw3IEBA
IHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNvbnN0
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAKICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrZXJz
LmFwcGVuZChjcmVhdGVUaHJlYWQoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wgV29ya2VyICV1
IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtlcnMu
YXBwZW5kKFRocmVhZDo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQb29sIFdvcmtlciAl
dSIsIGkpLnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CiAgICAgICAgICAgICAgICAgICAgIHRocmVh
ZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICB9CkBAIC0xMTQsNyAr
MTE0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0aW9u
cywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKICAgICAgICAgQ29uZGl0aW9uIG1fY29u
ZGl0aW9uOwogICAgICAgICBEZXF1ZTxjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Kj4gbV9x
dWV1ZTsKIAotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV93b3JrZXJzOworICAg
ICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IG1fd29ya2VyczsKICAgICB9OwogCiAgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxUaHJlYWRQb29sPiB0aHJlYWRQb29sOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUu
aAppbmRleCBhNDdmMjFlMjBkMzFiYzhiZjczMThmNDFiOTU3YWIzNjZjMTkxNTAzLi43NjM0NWMw
NjkzMTY0ZjY4Y2E0YjFjNjY0NDg0YTI3M2NjNmU4YmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApAQCAtMTAz
LDcgKzEwMyw3IEBAIGNsYXNzIFdvcmtRdWV1ZSBmaW5hbCA6IHB1YmxpYyBGdW5jdGlvbkRpc3Bh
dGNoZXIgewogCiAgICAgSEFORExFIG1fdGltZXJRdWV1ZTsKICNlbGlmIFVTRShHTElCX0VWRU5U
X0xPT1ApIHx8IFVTRShHRU5FUklDX0VWRU5UX0xPT1ApCi0gICAgVGhyZWFkSWRlbnRpZmllciBt
X3dvcmtRdWV1ZVRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3dvcmtRdWV1ZVRocmVhZDsK
ICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAgICBDb25kaXRp
b24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICBSdW5Mb29wKiBtX3J1bkxvb3A7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXggMWE3MjE5YWQyNTll
ZDc1OTcyYTVhNDU4YzVjNDg0OTdhMzg4ZTRkMy4uNTllZTFmODViNDM1Y2UxYTcyZjUwNTBmNGRm
NjJlZmNmYmJjODJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVl
Q29jb2EuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcApA
QCAtNDksMTUgKzQ5LDE1IEBAIHN0YXRpYyBkaXNwYXRjaF9xb3NfY2xhc3NfdCBkaXNwYXRjaFFP
U0NsYXNzKFdvcmtRdWV1ZTo6UU9TIHFvcykKIHsKICAgICBzd2l0Y2ggKHFvcykgewogICAgIGNh
c2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZToKLSAgICAgICAgcmV0dXJuIGFkanVz
dGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOworICAgICAgICByZXR1cm4g
VGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKTsKICAg
ICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW5pdGlhdGVkOgotICAgICAgICByZXR1cm4gYWRq
dXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOworICAgICAgICByZXR1cm4g
VGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CiAgICAg
Y2FzZSBXb3JrUXVldWU6OlFPUzo6RGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9T
Q2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOworICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3Rl
ZFFPU0NsYXNzKFFPU19DTEFTU19ERUZBVUxUKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpV
dGlsaXR5OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElU
WSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VU
SUxJVFkpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OkJhY2tncm91bmQ6Ci0gICAgICAgIHJl
dHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsKKyAgICAgICAgcmV0
dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dST1VORCk7CiAgICAg
fQogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVl
R2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3Bw
CmluZGV4IDkzNGEzOGNiYmU2NGJiZmZhZWI0ZDM3ZGYxYjhkOTk1MmI4ODUzNDQuLmRhODc1ZDFm
YTA0Y2VmNTI0YjBkYzE4NmIzOWE0NjJkNjgwNDQ2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2Vu
ZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtMzUsNyArMzUsNyBAQAogdm9pZCBXb3JrUXVl
dWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MpCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsK
LSAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZChuYW1lLCBbdGhpc10geworICAg
IG1fd29ya1F1ZXVlVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUobmFtZSwgW3RoaXNdIHsKICAgICAg
ICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENv
bmRpdGlvbk11dGV4KTsKICAgICAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50
KCk7CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUo
KQogICAgIGlmIChtX3J1bkxvb3ApCiAgICAgICAgIG1fcnVuTG9vcC0+c3RvcCgpOwogICAgIGlm
IChtX3dvcmtRdWV1ZVRocmVhZCkgewotICAgICAgICBkZXRhY2hUaHJlYWQobV93b3JrUXVldWVU
aHJlYWQpOwotICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IDA7CisgICAgICAgIG1fd29ya1F1
ZXVlVGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV93b3JrUXVldWVUaHJlYWQgPSBudWxscHRy
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyTGludXguY3BwIGIvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1
cmVIYW5kbGVyTGludXguY3BwCmluZGV4IGIyOTQxOTQ0NGU3NDI3MzZhNjdkYzBjMWFhODUxZGVj
M2FlNTg3ZTQuLmZmZDQwMDg1NWI4MjkzYThiNWEzYzNhZWIyM2FiNzdhYWY1YTdlZTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5j
cHAKQEAgLTExOSw3ICsxMTksMTAgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZEUG9s
bGVyOjpFdmVudEZEUG9sbGVyKGludCBmZCwgc3RkOjpmdW5jdGlvbjx2b2lkICgKICAgICB9LCB0
aGlzLCBudWxscHRyKTsKICAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIG51bGxw
dHIpOwogI2Vsc2UKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKCJXVEY6IE1lbW9yeVBy
ZXNzdXJlSGFuZGxlciIsIFt0aGlzXSB7IHJlYWRBbmROb3RpZnkoKTsgfQorICAgIG1fdGhyZWFk
ID0gVGhyZWFkOjpjcmVhdGUoIldURjogTWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwKKyAgICAgICAg
W3RoaXNdIHsKKyAgICAgICAgICAgIHJlYWRBbmROb3RpZnkoKTsKKyAgICAgICAgfSk7CiAjZW5k
aWYKIH0KIApAQCAtMTI5LDcgKzEzMiw3IEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6RXZlbnRG
RFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIoKQogI2lmIFVTRShHTElCKQogICAgIGdfc291cmNlX2Rl
c3Ryb3kobV9zb3VyY2UuZ2V0KCkpOwogI2Vsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJ
RCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9N
YWluVGhyZWFkV2luLmNwcAppbmRleCBmMzI0ZThiNjFkZDQxZmEwNTYwODYzYjZjNTgxOTEwZjg2
N2QzNmViLi5hNjQ3M2QwN2I2N2VhY2M4NmJlN2E0ZWI2OTc0OTg5M2VjNjE0OTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgaW5pdGlh
bGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiAgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VT
RURFRkFVTFQsIDAsIEhXTkRfTUVTU0FHRSwgMCwgMCwgMCk7CiAgICAgdGhyZWFkaW5nRmlyZWRN
ZXNzYWdlID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlVyhMImNvbS5hcHBsZS5XZWJLaXQuTWFpblRo
cmVhZEZpcmVkIik7CiAKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKCJNYWlu
IFRocmVhZCIpOworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCgi
TWFpbiBUaHJlYWQiKTsKIH0KIAogdm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWlu
VGhyZWFkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5jcHAKaW5kZXggODc0NzY0MzhjYWU2NWE2Mzg3ZDkwMWE3NTI4ODE1ZWM5
NTQ3ZjIzMi4uOWNkM2RiNGQxYmMxNGEzNjE3MzIxYWIwMDVhMDE5NjIwNTI3ODI3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2ZXIoSURCQmFja2luZ1N0
b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQogICAgIDogbV9iYWNraW5nU3Rv
cmVUZW1wb3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQgPSBj
cmVhdGVUaHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhl
ZERhdGFiYXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURCU2Vy
dmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIp
OwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVy
KQpAQCAtNjYsNyArNjYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRh
dGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYQogICAgIExPRyhJbmRl
eGVkREIsICJJREJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2RhdGFiYXNl
VGhyZWFkQ3JlYXRpb25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKElEQlNl
cnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIi
KTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJl
YWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAogdm9pZCBJREJT
ZXJ2ZXI6OnJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmgKaW5kZXggMjU2Y2Q1MDdlNmU2ZDdmNjU2ZWVjZTBjMTE5ODk0OGZkOTIzZGExZC4u
OTM0YTFkMTc0NTI5MDg0MjhhM2FlNmUwZWQ3ZTUxMGE5YTljYTZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTI1
LDcgKzEyNSw3IEBAIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNlcnZl
cj4gewogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+
PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CiAKLSAgICBU
aHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90
aHJlYWQgeyBudWxscHRyIH07CiAgICAgTG9jayBtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2Nr
OwogICAgIExvY2sgbV9tYWluVGhyZWFkUmVwbHlMb2NrOwogICAgIGJvb2wgbV9tYWluVGhyZWFk
UmVwbHlTY2hlZHVsZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAppbmRleCAyOTJmMDViOGNkNTA2ZTIy
OWFlNmI4YmQ4NjI5YzA5NTRkMTg0NTliLi43Y2Y3YWY4ZmVhMmUxZTY3ZDUyMzdjODcxYTAxNWIz
YzQ5MDBhMjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Fz
eW5jQXVkaW9EZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmNwcApAQCAtMzksNyArMzksNyBAQCBBc3luY0F1ZGlvRGVjb2Rl
cjo6QXN5bmNBdWRpb0RlY29kZXIoKQogewogICAgIC8vIFN0YXJ0IHdvcmtlciB0aHJlYWQuCiAg
ICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgbV90aHJlYWRJ
RCA9IGNyZWF0ZVRocmVhZChBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnksIHRoaXMsICJB
dWRpbyBEZWNvZGVyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShBc3luY0F1ZGlv
RGVjb2Rlcjo6dGhyZWFkRW50cnksIHRoaXMsICJBdWRpbyBEZWNvZGVyIik7CiB9CiAKIEFzeW5j
QXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQpAQCAtNDcsOCArNDcsOCBAQCBBc3lu
Y0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKICAgICBtX3F1ZXVlLmtpbGwoKTsK
ICAgICAKICAgICAvLyBTdG9wIHRocmVhZC4KLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X3RocmVhZElEKTsKLSAgICBtX3RocmVhZElEID0gMDsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKKyAgICBtX3RocmVhZCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQXN5bmNBdWRp
b0RlY29kZXI6OmRlY29kZUFzeW5jKFJlZjxBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZsb2F0
IHNhbXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxsYmFj
aywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKQEAgLTcyLDcg
KzcyLDcgQEAgdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAKICAgICB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIHVudGlsIHdlIGhh
dmUgbV90aHJlYWRJRCBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIHJ1biBsb29wLgor
ICAgICAgICAvLyBXYWl0IGZvciB1bnRpbCB3ZSBoYXZlIG1fdGhyZWFkIGVzdGFibGlzaGVkIGJl
Zm9yZSBzdGFydGluZyB0aGUgcnVuIGxvb3AuCiAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3Ro
cmVhZENyZWF0aW9uTXV0ZXgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCmluZGV4IGJiNWM1ZTMzN2I1ZWNmMWY4
ZTYxNzUzYTI5ZjhkMGY5NzE0MTU1M2QuLmYxMjUxMGQxOTdjM2RmOTZjYzA1Njg1NDZjYmMzZmI0
NmVhYWE4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5
bmNBdWRpb0RlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Fz
eW5jQXVkaW9EZWNvZGVyLmgKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgQXN5bmNBdWRpb0RlY29k
ZXIgewogICAgIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAg
IHZvaWQgcnVuTG9vcCgpOwogCi0gICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7
CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9u
TXV0ZXg7CiAgICAgTWVzc2FnZVF1ZXVlPERlY29kaW5nVGFzaz4gbV9xdWV1ZTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKaW5kZXggNTA1MjMwNDE5N2NkZWRkZTQ3ZmRjYmI5MTJl
YzQ3NDA1NTc5NzQyOC4uZTdkNTY3ZGZlYWQ0NDJjMzk2YWYwZjcwNTEwOTczZmZlMTQ4YWIwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBjb25zdCBz
aXplX3QgcmVuZGVyUXVhbnR1bVNpemUgPSAxMjg7CiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIEF1
ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCiAgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250
ZXh0LCByZW5kZXJUYXJnZXQtPnNhbXBsZVJhdGUoKSkKICAgICAsIG1fcmVuZGVyVGFyZ2V0KHJl
bmRlclRhcmdldCkKLSAgICAsIG1fcmVuZGVyVGhyZWFkKDApCisgICAgLCBtX3JlbmRlclRocmVh
ZChudWxscHRyKQogICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQogewogICAgIG1fcmVu
ZGVyQnVzID0gQXVkaW9CdXM6OmNyZWF0ZShyZW5kZXJUYXJnZXQtPm51bWJlck9mQ2hhbm5lbHMo
KSwgcmVuZGVyUXVhbnR1bVNpemUpOwpAQCAtNjYsOCArNjYsOCBAQCB2b2lkIE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6dW5pbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fcmVuZGVyVGhyZWFkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1f
cmVuZGVyVGhyZWFkKTsKLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSAwOworICAgICAgICBtX3Jl
bmRlclRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQg
PSBudWxscHRyOwogICAgIH0KIAogICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7CkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRl
cmluZygpCiAgICAgaWYgKCFtX3N0YXJ0ZWRSZW5kZXJpbmcpIHsKICAgICAgICAgbV9zdGFydGVk
UmVuZGVyaW5nID0gdHJ1ZTsKICAgICAgICAgcmVmKCk7IC8vIFNlZSBjb3JyZXNwb25kaW5nIGRl
cmVmKCkgY2FsbCBpbiBub3RpZnlDb21wbGV0ZURpc3BhdGNoKCkuCi0gICAgICAgIG1fcmVuZGVy
VGhyZWFkID0gY3JlYXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGlu
ZVJlbmRlckVudHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOworICAgICAgICBtX3JlbmRl
clRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2Zm
bGluZVJlbmRlckVudHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKaW5kZXggNzU1NjA0NjQ3MjMyYzRiYzUxM2NjOWUzOWRk
NDQ1ZjM4YjYyY2VmNC4uNTY5MDEzOGIxNjU3MGIzZjlkMjM3ZjlkZDRhOGVhMjNkNzNmZmFhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIE9mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAg
ICAgUmVmUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKICAgICAKICAgICAvLyBSZW5kZXJpbmcg
dGhyZWFkLgotICAgIHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7Cisg
ICAgUmVmUHRyPFRocmVhZD4gbV9yZW5kZXJUaHJlYWQ7CiAgICAgYm9vbCBtX3N0YXJ0ZWRSZW5k
ZXJpbmc7CiAgICAgc3RhdGljIHZvaWQgb2ZmbGluZVJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERh
dGEpOwogICAgIHZvaWQgb2ZmbGluZVJlbmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAppbmRleCA4ODY5ZjZiZjIyMzIzMmU2M2NjM2Zi
NTJlMTZhZTFkYjNlYjQxYmU2Li44YzkyZDZlNTM5NmFkZjEyZmJkZDY4ZDdhYzk3ZjllZDE5YWRj
MDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmNwcApAQCAtNzcwLDggKzc3MCw3IEBAIFNlY3VyaXR5T3JpZ2luRGF0YSBEYXRhYmFzZTo6c2Vj
dXJpdHlPcmlnaW4oKQogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2Vj
dXJpdHlPcmlnaW4obV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotICAgIGF1
dG8mIHRocmVhZCA9IGRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9
PSB0aHJlYWQuZ2V0VGhyZWFkSUQoKSkKKyAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFi
YXNlVGhyZWFkKCkuZ2V0VGhyZWFkSUQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2lu
RGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5n
ZXQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5k
ZXggMGRkZTVmNzI2OGVlNjQyYzAwNDMwNWNlZmUzNmIxYzllNDRiODdkMy4uZDcwODE0ZjliNTVi
MjQ4ZmQ2NGUxYWZmNDNlMzc2NzRmMTY5MmQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKQEAgLTYwLDEyICs2MCwx
MiBAQCBib29sIERhdGFiYXNlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAo
bV90aHJlYWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0
ZVRocmVhZChEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNv
cmU6IERhdGFiYXNlIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShEYXRhYmFzZVRo
cmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7CiAK
LSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQg
RGF0YWJhc2VUaHJlYWQ6OnJlcXVlc3RUZXJtaW5hdGlvbihEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIqIGNsZWFudXBTeW5jKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6
OmRhdGFiYXNlVGhyZWFkKCkKICAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdCBvZiBhbGwgcGVuZGlu
ZyB0cmFuc2FjdGlvbnMgb24gdGhpcyBkYXRhYmFzZSB0aHJlYWQKICAgICBtX3RyYW5zYWN0aW9u
Q29vcmRpbmF0b3ItPnNodXRkb3duKCk7CiAKLSAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRv
IGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAs
IHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291
bnQoKSk7CisgICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFu
ZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFz
ICVpIHJlZihzKSIsIG1fdGhyZWFkLT5pZCgpLCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8v
IENsb3NlIHRoZSBkYXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVu
c3VyZXMgdGhhdCBpZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSBy
b2xsZWQgYmFjayBhbmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCiAgICAgLy8g
aW5jb25zaXN0ZW50IG9yIGxvY2tlZCBzdGF0ZS4KQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIERh
dGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5EYXRhYmFzZS0+cGVy
Zm9ybUNsb3NlKCk7CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2Vz
IGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKLSAgICBkZXRhY2hU
aHJlYWQobV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogCiAgICAgRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyKiBjbGVhbnVwU3luYyA9IG1fY2xlYW51cFN5bmM7CiAKQEAgLTE0
Miw3ICsxNDIsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0
YWJhc2UmIGRhdGFiYXNlKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNl
dE11dGV4KTsKIAotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7Cisg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZC0+aWQoKSk7CiAgICAgQVNTRVJU
KCFtX29wZW5EYXRhYmFzZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRh
YmFzZVNldC5hZGQoJmRhdGFiYXNlKTsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIERhdGFi
YXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAg
ICAgTG9ja0hvbGRlciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJU
KGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IG1fdGhyZWFkLT5pZCgpKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBt
X29wZW5EYXRhYmFzZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFz
ZVNldC5yZW1vdmUoJmRhdGFiYXNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAppbmRleCBlYzA0MWUzMTgxNzI0OTJlY2E2
YmNlZmU4ZjFkYTI1ZWM5MmVkMjZjLi5hNTIxMmRmYjhiMTcyY2UyZmY2YTk4ODhkZTBhOWRiOTc3
YWUyZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRocmVhZC5oCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAKICAgICB2b2lk
IHJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSYpOwogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VD
bG9zZWQoRGF0YWJhc2UmKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyBy
ZXR1cm4gbV90aHJlYWRJRDsgfQorICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7
IHJldHVybiBtX3RocmVhZCA/IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogCiAgICAgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0dXJuIG1fdHJh
bnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQogCkBAIC02OSw3ICs2OSw3IEBAIGNsYXNzIERh
dGFiYXNlVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFk
PiB7CiAgICAgdm9pZCBkYXRhYmFzZVRocmVhZCgpOwogCiAgICAgTG9jayBtX3RocmVhZENyZWF0
aW9uTXV0ZXg7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIFJlZlB0cjxEYXRhYmFzZVRo
cmVhZD4gbV9zZWxmUmVmOwogCiAgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDZm
OWZjYTY3ZjNjNDdhZGRjODNkZWM4Y2IwZDVlYjhjY2I0MGQ3NDMuLjEzOWFhOTkxYTE2ZWFkMjJm
NjhmNTAxYmU3Yjk0NTk2MzIyMTM1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0dDQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcApAQCAtMTAxLDE0ICsxMDEsMTQgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6
OmdhcmJhZ2VDb2xsZWN0Tm93SWZOb3REb25lUmVjZW50bHkoKQogCiB2b2lkIEdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhib29sIHdhaXRV
bnRpbERvbmUpCiB7Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVh
ZChjb2xsZWN0LCAwLCAiV2ViQ29yZTogR0NDb250cm9sbGVyIik7CisgICAgUmVmUHRyPFRocmVh
ZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoY29sbGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJv
bGxlciIpOwogCiAgICAgaWYgKHdhaXRVbnRpbERvbmUpIHsKLSAgICAgICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9u
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQp
OworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZh
U2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAppbmRleCAxNjhlNGUyNzc5NWQ0MjVm
NDA0ZjE3NWM5YmNiYTkzZjczNjgwNzRjLi41NWM3Y2IwMjM5ODU5OWM5NzFlNmEzN2EwZjlhNzI0
ODQ4NDJlNmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0
cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3Bw
CkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoRnVuY3Rpb248
dm9pZCAoKT4mJiBmdW5jdGlvbikKIAogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVhdGVG
aWxlVGhyZWFkT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25jZSwg
W10gewotICAgICAgICBjcmVhdGVUaHJlYWQoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtd
IHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtd
IHsKICAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICBBdXRvZHJhaW5lZFBv
b2wgcG9vbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAK
aW5kZXggNGNkY2ZhYWQ2ZTgzMmEzOWE1YzM1MjY1ODA1ODUwODZiM2Q5ZjcyZi4uYTQ4YmZmNjA1
MWYwZjE3NGRhMThkMmZmOWQzN2FiM2JjNjY4NGZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIEFTU0VS
VF9OT1RfU1lOQ19USFJFQUQoKSBBU1NFUlQoIW1fc3luY1RocmVhZFJ1bm5pbmcgfHwgIUlTX0lD
T05fU1lOQ19USFJFQUQoKSkKIAogLy8gRm9yIG1ldGhvZHMgdGhhdCBhcmUgbWVhbnQgdG8gc3Vw
cG9ydCB0aGUgc3luYyB0aHJlYWQgT05MWQotI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkg
KG1fc3luY1RocmVhZCA9PSBjdXJyZW50VGhyZWFkKCkpCisjZGVmaW5lIElTX0lDT05fU1lOQ19U
SFJFQUQoKSAobV9zeW5jVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKSkKICNkZWZpbmUg
QVNTRVJUX0lDT05fU1lOQ19USFJFQUQoKSBBU1NFUlQoSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQog
CiAjaWYgUExBVEZPUk0oR1RLKQpAQCAtMTQxLDcgKzE0MSw3IEBAIGJvb2wgSWNvbkRhdGFiYXNl
OjpvcGVuKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQog
ICAgIC8vIExvY2sgaGVyZSBhcyB3ZWxsIGFzIGZpcnN0IHRoaW5nIGluIHRoZSB0aHJlYWQgc28g
dGhlIHRocmVhZCBkb2Vzbid0IGFjdHVhbGx5IGNvbW1lbmNlIHVudGlsIHRoZSBjcmVhdGVUaHJl
YWQoKSBjYWxsIAogICAgIC8vIGNvbXBsZXRlcyBhbmQgbV9zeW5jVGhyZWFkUnVubmluZyBpcyBw
cm9wZXJseSBzZXQKICAgICBtX3N5bmNMb2NrLmxvY2soKTsKLSAgICBtX3N5bmNUaHJlYWQgPSBj
cmVhdGVUaHJlYWQoSWNvbkRhdGFiYXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRo
aXMsICJXZWJDb3JlOiBJY29uRGF0YWJhc2UiKTsKKyAgICBtX3N5bmNUaHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZShJY29uRGF0YWJhc2U6Omljb25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywg
IldlYkNvcmU6IEljb25EYXRhYmFzZSIpOwogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5
bmNUaHJlYWQ7CiAgICAgbV9zeW5jTG9jay51bmxvY2soKTsKICAgICBpZiAoIW1fc3luY1RocmVh
ZCkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQogICAgICAg
ICB3YWtlU3luY1RocmVhZCgpOwogICAgICAgICAKICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHN5
bmMgdGhyZWFkIHRvIHRlcm1pbmF0ZQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X3N5bmNUaHJlYWQpOworICAgICAgICBtX3N5bmNUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAgICAgfQogCiAgICAgbV9zeW5jVGhyZWFkUnVubmluZyA9IGZhbHNlOyAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKaW5kZXggMDYxYWY0YTEyNTU3NzFkZTEx
YTMyZjU2ODNjMGVmZGE1OTI5M2I5ZC4uODY0MDk1NTQ3NTMzZmQ4OTBmMDNhZmU5MmJiMDZmNjA4
N2VlNzM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKQEAg
LTExOSw3ICsxMTksNyBAQCBjbGFzcyBJY29uRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgSWNvbkRh
dGFiYXNlQmFzZSB7CiAgICAgdm9pZCBzeW5jVGltZXJGaXJlZCgpOwogICAgIAogICAgIFRpbWVy
IG1fc3luY1RpbWVyOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9zeW5jVGhyZWFkOworICAgIFJl
ZlB0cjxUaHJlYWQ+IG1fc3luY1RocmVhZDsKICAgICBib29sIG1fc3luY1RocmVhZFJ1bm5pbmc7
CiAgICAgCiAgICAgSGFzaFNldDxSZWZQdHI8RG9jdW1lbnRMb2FkZXI+PiBtX2xvYWRlcnNQZW5k
aW5nRGVjaXNpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNh
Z2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNw
cAppbmRleCA5MTIwMGMzNDVmNDU1Zjk2ZDQ5NGJmZDJhZDcwM2YyOGM1YzYyOWQxLi5kOWI2Zjcy
ZmEzNmZhNzAwYzgyNmYzYzk3ZDZiYWEwMmQ0MmU4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKQEAgLTk2LDExICs5NiwxMSBAQCB2b2lkIFJlc291
cmNlVXNhZ2VUaHJlYWQ6Om5vdGlmeU9ic2VydmVycyhSZXNvdXJjZVVzYWdlRGF0YSYmIGRhdGEp
CiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewot
ICAgIGlmIChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX3ZtID0gJmNvbW1vblZNKCk7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVy
ID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogUmVzb3VyY2VV
c2FnZSIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRo
aXMsICJXZWJDb3JlOiBSZXNvdXJjZVVzYWdlIik7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRo
cmVhZDo6dGhyZWFkQ2FsbGJhY2sodm9pZCogcmVzb3VyY2VVc2FnZVRocmVhZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKaW5kZXggMThhMWU2NzU0M2QyMjA5YzE3
OTU3NDczNjYyMmE3OGIzODRiYjhmYy4uZWZkZTI3ZWZlNmIwYWM0NTQ2NGRlODkxYzY3Y2U3OWY5
Y2YyZTE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhy
ZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKQEAg
LTYyLDcgKzYyLDcgQEAgY2xhc3MgUmVzb3VyY2VVc2FnZVRocmVhZCB7CiAgICAgdm9pZCB0aHJl
YWRCb2R5KCk7CiAgICAgdm9pZCBwbGF0Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSosIFJlc291cmNl
VXNhZ2VEYXRhJik7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllciB7
IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBMb2Nr
IG1fbG9jazsKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgSGFzaE1hcDx2b2lkKiwg
c3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpPj4gbV9vYnNlcnZl
cnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFk
LmNwcAppbmRleCA3MzBjMGE2YmQ5M2Y0NTc4ZDFlZGJmOWFjZTFjZDg2NTY2ZTZjOTg4Li5kMjA3
ODQwNTYwZGRmOTA1OTBhMGRhZGQyNzMwODRjOTFjOWZiMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTM1LDE0ICszNSwx
NCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1Ro
cmVhZCgpCi0gICAgOiBtX3RocmVhZElkZW50aWZpZXIoMCkKKyAgICA6IG1fdGhyZWFkKG51bGxw
dHIpCiB7CiB9CiAKIGJvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQogewot
ICAgIGF1dG8gdGhyZWFkSWRlbnRpZmllciA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCku
bV90aHJlYWRJZGVudGlmaWVyOwotICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJl
bnRUaHJlYWQoKSA9PSB0aHJlYWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWQ7CisgICAgcmV0dXJuIHRo
cmVhZCAmJiB0aHJlYWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgpOwogfQogCiB2b2lkIFNjcm9s
bGluZ1RocmVhZDo6ZGlzcGF0Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKQEAgLTc0
LDE0ICs3NCwxNCBAQCBTY3JvbGxpbmdUaHJlYWQmIFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9u
KCkKIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAg
ICBpZiAobV90aHJlYWRJZGVudGlmaWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBpbml0aWFsaXplIHRoZSBydW4g
bG9vcC4KICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2luaXRp
YWxpemVSdW5Mb29wTXV0ZXgpOwogCi0gICAgICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0
ZVRocmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFNjcm9sbGluZyIpOworICAg
ICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2Vi
Q29yZTogU2Nyb2xsaW5nIik7CiAgICAgICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAg
ICBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc117
IHJldHVybiBtX3RocmVhZFJ1bkxvb3A7IH0pOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFNjcm9s
bGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogCiB2b2lkIFNjcm9sbGluZ1RocmVh
ZDo6dGhyZWFkQ2FsbGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKQogewotICAgIFdURjo6c2V0
Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKCk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1
cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOwogICAgIHN0YXRpY19jYXN0PFNjcm9sbGlu
Z1RocmVhZCo+KHNjcm9sbGluZ1RocmVhZCktPnRocmVhZEJvZHkoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaAppbmRleCBkZTA2MmQ3
N2FjMDFkZjlkMmEwOTg2MGViZTZiOGU5ZmQzY2ZmNWMwLi5kODg5MmYwNWJlNjQzN2Q0YWFjYzBh
NzUxYTdjYTdlOTNiZWUwZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUaHJlYWQuaApAQCAtNzMsNyArNzMsNyBAQCBjbGFzcyBTY3JvbGxpbmdUaHJl
YWQgewogICAgIHZvaWQgdGhyZWFkUnVuTG9vcFNvdXJjZUNhbGxiYWNrKCk7CiAjZW5kaWYKIAot
ICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyOworICAgIFJlZlB0cjxUaHJl
YWQ+IG1fdGhyZWFkOwogCiAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRp
b25WYXJpYWJsZTsKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCmlu
ZGV4IGY3MTMzM2M1YTM3YTk5ODk2NGYzYTc0MWM3MzE1MmU5NTE0NjZjZjYuLmRkYmUzYmE5ODBl
NDUwYTQ5NGNkMDY0OGY0MWI1ZTM2YWZlZWI1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcApAQCAtNjQsNyArNjQsNyBA
QCBQYXNzUmVmUHRyPEhSVEZEYXRhYmFzZUxvYWRlcj4gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVh
dGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZgogfQogCiBIUlRGRGF0YWJhc2VMb2FkZXI6OkhSVEZE
YXRhYmFzZUxvYWRlcihmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogbV9kYXRhYmFzZUxvYWRlclRo
cmVhZCgwKQorICAgIDogbV9kYXRhYmFzZUxvYWRlclRocmVhZChudWxscHRyKQogICAgICwgbV9k
YXRhYmFzZVNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5
bmNocm9ub3VzbHkoKQogICAgIAogICAgIGlmICghbV9ocnRmRGF0YWJhc2UuZ2V0KCkgJiYgIW1f
ZGF0YWJhc2VMb2FkZXJUaHJlYWQpIHsKICAgICAgICAgLy8gU3RhcnQgdGhlIGFzeW5jaHJvbm91
cyBkYXRhYmFzZSBsb2FkaW5nIHByb2Nlc3MuCi0gICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJl
YWQgPSBjcmVhdGVUaHJlYWQoZGF0YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJh
c2UgbG9hZGVyIik7CisgICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZShkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsK
ICAgICB9CiB9CiAKQEAgLTEyMSw4ICsxMjEsOCBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6
d2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24oKQogICAgIAogICAgIC8vIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIHRo
cmVhZC4KICAgICBpZiAobV9kYXRhYmFzZUxvYWRlclRocmVhZCkKLSAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24obV9kYXRhYmFzZUxvYWRlclRocmVhZCk7Ci0gICAgbV9kYXRhYmFzZUxv
YWRlclRocmVhZCA9IDA7CisgICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQtPndhaXRGb3JD
b21wbGV0aW9uKCk7CisgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKaW5kZXggYzg2OWQxMzdhMWRiMmY1MjQ5OGQwZTFi
NjVkNTg3ZTZjODE5YjM4MS4uM2FkMjUxZjIxOTkwOWY0YmM2NDU0ZDAxMzIwMWI2YTdjYTcwMjY4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmgKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgSFJURkRhdGFiYXNlTG9hZGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8SFJURkRhdGFiYXNlTG9hZGVyPiB7CiAKICAgICAvLyBIb2xkaW5nIGEg
bV90aHJlYWRMb2NrIGlzIHJlcXVpcmVkIHdoZW4gYWNjZXNzaW5nIG1fZGF0YWJhc2VMb2FkZXJU
aHJlYWQuCiAgICAgTG9jayBtX3RocmVhZExvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2Rh
dGFiYXNlTG9hZGVyVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fZGF0YWJhc2VMb2FkZXJU
aHJlYWQ7CiAKICAgICBmbG9hdCBtX2RhdGFiYXNlU2FtcGxlUmF0ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA5NmYz
MzA4MjgwNzlhNzlhZDY0ODIwZDA3MjFjNTljNWVhMTZmZGIxLi4yMWJlOTk2ZWYzN2U1M2RiNzAz
MTAwMTk2MjdjMGM0MGQyYjIxMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBSZXZlcmJDb252
b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6
ZV90IHJlbmRlclNsaQogICAgIC8vIFN0YXJ0IHVwIGJhY2tncm91bmQgdGhyZWFkCiAgICAgLy8g
RklYTUU6IHdvdWxkIGJlIGJldHRlciB0byB1cCB0aGUgdGhyZWFkIHByaW9yaXR5IGhlcmUuICBJ
dCBkb2Vzbid0IG5lZWQgdG8gYmUgcmVhbC10aW1lLCBidXQgaGlnaGVyIHRoYW4gdGhlIGRlZmF1
bHQuLi4KICAgICBpZiAodGhpcy0+dXNlQmFja2dyb3VuZFRocmVhZHMoKSAmJiBtX2JhY2tncm91
bmRTdGFnZXMuc2l6ZSgpID4gMCkKLSAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gY3JlYXRl
VGhyZWFkKFdlYkNvcmU6OmJhY2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9u
IGJhY2tncm91bmQgdGhyZWFkIik7CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKFdlYkNvcmU6OmJhY2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0
aW9uIGJhY2tncm91bmQgdGhyZWFkIik7CiB9CiAKIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNv
bnZvbHZlcigpCkBAIC0xNDYsNyArMTQ2LDcgQEAgUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29u
dm9sdmVyKCkKICAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxl
Lm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24obV9iYWNrZ3JvdW5kVGhyZWFkKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkLT53YWl0
Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAppbmRleCA2YmFlYjdjY2UyOTg5NmM5ODk2MzUxMmY0
MWI0M2EyZjEyODg1NDFjLi4wNTk2MzM2N2FlMjgzNDk0ODc5MGJhN2NjYjcyMDYwZWM1OTgxMDcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
aApAQCAtODYsNyArODYsNyBAQCBjbGFzcyBSZXZlcmJDb252b2x2ZXIgewogCiAgICAgLy8gQmFj
a2dyb3VuZCB0aHJlYWQgYW5kIHN5bmNocm9uaXphdGlvbgogICAgIGJvb2wgbV91c2VCYWNrZ3Jv
dW5kVGhyZWFkczsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fYmFja2dyb3VuZFRocmVhZDsKKyAg
ICBSZWZQdHI8VGhyZWFkPiBtX2JhY2tncm91bmRUaHJlYWQ7CiAgICAgYm9vbCBtX3dhbnRzVG9F
eGl0OwogICAgIGJvb2wgbV9tb3JlSW5wdXRCdWZmZXJlZDsKICAgICBtdXRhYmxlIExvY2sgbV9i
YWNrZ3JvdW5kVGhyZWFkTXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwCmluZGV4IDZjZDhiZDdmODFiZmYyMjI3ZmUxNGZiY2EwZmJmZDA1NWQwOWM1NzEuLjFmMjVl
OGU1NGU5ZWU4NWZhMGNjYTZhMzFiOTJlMTExZTZkZjBjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Zp
bGVSZWFkZXJHU3RyZWFtZXIuY3BwCkBAIC0zNzAsMjAgKzM3MCwyMCBAQCBQYXNzUmVmUHRyPEF1
ZGlvQnVzPiBBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29s
IG1peFRvTW9ubwogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShj
b25zdCBjaGFyKiBmaWxlUGF0aCwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7
CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0g
Y3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwg
bWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0
ZSgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9ubywg
c2FtcGxlUmF0ZV0gewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihmaWxl
UGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9C
dXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIFJl
ZlB0cjxBdWRpb0J1cz4gcmV0dXJuVmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRo
cmVhZCgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1p
eFRvTW9ubywgc2FtcGxlUmF0ZV0geworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
IkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01v
bm8sIHNhbXBsZVJhdGVdIHsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIo
ZGF0YSwgZGF0YVNpemUpLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0p
OwotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndh
aXRGb3JDb21wbGV0aW9uKCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDFjNWMzMGYzNzdhNDJi
ZTAwMTc3MTY1MWU4N2Y3MDQzYTVkNjVjOTAuLjI2NDY2ZjUzYjQ4MjE4ZDMzN2E1YTg5NGYxZGI3
MjhkZjRjNDdjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIu
Y3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGll
bnQgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBTdHJlYW0KICAgICAgICAg
dm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQg
Y2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOwogCi0gICAgICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWQgeyAwIH07CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhy
ZWFkIHsgbnVsbHB0ciB9OwogICAgICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRp
b25NdXRleDsKICAgICAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247
CiAgICAgICAgIFJ1bkxvb3AqIG1fcnVuTG9vcCB7IG51bGxwdHIgfTsKQEAgLTEwNzcsNyArMTA3
Nyw3IEBAIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYywKICAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMp
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11
dGV4KTsKLSAgICBtX3RocmVhZCA9IGNyZWF0ZVRocmVhZCgiUmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQiLCBbdGhpcywgcmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKKyAgICBtX3Ro
cmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0
aGlzLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KV0gewogICAgICAgICB7CiAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwog
ICAgICAgICAgICAgbV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTExMTMsOCAr
MTExMyw4IEBAIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0
cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYywKIFJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50Ojp+UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQoKQogewogICAgIGlmIChtX3Ro
cmVhZCkgewotICAgICAgICBkZXRhY2hUaHJlYWQobV90aHJlYWQpOwotICAgICAgICBtX3RocmVh
ZCA9IDA7CisgICAgICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV90aHJlYWQgPSBu
dWxscHRyOwogICAgIH0KIAogICAgIGlmIChtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVy
UnVuTG9vcENGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVy
UnVuTG9vcENGLmNwcAppbmRleCA0NmI4OTk0YTg0MWVmNzFlYTI3OWNlNzdjYmM4ZmI0M2MyOWYw
YTYyLi5mZmJmZGE5Yjg5MzQ4MzU0OTBjOWE0MGJhMWY0ODMzNmU0NzYwYzhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0Yu
Y3BwCkBAIC03Nyw3ICs3Nyw3IEBAIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKICAgICBz
dGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY0xvY2s+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KTsKIAog
ICAgIGlmICghbG9hZGVyUnVuTG9vcE9iamVjdCkgewotICAgICAgICBjcmVhdGVUaHJlYWQocnVu
TG9hZGVyVGhyZWFkLCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRlciIpOworICAgICAgICBU
aHJlYWQ6OmNyZWF0ZShydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9h
ZGVyIik7CiAKICAgICAgICAgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9j
aywgW10geyByZXR1cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsgfSk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApp
bmRleCA0NDA4Y2QxOTg3MDViYTg2Y2M4YzE5ODZmYjNlMmNhZGU3OTZkY2M2Li5mMTA1NzE1ZWQ4
ZDg3OTM3M2I2MzMxY2IyNmUwODJjM2UxYWI4YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtOTQsMTAgKzk0
LDEwIEBAIGludCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgp
IGNvbnN0CiB2b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQog
ewogICAgIGlmICghcnVuVGhyZWFkKCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkSWQpCi0gICAg
ICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElkKTsKKyAgICAgICAgaWYg
KG1fdGhyZWFkKQorICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAg
ICAgICAgIHNldFJ1blRocmVhZCh0cnVlKTsKLSAgICAgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRo
cmVhZChkb3dubG9hZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7CisgICAgICAgIG1f
dGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRo
cmVhZCIpOwogICAgIH0KIH0KIApAQCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgQ3VybERvd25sb2Fk
TWFuYWdlcjo6c3RvcFRocmVhZCgpCiB7CiAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIAotICAg
IGlmIChtX3RocmVhZElkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhy
ZWFkSWQpOwotICAgICAgICBtX3RocmVhZElkID0gMDsKKyAgICBpZiAobV90aHJlYWQpIHsKKyAg
ICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fdGhyZWFkID0g
bnVsbHB0cjsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAppbmRleCAwMmNlNzMxYmQxMGE4MDE5YjdlYmUxZmFj
NTJiNDVlNDA5MjU2MjMxLi5mNmJiYzc3ZjRkM2NlMGI5Njg3ZDFkOGZjYTYwOTE1ODdjOWFlNDlj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5oCkBAIC02OSw3ICs2OSw3IEBAIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewog
CiAgICAgc3RhdGljIHZvaWQgZG93bmxvYWRUaHJlYWQodm9pZCogZGF0YSk7CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fdGhyZWFkSWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAg
ICAgQ1VSTE0qIG1fY3VybE11bHRpSGFuZGxlOwogICAgIFZlY3RvcjxDVVJMKj4gbV9wZW5kaW5n
SGFuZGxlTGlzdDsKICAgICBWZWN0b3I8Q1VSTCo+IG1fYWN0aXZlSGFuZGxlTGlzdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbC5oCmluZGV4IDdiZDdiMmQzNzAyZjVmOWNkNTcxMzYxZTFjYmI4NWVi
OTcxMWU5MmQuLjgyYmI0YTgwNTA0MTAzN2M1YWVlZWIyODVmNDI2NDZmZmRjODg3ZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGwuaApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsIDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZSB7CiAgICAgICAgIHNpemVf
dCBzaXplIHsgMCB9OwogICAgIH07CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhy
ZWFkIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya2VyVGhyZWFkIHsgbnVsbHB0ciB9
OwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07CiAgICAgTG9j
ayBtX211dGV4U2VuZDsKICAgICBMb2NrIG1fbXV0ZXhSZWNlaXZlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxD
dXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsQ3VybC5jcHAKaW5kZXggMWUzNzlkMWIwMGQwOTU1ZmMyZGEwMGJlM2Y5NmY5
OTJhOTFiOTQzZi4uZWNiOWY1NGI2NWEzMzUyNGUzYTM1NmEzYmMxM2QwZTJmNmY2YWNiOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZUltcGxDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAg
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdGFydFRocmVhZCgpCiAKICAgICByZWYoKTsg
Ly8gc3RvcFRocmVhZCgpIHdpbGwgY2FsbCBkZXJlZigpLgogCi0gICAgbV93b3JrZXJUaHJlYWQg
PSBjcmVhdGVUaHJlYWQoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10geworICAgIG1fd29ya2Vy
VGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10gewogCiAg
ICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdG9wVGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9zdG9wVGhyZWFkID0gdHJ1ZTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X3dvcmtlclRocmVhZCk7Ci0gICAgbV93b3JrZXJUaHJlYWQgPSAwOworICAgIG1fd29ya2VyVGhy
ZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIG1fd29ya2VyVGhyZWFkID0gbnVsbHB0cjsK
ICAgICBkZXJlZigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAK
aW5kZXggN2FkNWI1NzkxM2ExNjcyZGY5MTk2ZTllYjAxMzNlMjNlMjMyOTg1ZC4uZGVlNmNlNmQ2
NzNkNzZiNDFmMjc0NTQwNGZiMDc5ZjIxOTY1M2I2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcApAQCAtOTksNyArOTksNyBAQCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0
YTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGEoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0
cgogfQogCiBXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBVUkwmIHNjcmlwdFVSTCwg
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHks
IFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSwgV29ya2VyVGhyZWFk
U3RhcnRNb2RlIHN0YXJ0TW9kZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzJiBjb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsIGJvb2wgc2hvdWxk
QnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5LCBjb25zdCBTZWN1cml0eU9yaWdp
biYgdG9wT3JpZ2luLCBNb25vdG9uaWNUaW1lIHRpbWVPcmlnaW4sIElEQkNsaWVudDo6SURCQ29u
bmVjdGlvblByb3h5KiBjb25uZWN0aW9uUHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92
aWRlciwgSlNDOjpSdW50aW1lRmxhZ3MgcnVudGltZUZsYWdzKQotICAgIDogbV90aHJlYWRJRCgw
KQorICAgIDogbV90aHJlYWQobnVsbHB0cikKICAgICAsIG1fd29ya2VyTG9hZGVyUHJveHkod29y
a2VyTG9hZGVyUHJveHkpCiAgICAgLCBtX3dvcmtlclJlcG9ydGluZ1Byb3h5KHdvcmtlclJlcG9y
dGluZ1Byb3h5KQogICAgICwgbV9ydW50aW1lRmxhZ3MocnVudGltZUZsYWdzKQpAQCAtMTMzLDE1
ICsxMzMsMTUgQEAgV29ya2VyVGhyZWFkOjp+V29ya2VyVGhyZWFkKCkKIAogYm9vbCBXb3JrZXJU
aHJlYWQ6OnN0YXJ0KCkKIHsKLSAgICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0
byBlbnN1cmUgdGhhdCBtX3RocmVhZElEIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBz
dGFydHMuCisgICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRo
YXQgbV90aHJlYWQgaXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBM
b2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVh
ZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3Ro
cmVhZElEID0gY3JlYXRlVGhyZWFkKFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRo
aXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdv
cmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsK
IAotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9p
ZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICBnX21haW5f
Y29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAK
LSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8
VGhyZWFkPiBwcm90ZWN0b3IgPSBtX3RocmVhZDsKIAogICAgIEFTU0VSVChtX3dvcmtlckdsb2Jh
bFNjb3BlLT5oYXNPbmVSZWYoKSk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIFdvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICB0aHJlYWRHbG9iYWxEYXRhKCkuZGVzdHJveSgpOwog
CiAgICAgLy8gVGhlIHRocmVhZCBvYmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIGZyb20g
bm90aWZpY2F0aW9uIG5vdywgZG9uJ3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCi0gICAgZGV0YWNo
VGhyZWFkKHRocmVhZElEKTsKKyAgICBwcm90ZWN0b3ItPmRldGFjaCgpOwogfQogCiB2b2lkIFdv
cmtlclRocmVhZDo6c3RhcnRSdW5uaW5nRGVidWdnZXJUYXNrcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuaAppbmRleCAwN2FkM2NlNzg0ZjkxOWY3MGM0NTY4MWI5NTRjMDA5OTk2
ZjU1N2YyLi5mODA5ZWU2NjcyN2VlMTM5ZGM0ZjE5ZDJjYjYxYjIyNjVlNGVhNGJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgV29y
a2VyVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgYm9vbCBz
dGFydCgpOwogICAgIHZvaWQgc3RvcCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0K
ICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9CiAgICAg
V29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93
b3JrZXJMb2FkZXJQcm94eTsgfQogICAgIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBv
cnRpbmdQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KQEAg
LTk4LDcgKzk4LDcgQEAgY2xhc3MgV29ya2VyVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8V29y
a2VyVGhyZWFkPiB7CiAgICAgc3RhdGljIHZvaWQgd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwog
ICAgIHZvaWQgd29ya2VyVGhyZWFkKCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgV29ya2VyUnVuTG9vcCBtX3J1
bkxvb3A7CiAgICAgV29ya2VyTG9hZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7CiAgICAg
V29ya2VyUmVwb3J0aW5nUHJveHkmIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKaW5kZXggYmI2NmZjZWE3ZTUyOGJjMjdmNjMzYTNl
NTI4NzhiNTAxZWYwZTE4Ny4uMzU3Njc5NDZhZGUzNzJhNDc5NDVmODVkM2Y4OTU4YjUyNTRhYmU0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcApAQCAtNDAsNyArNDAs
NyBAQCBzdGF0aWMgSGFzaFNldDxTdG9yYWdlVGhyZWFkKj4mIGFjdGl2ZVN0b3JhZ2VUaHJlYWRz
KCkKIH0KIAogU3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElE
KDApCisgICAgOiBtX3RocmVhZChudWxscHRyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiB9CkBAIC00OCwxNiArNDgsMTYgQEAgU3RvcmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgp
CiBTdG9yYWdlVGhyZWFkOjp+U3RvcmFnZVRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fdGhyZWFkSUQpOworICAgIEFTU0VSVCghbV90aHJlYWQp
OwogfQogCiBib29sIFN0b3JhZ2VUaHJlYWQ6OnN0YXJ0KCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90aHJlYWRJRCA9IGNy
ZWF0ZVRocmVhZChTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMs
ICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBt
X3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRD
YWxsYmFjaywgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOwogICAgIGFjdGl2ZVN0b3Jh
Z2VUaHJlYWRzKCkuYWRkKHRoaXMpOwotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJldHVy
biBtX3RocmVhZDsKIH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2Fs
bGJhY2sodm9pZCogdGhyZWFkKQpAQCAtNzgsMjUgKzc4LDI1IEBAIHZvaWQgU3RvcmFnZVRocmVh
ZDo6dGhyZWFkRW50cnlQb2ludCgpCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKEZ1bmN0
aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJU
KCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkKTsKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPEZ1bmN0aW9uPHZvaWQgKCk+PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQog
CiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Cisg
ICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkKTsKICAgICBhY3RpdmVTdG9y
YWdlVGhyZWFkcygpLnJlbW92ZSh0aGlzKTsKICAgICAvLyBFdmVuIGluIHdlaXJkLCBleGNlcHRp
b25hbCBjYXNlcywgZG9uJ3Qgd2FpdCBvbiBhIG5vbmV4aXN0ZW50IHRocmVhZCB0byB0ZXJtaW5h
dGUuCi0gICAgaWYgKCFtX3RocmVhZElEKQorICAgIGlmICghbV90aHJlYWQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9p
ZCAoKT4+KFt0aGlzXSB7CiAgICAgICAgIHBlcmZvcm1UZXJtaW5hdGUoKTsKICAgICB9KSk7Ci0g
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPndh
aXRGb3JDb21wbGV0aW9uKCk7CiAgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkpOwotICAgIG1f
dGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKIH0KIAogdm9pZCBTdG9yYWdl
VGhyZWFkOjpwZXJmb3JtVGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3Rv
cmFnZS9TdG9yYWdlVGhyZWFkLmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5oCmluZGV4IDk1NjRiOGFhMDZlNTI0M2UzMGU0NjdjNWZiZmUyY2RhZGIyNDBjNTYuLjhjZjFi
M2Q0YWRjNWEzMDZhNzdlYzc3YzljMzI2NjYxNjg3YmVjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VUaHJlYWQuaApAQCAtNTYsNyArNTYsNyBAQCBjbGFzcyBTdG9yYWdlVGhyZWFkIHsK
ICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBwYXJ0IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJl
LgogICAgIHZvaWQgcGVyZm9ybVRlcm1pbmF0ZSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBt
X3RocmVhZElEOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIE1lc3NhZ2VRdWV1
ZTxGdW5jdGlvbjx2b2lkICgpPj4gbV9xdWV1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAzYjg1ZjIyZmZhZTAxZTI4
YWFiOTk4MTY2OThhZGFkN2EzODQzYzVmLi5iMDRhY2M4YzMxYzVlY2E4MmE1MTc0MTY2N2RiNzBl
MDUzZjFkMmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYK
IHsKICAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKIAot
ICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCgpOworICAgIFdURjo6VGhy
ZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7CiAKICAgICBtX3N1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVBy
ZXNzdXJlSGFuZGxlcjsKICAgICBtX2xvYWRUaHJvdHRsZUxhdGVuY3kgPSBwYXJhbWV0ZXJzLmxv
YWRUaHJvdHRsZUxhdGVuY3k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4
IGVmN2JhODk5ODIwMjMyNTg5ZTczOTFmMjdmY2QzZDZlMTY5ZjY4OTQuLmZhMDMwZmIzYTJhMGY4
MmQ2YTI0NWJmODU2YjM2YWEyNzMyMDA3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNv
dXAuY3BwCkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJl
YWQoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwo
dGhpcyk7Ci0gICAgZGV0YWNoVGhyZWFkKGNyZWF0ZVRocmVhZCgiSU9DaGFubmVsOjpyZWFkU3lu
YyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICBUaHJl
YWQ6OmNyZWF0ZSgiSU9DaGFubmVsOjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwg
Y29tcGxldGlvbkhhbmRsZXJdIHsKICAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1p
bihzaXplLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKICAgICAgICAgdWludDhfdCogYnVmZmVy
RGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKGJ1ZmZlclNpemUpKTsKICAg
ICAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiByZWFkQnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVm
ZmVyX25ld193aXRoX293bmVyKGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGJ1ZmZlckRhdGEsIGZh
c3RGcmVlKSk7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5U
aHJlYWQoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAg
ICAgICAgICAgIERhdGEgZGF0YSA9IHsgV1RGTW92ZShidWZmZXIpIH07CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihkYXRhLCAwKTsKICAgICAgICAgfSwgcXVldWUpOwotICAgIH0pKTsK
KyAgICB9KS0+ZGV0YWNoKCk7CiB9CiAKIHN0cnVjdCBXcml0ZUFzeW5jRGF0YSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggYmFmNTMwNjZiZTIwMDll
MjZkYmViN2FjODg4YzQwNWUzYmRiYTZmZi4uYjM4N2I2YjQ0NWUzN2QzZGEzZThhNzJjN2MwYmEz
NWM4NjNmMjcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNw
cApAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVz
c2FnZShzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gbWVzc2FnZSkKIAogI2lmIEhBVkUoUU9TX0NM
QVNTRVMpCiAgICAgaWYgKG1lc3NhZ2UtPmlzU3luY01lc3NhZ2UoKSAmJiBtX3Nob3VsZEJvb3N0
TWFpblRocmVhZE9uU3luY01lc3NhZ2UpIHsKLSAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92
ZXJyaWRlID0gcHRocmVhZF9vdmVycmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFk
LCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKSwgMCk7CisgICAg
ICAgIHB0aHJlYWRfb3ZlcnJpZGVfdCBvdmVycmlkZSA9IHB0aHJlYWRfb3ZlcnJpZGVfcW9zX2Ns
YXNzX3N0YXJ0X25wKG1fbWFpblRocmVhZCwgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19D
TEFTU19VU0VSX0lOVEVSQUNUSVZFKSwgMCk7CiAgICAgICAgIG1lc3NhZ2UtPnNldFFPU0NsYXNz
T3ZlcnJpZGUob3ZlcnJpZGUpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2Vydmlj
ZUVudHJ5UG9pbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVz
L21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKaW5kZXggM2JiN2M2ZDQ3ZDQz
YzY5NzZiMDNjZmY3NzM2NDRmNDg3ODQ5M2Q0MS4uZjIzZGI0M2MwMjM0ZGM3YzgxMDQ5NTNmMDRl
Zjg3OTUyZjliODc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9p
bnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9Y
UENTZXJ2aWNlRW50cnlQb2ludC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBYUENTZXJ2aWNl
SW5pdGlhbGl6ZXIoT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4gY29ubmVjdGlvbiwgeHBj
X29iamVjdF8KIAogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgaWYgKHBhcmFtZXRlcnMuZXh0
cmFJbml0aWFsaXphdGlvbkRhdGEuY29udGFpbnMoQVNDSUlMaXRlcmFsKCJhbHdheXMtcnVucy1h
dC1iYWNrZ3JvdW5kLXByaW9yaXR5IikpKQotICAgICAgICBzZXRHbG9iYWxNYXhRT1NDbGFzcyhR
T1NfQ0xBU1NfVVRJTElUWSk7CisgICAgICAgIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3Mo
UU9TX0NMQVNTX1VUSUxJVFkpOwogI2VuZGlmCiAKICAgICBYUENTZXJ2aWNlVHlwZTo6c2luZ2xl
dG9uKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKaW5kZXggMDYwOGFi
NzJmOTkyNDhlZjI0Y2QyZDUyNDVlZTUzMzNhMDBkOWQwZC4uNDhkMTA2OTc3NjVhOTVhOGIzNTg3
MjMwZTEwMmQ4MDNhZDU4YzBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBA
QCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgaWYg
KG1fZXZlbnRGRCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKCJNZW1vcnlQcmVzc3VyZU1vbml0b3Ii
LCBbdGhpc10geworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJN
ZW1vcnlQcmVzc3VyZU1vbml0b3IiLCBbdGhpc10gewogICAgICAgICBkb3VibGUgcG9sbEludGVy
dmFsID0gc19tYXhQb2xsaW5nSW50ZXJ2YWxJblNlY29uZHM7CiAgICAgICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgICAgICBzbGVlcChwb2xsSW50ZXJ2YWwpOwpAQCAtMjcxLDcgKzI3MSw3IEBA
IE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9yKCkKICAgICAgICAg
fQogICAgICAgICBjbG9zZShtX2V2ZW50RkQpOwogICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0
aHJlYWRJZGVudGlmaWVyKTsKKyAgICB0aHJlYWQtPmRldGFjaCgpOwogfQogCiBJUEM6OkF0dGFj
aG1lbnQgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpjcmVhdGVIYW5kbGUoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggZjEzYmNhMGRjNzMzZDA5ZTAx
NDNhOTkwYTRkNDdhZjRhYjRlODk0OC4uMGVmZWUyMjFhYTRjODJlYTZmYjg3MDE0ODBjNzQwMjQz
NTE4MWJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0y
NTgsNyArMjU4LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICBwbGF0Zm9ybUluaXRp
YWxpemVXZWJQcm9jZXNzKFdURk1vdmUocGFyYW1ldGVycykpOwogCiAgICAgLy8gTWF0Y2ggdGhl
IFFvUyBvZiB0aGUgVUlQcm9jZXNzIGFuZCB0aGUgc2Nyb2xsaW5nIHRocmVhZCBidXQgdXNlIGEg
c2xpZ2h0bHkgbG93ZXIgcHJpb3JpdHkuCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2Vy
SW50ZXJhY3RpdmUoLTEpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2Vy
SW50ZXJhY3RpdmUoLTEpOwogCiAgICAgbV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9
IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgaWYg
KCFtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyKSB7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDEyMDczYWQyZDUwMjdjMDNkMjg2OGJm
MWY1NDFmOWE5ZTFkZWY3Yy4uMjJjMmVhNDQxYzAwZGEwYTMwMDRkMWI4YjgyZGE2YzhmYTljMmUw
YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIzIEBACisyMDE3LTA0LTA5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBS
ZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24g
c2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNoYW5nZS4gVXNlIFRocmVhZDo6IEFQSXMuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKHJ1bkphdmFTY3JpcHRUaHJlYWQpOgorICAgICAgICAoc3RhcnRKYXZhU2NyaXB0VGhyZWFk
cyk6CisgICAgICAgIChzdG9wSmF2YVNjcmlwdFRocmVhZHMpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKHRlc3RUaHJlYWRJZGVudGlm
aWVyTWFwKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3Bw
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1BhcmtpbmdMb3QuY3BwOgorCiAyMDE3LTA0LTA4ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBDU1NQcm9wZXJ0aWVzLmpzb24g
d2l0aCBjb3JyZWN0IGZpbGwtYW5kLXN0cm9rZSBzdGF0dXMsIGFuZCBvdGhlciBjbGVhbnVwCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCmluZGV4IGUyZjli
YWRlNmNhN2MyNjk0ODVhNGNkY2JlNjA5OWMzNmJhMDIxOTguLjcxMGQyYTU5ZGE5MjkwMTZlNjA4
YTRjZjdkOTQ2ZmE4N2ZhZDkzMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0ph
dmFTY3JpcHRUaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3Jp
cHRUaHJlYWRpbmcuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBMb2NrJiBqYXZhU2NyaXB0
VGhyZWFkc011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9CiAKLXR5cGVkZWYgSGFz
aFNldDxUaHJlYWRJZGVudGlmaWVyPiBUaHJlYWRTZXQ7Cit0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PFRocmVhZD4+IFRocmVhZFNldDsKIHN0YXRpYyBUaHJlYWRTZXQmIGphdmFTY3JpcHRUaHJlYWRz
KCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVGhyZWFkU2V0LCBzdGF0
aWNKYXZhU2NyaXB0VGhyZWFkcywgKCkpOwpAQCAtMTA4LDEwICsxMDgsMTAgQEAgdm9pZCBydW5K
YXZhU2NyaXB0VGhyZWFkKHZvaWQqKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKLSAgICAgICAgVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRldGFjaFRo
cmVhZCh0aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLnJlbW92ZSh0aHJlYWQp
OwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFT
Y3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAgICAgVGhyZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1
cnJlbnQoKTsKKyAgICAgICAgdGhyZWFkLmRldGFjaCgpOworICAgICAgICBqYXZhU2NyaXB0VGhy
ZWFkcygpLnJlbW92ZSgmdGhyZWFkKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQo
VGhyZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBzdGFydEphdmFTY3JpcHRUaHJl
YWRzKCkKICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50OyArK2kp
Ci0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgmcnVuSmF2YVNj
cmlwdFRocmVhZCwgMCwgMCkpOworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChUaHJl
YWQ6OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogfQogCiB2b2lkIHN0b3BK
YXZhU2NyaXB0VGhyZWFkcygpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlw
dFRocmVhZHMoKQogICAgICAgICBqYXZhU2NyaXB0VGhyZWFkc1Nob3VsZFRlcm1pbmF0ZSA9IHRy
dWU7CiAgICAgfQogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIGphdmFTY3JpcHRUaHJl
YWRzQ291bnQ+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCBqYXZhU2NyaXB0
VGhyZWFkc0NvdW50PiB0aHJlYWRzOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
amF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKICAgICAgICAgY29weVRvVmVjdG9yKGphdmFTY3Jp
cHRUaHJlYWRzKCksIHRocmVhZHMpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgc3RvcEphdmFT
Y3JpcHRUaHJlYWRzKCkKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGphdmFT
Y3JpcHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkc1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAK
ICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgo
KSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggZmI0
ZDI2ZmNjZWI3MGM0YjUzMjAxMGRhODVmYjljZTc4NTVjMTM4NC4uM2NlYWE2ZjNlNjU3MzVkMzBl
ZjFhNGY4OTdkNWU2OWM0ZmE1ZmYwNiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbQpAQCAtMTA3Miw4ICsxMDcyLDggQEAgc3RhdGljIHZvaWQgdGVzdFRocmVh
ZElkZW50aWZpZXJNYXAoKQogICAgIHB0aHJlYWRfam9pbihwdGhyZWFkLCAwKTsKIAogICAgIC8v
IE5vdyBjcmVhdGUgYW5vdGhlciB0aHJlYWQgdXNpbmcgV1RGLiBPbiBPU1gsIGl0IHdpbGwgaGF2
ZSB0aGUgc2FtZSBwdGhyZWFkIGhhbmRsZQotICAgIC8vIGJ1dCBzaG91bGQgZ2V0IGEgZGlmZmVy
ZW50IFRocmVhZElkZW50aWZpZXIuCi0gICAgY3JlYXRlVGhyZWFkKHJ1blRocmVhZCwgMCwgIkR1
bXBSZW5kZXJUcmVlOiB0ZXN0Iik7CisgICAgLy8gYnV0IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQg
UmVmUHRyPFRocmVhZD4uCisgICAgVGhyZWFkOjpjcmVhdGUocnVuVGhyZWFkLCAwLCAiRHVtcFJl
bmRlclRyZWU6IHRlc3QiKTsKIH0KIAogc3RhdGljIHZvaWQgYWxsb2NhdGVHbG9iYWxDb250cm9s
bGVycygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRp
b24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAppbmRl
eCA4NDg1MjczNTFmNjA2M2ZjMjYzNjg3ODA1NmQ5YzI0ZGJhYmU4M2RjLi43NzIxNjM2Yjc3ODA3
ZjEzOTUxZWExMTJmYmQ0MTNlOGZhYzQ2MGJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0NvbmRpdGlvbi5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAg
ICAgQ29uZGl0aW9uIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlvbiBmdWxsQ29uZGl0aW9u
OwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IGNvbnN1bWVyVGhyZWFkczsKLSAgICBW
ZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gcHJvZHVjZXJUaHJlYWRzOworICAgIFZlY3RvcjxSZWZQ
dHI8VGhyZWFkPj4gY29uc3VtZXJUaHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4g
cHJvZHVjZXJUaHJlYWRzOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiByZWNlaXZlZDsKICAgICBM
b2NrIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1l
cnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0g
VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiQ29uc3VtZXIgdGhyZWFkIiwKICAgICAgICAg
ICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTA4LDcgKzEwOCw3
IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRp
dGlvbiwgbG9ja2VyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIs
IHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4i
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0
aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0g
IiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQp
OwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICBzbGVlcChkZWxheSk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBS
ZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAg
ICAgICAiUHJvZHVjZXIgVGhyZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzUGVyUHJvZHVjZXI7ICsr
aSkgewpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdWxsQ29uZGl0aW9uLCBsb2NrZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBz
aG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwg
cXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0
aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIs
IHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVvdXQpOwpAQCAtMTU1LDggKzE1NSw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgcHJv
ZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBmb3Ig
KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAg
ICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9y
IChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQorICAg
ICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgewogICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9ja2VyKGxvY2spOwpAQCAtMTY0LDggKzE2NCw4
IEBAIHZvaWQgcnVuVGVzdCgKICAgICB9CiAgICAgZW1wdHlDb25kaXRpb24ubm90aWZ5QWxsKCk7
CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IGNvbnN1bWVy
VGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmll
cik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogY29uc3VtZXJU
aHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
CiAgICAgRVhQRUNUX0VRKG51bVByb2R1Y2VycyAqIG51bU1lc3NhZ2VzUGVyUHJvZHVjZXIsIHJl
Y2VpdmVkLnNpemUoKSk7CiAgICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJlZ2luKCksIHJlY2VpdmVk
LmVuZCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2su
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKaW5kZXggNTU3NjMw
MmQ2OTBkZmNhMzU5OTI5MjhiMWM4NTNjNzYyMmU0NWZiOS4uNmE0ZTUzOGY1NmY0NmQxNzdhM2Y2
MmYxZGRlYjNhNGQwYWYyYWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvTG9jay5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5j
cHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVh
ZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAogewogICAgIHN0
ZDo6dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5
cGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdv
cmRzID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJH
cm91cCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRo
cmVhZHNQZXJHcm91cCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBu
dW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKICAgICAgICAgd29yZHNbdGhy
ZWFkR3JvdXBJbmRleF0gPSAwOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXgg
PSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7Ci0gICAgICAgICAgICB0aHJl
YWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0g
PSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBu
dW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAg
ICAgICAgICAgICAiTG9jayB0ZXN0IHRocmVhZCIsCiAgICAgICAgICAgICAgICAgW3RocmVhZEdy
b3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCBudW1JdGVyYXRpb25zLCB3b3JrUGVyQ3JpdGljYWxT
ZWN0aW9uXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUl0
ZXJhdGlvbnM7IGktLTspIHsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBydW5Mb2NrVGVzdCh1bnNp
Z25lZCBudW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cCwgdW5zaWdu
ZWQKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkR3Jv
dXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykKLSAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgICAgICB0aHJlYWRz
W3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIGRvdWJsZSBleHBlY3Rl
ZCA9IDA7CiAgICAgZm9yICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0
ZXJhdGlvbnMpICogd29ya1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsg
aS0tOykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdM
b3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKaW5k
ZXggYzY3ZTFlMDgxNWE4M2FmYTkzMzNlMmFjOWEyYmQ3OGI2N2IxNjQ1Yi4uNWFmOWM3YzgyN2Iy
MWUyMWQ4ZGY5MzA1MjYwZDZmZmVlNjhmYmQxYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKQEAgLTQ4LDE2ICs0OCwxNCBAQCBzdHJ1Y3QgU2luZ2xl
TGF0Y2hUZXN0IHsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVRocmVh
ZHM7IGktLTspIHsKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgICAg
IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAg
ICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAogICAgICAgICAgICAgICAgICAgICBb
Jl0gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBjdXJyZW50VGhy
ZWFkKCkpOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRocmVhZCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoVGhyZWFkOjpjdXJyZW50KCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pKTsKICAgICAgICAgfQpAQCAtNjUsMTYgKzYzLDE2IEBAIHN0cnVjdCBTaW5nbGVMYXRj
aFRlc3QgewogCiAgICAgdm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2luZ2xlVW5wYXJrSW5kZXgp
CiAgICAgewotICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4pOworICAgICAgICBFWFBF
Q1RfVFJVRShudWxscHRyID09IGxhc3RBd29rZW4pOwogICAgICAgICAKICAgICAgICAgdW5zaWdu
ZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7Ci0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlm
aWVyLCA4PiBxdWV1ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCA4PiBxdWV1ZTsK
ICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAg
ICAgICBbJl0gKFRocmVhZCYgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykg
ewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZCh0aHJlYWRJ
ZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoJnRocmVhZElkZW50aWZp
ZXIpOwogCiAgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOwogICAgICAgICAg
ICAgfSk7CkBAIC04NywxMiArODUsMTIgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKICAgICAg
ICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJbmRleCArIDEpCiAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAgICAgICAgIEVYUEVDVF9O
RSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShudWxscHRyICE9IGxh
c3RBd29rZW4pOwogICAgICAgICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgcXVldWVbMF0g
IT0gbGFzdEF3b2tlbikgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIldva2UgdXAgd3Jvbmcg
dGhyZWFkOiBxdWV1ZSA9ICIsIGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFzdCBhd29rZW4gPSAiLCBs
YXN0QXdva2VuLCAiXG4iKTsKICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEocXVldWVbMF0sIGxh
c3RBd29rZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFzdEF3b2tlbiA9IDA7Cisg
ICAgICAgICAgICBsYXN0QXdva2VuID0gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MTAwLDcgKzk4LDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgewogICAgICAgICB1
bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9y
RWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRk
cmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIApAQCAtMTE0LDcgKzExMiw3IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAw
OwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJ
ZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVh
ZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAh
PSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
QEAgLTEyOSw4ICsxMjcsOCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgICAg
ICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQotICAgICAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGZvciAo
UmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMpCisgICAgICAgICAgICB0
aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIAogICAgIC8vIFNl
bWFwaG9yZSBvcGVyYXRpb25zLgpAQCAtMTc5LDkgKzE3Nyw5IEBAIHN0cnVjdCBTaW5nbGVMYXRj
aFRlc3QgewogICAgIEF0b21pYzxpbnQ+IHNlbWFwaG9yZTsKICAgICBzdGQ6Om11dGV4IGxvY2s7
CiAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uOwotICAgIEhhc2hTZXQ8VGhy
ZWFkSWRlbnRpZmllcj4gYXdha2U7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVh
ZHM7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBsYXN0QXdva2VuIHsgMCB9OworICAgIEhhc2hTZXQ8
UmVmPFRocmVhZD4+IGF3YWtlOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsK
KyAgICBSZWZQdHI8VGhyZWFkPiBsYXN0QXdva2VuIHsgbnVsbHB0ciB9OwogfTsKIAogdm9pZCBy
dW5QYXJraW5nVGVzdCh1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxheSwgdW5zaWdu
ZWQgbnVtVGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306785</attachid>
            <date>2017-04-11 01:19:49 -0700</date>
            <delta_ts>2017-04-11 23:50:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170502-20170411171947.patch</filename>
            <type>text/plain</type>
            <size>228264</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZjBmY2IxYWY4MTVmNjA5ODgzZjU2M2U4MDgzOGMzZmUwOTVkYjI1Li4xNjc4NDNhZGU3NGIyNTgx
NThjZWM1NmExZDY1ZWYxODFkYWNkOTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6cmVtb3Zl
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91
bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6TWFjaGlu
ZVRocmVhZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpn
ZXRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVh
ZDo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBv
aW50ZXIpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVn
aXN0ZXJzOjpsbGludFBDKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVU
aHJlYWQ6OmNhcHR1cmVTdGFjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlD
b3B5T3RoZXJUaHJlYWRTdGFjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlD
b3B5T3RoZXJUaHJlYWRTdGFja3MpOgorICAgICAgICAocHRocmVhZFNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dGhyZWFkRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpv
cGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Om1hY2hp
bmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVhZERhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpyZXN1bWUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Z2V0UmVnaXN0
ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6
OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5z
dHJ1Y3Rpb25Qb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmNhcHR1cmVTdGFjayk6IERl
bGV0ZWQuCisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6cmVzdW1lKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnRocmVhZElEKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0VuZCk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjp0aHJlYWRzTGlzdEhlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZDo6c3VzcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjYXB0dXJlU3RhY2spOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpwbGF0Zm9ybVRocmVhZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnN0YWNrQmFz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnN0YWNr
RW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6
OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjp+SUNTdGF0cyk6Cisg
ICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVu
Y3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KToKKyAgICAgICAgKHN0YXJ0VGltZW91dFRocmVhZElmTmVl
ZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9j
azo6bG9jayk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suaDoKKyAgICAgICAgKEpTQzo6SlNM
b2NrOjpvd25lclRocmVhZCk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2spOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjppc1ZhbGlkRnJhbWVQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcik6CisgICAgICAgIChKU0M6
OlNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpW
TTo6b3duZXJUaHJlYWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAg
IChKU0M6OmZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFw
czo6U2lnbmFsU2VuZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6ZmlyZVRyYXAp
OgorCiAyMDE3LTA0LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2ZXJ0IHIyMTUyMTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggODc3OWYxZDE4OGRjOTNmY2I5NWI0
OTE2YTMxMTY2MGNhNjgxYjI5OC4uYWQ4MWI2N2M5ZGYwZDhkZTVkOTUzMDQ1MTRhMjgwY2UzMzc0
NWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxODkgQEAKKzIwMTctMDQtMTEgIFl1c3VrZSBTdXp1a2kgIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBj
bGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBp
bXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgcmVmYWN0b3Jpbmcg
b2YgV1RGIFRocmVhZGluZyBtZWNoYW5pc20gdG8gbWVyZ2UgSmF2YVNjcmlwdENvcmUncyB0aHJl
YWRpbmcgZXh0ZW5zaW9uIHRvIFdURiBUaHJlYWRpbmcuCisgICAgICAgIFByZXZpb3VzbHksIEph
dmFTY3JpcHRDb3JlIHJlcXVpcmVzIHJpY2hlciB0aHJlYWRpbmcgZmVhdHVyZXMgKHN1Y2ggYXMg
c3VzcGVuZGluZyBhbmQgcmVzdW1pbmcgdGhyZWFkcyksIGFuZCB0aGV5CisgICAgICAgIGFyZSBp
bXBsZW1lbnRlZCBmb3IgUGxhdGZvcm1UaHJlYWQgaW4gSmF2YVNjcmlwdENvcmUuIEJ1dCB0aGVz
ZSBmZWF0dXJlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gV1RGIFRocmVhZGluZyBzaWRlCisg
ICAgICAgIGluc3RlYWQgb2YgbWFpbnRhaW5pbmcgSlNDJ3Mgb3duIHRocmVhZGluZyBmZWF0dXJl
cyB0b28uIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGVzZSBmZWF0dXJlcyBmcm9tIEpTQyBhbmQgbW92
ZSBpdCB0bworICAgICAgICBXVEYgVGhyZWFkaW5nLgorCisgICAgICAgIEhvd2V2ZXIsIGN1cnJl
bnQgV1RGIFRocmVhZGluZyBoYXMgb25lIHByb2JsZW06IFdpbmRvd3MgdmVyc2lvbiBvZiBXVEYg
VGhyZWFkaW5nIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZyb20gUHRocmVhZHMKKyAgICAgICAg
b25lLiBJbiBXaW5kb3dzIFdURiBUaHJlYWRpbmcsIHdlIGNhbm5vdCBwZXJmb3JtIGFueSBvcGVy
YXRpb24gYWZ0ZXIgdGhlIHRhcmdldCB0aHJlYWQgaXMgZGV0YWNoZWQ6IFdURiBUaHJlYWRpbmcg
c3RvcAorICAgICAgICB0cmFja2luZyB0aGUgc3RhdGUgb2YgdGhlIHRocmVhZCBvbmNlIHRoZSB0
aHJlYWQgaXMgZGV0YWNoZWQuIEJ1dCB0aGlzIGlzIG5vdCB0aGUgc2FtZSB0byBQdGhyZWFkcyBv
bmUuIEluIFB0aHJlYWRzLAorICAgICAgICBwdGhyZWFkX2RldGFjaCBqdXN0IG1lYW5zIHRoYXQg
dGhlIHJlc291cmNlIG9mIHRoZSB0aHJlYWQgd2lsbCBiZSBkZXN0cm95ZWQgYXV0b21hdGljYWxs
eS4gV2hpbGUgc29tZSBvcGVyYXRpb25zIGxpa2UKKyAgICAgICAgcHRocmVhZF9qb2luIHdpbGwg
YmUgcmVqZWN0ZWQsIHNvbWUgb3BlcmF0aW9ucyBsaWtlIHB0aHJlYWRfa2lsbCB3aWxsIGJlIGFj
Y2VwdGVkLgorCisgICAgICAgIFRoZSBwcm9ibGVtIGlzIHRoYXQgZGV0YWNoZWQgdGhyZWFkIGNh
biBiZSBzdXNwZW5kZWQgYW5kIHJlc3VtZWQgaW4gSlNDLiBGb3IgZXhhbXBsZSwgaW4ganNjLmNw
cCwgd2Ugc3RhcnQgdGhlIHdvcmtlcgorICAgICAgICB0aHJlYWQgYW5kIGRldGFjaCBpdCBpbW1l
ZGlhdGVseS4gSW4gd29ya2VyIHRocmVhZCwgd2Ugd2lsbCBjcmVhdGUgVk0gYW5kIHRodXMgY29u
Y3VycmVudCBHQyB3aWxsIHN1c3BlbmQgYW5kIHJlc3VtZQorICAgICAgICB0aGUgZGV0YWNoZWQg
dGhyZWFkLiBIb3dldmVyLCBpbiBXaW5kb3dzIFdURiBUaHJlYWRpbmcsIHdlIGhhdmUgbm8gcmVm
ZXJlbmNlIHRvIHRoZSBkZXRhY2hlZCB0aHJlYWQuIFRodXMgd2UgY2Fubm90CisgICAgICAgIHBl
cmZvcm0gc3VzcGVuZCBhbmQgcmVzdW1lIG9wZXJhdGlvbnMgb250byB0aGUgZGV0YWNoZWQgdGhy
ZWFkLgorCisgICAgICAgIFRvIHNvbHZlIHRoZSBwcm9ibGVtLCB3ZSBjaGFuZ2UgV2luZG93cyBU
aHJlYWRpbmcgbWVjaGFuaXNtIGRyYXN0aWNhbGx5IHRvIGFsaWduIGl0IHRvIHRoZSBQdGhyZWFk
IHNlbWFudGljcy4gSW4gdGhlCisgICAgICAgIG5ldyBUaHJlYWRpbmcsIHdlIGhhdmUgUmVmUHRy
PFRocmVhZD4gY2xhc3MuIEl0IGhvbGRzIGEgaGFuZGxlIHRvIGEgcGxhdGZvcm0gdGhyZWFkLiBX
ZSBjYW4gcGVyZm9ybSB0aHJlYWRpbmcgb3BlcmF0aW9ucworICAgICAgICB3aXRoIHRoaXMgY2xh
c3MuIEZvciBleGFtcGxlLCBUaHJlYWQ6OnN1c3BlbmQgaXMgb2ZmZXJlZC4gQW5kIHdlIHVzZSBk
ZXN0cnVjdG9yIG9mIHRoZSB0aHJlYWQgbG9jYWwgdmFyaWFibGUgdG8gcmVsZWFzZQorICAgICAg
ICB0aGUgcmVzb3VyY2VzIGhlbGQgYnkgUmVmUHRyPFRocmVhZD4uIEluIFdpbmRvd3MsIFRocmVh
ZDo6ZGV0YWNoIGRvZXMgbm90aGluZyBiZWNhdXNlIHRoZSByZXNvdXJjZSB3aWxsIGJlIGRlc3Ry
b3llZAorICAgICAgICBhdXRvbWF0aWNhbGx5IGJ5IFJlZlB0cjxUaHJlYWQ+LgorCisgICAgICAg
IFRvIGRvIHNvLCB3ZSBpbnRyb2R1Y2UgVGhyZWFkSG9sZGVyIGZvciBXaW5kb3dzLiBUaGlzIGlz
IHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIFRocmVhZElkZW50aWZpZXJEYXRhIGZvciBQdGhyZWFk
cy4KKyAgICAgICAgSXQgaG9sZHMgUmVmUHRyPFRocmVhZD4gaW4gdGhlIHRocmVhZCBsb2NhbCBz
dG9yYWdlICh0ZWNobmljYWxseSwgaXQgaXMgRmliZXIgTG9jYWwgU3RvcmFnZSBpbiBXaW5kb3dz
KS4gVGhyZWFkOjpjdXJyZW50KCkKKyAgICAgICAgd2lsbCByZXR1cm4gdGhpcyByZWZlcmVuY2Uu
CisKKyAgICAgICAgVGhlIHByb2JsZW1hdGljIHNpdHVhdGlvbiBpcyB0aGF0IHRoZSBvcmRlciBv
ZiB0aGUgZGVhbGxvY2F0aW9uIG9mIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSBpcyBub3QgZGVm
aW5lZC4gU28gd2Ugc2hvdWxkCisgICAgICAgIG5vdCB0b3VjaCB0aHJlYWQgbG9jYWwgc3RvcmFn
ZSBpbiB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UuIFRvIGF2b2lk
IHN1Y2ggZWRnZSBjYXNlcywgd2UgaGF2ZQorICAgICAgICBjdXJyZW50VGhyZWFkKCkgLyBUaHJl
YWQ6OmN1cnJlbnRJRCgpIEFQSXMuIFRoZXkgYXJlIHNhZmUgdG8gYmUgY2FsbGVkIGV2ZW4gaW4g
dGhlIGRlc3RydWN0b3Igb2YgdGhlIG90aGVyIHRocmVhZCBsb2NhbAorICAgICAgICBzdG9yYWdl
LiBBbmQgaW4gV2luZG93cywgaW4gdGhlIEZMUyBkZXN0cnVjdG9yLCB3ZSB3aWxsIGNyZWF0ZSB0
aGUgdGhyZWFkX2xvY2FsIHZhcmlhYmxlIHRvIGRlZmVyIHRoZSBkZXN0cnVjdGlvbiBvZgorICAg
ICAgICB0aGUgVGhyZWFkSG9sZGVyLiBXZSBlbnN1cmUgdGhhdCB0aGlzIGRlc3RydWN0b3IgaXMg
Y2FsbGVkIGFmdGVyIHRoZSBvdGhlciBGTFMgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCBpbiBXaW5k
b3dzIDEwLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgcGVyZm9ybWFuY2UgbmV1dHJhbC4KKwor
ICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJlbmNo
bWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcDoKKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tG
YWlybmVzc1Rlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHA6
CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6OkF1dG9t
YXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiB3dGYvTWFpblRocmVhZC5oOgorICAgICAgICAqIHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuaDoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHA6CisgICAgICAgIChX
VEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tGb3IpOgorICAg
ICAgICAoV1RGOjpQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJl
YWQpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmg6CisgICAgICAgIChXVEY6
OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUpOgorICAg
ICAgICAqIHd0Zi9QYXJraW5nTG90LmNwcDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9y
RWFjaEltcGwpOgorICAgICAgICAqIHd0Zi9QYXJraW5nTG90Lmg6CisgICAgICAgIChXVEY6OlBh
cmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQu
aC4KKyAgICAgICAgKiB3dGYvUmVmUHRyLmg6CisgICAgICAgIChXVEY6OlJlZlB0cjo6UmVmUHRy
KToKKyAgICAgICAgKiB3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmg6CisgICAgICAgIChX
VEY6OlRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlRo
cmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcik6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRlci5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oLgorICAgICAgICAo
V1RGOjpUaHJlYWRIb2xkZXI6OnRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6
VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5j
cHAuCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UpOgorICAgICAg
ICAoV1RGOjpUaHJlYWRIb2xkZXI6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xk
ZXI6OmRlc3RydWN0KToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyV2luLmNwcDogQWRkZWQu
CisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KToKKyAgICAgICAgKFdURjo6dGhyZWFkTWFw
KToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSk6CisgICAgICAg
IChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRl
cjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRTcGVjaWZpYy5oOgorICAgICAgICAq
IHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Om5vcm1hbGl6ZVRocmVh
ZE5hbWUpOgorICAgICAgICAoV1RGOjp0aHJlYWRFbnRyeVBvaW50KToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJ
c1VzZXJJbnRlcmFjdGl2ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVh
ZElzVXNlckluaXRpYXRlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2V0R2xvYmFsTWF4UU9T
Q2xhc3MpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OmR1bXApOgorICAgICAgICAoV1RGOjpub3JtYWxpemVUaHJlYWROYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6YWRqdXN0ZWRRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZy5o
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmlkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRCZWNv
bWVEZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkSm9pbik6CisgICAgICAgIChX
VEY6OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6Cisg
ICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6aW5p
dGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpjaGFuZ2VQcmlvcml0eSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNv
bXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRldGFjaCk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAg
ICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnJlc3Vt
ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Z2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAg
ICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OlB0aHJlYWRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlB0aHJlYWRTdGF0ZTo6am9pbmFibGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlB0aHJlYWRTdGF0ZTo6cHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlB0aHJlYWRTdGF0ZTo6ZGlkQmVjb21lRGV0YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpQdGhyZWFkU3RhdGU6OmRpZEV4aXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFk
U3RhdGU6OmRpZEpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6Omhh
c0V4aXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZE1hcE11dGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6aWRl
bnRpZmllckJ5UHRocmVhZEhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmVzdGFibGlz
aElkZW50aWZpZXJGb3JQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6cHRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV1RG
Ojppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Y2hhbmdlVGhyZWFkUHJpb3JpdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmRldGFjaFRocmVhZCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZERpZEV4aXQpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6c2lnbmFsVGhy
ZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpUaHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKFdURjo6d3RmVGhy
ZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3JlYXRlSW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGV0YWNoKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Omdl
dFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChX
VEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRFeGl0KToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAgICAgICAoV1RGOjppbml0aWFs
aXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFk
TWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OnRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNo
YW5nZVRocmVhZFByaW9yaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6d2FpdEZvclRocmVh
ZENvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXRhY2hUaHJlYWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpjdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvV29ya1F1ZXVlLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpjb25jdXJyZW50QXBw
bHkpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDoKKyAgICAgICAgKiB3dGYvY29jb2EvV29y
a1F1ZXVlQ29jb2EuY3BwOgorICAgICAgICAoV1RGOjpkaXNwYXRjaFFPU0NsYXNzKToKKyAgICAg
ICAgKiB3dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcDoKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZh
bGlkYXRlKToKKyAgICAgICAgKiB3dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXgu
Y3BwOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6
OkV2ZW50RkRQb2xsZXIpOgorICAgICAgICAoV1RGOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2
ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKToKKyAgICAgICAgKiB3dGYvd2luL01haW5UaHJl
YWRXaW4uY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKToK
KwogMjAxNy0wNC0xMCAgVGhvcnN0ZW4gR2xhc2VyICA8dGdAbWlyYnNkLmRlPgogCiAgICAgICAg
IFtHVEtdIEZpeCB4MzIgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYTE0OTRmMGRiNTRlOTFjZmNlMGRi
M2YzYjA4OGVkOTA2NjgzZDE4Li5lODhjYTIwNmM3YWYxMzA3ODUxMDUyMTUxYjAwMTVlMzQ5MjQ3
YmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTctMDQtMTEgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRo
cmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVh
ZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBV
c2UgVGhyZWFkOjogQVBJcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVu
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OnN0YXJ0UmVuZGVyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFk
OjpnZXRUaHJlYWRJRCk6CisgICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0
ZVRocmVhZEZvckRlYnVnZ2luZyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAg
ICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6
Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L0hSVEZEYXRhYmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VM
b2FkZXI6OkhSVEZEYXRhYmFzZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJh
c2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0
YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9s
dmVyOjpSZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVy
Ojp+UmV2ZXJiQ29udm9sdmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252
b2x2ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVh
ZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0Zp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2FkZXJSdW5Mb29wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0
VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6
c3RvcFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0YXJ0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnN0b3BUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
Ojp3b3JrZXJUaHJlYWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0xMCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmVy
dCByMjE1MjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEyNzAxY2UzOWM4ZDRkYWMzYTlhYzI5YTBmYjQ5MjNkYjEx
NmUyYmEuLjcwOTk2NzU3MjAxNjZiOTY2YTUzMzU0MWFhMDcyODU2NDYyYTA1MGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDQtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQg
dXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRh
dGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBVc2UgVGhyZWFkOjogQVBJ
cy4KKworICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VU
aHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAg
ICogU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmg6CisKIDIwMTctMDQtMTAgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEcm9wIFRpbWVyOjpzdGFydE9uZVNob3QoKSBv
dmVybG9hZCB0YWtpbmcgYSBkb3VibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzNjEyYmZiN2UxNmJkOTJjYzg3
MmYzNmM1ZjE4NzE5OTE1Y2JmZTJlLi41MjRiYzAwZTliMzg2MzM0ZjRlMDU2NDY3N2FhYjA0YWIx
MDM3YzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMTEgIFl1c3VrZSBT
dXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNl
IFRocmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRo
cmVhZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdl
LiBVc2UgVGhyZWFkOjogQVBJcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlSU9DaGFubmVsU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9D
aGFubmVsOjpyZWFkU3luY0luVGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3Nh
Z2UpOgorICAgICAgICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNl
L1hQQ1NlcnZpY2VFbnRyeVBvaW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0
aWFsaXplcik6CisgICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRv
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJl
c3N1cmVNb25pdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTct
MDQtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZlcnQgcjIxNTIxNwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3BwCmluZGV4IGU3ODA4NmMzYTk2MTJhMmYwYjRk
N2FhZjFhZGM3YmExYTEwMWM1NDcuLjQzYWVmMDc3OTcwY2ZlZGIyY2FjMDQ2M2ZjZDllY2NhMjlk
MTUyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFy
ZUFuZFN3YXBUZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Nv
bXBhcmVBbmRTd2FwVGVzdC5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCB0ZXN0Q29tcGFyZUFu
ZFN3YXAoKQogewogICAgIEJpdG1hcCBiaXRtYXA7CiAgICAgY29uc3QgaW50IG51bVRocmVhZHMg
PSA1OwotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSURzW251bVRocmVhZHNdOworICAgIFJl
ZlB0cjxUaHJlYWQ+IHRocmVhZHNbbnVtVGhyZWFkc107CiAgICAgRGF0YSBkYXRhW251bVRocmVh
ZHNdOwogCiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CkBAIC0xMDcsMTIgKzEwNywx
MiBAQCB2b2lkIHRlc3RDb21wYXJlQW5kU3dhcCgpCiAgICAgICAgIGRhdGFbaV0uaWQgPSBpOwog
ICAgICAgICBkYXRhW2ldLm51bVRocmVhZHMgPSBudW1UaHJlYWRzOwogICAgICAgICBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gdGhyZWFkRnVuYyA9IHN0ZDo6YmluZChzZXRCaXRUaHJlYWRGdW5jLCAm
ZGF0YVtpXSk7Ci0gICAgICAgIHRocmVhZElEc1tpXSA9IGNyZWF0ZVRocmVhZCgic2V0Qml0VGhy
ZWFkRnVuYyIsIHRocmVhZEZ1bmMpOworICAgICAgICB0aHJlYWRzW2ldID0gVGhyZWFkOjpjcmVh
dGUoInNldEJpdFRocmVhZEZ1bmMiLCB0aHJlYWRGdW5jKTsKICAgICB9CiAKICAgICBwcmludGYo
IldhaXRpbmcgZm9yICVkIHRocmVhZHMgdG8gam9pblxuIiwgbnVtVGhyZWFkcyk7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBpKyspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZElEc1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21w
bGV0aW9uKCk7CiAKICAgICBwcmludGYoIlBBU1M6IENvbXBhcmVBbmRTd2FwIHRlc3QgY29tcGxl
dGVkIHdpdGhvdXQgYSBoYW5nXG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggN2YxNjZjMzdkYTQ5YWRkZmZhZWI3NjdjZjFjOThiYmVhYzdiMzBmYy4uOWI5NGYzMGI5ODdm
MzA5NmUwMzVhNmY5YjZmYTlkOTExYzZmNWJmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTI0NzEsNyArMjQ3MSw2IEBACiAJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBM
TEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkVEMjg3QjExNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEOTRGMkUxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi87
IH07CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJRkVFNDNGQ0UxRTY2NDE3MTAwNzdENkQxIC8qIFBsYXRmb3JtVGhyZWFkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUU0M0ZDRDFF
NjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyog
Q29tcGFyZUFuZFN3YXBUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRl
c3QuY3BwICovOyB9OwogCQlGRUZENkZDNjFENUU3OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZE
NkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2Vj
dGlvbiAqLwpAQCAtNTEwMSw3ICs1MTAwLDYgQEAKIAkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0
IC8qIFdhdGNoZG9nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhdGNoZG9n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0
RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwOyBwYXRoID0gQVBJ
L3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRURBNTBENTFCOTdGNEQ5MDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJm
bG93VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNr
T3ZlcmZsb3dUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2
RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTAx
QUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuY3BwOyBwYXRoID0gQVBJ
L3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFRjA0MDUyMUFBRUM0RUQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0Lmg7IHBhdGgg
PSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODY2LDcgKzY4NjQsNiBAQAogCQkJCUY2OTJBODc4MDI1
NTU5N0QwMUZGNjBGNyAvKiBPcGVyYXRpb25zLmggKi8sCiAJCQkJMEZFMjI4RUExNDM2QUIyMzAw
MTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovLAogCQkJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAv
KiBPcHRpb25zLmggKi8sCi0JCQkJRkVFNDNGQ0QxRTY2NDE0MDAwNzdENkQxIC8qIFBsYXRmb3Jt
VGhyZWFkLmggKi8sCiAJCQkJODY4OTE2QTkxNTVGMjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1l
LmggKi8sCiAJCQkJMTQ3MzQxREYxREMyQ0U5NjAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxl
LmNwcCAqLywKIAkJCQkxNDczNDFEMzFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFi
bGUuaCAqLywKQEAgLTkzNDgsNyArOTM0NSw2IEBACiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkw
MzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQUMxQTZFNTAx
RTAwNzE2NzU3IC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQUUxQTZFNTAx
RTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRUU0
M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk5NkI3MzI3MUJEQTA4RUYwMDMzMUI4NCAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5sdXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIwMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwNUI0MUIyMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1i
b2xQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
dGVzdGFpci5jcHAKaW5kZXggODdiMzUzYWEzNzkyNWNhMWUyZmE4NDExOTk3NmFkZjBiMWUwN2Jh
YS4uYzkxNzcwNzk1ODhmODZkNDMxYTI4YmMwNzRkNGZlMmUzZjEzZGM0MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCkBAIC0xOTEzLDEwICsxOTEzLDEwIEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIAogICAgIExvY2sgbG9jazsKIAotICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4g
dGhyZWFkczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaWx0ZXIgPyAxIDogV1RGOjpudW1iZXJP
ZlByb2Nlc3NvckNvcmVzKCk7IGktLTspIHsKICAgICAgICAgdGhyZWFkcy5hcHBlbmQoCi0gICAg
ICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAg
ICAgICAgICAgICAidGVzdGIzIHRocmVhZCIsCiAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAg
ICAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTkzMyw4ICsxOTMzLDggQEAgdm9pZCBy
dW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAgICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAg
ICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkIDogdGhyZWFkcykKLSAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA6IHRocmVhZHMpCisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBj
cmFzaExvY2subG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4
IDAxOTk2YWY3MWFiNGYwOWViNDliNzAxMWMxN2RiYzkzYzQwY2U4N2EuLjkwNDY1NjQ4ODdiNmIz
YTRhZmFjMzU5ZGMxMGM1MDM4NGQ3NGRlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCkBAIC0xNjg1MCwxMCArMTY4NTAsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVy
KQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVh
ZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsgaS0tOykg
ewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJ0ZXN0YjMgdGhyZWFk
IiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKDs7
KSB7CkBAIC0xNjg3MCw4ICsxNjg3MCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikK
ICAgICAgICAgICAgICAgICB9KSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVy
IHRocmVhZCA6IHRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVh
ZCk7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICB0
aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgY3Jhc2hMb2NrLmxvY2soKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAppbmRl
eCBhNGUyMWY5ZmEzY2Q0NzIxZWEyNjc1ZTA2ZTRkNTMwYzViYTk1YjM1Li5lOWIxZjVjMmYwYmMy
N2IwMjkzMTBjNTU4MTUyMGIxYjU1MjI1OTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIGluaXRp
YWxpemVTdXBlclNhbXBsZXIoKQogICAgIGlmICghT3B0aW9uczo6dXNlU3VwZXJTYW1wbGVyKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNyZWF0ZVRocmVhZCgKKyAgICBUaHJlYWQ6OmNyZWF0
ZSgKICAgICAgICAgIkpTQyBTdXBlciBTYW1wbGVyIiwKICAgICAgICAgW10gKCkgewogICAgICAg
ICAgICAgY29uc3QgaW50IHNsZWVwUXVhbnR1bSA9IDEwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAppbmRleCBjZWY5OTBjYjQ4MzNhNmJiOTQ3MWJkMDhhNTA0ZTU1
ZmI0N2RmNDU4Li5hZDBlY2M2OWE3N2QxNzJjZjRiYzFlZmFjOTNkZjkzMDI3YzAwOWU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcApAQCAtMTQ0LDcgKzE0NCw3
IEBAIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7
CiAgICAgICAgICAgICBkYXRhTG9nKG1fd29ya2xpc3QsICI6IFRocmVhZCBzdGFydGVkXG4iKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChtX3JlbGF0aXZlUHJpb3JpdHkpCi0gICAgICAgICAgICBj
aGFuZ2VUaHJlYWRQcmlvcml0eShjdXJyZW50VGhyZWFkKCksIG1fcmVsYXRpdmVQcmlvcml0eSk7
CisgICAgICAgICAgICBUaHJlYWQ6OmN1cnJlbnQoKS5jaGFuZ2VQcmlvcml0eShtX3JlbGF0aXZl
UHJpb3JpdHkpOwogICAgICAgICAKICAgICAgICAgbV9jb21waWxhdGlvblNjb3BlID0gc3RkOjpt
YWtlX3VuaXF1ZTxDb21waWxhdGlvblNjb3BlPigpOwogICAgICAgICBtX2xvbmdMaXZlZFN0YXRl
ID0gc3RkOjptYWtlX3VuaXF1ZTxMb25nTGl2ZWRTdGF0ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAppbmRleCA3ODhhNmMz
NjIzNjljNThkYWQyOWE2MGEzODcxMDQ0ZTQ2NGVkMzA1Li4yYjgyNGVjZmRlNTg5M2IyYzZiNzA2
ZjQ3MDJlY2QyMjk1ZDIzNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIEFzeW5j
aHJvbm91c0Rpc2Fzc2VtYmxlciB7CiBwdWJsaWM6CiAgICAgQXN5bmNocm9ub3VzRGlzYXNzZW1i
bGVyKCkKICAgICB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgiQXN5bmNocm9ub3VzIERpc2Fzc2Vt
YmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUoIkFzeW5j
aHJvbm91cyBEaXNhc3NlbWJsZXIiLCBbJl0gKCkgeyBydW4oKTsgfSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgZW5xdWV1ZShzdGQ6OnVuaXF1ZV9wdHI8RGlzYXNzZW1ibHlUYXNrPiB0YXNrKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCAzYWVlMzAxMDRmNTI5MWEyODc2NGE1
Y2RlZTVhYThmMGNhNzJhZDMxLi43MjIzYjIwYzlkZmJhMTA0MzA5OGE3ODU3NGJhMjhhNjk0YzA0
NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtMzQ5LDcgKzM0OSw3IEBA
IHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogICAgICAgICAgICAgbV9zaG91bGRT
dG9wQ29sbGVjdGluZ0NvbnRpbnVvdXNseSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbGxlY3RD
b250aW51b3VzbHlDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIH0KLSAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkKTsKKyAgICAg
ICAgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
IH0KICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKQEAgLTI2ODEsNyArMjY4MSw3IEBA
IHZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkKICAgICBtX2lzU2FmZVRvQ29sbGVj
dCA9IHRydWU7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkg
ewotICAgICAgICBtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQgPSBjcmVhdGVUaHJlYWQoCisg
ICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseVRocmVhZCA9IFdURjo6VGhyZWFkOjpjcmVhdGUo
CiAgICAgICAgICAgICAiSlNDIERFQlVHIENvbnRpbnVvdXMgR0MiLAogICAgICAgICAgICAgW3Ro
aXNdICgpIHsKICAgICAgICAgICAgICAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggZDA2NTcw
MTZiZWVmOWE4OWQwNmRmMjc5NzE3ZTc3MGIxNjRhNDcxNC4uZDY3ODM3YWZlZjEzMDFmOTY3MmY2
MGVhMjljNDNmYzg1OTdkZWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtNDks
NiArNDksNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY2Niw3ICs2Njcs
NyBAQCBjbGFzcyBIZWFwIHsKICAgICBMb2NrIG1fY29sbGVjdENvbnRpbnVvdXNseUxvY2s7CiAg
ICAgQ29uZGl0aW9uIG1fY29sbGVjdENvbnRpbnVvdXNseUNvbmRpdGlvbjsKICAgICBib29sIG1f
c2hvdWxkU3RvcENvbGxlY3RpbmdDb250aW51b3VzbHkgeyBmYWxzZSB9OwotICAgIFRocmVhZElk
ZW50aWZpZXIgbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkIHsgMCB9OworICAgIFJlZlB0cjxX
VEY6OlRocmVhZD4gbV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkIHsgbnVsbHB0ciB9OwogICAg
IAogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0R0NTdGFydFRpbWU7CiAgICAgTW9ub3RvbmljVGlt
ZSBtX2xhc3RHQ0VuZFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAppbmRleCBiODViNzY0OGUyZjVkMTlmYTIyZDc2M2Y3YmNkZWY4
ZjQ0YzQyYzg4Li45MWI4ZWFhNzdiMmRlZTBlMDJiYzQ4YWRkMTI2YjVlN2IzMTRlYWE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
QEAgLTM2LDkyICszNiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIE9TKERBUldJTikKLQotI2luY2x1ZGUg
PG1hY2gvbWFjaF9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KLSNpbmNsdWRl
IDxtYWNoL3Rhc2suaD4KLSNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KLSNpbmNsdWRlIDxt
YWNoL3ZtX21hcC5oPgotCi0jZWxpZiBPUyhXSU5ET1dTKQotCi0jaW5jbHVkZSA8d2luZG93cy5o
PgotI2luY2x1ZGUgPG1hbGxvYy5oPgotCi0jZWxpZiBPUyhVTklYKQotCi0jaW5jbHVkZSA8c3lz
L21tYW4uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2lmIE9TKFNPTEFSSVMpCi0jaW5jbHVk
ZSA8dGhyZWFkLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZgotCi0jaWYg
SEFWRShQVEhSRUFEX05QX0gpCi0jaW5jbHVkZSA8cHRocmVhZF9ucC5oPgotI2VuZGlmCi0KLSNp
ZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUg
PHNpZ25hbC5oPgotCi0vLyBXZSB1c2UgU0lHVVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUgbWFj
aGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3JlLgotc3RhdGljIGNvbnN0IGludCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lID0gU0lHVVNSMjsKLXN0YXRpYyBTdGF0aWNMb2NrIGdsb2JhbFNpZ25h
bExvY2s7Ci10aHJlYWRfbG9jYWwgc3RhdGljIHN0ZDo6YXRvbWljPEpTQzo6TWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGEqPiB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQgeyBudWxscHRyIH07Ci0K
LXN0YXRpYyB2b2lkIHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2lu
Zm9fdCosIHZvaWQqIHVjb250ZXh0KQotewotICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2NhbCBh
dG9taWMgdHlwZXMgZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KLSAgICBKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhKiB0aHJlYWREYXRhID0gdGhyZWFkTG9jYWxDdXJyZW50
VGhyZWFkLmxvYWQoKTsKLQotICAgIGlmICh0aHJlYWREYXRhLT5zdXNwZW5kZWQubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkgewotICAgICAgICAvLyBUaGlzIGlzIHNpZ25hbCBoYW5k
bGVyIGludm9jYXRpb24gdGhhdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlc3VtZSBzaWdz
dXNwZW5kLgotICAgICAgICAvLyBTbyB0aGlzIGhhbmRsZXIgaW52b2NhdGlvbiBpdHNlbGYgc2hv
dWxkIG5vdCBwcm9jZXNzLgotICAgICAgICAvLwotICAgICAgICAvLyBXaGVuIHNpZ25hbCBjb21l
cywgZmlyc3QsIHRoZSBzeXN0ZW0gY2FsbHMgc2lnbmFsIGhhbmRsZXIuIEFuZCBsYXRlciwgc2ln
c3VzcGVuZCB3aWxsIGJlIHJlc3VtZWQuIFNpZ25hbCBoYW5kbGVyIGludm9jYXRpb24gYWx3YXlz
IHByZWNlZGVzLgotICAgICAgICAvLyBTbywgdGhlIHByb2JsZW0gbmV2ZXIgaGFwcGVucyB0aGF0
IHN1c3BlbmRlZC5zdG9yZSh0cnVlLCAuLi4pIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBo
YW5kbGVyIGlzIGNhbGxlZC4KLSAgICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9v
bmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvc2lnc3VzcGVuZC5odG1sCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICB1Y29udGV4dF90KiB1c2VyQ29udGV4dCA9IHN0YXRpY19jYXN0
PHVjb250ZXh0X3QqPih1Y29udGV4dCk7Ci0jaWYgQ1BVKFBQQykKLSAgICB0aHJlYWREYXRhLT5z
dXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9ICp1c2VyQ29udGV4dC0+dWNfbWNvbnRleHQudWNfcmVn
czsKLSNlbHNlCi0gICAgdGhyZWFkRGF0YS0+c3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSB1c2Vy
Q29udGV4dC0+dWNfbWNvbnRleHQ7Ci0jZW5kaWYKLQotICAgIC8vIEFsbG93IHN1c3BlbmQgY2Fs
bGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZC4KLSAgICAvLyBzZW1fcG9z
dCBpcyBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbi4gSXQgbWVhbnMgdGhhdCB3ZSBjYW4gY2Fs
bCB0aGlzIGZyb20gYSBzaWduYWwgaGFuZGxlci4KLSAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3Jv
dXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwj
dGFnXzAyXzA0XzAzCi0gICAgLy8KLSAgICAvLyBBbmQgc2VtX3Bvc3QgZW1pdHMgbWVtb3J5IGJh
cnJpZXIgdGhhdCBlbnN1cmVzIHRoYXQgc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgaXMgY29ycmVj
dGx5IHNhdmVkLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85
Njk5OTE5Nzk5L2Jhc2VkZWZzL1YxX2NoYXAwNC5odG1sI3RhZ18wNF8xMQotICAgIHNlbV9wb3N0
KCZ0aHJlYWREYXRhLT5zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLQotICAgIC8vIFJlYWNo
aW5nIGhlcmUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYmxvY2tlZCBpbiB0aGlzIGhhbmRs
ZXIgKHRoaXMgaXMgY29uZmlndXJlZCBieSBzaWdhY3Rpb24ncyBzYV9tYXNrKS4KLSAgICAvLyBT
byBiZWZvcmUgY2FsbGluZyBzaWdzdXNwZW5kLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHRvIHRo
aXMgdGhyZWFkIGlzIGRlZmVycmVkLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaGFuZGxlciBpcyBu
b3QgZXhlY3V0ZWQgcmVjdXJzaXZlbHkuCi0gICAgc2lnc2V0X3QgYmxvY2tlZFNpZ25hbFNldDsK
LSAgICBzaWdmaWxsc2V0KCZibG9ja2VkU2lnbmFsU2V0KTsKLSAgICBzaWdkZWxzZXQoJmJsb2Nr
ZWRTaWduYWxTZXQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOwotICAgIHNpZ3N1c3BlbmQoJmJs
b2NrZWRTaWduYWxTZXQpOwotCi0gICAgLy8gQWxsb3cgcmVzdW1lIGNhbGxlciB0byBzZWUgdGhh
dCB0aGlzIHRocmVhZCBpcyByZXN1bWVkLgotICAgIHNlbV9wb3N0KCZ0aHJlYWREYXRhLT5zZW1h
cGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLX0KLSNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpICYmICFP
UyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdU
RjsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXVzaW5nIFRocmVhZCA9IE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ7Ci0KIGNsYXNzIEFjdGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdlcjsKIHN0YXRpYyBBY3Rp
dmVNYWNoaW5lVGhyZWFkc01hbmFnZXImIGFjdGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdlcigpOwog
CkBAIC0xOTQsNDEgKzExMiwxMyBAQCBNYWNoaW5lVGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKCkK
ICAgICB0aHJlYWRTcGVjaWZpY0tleURlbGV0ZShtX3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRo
cmVhZHMpOwogCiAgICAgTG9ja0hvbGRlciByZWdpc3RlcmVkVGhyZWFkc0xvY2sobV9yZWdpc3Rl
cmVkVGhyZWFkc011dGV4KTsKLSAgICBmb3IgKFRocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7IHQ7KSB7Ci0gICAgICAgIFRocmVhZCogbmV4dCA9IHQtPm5leHQ7CisgICAgZm9yIChNYWNo
aW5lVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAgICAgTWFjaGlu
ZVRocmVhZCogbmV4dCA9IHQtPm5leHQ7CiAgICAgICAgIGRlbGV0ZSB0OwogICAgICAgICB0ID0g
bmV4dDsKICAgICB9CiB9CiAKLXN0YXRpYyBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSogdGhy
ZWFkRGF0YSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZFNwZWNpZmljPE1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhLCBDYW5CZUdDVGhyZWFkOjpUcnVlPj4gdGhyZWFkRGF0
YTsKLSAgICByZXR1cm4gdGhyZWFkRGF0YS5nZXQoKTsKLX0KLQotTWFjaGluZVRocmVhZHM6OlRo
cmVhZDo6VGhyZWFkKFRocmVhZERhdGEqIHRocmVhZERhdGEpCi0gICAgOiBkYXRhKHRocmVhZERh
dGEpCi17Ci0gICAgQVNTRVJUKHRocmVhZERhdGEpOwotfQotCi1UaHJlYWQqIE1hY2hpbmVUaHJl
YWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKQotewotICAgIHJldHVybiBuZXcg
VGhyZWFkKHRocmVhZERhdGEoKSk7Ci19Ci0KLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6
b3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVRocmVhZCYgb3RoZXIpIGNvbnN0Ci17Ci0jaWYgT1Mo
REFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgIHJldHVybiBkYXRhLT5wbGF0Zm9ybVRocmVhZCA9
PSBvdGhlcjsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICByZXR1cm4gISFwdGhyZWFkX2VxdWFs
KGRhdGEtPnBsYXRmb3JtVGhyZWFkLCBvdGhlcik7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3YXkg
dG8gY29tcGFyZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCiB2b2lkIE1h
Y2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKIHsKICAgICBpZiAodGhyZWFkU3BlY2lm
aWNHZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKSkgewpAQCAtMjM5LDcgKzEy
OSw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZUZvckN1
cnJlbnRUaHJlYWQoKTsKKyAgICBNYWNoaW5lVGhyZWFkKiB0aHJlYWQgPSBuZXcgTWFjaGluZVRo
cmVhZCgpOwogICAgIHRocmVhZFNwZWNpZmljU2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5l
VGhyZWFkcywgdGhpcyk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFk
c011dGV4KTsKQEAgLTI0OCwxMiArMTM4LDEyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1
cnJlbnRUaHJlYWQoKQogICAgIG1fcmVnaXN0ZXJlZFRocmVhZHMgPSB0aHJlYWQ7CiB9CiAKLVRo
cmVhZCogTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkKK2F1
dG8gTWFjaGluZVRocmVhZHM6Om1hY2hpbmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKCkgLT4gTWFj
aGluZVRocmVhZCoKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011
dGV4KTsKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQbGF0Zm9y
bVRocmVhZCgpOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRz
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAoKnRocmVhZCA9
PSBwbGF0Zm9ybVRocmVhZCkKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkID0gY3VycmVudFRocmVh
ZCgpOworICAgIGZvciAoTWFjaGluZVRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFk
czsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+
dGhyZWFkSUQoKSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiB0aHJlYWQ7CiAgICAgfQogCkBA
IC0yODMsMjIgKzE3MywyMSBAQCB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIE1hY2hpbmVUaHJl
YWRzOjpyZW1vdmVUaHJlYWQodm9pZCogcCkKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgog
Ci0gICAgICAgIG1hY2hpbmVUaHJlYWRzLT5yZW1vdmVUaHJlYWRJZkZvdW5kKGN1cnJlbnRQbGF0
Zm9ybVRocmVhZCgpKTsKKyAgICAgICAgbWFjaGluZVRocmVhZHMtPnJlbW92ZVRocmVhZElmRm91
bmQoY3VycmVudFRocmVhZCgpKTsKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFBsYXRm
b3JtVGhyZWFkPgotdm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0
Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRo
cmVhZElmRm91bmQoVGhyZWFkSWRlbnRpZmllciBpZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2so
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBUaHJlYWQqIHQgPSBtX3JlZ2lzdGVyZWRU
aHJlYWRzOwotICAgIGlmICgqdCA9PSBwbGF0Zm9ybVRocmVhZCkgeworICAgIE1hY2hpbmVUaHJl
YWQqIHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOworICAgIGlmICh0LT50aHJlYWRJRCgpID09IGlk
KSB7CiAgICAgICAgIG1fcmVnaXN0ZXJlZFRocmVhZHMgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5u
ZXh0OwogICAgICAgICBkZWxldGUgdDsKICAgICB9IGVsc2UgewotICAgICAgICBUaHJlYWQqIGxh
c3QgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOworICAgICAgICBNYWNoaW5lVGhyZWFkKiBsYXN0ID0g
bV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICAgICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFk
cy0+bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsKLSAgICAgICAgICAgIGlmICgqdCA9PSBwbGF0Zm9y
bVRocmVhZCkgeworICAgICAgICAgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAg
ICAgICAgICAgICBsYXN0LT5uZXh0ID0gdC0+bmV4dDsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KQEAgLTMyMCwyMDYgKzIwOSwzNCBAQCB2b2lkIE1hY2hpbmVUaHJlYWRz
OjpnYXRoZXJGcm9tQ3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZl
Um9vdAogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tU
b3AsIGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja09yaWdpbiwgaml0U3R1YlJvdXRpbmVzLCBjb2Rl
QmxvY2tzKTsKIH0KIAotTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEoKQor
TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6Ok1hY2hpbmVUaHJlYWQoKQorICAgIDogbmV4
dChudWxscHRyKQorICAgICwgbV90aHJlYWQoV1RGOjpUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAg
ICBhdXRvIHN0YWNrQm91bmRzID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7Ci0gICAgcGxhdGZv
cm1UaHJlYWQgPSBjdXJyZW50UGxhdGZvcm1UaHJlYWQoKTsKLSAgICBzdGFja0Jhc2UgPSBzdGFj
a0JvdW5kcy5vcmlnaW4oKTsKLSAgICBzdGFja0VuZCA9IHN0YWNrQm91bmRzLmVuZCgpOwotCi0j
aWYgT1MoV0lORE9XUykKLSAgICBBU1NFUlQocGxhdGZvcm1UaHJlYWQgPT0gR2V0Q3VycmVudFRo
cmVhZElkKCkpOwotICAgIGJvb2wgaXNTdWNjZXNzZnVsID0KLSAgICAgICAgRHVwbGljYXRlSGFu
ZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJlYWQoKSwgR2V0Q3VycmVudFBy
b2Nlc3MoKSwKLSAgICAgICAgICAgICZwbGF0Zm9ybVRocmVhZEhhbmRsZSwgMCwgRkFMU0UsIERV
UExJQ0FURV9TQU1FX0FDQ0VTUyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVsKTsK
LSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAgICB0aHJlYWRMb2NhbEN1cnJl
bnRUaHJlYWQuc3RvcmUodGhpcyk7Ci0KLSAgICAvLyBTaWduYWwgaGFuZGxlcnMgYXJlIHByb2Nl
c3MgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uCi0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRp
YWxpemVTaWduYWxIYW5kbGVyOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVTaWduYWxI
YW5kbGVyLCBbXSB7Ci0gICAgICAgIC8vIEludGVudGlvbmFsbHkgYmxvY2sgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSBpbiB0aGUgaGFuZGxlci4KLSAgICAgICAgLy8gU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlIGhhbmRsZXIgYnkgc2lnc3VzcGVuZC4KLSAgICAg
ICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgICAgIHNpZ2VtcHR5c2V0KCZhY3Rpb24u
c2FfbWFzayk7Ci0gICAgICAgIHNpZ2FkZHNldCgmYWN0aW9uLnNhX21hc2ssIFNpZ1RocmVhZFN1
c3BlbmRSZXN1bWUpOwotCi0gICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBwdGhyZWFkU2ln
bmFsSGFuZGxlclN1c3BlbmRSZXN1bWU7Ci0gICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JF
U1RBUlQgfCBTQV9TSUdJTkZPOwotICAgICAgICBzaWdhY3Rpb24oU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSwgJmFjdGlvbiwgMCk7Ci0gICAgfSk7Ci0KLSAgICBzaWdzZXRfdCBtYXNrOwotICAgIHNp
Z2VtcHR5c2V0KCZtYXNrKTsKLSAgICBzaWdhZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRS
ZXN1bWUpOwotICAgIHB0aHJlYWRfc2lnbWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOwotCi0g
ICAgc2VtX2luaXQoJnNlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUsIC8qIE9ubHkgYXZhaWxhYmxl
IGluIHRoaXMgcHJvY2Vzcy4gKi8gMCwgLyogSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbWFwaG9y
ZS4gKi8gMCk7Ci0jZW5kaWYKKyAgICBtX3N0YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigp
OworICAgIG1fc3RhY2tFbmQgPSBzdGFja0JvdW5kcy5lbmQoKTsKIH0KIAotTWFjaGluZVRocmVh
ZHM6OlRocmVhZERhdGE6On5UaHJlYWREYXRhKCkKK3NpemVfdCBNYWNoaW5lVGhyZWFkczo6TWFj
aGluZVRocmVhZDo6Z2V0UmVnaXN0ZXJzKE1hY2hpbmVUaHJlYWQ6OlJlZ2lzdGVycyYgcmVnaXN0
ZXJzKQogewotI2lmIE9TKFdJTkRPV1MpCi0gICAgQ2xvc2VIYW5kbGUocGxhdGZvcm1UaHJlYWRI
YW5kbGUpOwotI2VsaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQotICAgIHNlbV9kZXN0
cm95KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSNlbmRpZgotfQotCi1ib29sIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWREYXRhOjpzdXNwZW5kKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAg
a2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc3VzcGVuZChwbGF0Zm9ybVRocmVhZCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdCA9PSBLRVJOX1NVQ0NFU1M7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAg
IGJvb2wgdGhyZWFkSXNTdXNwZW5kZWQgPSAoU3VzcGVuZFRocmVhZChwbGF0Zm9ybVRocmVhZEhh
bmRsZSkgIT0gKERXT1JEKS0xKTsKLSAgICBBU1NFUlQodGhyZWFkSXNTdXNwZW5kZWQpOwotICAg
IHJldHVybiB0aHJlYWRJc1N1c3BlbmRlZDsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKGN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpICE9IHBsYXRmb3JtVGhyZWFk
LCAiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgc3VzcGVuZCB0aGUgY3VycmVudCB0aHJlYWQg
aXRzZWxmLiIpOwotICAgIHsKLSAgICAgICAgLy8gRHVyaW5nIHN1c3BlbmQsIHN1c3BlbmQgb3Ig
cmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KLSAg
ICAgICAgLy8gV2UgdXNlIGdsb2JhbCBsb2NrIGluc3RlYWQgb2YgcGVyIHRocmVhZCBsb2NrLgot
ICAgICAgICAvLyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhc2UsIHRoZXJlIGFyZSB0aHJlYWRz
IEEgYW5kIEIuCi0gICAgICAgIC8vIEFuZCBBIGF0dGVtcHQgdG8gc3VzcGVuZCBCIGFuZCBCIGF0
dGVtcHQgdG8gc3VzcGVuZCBBLgotICAgICAgICAvLyBBIGFuZCBCIHNlbmQgc2lnbmFscy4gQW5k
IGxhdGVyLCBzaWduYWxzIGFyZSBkZWxpdmVyZWQgdG8gQSBhbmQgQi4KLSAgICAgICAgLy8gSW4g
dGhhdCBjYXNlLCBib3RoIHdpbGwgYmUgc3VzcGVuZGVkLgotICAgICAgICBMb2NrSG9sZGVyIGxv
Y2soZ2xvYmFsU2lnbmFsTG9jayk7Ci0gICAgICAgIGlmICghc3VzcGVuZENvdW50KSB7Ci0gICAg
ICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSBwdGhyZWFkX3NpZ3F1ZXVl
LiBJdCBhbGxvd3MgdXMgdG8gcGFzcyB0aGUgYXJndW1lbnQgdG8gdGhlIHNpZ25hbCBoYW5kbGVy
LgotICAgICAgICAgICAgLy8gQnV0IGl0IGNhbiBiZSB1c2VkIGluIGEgZmV3IHBsYXRmb3Jtcywg
bGlrZSBMaW51eC4KLSAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIHVzZSBUaHJlYWQqIHN0b3Jl
ZCBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdG8gcGFzcyBpdCB0byB0aGUgc2lnbmFsIGhh
bmRsZXIuCi0gICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKHBsYXRmb3JtVGhyZWFkLCBTaWdU
aHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBzZW1fd2FpdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0g
ICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9u
IGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9u
ZS4KLSAgICAgICAgICAgIHN1c3BlbmRlZC5zdG9yZSh0cnVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKTsKLSAgICAgICAgfQotICAgICAgICArK3N1c3BlbmRDb3VudDsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3YXkgdG8gc3VzcGVuZCB0aHJlYWRz
IG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgorICAgIFdURjo6UGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z3MgPSByZWdpc3RlcnMucmVnczsKKyAgICByZXR1cm4gbV90aHJlYWQtPmdldFJlZ2lzdGVycyhy
ZWdzKTsKIH0KIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6cmVzdW1lKCkKLXsK
LSNpZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFkX3Jlc3VtZShwbGF0Zm9ybVRocmVhZCk7Ci0jZWxp
ZiBPUyhXSU5ET1dTKQotICAgIFJlc3VtZVRocmVhZChwbGF0Zm9ybVRocmVhZEhhbmRsZSk7Ci0j
ZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgewotICAgICAgICAvLyBEdXJpbmcgcmVzdW1lLCBzdXNw
ZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVh
ZHMuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxTaWduYWxMb2NrKTsKLSAgICAgICAg
aWYgKHN1c3BlbmRDb3VudCA9PSAxKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIGFsbG93aW5nIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgaW50ZXJydXB0IGluIHRoZSBzaWduYWwgaGFuZGxlciBieSBz
aWdzdXNwZW5kIGFuZCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGFjdHVhbGx5IGlzc3VlZCwK
LSAgICAgICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQg
b25jZSBhZ2Fpbi4KLSAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZGlz
dGluZ3Vpc2ggdGhlIGhhbmRsZXIgaW52b2NhdGlvbiBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lLgot
ICAgICAgICAgICAgLy8gMS4gVXNlIGRpZmZlcmVudCBzaWduYWwgbnVtYmVycy4gQW5kIGNoZWNr
IHRoZSBzaWduYWwgbnVtYmVyIGluIHRoZSBoYW5kbGVyLgotICAgICAgICAgICAgLy8gMi4gVXNl
IHNvbWUgYXJndW1lbnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUg
aGFuZGxlci4gSWYgcHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhp
cy4KLSAgICAgICAgICAgIC8vIDMuIFVzZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB3aXRoIGF0b21p
YyB2YXJpYWJsZXMgaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgotICAgICAgICAgICAgLy8gSW4gdGhp
cyBpbXBsZW1lbnRhaXRvbiwgd2UgdGFrZSAoMykuIHN1c3BlbmRlZCBmbGFnIGlzIHVzZWQgdG8g
ZGlzdGluZ3Vpc2ggaXQuCi0gICAgICAgICAgICBpZiAocHRocmVhZF9raWxsKHBsYXRmb3JtVGhy
ZWFkLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKSA9PSBFU1JDSCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBzZW1fd2FpdCgmc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0
aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMg
ZG9uZS4KLSAgICAgICAgICAgIHN1c3BlbmRlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLS1zdXNwZW5kQ291bnQ7Ci0gICAgfQot
I2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHJlc3VtZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZv
cm0KLSNlbmRpZgotfQotCi1zaXplX3QgTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmdldFJl
Z2lzdGVycyhUaHJlYWREYXRhOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKLXsKLSAgICBUaHJlYWRE
YXRhOjpSZWdpc3RlcnM6OlBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzID0gcmVnaXN0ZXJzLnJlZ3M7
Ci0jaWYgT1MoREFSV0lOKQotI2lmIENQVShYODYpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9
IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxh
dm9yID0gaTM4Nl9USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoWDg2XzY0KQotICAgIHVuc2lnbmVk
IHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShQUEMpIAot
ICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQUENfVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRo
cmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BV
KFBQQzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09V
TlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2
NDsKLSNlbGlmIENQVShBUk0pCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURf
U1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJF
QURfU1RBVEU7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFS
TV9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9y
ID0gQVJNX1RIUkVBRF9TVEFURTY0OwotI2Vsc2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVy
ZQotI2VuZGlmCi0KLSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUo
cGxhdGZvcm1UaHJlYWQsIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdzLCAmdXNlcl9jb3Vu
dCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgV1RGUmVwb3J0
RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBm
YWlsZWQgYmVjYXVzZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRo
aXMgaXMgcHJvYmFibHkgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGlj
aCBpcyBub3Qgc3VwcG9ydGVkLiIsIHJlc3VsdCk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQot
ICAgIHJldHVybiB1c2VyX2NvdW50ICogc2l6ZW9mKHVpbnRwdHJfdCk7Ci0vLyBlbmQgT1MoREFS
V0lOKQotCi0jZWxpZiBPUyhXSU5ET1dTKQotICAgIHJlZ3MuQ29udGV4dEZsYWdzID0gQ09OVEVY
VF9JTlRFR0VSIHwgQ09OVEVYVF9DT05UUk9MOwotICAgIEdldFRocmVhZENvbnRleHQocGxhdGZv
cm1UaHJlYWRIYW5kbGUsICZyZWdzKTsKLSAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwotI2Vs
aWYgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQot
ICAgIHJlZ3MgPSBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKLSAgICByZXR1cm4gc2l6ZW9mKFJl
Z2lzdGVyczo6UGxhdGZvcm1SZWdpc3RlcnMpOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIHB0
aHJlYWRfYXR0cl9pbml0KCZyZWdzLmF0dHJpYnV0ZSk7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gp
IHx8IE9TKE5FVEJTRCkKLSNpZiAhT1MoT1BFTkJTRCkKLSAgICAvLyBlLmcuIG9uIEZyZWVCU0Qg
NS40LCBuZXVuZG9yZkBrZGUub3JnCi0gICAgcHRocmVhZF9hdHRyX2dldF9ucChwbGF0Zm9ybVRo
cmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgotI2Vsc2UKLSAgICAvLyBGSVhNRTogdGhp
cyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUg
ZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwotICAgIHB0aHJlYWRfZ2V0YXR0cl9ucChwbGF0Zm9y
bVRocmVhZCwgJnJlZ3MuYXR0cmlidXRlKTsKLSNlbmRpZgotICAgIHJldHVybiAwOwotI2Vsc2UK
LSNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aHJlYWQgcmVnaXN0ZXJzIG9uIHRoaXMgcGxhdGZv
cm0KLSNlbmRpZgotfQotCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjpzdGFja1BvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVU
aHJlYWQ6OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4p
IHx8IE9TKFdJTkRPV1MpIHx8ICgoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAm
JiBFTkFCTEUoSklUKSkKICAgICByZXR1cm4gTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihy
ZWdzKTsKICNlbGlmIFVTRShQVEhSRUFEUykKLSAgICB2b2lkKiBzdGFja0Jhc2UgPSAwOwotICAg
IHNpemVfdCBzdGFja1NpemUgPSAwOwotI2lmIE9TKE9QRU5CU0QpCi0gICAgc3RhY2tfdCBzczsK
LSAgICBpbnQgcmMgPSBwdGhyZWFkX3N0YWNrc2VnX25wKHB0aHJlYWRfc2VsZigpLCAmc3MpOwot
ICAgIHN0YWNrQmFzZSA9ICh2b2lkKikoKHNpemVfdCkgc3Muc3Nfc3AgLSBzcy5zc19zaXplKTsK
LSAgICBzdGFja1NpemUgPSBzcy5zc19zaXplOwotI2Vsc2UKLSAgICBpbnQgcmMgPSBwdGhyZWFk
X2F0dHJfZ2V0c3RhY2soJnJlZ3MuYXR0cmlidXRlLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsK
LSNlbmRpZgotICAgICh2b2lkKXJjOyAvLyBGSVhNRTogRGVhbCB3aXRoIGVycm9yIGNvZGUgc29t
ZWhvdz8gU2VlbXMgZmF0YWwuCi0gICAgQVNTRVJUKHN0YWNrQmFzZSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXplOworICAgIHJldHVybiByZWdz
LnN0YWNrUG9pbnRlcjsKICNlbHNlCiAjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIHN0YWNr
IHBvaW50ZXIgZm9yIGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KICNlbmRpZgogfQog
CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotdm9pZCogTWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVU
aHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiB7
CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5l
ZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJl
Z3MpOwpAQCAtNTI4LDcgKzI0NSw3IEBAIHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRh
OjpSZWdpc3RlcnM6OmZyYW1lUG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFj
aGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkg
Y29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpSZWdpc3RlcnM6Omlu
c3RydWN0aW9uUG9pbnRlcigpIGNvbnN0CiB7CiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dT
KSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKQogICAgIHJldHVybiBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ3MpOwpAQCAtNTM3LDcgKzI1NCw3IEBA
IHZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6Omluc3RydWN0aW9u
UG9pbnRlcigpIGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVh
ZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6
TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKIHsKICAgICAvLyBMTElu
dCB1c2VzIHJlZ1Q0IGFzIFBDLgogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykgfHwgKE9T
KEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkKQEAgLTU0OCwxNiArMjY1LDYgQEAgdm9p
ZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQygpIGNvbnN0
CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogCi12b2lkIE1hY2hpbmVU
aHJlYWRzOjpUaHJlYWREYXRhOjpmcmVlUmVnaXN0ZXJzKFRocmVhZERhdGE6OlJlZ2lzdGVycyYg
cmVnaXN0ZXJzKQotewotICAgIFRocmVhZERhdGE6OlJlZ2lzdGVyczo6UGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsKLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5E
T1dTKSAmJiAhT1MoREFSV0lOKSAmJiAhKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNf
XykpICYmIEVOQUJMRShKSVQpKQotICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZyZWdzLmF0dHJp
YnV0ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZWdzKTsKLSNlbmRpZgotfQotCiBzdGF0
aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKIHsKICAgICBpbnQgcmVkWm9uZUFk
anVzdG1lbnQgPSAwOwpAQCAtNTczLDE3ICsyODAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgb3NS
ZWRab25lQWRqdXN0bWVudCgpCiAgICAgcmV0dXJuIHJlZFpvbmVBZGp1c3RtZW50OwogfQogCi1z
dGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmNhcHR1
cmVTdGFjayh2b2lkKiBzdGFja1RvcCkKK3N0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBNYWNoaW5l
VGhyZWFkczo6TWFjaGluZVRocmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQogewot
ICAgIGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSk7
CisgICAgY2hhciogYmVnaW4gPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jh
c2UpOwogICAgIGNoYXIqIGVuZCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mPHNpemVvZih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFj
a1RvcCkpKTsKICAgICBBU1NFUlQoYmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVuZFdpdGhS
ZWRab25lID0gZW5kICsgb3NSZWRab25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGVuZFdpdGhSZWRab25lKSkgPT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdp
dGhSZWRab25lKSk7CiAKLSAgICBpZiAoZW5kV2l0aFJlZFpvbmUgPCBzdGFja0VuZCkKLSAgICAg
ICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQp
OworICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IG1fc3RhY2tFbmQpCisgICAgICAgIGVuZFdpdGhS
ZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tFbmQpOwogCiAgICAg
c3RkOjpzd2FwKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSAtIGJlZ2luKTsKQEAgLTYxNiw5ICszMjMsOSBAQCBz
dGF0aWMgdm9pZCBjb3B5TWVtb3J5KHZvaWQqIGRzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3Qg
c2l6ZSkKIC8vIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGxvc3MgYXMgdHJ5Q29weU90aGVyVGhy
ZWFkU3RhY2sgaXMgb25seSBjYWxsZWQgYXMgcGFydCBvZiBhbiBPKGhlYXBzaXplKQogLy8gb3Bl
cmF0aW9uLiBBcyB0aGUgaGVhcCBpcyBnZW5lcmFsbHkgbXVjaCBsYXJnZXIgdGhhbiB0aGUgc3Rh
Y2sgdGhlIHBlcmZvcm1hbmNlIGhpdCBpcyBtaW5pbWFsLgogLy8gU2VlOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2Mjk3Ci12b2lkIE1hY2hpbmVUaHJlYWRzOjp0
cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKK3ZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlP
dGhlclRocmVhZFN0YWNrKE1hY2hpbmVUaHJlYWQqIHRocmVhZCwgdm9pZCogYnVmZmVyLCBzaXpl
X3QgY2FwYWNpdHksIHNpemVfdCogc2l6ZSkKIHsKLSAgICBUaHJlYWQ6OlJlZ2lzdGVycyByZWdp
c3RlcnM7CisgICAgTWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKICAgICBzaXpl
X3QgcmVnaXN0ZXJzU2l6ZSA9IHRocmVhZC0+Z2V0UmVnaXN0ZXJzKHJlZ2lzdGVycyk7CiAgICAg
c3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IHN0YWNrID0gdGhyZWFkLT5jYXB0dXJlU3RhY2socmVn
aXN0ZXJzLnN0YWNrUG9pbnRlcigpKTsKIApAQCAtNjMxLDggKzMzOCw2IEBAIHZvaWQgTWFjaGlu
ZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBi
dWZmZXIsIHNpemVfCiAgICAgaWYgKGNhbkNvcHkpCiAgICAgICAgIGNvcHlNZW1vcnkoc3RhdGlj
X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikgKyAqc2l6ZSwgc3RhY2suZmlyc3QsIHN0YWNrLnNlY29uZCk7
CiAgICAgKnNpemUgKz0gc3RhY2suc2Vjb25kOwotCi0gICAgdGhyZWFkLT5mcmVlUmVnaXN0ZXJz
KHJlZ2lzdGVycyk7CiB9CiAKIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFj
aXR5LCBzaXplX3QqIHNpemUpCkBAIC02NDQsMzYgKzM0OSwzNCBAQCBib29sIE1hY2hpbmVUaHJl
YWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lk
KiBidWZmZQogCiAgICAgKnNpemUgPSAwOwogCi0gICAgUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1U
aHJlYWQgPSBjdXJyZW50UGxhdGZvcm1UaHJlYWQoKTsKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlk
ID0gY3VycmVudFRocmVhZCgpOwogICAgIGludCBudW1iZXJPZlRocmVhZHMgPSAwOyAvLyBVc2lu
ZyAwIHRvIGRlbm90ZSB0aGF0IHdlIGhhdmVuJ3QgY291bnRlZCB0aGUgbnVtYmVyIG9mIHRocmVh
ZHMgeWV0LgogICAgIGludCBpbmRleCA9IDE7Ci0gICAgVGhyZWFkKiB0aHJlYWRzVG9CZURlbGV0
ZWQgPSBudWxscHRyOworICAgIE1hY2hpbmVUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51
bGxwdHI7CiAKLSAgICBUaHJlYWQqIHByZXZpb3VzVGhyZWFkID0gbnVsbHB0cjsKLSAgICBmb3Ig
KFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyBpbmRleCsrKSB7
Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKSB7Ci0gICAgICAgICAgICBi
b29sIHN1Y2Nlc3MgPSB0aHJlYWQtPnN1c3BlbmQoKTsKKyAgICBNYWNoaW5lVGhyZWFkKiBwcmV2
aW91c1RocmVhZCA9IG51bGxwdHI7CisgICAgZm9yIChNYWNoaW5lVGhyZWFkKiB0aHJlYWQgPSBt
X3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKHRocmVh
ZC0+dGhyZWFkSUQoKSAhPSBpZCkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSB0aHJlYWQt
PnN1c3BlbmQoKTsKICNpZiBPUyhEQVJXSU4pCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFudW1iZXJP
ZlRocmVhZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChUaHJlYWQqIGNvdW50ZWRUaHJl
YWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhyZWFkOyBjb3VudGVkVGhyZWFkID0g
Y291bnRlZFRocmVhZC0+bmV4dCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIChNYWNoaW5lVGhy
ZWFkKiBjb3VudGVkVGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgY291bnRlZFRocmVhZDsg
Y291bnRlZFRocmVhZCA9IGNvdW50ZWRUaHJlYWQtPm5leHQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXJPZlRocmVhZHMrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgLy8gUmUtZG8gdGhlIHN1c3BlbnNpb24gdG8gZ2V0IHRoZSBh
Y3R1YWwgZmFpbHVyZSByZXN1bHQgZm9yIGxvZ2dpbmcuCi0gICAgICAgICAgICAgICAga2Vybl9y
ZXR1cm5fdCBlcnJvciA9IHRocmVhZF9zdXNwZW5kKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQoKSk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVycm9yICE9IEtFUk5fU1VDQ0VTUyk7CisKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0LmVycm9yKCkgIT0gS0VSTl9TVUNDRVNTKTsKIAogICAg
ICAgICAgICAgICAgIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRU
WV9GVU5DVElPTiwKLSAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xs
ZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChlcnIgMHgleCk6IFRocmVhZCBb
JWQvJWQ6ICVwXSBwbGF0Zm9ybVRocmVhZCAlcC4iLAotICAgICAgICAgICAgICAgICAgICBlcnJv
ciwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCByZWludGVycHJldF9jYXN0PHZvaWQq
Pih0aHJlYWQtPnBsYXRmb3JtVGhyZWFkKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgIkphdmFT
Y3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGVuY291bnRlcmVkIGFuIGludmFsaWQgdGhyZWFkIChl
cnIgMHgleCk6IFRocmVhZCBbJWQvJWQ6ICVwXSBpZCAldS4iLAorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuZXJyb3IoKSwgaW5kZXgsIG51bWJlck9mVGhyZWFkcywgdGhyZWFkLCB0aHJlYWQt
PnRocmVhZElEKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gUHV0IHRoZSBpbnZhbGlkIHRocmVh
ZCBvbiB0aGUgdGhyZWFkc1RvQmVEZWxldGVkIGxpc3QuCiAgICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuJ3QganVzdCBkZWxldGUgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgc3VzcGVuZGVkIG90aGVy
CiAgICAgICAgICAgICAgICAgLy8gdGhyZWFkcywgYW5kIHRoZXkgbWF5IHN0aWxsIGJlIGhvbGRp
bmcgdGhlIEMgaGVhcCBsb2NrIHdoaWNoCiAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBmb3Ig
ZGVsZXRpbmcgdGhlIGludmFsaWQgdGhyZWFkLiBIZW5jZSwgd2UgbmVlZCB0bwogICAgICAgICAg
ICAgICAgIC8vIGRlZmVyIHRoZSBkZWxldGlvbiB0aWxsIGFmdGVyIHdlIGhhdmUgcmVzdW1lZCBh
bGwgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQt
Pm5leHQ7CisgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZCogbmV4dFRocmVhZCA9IHRocmVh
ZC0+bmV4dDsKICAgICAgICAgICAgICAgICB0aHJlYWQtPm5leHQgPSB0aHJlYWRzVG9CZURlbGV0
ZWQ7CiAgICAgICAgICAgICAgICAgdGhyZWFkc1RvQmVEZWxldGVkID0gdGhyZWFkOwogCkBAIC02
ODcsMjUgKzM5MCwyNSBAQCBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRT
dGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBidWZmZQogI2Vsc2UKICAgICAgICAg
ICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZlRocmVhZHMpOwogICAgICAgICAgICAgVU5VU0VEX1BB
UkFNKHByZXZpb3VzVGhyZWFkKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywg
c3VjY2Vzcyk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKICNl
bmRpZgogICAgICAgICB9CiAgICAgICAgIHByZXZpb3VzVGhyZWFkID0gdGhyZWFkOwogICAgICAg
ICB0aHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVh
ZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7
Ci0gICAgICAgIGlmICgqdGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKQorICAgIGZvciAoTWFjaGlu
ZVRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAg
ICAgICAgICAgIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKHRocmVhZCwgYnVmZmVyLCBjYXBhY2l0
eSwgc2l6ZSk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgq
dGhyZWFkICE9IHBsYXRmb3JtVGhyZWFkKQorICAgIGZvciAoTWFjaGluZVRocmVhZCogdGhyZWFk
ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsK
KyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSAhPSBpZCkKICAgICAgICAgICAgIHRocmVh
ZC0+cmVzdW1lKCk7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9IHRocmVhZHNU
b0JlRGVsZXRlZDsgdGhyZWFkOyApIHsKLSAgICAgICAgVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhy
ZWFkLT5uZXh0OworICAgIGZvciAoTWFjaGluZVRocmVhZCogdGhyZWFkID0gdGhyZWFkc1RvQmVE
ZWxldGVkOyB0aHJlYWQ7ICkgeworICAgICAgICBNYWNoaW5lVGhyZWFkKiBuZXh0VGhyZWFkID0g
dGhyZWFkLT5uZXh0OwogICAgICAgICBkZWxldGUgdGhyZWFkOwogICAgICAgICB0aHJlYWQgPSBu
ZXh0VGhyZWFkOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmgKaW5kZXggZDE5NmZjOWU1ZjRkNzkwNzViZDYxODI0MmNkODdmNzk5NDQ4
N2YyMi4uMjhkN2QyOTRhNzUxN2JlMjEyMzFmOGFlMWJmMjkyMmFkYjIwN2I4OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKQEAgLTIyLDI1
ICsyMiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtVGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTdGF0ZS5oIgog
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5o
PgogCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYgIU9TKERBUldJTikKLSNp
bmNsdWRlIDxzZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLS8vIFVzaW5nIHNpZ25h
bC5oIGRpZG4ndCBtYWtlIG1jb250ZXh0X3QgYW5kIHVjb250ZXh0X3QgYXZhaWxhYmxlIG9uIEZy
ZWVCU0QuCi0vLyBUaGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBGcmVlQlNEIDExLjAtQ1VSUkVO
VCwgc28gdGhpcyB3b3JrYXJvdW5kIGNhbiBiZQotLy8gcmVtb3ZlZCBhZnRlciBGcmVlQlNEIDEw
LnggZ29lcyBFT0wuCi0vLyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19i
dWcuY2dpP2lkPTIwNzA3OQotI2lmIE9TKEZSRUVCU0QpCi0jaW5jbHVkZSA8dWNvbnRleHQuaD4K
LSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2tTZXQ7
CkBAIC02NCwxMyArNTEsMTAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCk7IC8vIE9ubHkgbmVlZHMgdG8gYmUg
Y2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAgZnJvbSBtdWx0aXBs
ZSB0aHJlYWRzLgogCi0gICAgY2xhc3MgVGhyZWFkRGF0YSB7CisgICAgY2xhc3MgTWFjaGluZVRo
cmVhZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAg
ICAgICAgVGhyZWFkRGF0YSgpOwotICAgICAgICB+VGhyZWFkRGF0YSgpOwotCi0gICAgICAgIHN0
YXRpYyBUaHJlYWREYXRhKiBjcmVhdGVGb3JDdXJyZW50VGhyZWFkKCk7CisgICAgICAgIE1hY2hp
bmVUaHJlYWQoKTsKIAogICAgICAgICBzdHJ1Y3QgUmVnaXN0ZXJzIHsKICAgICAgICAgICAgIHZv
aWQqIHN0YWNrUG9pbnRlcigpIGNvbnN0OwpAQCAtNzksODQgKzYzLDQwIEBAIGNsYXNzIE1hY2hp
bmVUaHJlYWRzIHsKICAgICAgICAgICAgIHZvaWQqIGluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0
OwogICAgICAgICAgICAgdm9pZCogbGxpbnRQQygpIGNvbnN0OwogI2VuZGlmIC8vIEVOQUJMRShT
QU1QTElOR19QUk9GSUxFUikKLSAgICAgICAgICAgIAotI2lmIE9TKERBUldJTikgfHwgT1MoV0lO
RE9XUykKLSAgICAgICAgICAgIHVzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0gTWFjaGluZUNvbnRl
eHQ6OlBsYXRmb3JtUmVnaXN0ZXJzOwotI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19H
TElCQ19fKSkgJiYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgIHVzaW5nIFBsYXRmb3JtUmVnaXN0
ZXJzID0gbWNvbnRleHRfdDsKLSNlbGlmIFVTRShQVEhSRUFEUykKLSAgICAgICAgICAgIHN0cnVj
dCBQbGF0Zm9ybVJlZ2lzdGVycyB7Ci0gICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX3QgYXR0
cmlidXRlOwotICAgICAgICAgICAgfTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHRocmVhZCByZWdp
c3RlciBzdHJ1Y3QgZm9yIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotCi0gICAgICAgICAgICBQbGF0
Zm9ybVJlZ2lzdGVycyByZWdzOworICAgICAgICAgICAgV1RGOjpQbGF0Zm9ybVJlZ2lzdGVycyBy
ZWdzOwogICAgICAgICB9OwogCi0gICAgICAgIGJvb2wgc3VzcGVuZCgpOwotICAgICAgICB2b2lk
IHJlc3VtZSgpOwotICAgICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVycyYpOwotICAg
ICAgICB2b2lkIGZyZWVSZWdpc3RlcnMoUmVnaXN0ZXJzJik7CisgICAgICAgIEV4cGVjdGVkPHZv
aWQsIFRocmVhZDo6UGxhdGZvcm1TdXNwZW5kRXJyb3I+IHN1c3BlbmQoKSB7IHJldHVybiBtX3Ro
cmVhZC0+c3VzcGVuZCgpOyB9CisgICAgICAgIHZvaWQgcmVzdW1lKCkgeyBtX3RocmVhZC0+cmVz
dW1lKCk7IH0KKyAgICAgICAgc2l6ZV90IGdldFJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpOwog
ICAgICAgICBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gY2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNr
VG9wKTsKIAotICAgICAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZDsKLSAgICAgICAg
dm9pZCogc3RhY2tCYXNlOwotICAgICAgICB2b2lkKiBzdGFja0VuZDsKLSNpZiBPUyhXSU5ET1dT
KQotICAgICAgICBIQU5ETEUgcGxhdGZvcm1UaHJlYWRIYW5kbGU7Ci0jZWxpZiBVU0UoUFRIUkVB
RFMpICYmICFPUyhEQVJXSU4pCi0gICAgICAgIHNlbV90IHNlbWFwaG9yZUZvclN1c3BlbmRSZXN1
bWU7Ci0gICAgICAgIG1jb250ZXh0X3Qgc3VzcGVuZGVkTWFjaGluZUNvbnRleHQ7Ci0gICAgICAg
IGludCBzdXNwZW5kQ291bnQgeyAwIH07Ci0gICAgICAgIHN0ZDo6YXRvbWljPGJvb2w+IHN1c3Bl
bmRlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgY2xhc3MgVGhyZWFkIHsKLSAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgICAgIFRocmVhZChUaHJlYWREYXRh
Kik7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHVzaW5nIFJlZ2lzdGVycyA9IFRocmVhZERhdGE6
OlJlZ2lzdGVyczsKLQotICAgICAgICBzdGF0aWMgVGhyZWFkKiBjcmVhdGVGb3JDdXJyZW50VGhy
ZWFkKCk7Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBv
dGhlcikgY29uc3Q7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQbGF0Zm9ybVRocmVh
ZCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICAgICAg
Ym9vbCBzdXNwZW5kKCkgeyByZXR1cm4gZGF0YS0+c3VzcGVuZCgpOyB9Ci0gICAgICAgIHZvaWQg
cmVzdW1lKCkgeyBkYXRhLT5yZXN1bWUoKTsgfQotICAgICAgICBzaXplX3QgZ2V0UmVnaXN0ZXJz
KFJlZ2lzdGVycyYgcmVncykgeyByZXR1cm4gZGF0YS0+Z2V0UmVnaXN0ZXJzKHJlZ3MpOyB9Ci0g
ICAgICAgIHZvaWQgZnJlZVJlZ2lzdGVycyhSZWdpc3RlcnMmIHJlZ3MpIHsgZGF0YS0+ZnJlZVJl
Z2lzdGVycyhyZWdzKTsgfQotICAgICAgICBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gY2FwdHVy
ZVN0YWNrKHZvaWQqIHN0YWNrVG9wKSB7IHJldHVybiBkYXRhLT5jYXB0dXJlU3RhY2soc3RhY2tU
b3ApOyB9Ci0KLSAgICAgICAgY29uc3QgUGxhdGZvcm1UaHJlYWQmIHBsYXRmb3JtVGhyZWFkKCkg
eyByZXR1cm4gZGF0YS0+cGxhdGZvcm1UaHJlYWQ7IH0KLSAgICAgICAgdm9pZCogc3RhY2tCYXNl
KCkgY29uc3QgeyByZXR1cm4gZGF0YS0+c3RhY2tCYXNlOyB9Ci0gICAgICAgIHZvaWQqIHN0YWNr
RW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+c3RhY2tFbmQ7IH0KKyAgICAgICAgV1RGOjpUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQtPmlkKCk7IH0K
KyAgICAgICAgdm9pZCogc3RhY2tCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja0Jhc2U7IH0K
KyAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrRW5kOyB9CiAK
LSAgICAgICAgVGhyZWFkKiBuZXh0OwotICAgICAgICBUaHJlYWREYXRhKiBkYXRhOworICAgICAg
ICBNYWNoaW5lVGhyZWFkKiBuZXh0OworICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1fdGhyZWFk
OworICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKKyAgICAgICAgdm9pZCogbV9zdGFja0VuZDsK
ICAgICB9OwogCiAgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fcmVnaXN0ZXJlZFRocmVh
ZHNNdXRleDsgfQotICAgIFRocmVhZCogdGhyZWFkc0xpc3RIZWFkKGNvbnN0IEFic3RyYWN0TG9j
a2VyJikgY29uc3QgeyBBU1NFUlQobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4LmlzTG9ja2VkKCkp
OyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkczsgfQotICAgIFRocmVhZCogbWFjaGluZVRocmVh
ZEZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICBNYWNoaW5lVGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQo
Y29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFTU0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRz
TXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB9CisgICAgTWFj
aGluZVRocmVhZCogbWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKIAogcHJpdmF0ZToK
ICAgICB2b2lkIGdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklU
U3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUmKTsKIAot
ICAgIHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkKiwgdm9pZCosIHNpemVfdCBj
YXBhY2l0eSwgc2l6ZV90Kik7CisgICAgdm9pZCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayhNYWNo
aW5lVGhyZWFkKiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7CiAgICAgYm9vbCB0
cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiwgc2l6
ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJ
Q19DQUxMIHJlbW92ZVRocmVhZCh2b2lkKik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQbGF0
Zm9ybVRocmVhZD4KLSAgICB2b2lkIHJlbW92ZVRocmVhZElmRm91bmQoUGxhdGZvcm1UaHJlYWQp
OworICAgIHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJlYWRJZGVudGlmaWVyKTsKIAogICAg
IExvY2sgbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwotICAgIFRocmVhZCogbV9yZWdpc3RlcmVk
VGhyZWFkczsKKyAgICBNYWNoaW5lVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOwogICAgIFdU
Rjo6VGhyZWFkU3BlY2lmaWNLZXkgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKaW5kZXggMjA4MGNkOTM0NTgz
M2QyZDIzMmI4YTljZDZmM2RiZmViZTA1Y2IyMy4uZTBhYmYyOThiZmJlMmVlZWMzNDI1YjY2MDlj
ZTcyMTMzYzQxY2RkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0
YXRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCkBAIC01
OCw3ICs1OCw3IEBAIEF0b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKIAogSUNT
dGF0czo6SUNTdGF0cygpCiB7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgbV90
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBJQ1N0YXRzIiwKICAgICAgICAg
W3RoaXNdICgpIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC04
NCw3ICs4NCw3IEBAIElDU3RhdHM6On5JQ1N0YXRzKCkKICAgICAgICAgbV9jb25kaXRpb24ubm90
aWZ5QWxsKCk7CiAgICAgfQogICAgIAotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhy
ZWFkKTsKKyAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIH0KIAogdm9pZCBJQ1N0
YXRzOjphZGQoY29uc3QgSUNFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0lDU3RhdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0
cy5oCmluZGV4IGU3NWNmZGY0ZDRkOWQ3ZGNiZjFhMzFhOTgyOTQxOTJlNTViOWNmYjAuLmViN2Ux
ZTkyY2U5N2RkMWQ5NTA4OTcyN2M4NGE5YzVlYzdmNTdjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSUNTdGF0cy5oCkBAIC0xNzksNyArMTc5LDcgQEAgY2xhc3MgSUNTdGF0cyB7CiBwcml2YXRl
OgogCiAgICAgU3BlY3RydW08SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07Ci0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAg
ICBMb2NrIG1fbG9jazsKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAgICAgYm9vbCBtX3No
b3VsZFN0b3AgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA5MDk1MGI5ODU5N2Zm
Mzk4ZDQyMTNkZGY5MDkwN2JkM2MxN2QyN2I5Li4xODllNzk1YjY3MDJjY2JmYWU1NDQ5MWRhNGQz
OTcwMTJhYmViYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhl
Y1N0YXRlKiBleGVjKQogICAgIENvbmRpdGlvbiBkaWRTdGFydENvbmRpdGlvbjsKICAgICBib29s
IGRpZFN0YXJ0ID0gZmFsc2U7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBj
cmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
CiAgICAgICAgICJKU0MgQWdlbnQiLAogICAgICAgICBbc291cmNlQ29kZSwgJmRpZFN0YXJ0TG9j
aywgJmRpZFN0YXJ0Q29uZGl0aW9uLCAmZGlkU3RhcnRdICgpIHsKICAgICAgICAgICAgIENvbW1h
bmRMaW5lIGNvbW1hbmRMaW5lKDAsIG51bGxwdHIpOwpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAg
dGhyZWFkLT5kZXRhY2goKTsKICAgICAKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2soZGlkU3RhcnRMb2NrKTsKQEAgLTMzMTEsNyArMzMxMSw3IEBAIHN0YXRpYyB2b2lkIHN0
YXJ0VGltZW91dFRocmVhZElmTmVlZGVkKCkKICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6
IHRpbWVvdXQgc3RyaW5nIGlzIG1hbGZvcm1lZCwgZ290ICIsIHRpbWVvdXRTdHJpbmcsCiAgICAg
ICAgICAgICAgICAgIiBidXQgZXhwZWN0ZWQgYSBudW1iZXIuIE5vdCB1c2luZyBhIHRpbWVvdXQu
XG4iKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjcmVhdGVUaHJlYWQodGltZW91dFRo
cmVhZE1haW4sIDAsICJqc2MgVGltZW91dCBUaHJlYWQiKTsKKyAgICAgICAgICAgIFRocmVhZDo6
Y3JlYXRlKHRpbWVvdXRUaHJlYWRNYWluLCAwLCAianNjIFRpbWVvdXQgVGhyZWFkIik7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwMWIx
ZmUxMjdlOGI3MzFmYjUzYjdjMmNkYjk5ZWUxOWRkNWFkYTY4Li42MzIyZTczMzIyOTIxMTRmMGUy
NTRhOGUxZWYxM2RhNWM0MTk1MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEpTTG9jazo6bG9jayhpbnRwdHJfdCBs
b2NrQ291bnQpCiAgICAgICAgIG1fbG9jay5sb2NrKCk7CiAgICAgfQogCi0gICAgbV9vd25lclRo
cmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKKyAgICBtX293bmVyVGhyZWFkID0gJlRocmVhZDo6Y3Vy
cmVudCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9oYXNPd25lclRocmVh
ZCA9IHRydWU7CiAgICAgQVNTRVJUKCFtX2xvY2tDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5oCmluZGV4IDBjMzU4NDdlNDIzZTY0YmM3MDUwM2Q1ZTFkODVkNDgwNTA5
ZGJlNzQuLjFhY2E0YjlhN2JiNGRjYWYwNGRmMTIxNzEwOTcyMGVjOGUyZDY4ZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCkBAIC05MiwxMyArOTIsMTMgQEAgY2xhc3Mg
SlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogCiAgICAgVk0q
IHZtKCkgeyByZXR1cm4gbV92bTsgfQogCi0gICAgc3RkOjpvcHRpb25hbDxUaHJlYWRJZGVudGlm
aWVyPiBvd25lclRocmVhZCgpIGNvbnN0CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFk
Pj4gb3duZXJUaHJlYWQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1faGFzT3duZXJUaHJl
YWQpCiAgICAgICAgICAgICByZXR1cm4gbV9vd25lclRocmVhZDsKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
IHsgcmV0dXJuIG1faGFzT3duZXJUaHJlYWQgJiYgbV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhy
ZWFkKCk7IH0KKyAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4g
bV9oYXNPd25lclRocmVhZCAmJiBtX293bmVyVGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQo
KTsgfQogCiAgICAgdm9pZCB3aWxsRGVzdHJveVZNKFZNKik7CiAKQEAgLTEzNSw3ICsxMzUsNyBA
QCBjbGFzcyBKU0xvY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAg
ICAgLy8gZGlmZmVyZW50IHRocmVhZCwgYW5kIGFuIG9wdGlvbmFsIGlzIHZ1bG5lcmFibGUgdG8g
cmFjZXMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjkwNDIjYzYKICAgICBib29sIG1faGFzT3duZXJUaHJlYWQgeyBmYWxzZSB9OwotICAgIFRo
cmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX293bmVy
VGhyZWFkOwogICAgIGludHB0cl90IG1fbG9ja0NvdW50OwogICAgIHVuc2lnbmVkIG1fbG9ja0Ry
b3BEZXB0aDsKICAgICBib29sIG1fc2hvdWxkUmVsZWFzZUhlYXBBY2Nlc3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGxhdGZvcm1UaHJlYWQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTQxOTdlNzNjODQxMmE4MGYzNjE0MGM3YWQ4NmVjNzY0ZmFjMjkzNy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhVTklYKQotI2luY2x1ZGUgPHB0
aHJlYWQuaD4KLSNlbmRpZgotCi0jaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoV0lORE9XUykgJiYg
IU9TKERBUldJTikKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lO
KQotI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNs
dWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBPUyhEQVJX
SU4pCi10eXBlZGVmIG1hY2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9X
UykKLXR5cGVkZWYgRFdPUkQgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi10
eXBlZGVmIHB0aHJlYWRfdCBQbGF0Zm9ybVRocmVhZDsKLSNlbmRpZiAvLyBPUyhEQVJXSU4pCi0g
ICAgCi1pbmxpbmUgUGxhdGZvcm1UaHJlYWQgY3VycmVudFBsYXRmb3JtVGhyZWFkKCkKLXsKLSNp
ZiBPUyhEQVJXSU4pCi0gICAgcmV0dXJuIHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9z
ZWxmKCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElk
KCk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcmV0dXJuIHB0aHJlYWRfc2VsZigpOwotI2Vu
ZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCA3ZDM3YTY3NGFiYTA5NDcyMzE4
NDkzYjMzYmM4OWZlM2ZhZDk4YTlkLi5jZWFmODM2M2Y3YTZkYTcyNzgzOTVhNjI4ZTllNTZjZDI3
Y2I1YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIEZyYW1lV2Fsa2VyIHsKICAg
ICBib29sIGlzVmFsaWRGcmFtZVBvaW50ZXIodm9pZCogZXhlYykKICAgICB7CiAgICAgICAgIHVp
bnQ4X3QqIGZwQ2FzdCA9IGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oZXhlYyk7Ci0gICAgICAgIGZv
ciAoTWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbV92bS5oZWFwLm1hY2hpbmVUaHJl
YWRzKCkudGhyZWFkc0xpc3RIZWFkKG1fbWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRo
cmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpNYWNo
aW5lVGhyZWFkKiB0aHJlYWQgPSBtX3ZtLmhlYXAubWFjaGluZVRocmVhZHMoKS50aHJlYWRzTGlz
dEhlYWQobV9tYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5u
ZXh0KSB7CiAgICAgICAgICAgICB1aW50OF90KiBzdGFja0Jhc2UgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4odGhyZWFkLT5zdGFja0Jhc2UoKSk7CiAgICAgICAgICAgICB1aW50OF90KiBzdGFja0xp
bWl0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRocmVhZC0+c3RhY2tFbmQoKSk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdGFja0Jhc2UpOwpAQCAtMjc5LDcgKzI3OSw3IEBAIFNhbXBs
aW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHZtLCBSZWZQdHI8U3RvcHdhdGNoPiYm
IHN0b3B3YXRjaCkKICAgICAsIG1fd2Vha1JhbmRvbSgpCiAgICAgLCBtX3N0b3B3YXRjaChXVEZN
b3ZlKHN0b3B3YXRjaCkpCiAgICAgLCBtX3RpbWluZ0ludGVydmFsKHN0ZDo6Y2hyb25vOjptaWNy
b3NlY29uZHMoT3B0aW9uczo6c2FtcGxlSW50ZXJ2YWwoKSkpCi0gICAgLCBtX3RocmVhZElkZW50
aWZpZXIoMCkKKyAgICAsIG1fdGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX2pzY0V4ZWN1dGlvblRo
cmVhZChudWxscHRyKQogICAgICwgbV9pc1BhdXNlZChmYWxzZSkKICAgICAsIG1faXNTaHV0RG93
bihmYWxzZSkKQEAgLTMwMCwxMSArMzAwLDExIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6Y3Jl
YXRlVGhyZWFkSWZOZWNlc3NhcnkoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogewogICAgIEFTU0VS
VChtX2xvY2suaXNMb2NrZWQoKSk7CiAKLSAgICBpZiAobV90aHJlYWRJZGVudGlmaWVyKQorICAg
IGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFNhbXBsaW5nUHJv
ZmlsZXI+IHByb2ZpbGVyID0gdGhpczsKLSAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVU
aHJlYWQoImpzYy5zYW1wbGluZy1wcm9maWxlci50aHJlYWQiLCBbcHJvZmlsZXJdIHsKKyAgICBt
X3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJqc2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwg
W3Byb2ZpbGVyXSB7CiAgICAgICAgIHByb2ZpbGVyLT50aW1lckxvb3AoKTsKICAgICB9KTsKIH0K
QEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbgogICAgICAgICBMb2Nr
SG9sZGVyIGNvZGVCbG9ja1NldExvY2tlcihtX3ZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9j
aygpKTsKICAgICAgICAgTG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKEV4ZWN1
dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmdldExvY2soKSk7CiAKLSAgICAgICAgYm9vbCBk
aWRTdXNwZW5kID0gbV9qc2NFeGVjdXRpb25UaHJlYWQtPnN1c3BlbmQoKTsKKyAgICAgICAgYXV0
byBkaWRTdXNwZW5kID0gbV9qc2NFeGVjdXRpb25UaHJlYWQtPnN1c3BlbmQoKTsKICAgICAgICAg
aWYgKGRpZFN1c3BlbmQpIHsKICAgICAgICAgICAgIC8vIFdoaWxlIHRoZSBKU0MgdGhyZWFkIGlz
IHN1c3BlbmRlZCwgd2UgY2FuJ3QgZG8gdGhpbmdzIGxpa2UgbWFsbG9jIGJlY2F1c2UgdGhlIEpT
QyB0aHJlYWQKICAgICAgICAgICAgIC8vIG1heSBiZSBob2xkaW5nIHRoZSBtYWxsb2MgbG9jay4K
QEAgLTM1NCwxMyArMzU0LDEyIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShj
b25zdCBBYnN0cmFjdExvY2tlciYsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uCiAgICAgICAgICAg
ICBib29sIHRvcEZyYW1lSXNMTEludCA9IGZhbHNlOwogICAgICAgICAgICAgdm9pZCogbGxpbnRQ
QzsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFk
OjpSZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpN
YWNoaW5lVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgICAgICAgICAgICAgIG1fanNj
RXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAg
ICBtYWNoaW5lRnJhbWUgPSByZWdpc3RlcnMuZnJhbWVQb2ludGVyKCk7CiAgICAgICAgICAgICAg
ICAgY2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAg
ICAgICAgICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7
CiAgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAg
ICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2Yg
ZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCmluZGV4IGI0NGEzYmE0N2Y5
ZTY3NjhhZDQzN2JiMThlMGE4YWJjNzk1YmQ2Y2YuLjc4YjliZWIyOTZmNzRlNzljNmVkYTBkNDlk
ZWM3NGQ0N2NiZjQ4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmgKQEAgLTE5NSw4ICsxOTUsOCBAQCBjbGFzcyBTYW1wbGluZ1Byb2Zp
bGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbXBsaW5nUHJvZmlsZXI+IHsKICAg
ICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91Ymxl
IG1fbGFzdFRpbWU7CiAgICAgTG9jayBtX2xvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3Ro
cmVhZElkZW50aWZpZXI7Ci0gICAgTWFjaGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVjdXRp
b25UaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CisgICAgTWFjaGluZVRocmVh
ZHM6Ok1hY2hpbmVUaHJlYWQqIG1fanNjRXhlY3V0aW9uVGhyZWFkOwogICAgIGJvb2wgbV9pc1Bh
dXNlZDsKICAgICBib29sIG1faXNTaHV0RG93bjsKICAgICBib29sIG1fbmVlZHNSZXBvcnRBdEV4
aXQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOTlhMjZmY2Ex
YzIxZjNkMDQ0MDQ3M2I0NDJlODlkYzlhNDk1ZjQ2ZS4uZTk3YzMxODVmYzZmMmM2Mjg0YWU3MWJl
YjkwNWMwMmUzNDlhNzRmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC02NTks
NyArNjU5LDcgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBw
dWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgbG9nRXZlbnQoQ29kZUJsb2NrKiwgY29uc3QgY2hhciogc3VtbWFyeSwg
Y29uc3QgRnVuYyYgZnVuYyk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+
IG93bmVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9
CisgICAgc3RkOjpvcHRpb25hbDxSZWZQdHI8VGhyZWFkPj4gb3duZXJUaHJlYWQoKSBjb25zdCB7
IHJldHVybiBtX2FwaUxvY2stPm93bmVyVGhyZWFkKCk7IH0KIAogICAgIFZNVHJhcHMmIHRyYXBz
KCkgeyByZXR1cm4gbV90cmFwczsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCmluZGV4IDUyNzYzZjg1M2Q0NjNiNzJmMzNlNDY0YjdiNWE1OWQwMTE5MzhmNjku
LjExNjNmZmI5ZWIyZTdhMjAyMmE2MDNkMDc4N2U1M2ZlMjUzYzJkY2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGlj
IEV4cGVjdGVkPHN0ZDo6cGFpcjxWTSosIFN0YWNrQm91bmRzPiwgVk1UcmFwczo6RXJyb3I+IGZp
bmRBY3RpdmVWTUFuZFN0YWMKICAgICAgICAgICAgIHJldHVybiBWTUluc3BlY3Rvcjo6RnVuY3Rv
clN0YXR1czo6Q29udGludWU7IC8vIFRyeSBuZXh0IFZNLgogICAgICAgICB9CiAKLSAgICAgICAg
Zm9yIChNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiB0aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJl
YWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNMb2NrZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVh
ZC0+bmV4dCkgeworICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkKiB0
aHJlYWQgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNMb2Nr
ZXIpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodGhyZWFkLT5zdGFja0Jhc2UoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0aHJlYWQtPnN0YWNrRW5kKCkpOwogICAgICAgICAgICAgaWYgKHN0YWNrUG9pbnRlciA8PSB0
aHJlYWQtPnN0YWNrQmFzZSgpICYmIHN0YWNrUG9pbnRlciA+PSB0aHJlYWQtPnN0YWNrRW5kKCkp
IHsKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgp
CiAgICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxP
d25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxP
d25lclRocmVhZCkgewotICAgICAgICAgICAgICAgIHNpZ25hbFRocmVhZChvcHRpb25hbE93bmVy
VGhyZWFkLnZhbHVlKCksIFNJR1VTUjEpOworICAgICAgICAgICAgICAgIG9wdGlvbmFsT3duZXJU
aHJlYWQudmFsdWUoKS0+c2lnbmFsKFNJR1VTUjEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBWTVRyYXBzOjpmaXJlVHJh
cChWTVRyYXBzOjpFdmVudFR5cGUgZXZlbnRUeXBlKQogICAgICAgICAvLyBmaXJlVHJhcCgpIGRv
ZXMgbm90IGJsb2NrLgogICAgICAgICBSZWZQdHI8U2lnbmFsU2VuZGVyPiBzZW5kZXIgPSBhZG9w
dFJlZihuZXcgU2lnbmFsU2VuZGVyKHZtKCksIGV2ZW50VHlwZSkpOwogICAgICAgICBhZGRTaWdu
YWxTZW5kZXIoc2VuZGVyLmdldCgpKTsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJqc2Mudm10cmFw
cy5zaWduYWxsaW5nLnRocmVhZCIsIFtzZW5kZXJdIHsKKyAgICAgICAgVGhyZWFkOjpjcmVhdGUo
ImpzYy52bXRyYXBzLnNpZ25hbGxpbmcudGhyZWFkIiwgW3NlbmRlcl0gewogICAgICAgICAgICAg
c2VuZGVyLT5zZW5kKCk7CiAgICAgICAgIH0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdjNzc0ZDk3ZGQ0MTg3MmEyMGYzOTljOTZhMzU5MWQ3
YTRjYWUxNDkuLjhiY2ZlYmM0NzAxNDJjMTgzZWQ1MTUyYmJkMGYwZmI0MGE2Y2YyYjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzI3LDggKzMyNyw3IEBA
CiAJCUE4QTQ3NDQ1MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkQxNTFBODI1QjAwNDEy
M0ZGIC8qIFdURlN0cmluZy5jcHAgKi87IH07CiAJCUE4QTQ3NDQ2MTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MzJFMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuaCAqLzsgfTsKIAkJQThB
NDc0NDcxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMkYxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovOyB9OwotCQlBOEE0NzQ0
ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzMDE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgKi87IH07Ci0J
CUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMz
MTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oICovOyB9
OworCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzAx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLzsgfTsKIAkJQThB
NDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkaW5nLmNwcCAqLzsgfTsKIAkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThB
NDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovOyB9OwogCQlBOEE0NzQ0RDE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLzsgfTsKQEAgLTM3NCw2ICszNzMsOSBAQAogCQlERTVB
MDlGQzFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9uQ3J5cHRvU1BJLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERTVBMDlGQjFCQTM2OTkyMDAzRDQ0MjQg
LyogQ29tbW9uQ3J5cHRvU1BJLmggKi87IH07CiAJCUUxNTU1NkY1MThBMENDMTgwMDZGNDhGQiAv
KiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTU1NkYzMThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFw
aGljVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJRTE1NTU2RjYxOEEwQ0MxODAwNkY0OEZCIC8qIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxNTU1NkY0MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRp
bGl0aWVzLmggKi87IH07CisJCUUzMjAwQUI3MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJl
Z2lzdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi87IH07CisJ
CUUzMjAwQUI4MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyMDBBQjUxRTlBNTM2RDAwM0I1
OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgKi87IH07CisJCUUzMjAwQUI5MUU5QTUzNkQwMDNCNTlE
MiAvKiBUaHJlYWRIb2xkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzMjAwQUI2MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuaCAqLzsg
fTsKIAkJRTQzQTQ2OTUxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0E0NjkwMUUyMjhCOTEwMDI3NkIw
NSAvKiBEZWNvZGVyLmggKi87IH07CiAJCUU0M0E0Njk2MUUyMjhCOTEwMDI3NkIwNSAvKiBFbmNv
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNB
NDY5MTFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oICovOyB9OwogCQlFNDNBNDY5NzFFMjI4
QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5MjFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAg
Ki87IH07CkBAIC03MzEsOCArNzMzLDcgQEAKIAkJQThBNDczMkQxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZT
dHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRTE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdURlN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRjE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJE
YXRhUHRocmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkSWRl
bnRpZmllckRhdGFQdGhyZWFkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0
NzMzMDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVh
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMzMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGhyZWFkaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzM1MTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRocmVhZGluZ1ByaW1pdGl2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTc3Nyw2ICs3NzgsOSBAQAogCQlERTVBMDlGQjFCQTM2OTkyMDAzRDQ0MjQgLyog
Q29tbW9uQ3J5cHRvU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1v
bkNyeXB0b1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTU1NTZGMzE4QTBD
QzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1NTU2RjQxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0
b2dyYXBoaWNVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5
cHRvZ3JhcGhpY1V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzIw
MEFCNDFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTMyMDBBQjUxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRIb2xkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIg
LyogVGhyZWFkSG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVh
ZEhvbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNBNDY5MDFFMjI4Qjkx
MDAyNzZCMDUgLyogRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
ZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0E0NjkxMUUyMjhCOTEw
MDI3NkIwNSAvKiBFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVu
Y29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzQTQ2OTIxRTIyOEI5MTAw
Mjc2QjA1IC8qIERlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTAwLDYgKzEx
MDQsNyBAQAogCQkJCTBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8s
CiAJCQkJQThBNDcyRUQxNTFBODI1QjAwNDEyM0ZGIC8qIFBhc3NSZWZQdHIuaCAqLywKIAkJCQlB
ODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCAqLywKKwkJCQlFMzIwMEFCNDFF
OUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLywKIAkJCQlEQ0VFMjFGRTFD
RUE3NTUxMDAwQzIzOTYgLyogUGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmggKi8sCiAJ
CQkJRENFRTIxRkYxQ0VBNzU1MTAwMEMyMzk2IC8qIFBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1
YWdlc01hYy5tbSAqLywKIAkJCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNv
bXBhcmlzb24uaCAqLywKQEAgLTExNjcsOCArMTE3Miw5IEBACiAJCQkJNTU5N0Y4MkMxRDk0Qjk5
NzAwNjZCQzIxIC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuaCAqLywKIAkJCQkwRkIzMTdDMzFD
NDg4MDAxMDA3RTM5NUEgLyogU3lzdGVtVHJhY2luZy5oICovLAogCQkJCUE4QTQ3MzJGMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCAqLywKLQkJCQlBOEE0NzMz
MDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgKi8s
Ci0JCQkJQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuaCAqLywKKwkJCQlFMzIwMEFCNTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVy
LmNwcCAqLywKKwkJCQlFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmgg
Ki8sCisJCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRz
LmNwcCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCAq
LywKIAkJCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8sCiAJCQkJ
QThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLywKQEAg
LTE1NTYsNiArMTU2Miw3IEBACiAJCQkJQThBNDc0MEMxNTFBODI1QjAwNDEyM0ZGIC8qIFBhc3NS
ZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQ
bGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMDIxQ0VBNzU1MTAwMEMyMzk2IC8q
IFBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTMy
MDBBQjkxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGODYwOTUxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjlEMzM2MzE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzQ0ODgzMTZGRTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTYyMiw3ICsxNjI5LDYgQEAKIAkJCQkxQ0NEQjE0RjFFNTY2
ODk4MDA2QzczQzAgLyogVGV4dEJyZWFrSXRlcmF0b3JJQ1UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3NDQ0MTUxQTgyNUIwMDQxMjNGRiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0QjE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0
RDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE2NDgsNiArMTY1NCw3IEBACiAJCQkJQThBNDc0ODAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZNVGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NkIyOTMxREM5N0JB
QjAwNEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzRDRkM4RTE2QTRG
MzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTMyMDBBQjcxRTlB
NTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUZBNDdDOEIxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTQ0NzlEMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xODMwLDYgKzE4MzcsNyBAQAogCQkJCUE3NDg3NDUyMTdBMEJEQUUwMEZBMDRD
QiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI1MTUx
QTgyNUIwMDQxMjNGRiAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3
NDI3MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlFMzIwMEFCODFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDNDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZCMTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJp
bmdDRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE4NDcsNyArMTg1NSw3IEBACiAJCQkJNzBBOTkz
RkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFDMTgxQzdGMUQzMDc4REEwMEY1RkExNiAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQzE4MUM5NjFEMzA4MDBBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3NDQ4MTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFk
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRFMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2QjI5MDFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5j
cHAgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcAppbmRleCBj
YjFkMTAxZTg1NjUyOWU4YWFlYTZhYmY2MGVjMzhlYTBiOGRkZTcyLi40YzNiZDU0ZTM5Mjg3NWM2
NTU3NjYyNzIwZGI4YzBiOTlhYmMzYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL2JlbmNobWFy
a3MvQ29uZGl0aW9uU3BlZWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvQ29u
ZGl0aW9uU3BlZWRUZXN0LmNwcApAQCAtNzksMTQgKzc5LDE0IEBAIHZvaWQgcnVuVGVzdCgKICAg
ICBDb25kaXRpb25UeXBlIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlvblR5cGUgZnVsbENv
bmRpdGlvbjsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBjb25zdW1lclRocmVhZHM7
Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHByb2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0
b3I8UmVmUHRyPFRocmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRo
cmVhZD4+IHByb2R1Y2VyVGhyZWFkczsKIAogICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7
CiAgICAgTG9ja1R5cGUgcmVjZWl2ZWRMb2NrOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElk
ZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIkNvbnN1bWVyIHRocmVhZCIsCiAgICAgICAg
ICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTk4LDcgKzk4LDcg
QEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5Q29uZGl0
aW9uLCBsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENo
ZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoVGhy
ZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIGNvbnN1bXB0aW9uIHByZWRpY2F0ZSB3aXRoIHNo
b3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBx
dWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICFzaG91bGRDb250aW51ZSB8fCAhcXVldWUuaXNFbXB0eSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb250
aW51ZSAmJiBxdWV1ZS5pc0VtcHR5KCkpCkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2b2lkIHJ1blRl
c3QoCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsK
KyAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQpOwogICAgIH0KIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2VyczsgaS0tOykgewotICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgIFJlZlB0cjxU
aHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIlByb2R1Y2VyIFRo
cmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKQEAgLTEyOSw3ICsx
MjksNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENv
bmRpdGlvbiwgbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiBDaGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwg
c2hvdWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
VGhyZWFkOjpjdXJyZW50KCksICI6IENoZWNraW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGgg
c2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIs
IHF1ZXVlLnNpemUoKSwgIlxuIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcXVldWUuc2l6ZSgpIDwgbWF4UXVldWVTaXplOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgbXVzdE5vdGlmeSA9IHF1ZXVlLmlz
RW1wdHkoKTsKQEAgLTEzOCwxMSArMTM4LDExIEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAg
ICAgICAgICAgbm90aWZ5KGVtcHR5Q29uZGl0aW9uLCBtdXN0Tm90aWZ5KTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0
aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWQp
OwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDog
cHJvZHVjZXJUaHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJ
ZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+JiB0aHJlYWQgOiBwcm9kdWNlclRo
cmVhZHMpCisgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2tUeXBlPiBsb2NrZXIobG9jayk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAgYi9Tb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAKaW5kZXggZjA4MzIxYzBmNjg4MzY1MzVk
ODNjYjZiYzc1MTE4NDhiYjUyZDk0Zi4uNjhjZTg0YzQ4YTNmZDRjOGY4MzViYTA5YWE2MWE1MDcy
Mzc2Nzk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rl
c3QuY3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NUZXN0LmNwcApA
QCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAgICAgIExvY2tU
eXBlIGxvY2s7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZFtdPiBjb3VudHMgPSBz
dGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkW10+KG51bVRocmVhZHMpOwotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxU
aHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZHMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRyPFRocmVh
ZD5bXT4obnVtVGhyZWFkcyk7CiAgICAgCiAgICAgICAgIHZvbGF0aWxlIGJvb2wga2VlcEdvaW5n
ID0gdHJ1ZTsKICAgICAKQEAgLTcwLDcgKzcwLDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzOyB0aHJlYWRJ
bmRleC0tOykgewogICAgICAgICAgICAgY291bnRzW3RocmVhZEluZGV4XSA9IDA7Ci0gICAgICAg
ICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgIHRo
cmVhZHNbdGhyZWFkSW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgIkJl
bmNobWFyayBUaHJlYWQiLAogICAgICAgICAgICAgICAgIFsmLCB0aHJlYWRJbmRleF0gKCkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1pY3Jvc2Vjb25kc0luQ3JpdGljYWxTZWN0aW9uKSB7
CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAgCiAgICAgICAgIGxv
Y2sudW5sb2NrKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJl
YWRzOyB0aHJlYWRJbmRleC0tOykKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkSW5kZXhd
LT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcCBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9M
b2NrU3BlZWRUZXN0LmNwcAppbmRleCA1NDVkMmUwYjA0ODhmMzM4OTRhNTk2ODhmZDkxYjBkM2Ez
ODdjY2EyLi44MmQzOWY4N2M2YzcwNmMxOWNlNGYyOTRjOWI2MWIyYWJiOGE1OThjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKKysrIGIvU291cmNl
L1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVj
dCBCZW5jaG1hcmsgewogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdpdGhQYWRkaW5n
PExvY2tUeXBlPltdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8TG9ja1R5
cGU+W10+KG51bVRocmVhZEdyb3Vwcyk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRoUGFk
ZGluZzxkb3VibGU+W10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxXaXRoUGFkZGluZzxkb3Vi
bGU+W10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJ
ZGVudGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJb
XT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJl
ZnB0cjxUaHJlYWQ+W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAK
ICAgICAgICAgdm9sYXRpbGUgYm9vbCBrZWVwR29pbmcgPSB0cnVlOwogCkBAIC05MCw3ICs5MCw3
IEBAIHN0cnVjdCBCZW5jaG1hcmsgewogICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRl
eF0udmFsdWUgPSAwOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0g
bnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIHRo
cmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4
XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5k
ZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6OmNyZWF0ZSgK
ICAgICAgICAgICAgICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAogICAgICAgICAgICAgICAg
ICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMsICZrZWVwR29pbmcsICZudW1J
dGVyYXRpb25zTG9jaywgJm51bUl0ZXJhdGlvbnNdICgpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBsb2NhbFdvcmQgPSAwOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHN0cnVjdCBCZW5j
aG1hcmsgewogICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTsKICAgICAKICAgICAgICAgZm9yICh1
bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91
cDsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0
aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+
d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F1
dG9tYXRpY1RocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCmlu
ZGV4IDM4N2M2ZTI1ZDcwNjI5YTgzYWE2MWNkNmE2YTg3NDllYTA3YzdmMDAuLjQxMGJmYjU3NDQy
NWE1N2M1YmRmYmQwZTc5ZmI5MTliMTdkYWQyODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFk
LmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25z
dCBBYnN0cmFjdExvY2tlciYpCiAgICAgCiAgICAgbV9oYXNVbmRlcmx5aW5nVGhyZWFkID0gdHJ1
ZTsKICAgICAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAg
ICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIldURjo6
QXV0b21hdGljVGhyZWFkIiwKICAgICAgICAgWz1dICgpIHsKICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFydChjb25z
dCBBYnN0cmFjdExvY2tlciYpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
ID09IFdvcmtSZXN1bHQ6OkNvbnRpbnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7Ci0g
ICAgZGV0YWNoVGhyZWFkKHRocmVhZCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9p
ZCBBdXRvbWF0aWNUaHJlYWQ6OnRocmVhZERpZFN0YXJ0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5k
ZXggYTM0MTkxMTljYTcxZWRkZjk1NTNjYjMwYTc2YTJhODU1ZmViYTJjNy4uMWJhZTNiYjkwYjM3
MTIwYTUxYzQ4OTlkOTg3ZDhhMzQxMjU0MGQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTk1
LDYgKzk1LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgUGFya2luZ0xvdC5oCiAgICAgUGFzc1Jl
ZlB0ci5oCiAgICAgUGxhdGZvcm0uaAorICAgIFBsYXRmb3JtUmVnaXN0ZXJzLmgKICAgICBQcmlu
dFN0cmVhbS5oCiAgICAgUHJvY2Vzc0lELmgKICAgICBSQU1TaXplLmgKQEAgLTEyOCw3ICsxMjks
NyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTdHJpbmdFeHRyYXMuaAogICAgIFN0cmluZ1ByaW50
U3RyZWFtLmgKICAgICBTeXN0ZW1UcmFjaW5nLmgKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0
aHJlYWRzLmgKKyAgICBUaHJlYWRIb2xkZXIuY3BwCiAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aAogICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJlYWRpbmcuaApAQCAtMzI5LDE2ICszMzAs
MTQgQEAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwogaWYgKFdJTjMyKQogICAgIGxpc3QoQVBQ
RU5EIFdURl9TT1VSQ0VTCiAgICAgICAgIE9TQWxsb2NhdG9yV2luLmNwcAorICAgICAgICBUaHJl
YWRIb2xkZXJXaW4uY3BwCiAgICAgICAgIFRocmVhZFNwZWNpZmljV2luLmNwcAogICAgICAgICBU
aHJlYWRpbmdXaW4uY3BwCiAgICAgKQogZWxzZSAoKQotICAgIGxpc3QoQVBQRU5EIFdURl9IRUFE
RVJTCi0gICAgICAgIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaAotICAgICkKICAgICBs
aXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAgICBPU0FsbG9jYXRvclBvc2l4LmNwcAotICAg
ICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcAorICAgICAgICBUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5jcHAKICAgICAgICAgVGhyZWFkaW5nUHRocmVhZHMuY3BwCiAgICAgKQogZW5k
aWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaCBiL1NvdXJjZS9X
VEYvd3RmL01haW5UaHJlYWQuaAppbmRleCAyNWQ4Zjc2NmRjZmI4NzlhMWQ3NjgzY2U1NTA4ZGQ4
ZDdmMWQ3N2FmLi4wZTc4ZThlNTFhYmU4ZDk1NTQ3MmM3OWRkMzQ2OTJmMTU0NmRiMWE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKKysrIGIvU291cmNlL1dURi93dGYv
TWFpblRocmVhZC5oCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQcmludFN0
cmVhbTsKIAotdHlwZWRlZiB1aW50MzJfdCBUaHJlYWRJZGVudGlmaWVyOwotCiAvLyBNdXN0IGJl
IGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGlu
aXRpYWxpemVNYWluVGhyZWFkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01lbW9y
eVByZXNzdXJlSGFuZGxlci5oIGIvU291cmNlL1dURi93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVy
LmgKaW5kZXggZGZkZGYwYTk1NTUyZGIzZTJhZWNmZWY0ZWMxNmVmYjVjNmU2YzdiZC4uNDEyOGY1
Y2Q3MWE3ZGIyZjRmZDcwMzI5NTNmMGMzZjFmNTAwZDEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBAQCBjbGFzcyBNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIgewogI2lmIFVTRShHTElCKQogICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291
cmNlOwogI2Vsc2UKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAg
ICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICNlbmRpZgogICAgIH07CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwIGIvU291cmNlL1dU
Ri93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKaW5kZXggNDAyM2Y0M2U2ZjIwYTM4ZTEwM2U3
YzlhMmU0ZjBmN2UwNjEwNTcxNC4uY2NlMTEwNmQ0NjdiNzIwODNjMWVkYjIxM2FkNTljNDQwMzE3
YTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKQEAgLTkzLDE0ICs5
MywxNCBAQCBib29sIFBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OnRyeUxvY2tG
b3IoUGFyYWxsZWxFbnZpcm9ubWVudCogcGFyZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3RocmVhZElEID0gY3JlYXRl
VGhyZWFkKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2YXRlOjp3b3JrZXJUaHJlYWQs
IHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKKyAgICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBt
X3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCZQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2
YXRlOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJQYXJhbGxlbCB3b3JrZXIiKTsKIAotICAgIGlmICht
X3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7
CiAKICAgICBtX211dGV4LnVubG9jaygpOwotICAgIHJldHVybiBtX3RocmVhZElEOworICAgIHJl
dHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQcml2
YXRlOjpleGVjdXRlKFRocmVhZEZ1bmN0aW9uIHRocmVhZEZ1bmN0aW9uLCB2b2lkKiBwYXJhbWV0
ZXJzKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFk
UHJpdmF0ZTo6d29ya2VyVGhyZWFkKHZvaWQqIHRocmVhZERhdGEpCiAgICAgVGhyZWFkUHJpdmF0
ZSogc2hhcmVkVGhyZWFkID0gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWRQcml2YXRlKj4odGhyZWFk
RGF0YSk7CiAgICAgTG9ja0hvbGRlciBsb2NrKHNoYXJlZFRocmVhZC0+bV9tdXRleCk7CiAKLSAg
ICB3aGlsZSAoc2hhcmVkVGhyZWFkLT5tX3RocmVhZElEKSB7CisgICAgd2hpbGUgKHNoYXJlZFRo
cmVhZC0+bV90aHJlYWQpIHsKICAgICAgICAgaWYgKHNoYXJlZFRocmVhZC0+bV9ydW5uaW5nKSB7
CiAgICAgICAgICAgICAoKnNoYXJlZFRocmVhZC0+bV90aHJlYWRGdW5jdGlvbikoc2hhcmVkVGhy
ZWFkLT5tX3BhcmFtZXRlcnMpOwogICAgICAgICAgICAgc2hhcmVkVGhyZWFkLT5tX3J1bm5pbmcg
PSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
aCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaAppbmRleCA0NTg0MDdjNGNi
NGEzZjk5NWM5MGM1NTU2MjdjMWNiZDIyYjQxYjVjLi43ZDY4ZWYwNzBmNjdhNjUzM2MwYjg3NTgz
ZDJhNTdhMTE4ZDA1NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNH
ZW5lcmljLmgKKysrIGIvU291cmNlL1dURi93dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCkBAIC01
NCw3ICs1NCw3IEBAIGNsYXNzIFBhcmFsbGVsRW52aXJvbm1lbnQgewogICAgIGNsYXNzIFRocmVh
ZFByaXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaHJlYWRQcml2YXRlPiB7CiAgICAgcHVibGlj
OgogICAgICAgICBUaHJlYWRQcml2YXRlKCkKLSAgICAgICAgICAgIDogbV90aHJlYWRJRCgwKQor
ICAgICAgICAgICAgOiBtX3RocmVhZChudWxscHRyKQogICAgICAgICAgICAgLCBtX3J1bm5pbmco
ZmFsc2UpCiAgICAgICAgICAgICAsIG1fcGFyZW50KDApCiAgICAgICAgIHsKQEAgLTc0LDcgKzc0
LDcgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdv
cmtlclRocmVhZCh2b2lkKik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBUaHJlYWRJZGVudGlm
aWVyIG1fdGhyZWFkSUQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgICAg
ICBib29sIG1fcnVubmluZzsKICAgICAgICAgUGFyYWxsZWxFbnZpcm9ubWVudCogbV9wYXJlbnQ7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwIGIvU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5jcHAKaW5kZXggZTZjNjc4YmVmYzBmMTkwYTIyM2U5YWRkYjJjYzU4
MTBiNTZlMWMxNC4uY2MxYTIxYjllYTVjY2NjNmYxYWNlNGM5NzQ5ODk5YmJkYTVkN2UxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvUGFya2luZ0xvdC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IFRocmVhZERhdGEgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkRGF0YT4gewogICAgIFRocmVhZERhdGEo
KTsKICAgICB+VGhyZWFkRGF0YSgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVu
dGlmaWVyOworICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKICAgICAKICAgICBNdXRleCBwYXJraW5n
TG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKQEAgLTQyMyw3ICs0
MjMsNyBAQCB2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQgbnVtVGhyZWFkcykKIH0K
IAogVGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCi0gICAgOiB0aHJlYWRJZGVudGlmaWVyKGN1cnJl
bnRUaHJlYWQoKSkKKyAgICA6IHRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKICAgICB1bnNp
Z25lZCBjdXJyZW50TnVtVGhyZWFkczsKICAgICBmb3IgKDs7KSB7CkBAIC03OTMsNyArNzkzLDcg
QEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFk
ZHJlc3MpCiAgICAgdW5wYXJrQ291bnQoYWRkcmVzcywgVUlOVF9NQVgpOwogfQogCi1ORVZFUl9J
TkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1iZGE8dm9p
ZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+JiBjYWxsYmFjaykKK05FVkVSX0lOTElO
RSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRo
cmVhZCYsIGNvbnN0IHZvaWQqKT4mIGNhbGxiYWNrKQogewogICAgIFZlY3RvcjxCdWNrZXQqPiBi
dWNrZXRzVG9VbmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CiAKQEAgLTgwMyw3ICs4MDMsNyBAQCBO
RVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoSW1wbChjb25zdCBTY29wZWRMYW1i
ZGE8dm9pZChUaHJlYWRJZGVudGlmaQogICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJlYWREYXRhID0g
YnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhyZWFkRGF0YSA9
IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKLSAgICAgICAgICAgIGNhbGxiYWNrKGN1
cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRk
cmVzcyk7CisgICAgICAgICAgICBjYWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhyZWFkLmdl
dCgpLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgfQogICAgIAogICAgIHVubG9j
a0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UGFya2luZ0xvdC5oIGIvU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCmluZGV4IDdkNWZiMTdl
ZmEwMmFiNzZiMTI4ZWFmNTk5ODEzODAxMDBiYWJkOTYuLmI2ZDg4MzBkMTljN2I3ZmQ0Y2M2YWNh
ZTM2MmFlYTNiOTQzYTlkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3Qu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBj
bGFzcyBQYXJraW5nTG90IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHN0YXRp
YyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICB7Ci0gICAgICAgIGZvckVhY2hJ
bXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4o
ZnVuYykpOworICAgICAgICBmb3JFYWNoSW1wbChzY29wZWRMYW1iZGFSZWY8dm9pZChUaHJlYWQm
LCBjb25zdCB2b2lkKik+KGZ1bmMpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNzEsNyArMTcx
LDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IFNj
b3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwogCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2hJbXBsKGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4mKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQo
VGhyZWFkJiwgY29uc3Qgdm9pZCopPiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1SZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODI4NjVlYTgzNWE4NTUzN2MwZTc2
YzFhNzA5MDBiOWE1ODI5MDNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1SZWdpc3RlcnMuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtUmVnaXN0ZXJz
X2gKKyNkZWZpbmUgUGxhdGZvcm1SZWdpc3RlcnNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZWxp
ZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8dWNv
bnRleHQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworI2lmIE9TKERBUldJTikKKwor
I2lmIENQVShYODYpCit0eXBlZGVmIGkzODZfdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3Rl
cnM7CisjZWxpZiBDUFUoWDg2XzY0KQordHlwZWRlZiB4ODZfdGhyZWFkX3N0YXRlNjRfdCBQbGF0
Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShQUEMpCit0eXBlZGVmIHBwY190aHJlYWRfc3RhdGVf
dCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlmIENQVShQUEM2NCkKK3R5cGVkZWYgcHBjX3RocmVh
ZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNKQordHlwZWRlZiBh
cm1fdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNNjQpCit0
eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vsc2UKKyNl
cnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbGlmIE9TKFdJTkRPV1MpCisK
K3VzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0gQ09OVEVYVDsKKworI2VsaWYgKE9TKEZSRUVCU0Qp
IHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQ
VShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lz
dGVycyA9IG1jb250ZXh0X3Q7CisKKyNlbHNlCisKK3N0cnVjdCBQbGF0Zm9ybVJlZ2lzdGVycyB7
CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworfTsKKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gUGxhdGZvcm1SZWdpc3RlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaAppbmRleCBmZTE2MzBj
OTczNWI1ZmY1MzUzY2IyYzU1OGUzMTA1ODEyNDc4N2Q4Li4yNzdlNjc1ZGIzYzU1NWQ1ZTRjNmNl
MDQ5NDY4ODc0ZDM2NzY5NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaApAQCAtNDIsNyArNDIsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHIgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
UmVmUHRyID0gdHJ1ZTsKIAotICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKCkgOiBtX3B0cihudWxs
cHRyKSB7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0ZXhwciBSZWZQdHIoKSA6IG1fcHRyKG51
bGxwdHIpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKFQqIHB0cikgOiBtX3B0cihwdHIp
IHsgcmVmSWZOb3ROdWxsKHB0cik7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihjb25zdCBS
ZWZQdHImIG8pIDogbV9wdHIoby5tX3B0cikgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gUmVmUHRyKGNvbnN0IFJlZlB0cjxVPiYgbykgOiBtX3B0cihv
LmdldCgpKSB7IHJlZklmTm90TnVsbChtX3B0cik7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uLmgKaW5kZXggOTQzZmQ2ZDc5ZDA5NDQyNTUwM2FjODk3MzFiMGEwNmE2
YWM0MGZmZC4uY2IyNzVmNzAxMmNmZTU2NjFlNDllMGI0ZmYwZDljNjIxYjBlNDk5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKQEAgLTI5LDYgKzI5LDggQEAK
ICNpZm5kZWYgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uX2gKICNkZWZpbmUgVGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uX2gKIAorI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCiBuYW1lc3BhY2UgV1RG
IHsKIAogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKQEAg
LTM2LDEzICszOCwxNSBAQCB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJn
dW1lbnQpOwogc3RydWN0IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKFRo
cmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBkYXRhKQorICAgIFRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgUmVmUHRyPFRocmVhZD4mJiB0aHJlYWQs
IHZvaWQqIGRhdGEpCiAgICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgdGhy
ZWFkKFdURk1vdmUodGhyZWFkKSkKICAgICAgICAgLCBkYXRhKGRhdGEpCiAgICAgewogICAgIH0K
IAogICAgIFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uOworICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZDsKICAgICB2b2lkKiBkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkSG9sZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTdiZjY0NmY4NWE0OGYzODhhNzY4NTkyOTEwZDQxNGVlNzRmODBkNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlci5oIgor
CisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitUaHJlYWRTcGVj
aWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5Owor
CitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRFeGl0
KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKFRocmVhZCYgdGhyZWFkKQor
eworICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAgIC8vIElkZWFsbHkgd2UnZCBoYXZlIHRo
aXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0IHBl
cmZvcm1hbmUuCisgICAgICAgIC8vIEhhdmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVh
bnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3QgY2FsbAorICAgICAgICAvLyBXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcoKSBzb29uIGVub3VnaCIgYnVncyBpbiByZWxlYXNlIG1vZGUuCisgICAg
ICAgIEFTU0VSVChtX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOworICAgICAgICB0
aHJlYWRTcGVjaWZpY1NldChtX2tleSwgbmV3IFRocmVhZEhvbGRlcih0aHJlYWQpKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkSG9sZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
ODlmNDJhMGI2MzhiOTk2YjllZTNhOTA1OGQ5NTIyODhlMTZhNDYwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4u
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBUaHJlYWRIb2xkZXJfaAorI2RlZmluZSBUaHJlYWRIb2xkZXJfaAorCisjaW5jbHVkZSA8
d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3Rv
cmFnZS4gVGhlIGRlc3RydWN0b3Igb2YgdGhpcyBob2xkZXIgcmVsaWFibHkgZGVzdHJveSBUaHJl
YWQuCisvLyBGb3IgcHRocmVhZCwgaXQgZW1wbG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3Mg
ZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlIFRocmVhZC4KKy8vIEZvciBXaW5kb3dzLCB3
ZSB1c2UgdGhyZWFkX2xvY2FsIHRvIGRlZmVyIHRocmVhZCBob2xkZXIgZGVzdHJ1Y3Rpb24uIEl0
IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYworLy8gdHlwZXMgZG9uJ3QgdXNlIG11bHRp
cGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFzcyBUaHJlYWRIb2xkZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFRocmVhZEhvbGRlcik7CitwdWJsaWM6CisgICAgflRocmVhZEhvbGRlcigp
OworCisgICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3
aG9sZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6
ZSgpIGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZU9uY2UoKTsKKworICAgIC8vIENyZWF0ZXMgYW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFk
SG9sZGVyIGludG8gdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuCisgICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZShUaHJlYWQmKTsKKworICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMg
c3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgorICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIqIGN1
cnJlbnQoKTsKKworICAgIFRocmVhZCYgdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7
IH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRIb2xkZXIoVGhyZWFkJiB0aHJlYWQpCisgICAgICAg
IDogbV90aHJlYWQodGhyZWFkKQorICAgICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQor
ICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlz
IGNhbGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFkIHRlcm1pbmF0ZXM6CisgICAgLy8gLSBmaXJzdCwg
d2hlbiBhbGwgdGhlIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVk
LCBpdCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdhcyAnZGVzdHJveWVkIG9uY2UnCisgICAgLy8gYW5k
ICgxKSByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCBvciAoMikg
Y29uc3RydWN0cyB0aHJlYWQgbG9jYWwgdmFsdWUgdG8gY2FsbCBpdCBhZ2FpbiBsYXRlci4KKyAg
ICAvLyAtIHNlY29uZCwgYWZ0ZXIgYWxsIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJl
IGludm9rZWQsIGl0IGdldHMgY2FsbGVkIGFnYWluIC0gdGhpcyB0aW1lLCB3ZSByZW1vdmUgdGhl
CisgICAgLy8gVGhyZWFkIGZyb20gdGhlIHRocmVhZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51
cC4KKyAgICBzdGF0aWMgdm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBkZXN0cnVjdCh2b2lkKiBk
YXRhKTsKKworICAgIFJlZjxUaHJlYWQ+IG1fdGhyZWFkOworICAgIGJvb2wgbV9pc0Rlc3Ryb3ll
ZE9uY2U7CisgICAgc3RhdGljIFRocmVhZFNwZWNpZmljS2V5IG1fa2V5OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUaHJlYWRIb2xkZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkSG9sZGVyUHRocmVhZHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmODE1YWJiNmY0ZWVmYzUyM2VkYjk3
OTM1YjllMjc1NWU4NjRlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlci5oIgorCisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemVPbmNlKCkKK3sKKyAgICB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZSgmbV9rZXksIGRlc3Ry
dWN0KTsKK30KKworVGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKQoreworICAg
IEFTU0VSVChtX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPih0aHJlYWRTcGVjaWZpY0dldChtX2tleSkpOworfQor
Cit2b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWRI
b2xkZXIqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4o
ZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZElkZW50aWZpZXJEYXRhKTsKKworICAgIGlmICh0aHJl
YWRJZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgZGVsZXRlIHRo
cmVhZElkZW50aWZpZXJEYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyZWFk
SWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1ZTsKKyAgICAvLyBSZS1zZXR0
aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRlc3RydWN0KCkgY2FsbCBhZnRl
ciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgY2FsbGVkLgorICAg
IHRocmVhZFNwZWNpZmljU2V0KG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
V2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGQzYzhmNmRhOTZlYTk5ODExYjIxMDI1ZDNjMzZkYTc3OWZlYzVlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKQEAgLTAsMCArMSwxMjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRocmVhZEhvbGRlci5oIgorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIEludmFsaWRU
aHJlYWRIb2xkZXIgKChUaHJlYWRIb2xkZXIqKSgweGJiYWRiZWVmKSkKKworc3RhdGljIHN0ZDo6
bXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3Rk
OjptdXRleD4gbXV0ZXg7CisgICAgcmV0dXJuIG11dGV4LmdldCgpOworfQorCitzdGF0aWMgSGFz
aE1hcDxUaHJlYWRJZGVudGlmaWVyLCBUaHJlYWRIb2xkZXIqPiYgdGhyZWFkTWFwKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBUaHJlYWRI
b2xkZXIqPj4gbWFwOworICAgIHJldHVybiBtYXAuZ2V0KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9s
ZGVyOjppbml0aWFsaXplT25jZSgpCit7CisgICAgdGhyZWFkTWFwTXV0ZXgoKTsKKyAgICB0aHJl
YWRNYXAoKTsKKyAgICB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsK
K30KKworVGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKQoreworICAgIEFTU0VS
VChtX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOworICAgIFRocmVhZEhvbGRlciog
aG9sZGVyID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4odGhyZWFkU3BlY2lmaWNHZXQobV9r
ZXkpKTsKKyAgICBpZiAoaG9sZGVyKQorICAgICAgICByZXR1cm4gaG9sZGVyOworCisgICAgLy8g
QWZ0ZXIgRkxTIGlzIGRlc3Ryb3llZCwgdGhpcyBtYXAgb2ZmZXJzIHRoZSB2YWx1ZSB1bnRpbCB0
aGUgc2Vjb25kIHRocmVhZCBleGl0IGNhbGxiYWNrIGlzIGNhbGxlZC4KKyAgICBzdGQ6OnVuaXF1
ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICByZXR1cm4g
dGhyZWFkTWFwKCkuZ2V0KGN1cnJlbnRUaHJlYWQoKSk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVy
OjpkZXN0cnVjdCh2b2lkKiBkYXRhKQoreworICAgIGlmIChkYXRhID09IEludmFsaWRUaHJlYWRI
b2xkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRocmVhZEhvbGRlciogaG9sZGVyID0gc3Rh
dGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7CisgICAgQVNTRVJUKGhvbGRlcik7CisKKyAg
ICAvLyBEZWxheSB0aGUgZGVhbGxvY2F0aW9uIG9mIFRocmVhZEhvbGRlciBtb3JlLgorICAgIC8v
IEl0IGRlZmVycyBUaHJlYWRIb2xkZXIgZGVhbGxvY2F0aW9uIGFmdGVyIHRoZSBvdGhlciBUaHJl
YWRTcGVjaWZpYyB2YWx1ZXMgYXJlIGRlYWxsb2NhdGVkLgorICAgIHN0YXRpYyB0aHJlYWRfbG9j
YWwgY2xhc3MgVGhyZWFkRXhpdENhbGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRocmVh
ZEV4aXRDYWxsYmFjayhUaHJlYWRIb2xkZXIqIGhvbGRlcikKKyAgICAgICAgIDogbV9ob2xkZXIo
aG9sZGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+VGhyZWFkRXhpdENhbGxi
YWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdChtX2hv
bGRlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFRocmVhZEhvbGRlciog
bV9ob2xkZXI7CisgICAgfSBjYWxsYmFjayhob2xkZXIpOworCisgICAgaWYgKGhvbGRlci0+bV9p
c0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9j
azxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7CisgICAgICAgICAgICBBU1NF
UlQodGhyZWFkTWFwKCkuY29udGFpbnMoaG9sZGVyLT5tX3RocmVhZC0+aWQoKSkpOworICAgICAg
ICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKGhvbGRlci0+bV90aHJlYWQtPmlkKCkpOworICAgICAg
ICB9CisgICAgICAgIGRlbGV0ZSBob2xkZXI7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgRkxTIHdp
dGggdGhlIG5vbi1udWxscHRyIHZhbHVlLiBXaGlsZSBGTFMgZGVzdHJ1Y3RvciB3b24ndCBiZSBj
YWxsZWQgZm9yIHRoYXQsCisgICAgICAgIC8vIG5vbi1udWxscHRyIHZhbHVlIHRlbGxzIHVzIHRo
YXQgd2UgYWxyZWFkeSBkZXN0cnVjdGVkIFRocmVhZEhvbGRlci4gSXQgbGVhZHMgaW5jb3JyZWN0
CisgICAgICAgIC8vIHVzZSBvZiBUaHJlYWQ6OmN1cnJlbnQoKSBjcmFzaC4KKyAgICAgICAgdGhy
ZWFkU3BlY2lmaWNTZXQobV9rZXksIEludmFsaWRUaHJlYWRIb2xkZXIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICAgICAgdGhyZWFkTWFwKCkuYWRkKGhvbGRl
ci0+bV90aHJlYWQtPmlkKCksIGhvbGRlcik7CisgICAgfQorICAgIHRocmVhZFNwZWNpZmljU2V0
KG1fa2V5LCBJbnZhbGlkVGhyZWFkSG9sZGVyKTsKKyAgICBob2xkZXItPm1faXNEZXN0cm95ZWRP
bmNlID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2NTcyMWRkMTY5YmZmMTQzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShQVEhSRUFEUykKLQotI2lu
Y2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLQotI2luY2x1ZGUgIlRocmVh
ZGluZy5oIgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmlu
ZWQgaW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgot
I2RlZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNlbHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRp
ZmllckRhdGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01BWDsKLQotdm9pZCB0aHJlYWREaWRFeGl0
KFRocmVhZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVudGlmaWVyRGF0YTo6flRocmVhZElkZW50
aWZpZXJEYXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0KG1faWRlbnRpZmllcik7Ci19Ci0KLXZv
aWQgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCkKLXsKLSAgICBpbnQgZXJy
b3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBkZXN0cnVjdCk7Ci0gICAgaWYgKGVycm9y
KQotICAgICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIFRocmVhZElkZW50aWZp
ZXJEYXRhOjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlT
X01BWCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEqIHRocmVhZElkZW50aWZpZXJEYXRhID0g
c3RhdGljX2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEqPihwdGhyZWFkX2dldHNwZWNpZmljKG1f
a2V5KSk7Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllckRhdGEgPyB0aHJlYWRJZGVudGlm
aWVyRGF0YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0
YTo6aW5pdGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIEFTU0VSVCghaWRlbnRp
ZmllcigpKTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3Nl
cnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVydCBwZXJmb3JtYW5lLgotICAgIC8vIEhh
dmluZyB0aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJk
aWRuJ3QgY2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdo
IiBidWdzIGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxFQVNFX0FTU0VSVChtX2tleSAhPSBQVEhS
RUFEX0tFWVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCBuZXcgVGhyZWFk
SWRlbnRpZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6ZGVz
dHJ1Y3Qodm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRl
bnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KGRhdGEpOwot
ICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci0KLSAgICBpZiAodGhyZWFkSWRlbnRp
ZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVu
dGlmaWVyRGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRocmVhZElkZW50aWZp
ZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUg
dmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90
aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KLSAgICBwdGhyZWFk
X3NldHNwZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGIvU291cmNlL1dURi93dGYv
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcyNWJkMjc1ZTcyZWJkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotI2RlZmluZSBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElkZW50aWZpZXIgaW4gdGhlIHRocmVhZC1z
cGVjaWZpYyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0
cnVjdGlvbiB0byByZWxpYWJseSByZW1vdmUKLS8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aHJl
YWRNYXAuIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBkb24ndCB1c2Ug
bXVsdGlwbGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNzIFRocmVhZElkZW50aWZpZXJEYXRhIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJZGVudGlmaWVyRGF0YSk7Ci1wdWJsaWM6
Ci0gICAgflRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0KLSAgICAvLyBPbmUgdGltZSBpbml0aWFs
aXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgotICAgIC8vIFRoaXMgbWV0aG9kIG11
c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2Fm
ZS4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOwotCi0gICAgLy8gQ3JlYXRlcyBh
bmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVudGlmaWVyRGF0YSBpbnRvIHRocmVhZC1z
cGVjaWZpYyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkSWRlbnRp
ZmllciBpZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMg
c3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IGlkZW50aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YShUaHJl
YWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZp
ZXIpCi0gICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCi0gICAgewotICAgIH0KLQot
ICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMg
d2hlbiB0aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3Ro
ZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1l
bWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYg
aW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0
IGFnYWluIGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmlj
IGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRp
bWUsIHdlIHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJZGVudGlmaWVyIGZyb20gdGhlIHRocmVh
ZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2
b2lkKiBkYXRhKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwotICAgIGJv
b2wgbV9pc0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGljIHB0aHJlYWRfa2V5X3QgbV9rZXk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmlj
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCmluZGV4IGYwOTA0ZmNmNjI0NDll
MmQzYmFjNzAzZDJkYTc0NjAwYmI3ZTM5NDguLjFmOTgzNjNlOTM0MTM0YzQxNDMzMzZjOGI4MmY4
YWZjNDM4MTVlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgK
KysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaApAQCAtNDgsNiArNDgsMTQgQEAK
IAogI2lmIFVTRShQVEhSRUFEUykKICNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpZiBPUyhIVVJE
KQorLy8gUFRIUkVBRF9LRVlTX01BWCBpcyBub3QgZGVmaW5lZCBpbiBiaW9uaWMgbm9yIGluIEh1
cmQsIHNvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUuCisjZGVmaW5lIFBUSFJFQURfS0VZU19N
QVggMTAyNAorI2Vsc2UKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCiAjZWxpZiBPUyhX
SU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgpAQCAtMTA5LDYgKzExNyw4IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIENhbkJlR0NUaHJlYWQgY2FuQmVHQ1RocmVhZCA9IENhbkJl
R0NUaHJlYWQ6OkZhbHNlPiBjbGFzcyBUCiAKIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBUaHJlYWRT
cGVjaWZpY0tleTsKIAorc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBUaHJlYWRTcGVjaWZpY0tleSBJ
bnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCiBpbmxpbmUgdm9p
ZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVjaWZpY0tleSoga2V5LCB2b2lkICgq
ZGVzdHJ1Y3Rvcikodm9pZCAqKSkKIHsKICAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVh
dGUoa2V5LCBkZXN0cnVjdG9yKTsKQEAgLTE3MSw2ICsxODEsOCBAQCBXVEZfRVhQT1JUX1BSSVZB
VEUgRFdPUkQqIGZsc0tleXMoKTsKIAogdHlwZWRlZiBEV09SRCBUaHJlYWRTcGVjaWZpY0tleTsK
IAorc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBUaHJlYWRTcGVjaWZpY0tleSBJbnZhbGlkVGhyZWFk
U3BlY2lmaWNLZXkgPSBGTFNfT1VUX09GX0lOREVYRVM7CisKIGlubGluZSB2b2lkIHRocmVhZFNw
ZWNpZmljS2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKFRIUkVBRF9TUEVD
SUZJQ19DQUxMICpkZXN0cnVjdG9yKSh2b2lkICopKQogewogICAgIERXT1JEIGZsc0tleSA9IEZs
c0FsbG9jKGRlc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXggYzFkYzM1MDE5MDNhYjc2
YjM3MDQ2ZDkzMzNmOTMyYTNlZjBjNmM2ZS4uNzE4NzgxNDEwMThlNjgwM2MwMDcwNzFhMmY2ZmE2
MGVjMjAzY2U1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBO
ZXdUaHJlYWRDb250ZXh0IHsKICAgICBNdXRleCBjcmVhdGlvbk11dGV4OwogfTsKIAotY29uc3Qg
Y2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWROYW1lKQorY29uc3Qg
Y2hhciogVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUp
CiB7CiAjaWYgSEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcmV0dXJuIHRocmVhZE5hbWU7
CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29u
dGV4dERhdGEpCiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11
dGV4KTsKICAgICB9CiAKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRl
eHQtPm5hbWUpOworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChj
b250ZXh0LT5uYW1lKTsKIAogICAgIGF1dG8gZW50cnlQb2ludCA9IFdURk1vdmUoY29udGV4dC0+
ZW50cnlQb2ludCk7CiAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMgdm9pZCB0aHJlYWRFbnRy
eVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogICAgIGVudHJ5UG9pbnQoKTsKIH0KIAotVGhyZWFk
SWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IGVudHJ5UG9pbnQpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludCkKIHsKICAgICBOZXdU
aHJlYWRDb250ZXh0KiBjb250ZXh0ID0gbmV3IE5ld1RocmVhZENvbnRleHQgeyBuYW1lLCBXVEZN
b3ZlKGVudHJ5UG9pbnQpLCB7IH0gfTsKIAogICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5
IGZyb20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRp
Zmllci4KICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CiAK
LSAgICByZXR1cm4gY3JlYXRlVGhyZWFkSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4
dCwgbmFtZSk7CisgICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwodGhyZWFkRW50cnlQ
b2ludCwgY29udGV4dCwgbmFtZSk7CiB9CiAKLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFk
KFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUp
CitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50
LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHJldHVybiBjcmVhdGVUaHJl
YWQobmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUo
bmFtZSwgW2VudHJ5UG9pbnQsIGRhdGFdIHsKICAgICAgICAgZW50cnlQb2ludChkYXRhKTsKICAg
ICB9KTsKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJl
bGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVy
YWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5KQogewogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAg
ICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9p
ZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkp
CiAjZW5kaWYKIH0KIAotdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCBy
ZWxhdGl2ZVByaW9yaXR5KQordm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0
aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAg
ICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZv
aWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkK
ICNpZiBIQVZFKFFPU19DTEFTU0VTKQogc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1heFFPU2Ns
YXNzIHsgUU9TX0NMQVNTX1VOU1BFQ0lGSUVEIH07CiAKLXZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xh
c3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCit2b2lkIFRocmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xh
c3MocW9zX2NsYXNzX3QgbWF4Q2xhc3MpCiB7CiAgICAgYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5n
ZXJUaHJlYWRRT1NDbGFzcyhtYXhDbGFzcyk7CiAgICAgZ2xvYmFsTWF4UU9TY2xhc3MgPSBtYXhD
bGFzczsKIH0KIAotcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvcmln
aW5hbENsYXNzKQorcW9zX2NsYXNzX3QgVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFz
c190IG9yaWdpbmFsQ2xhc3MpCiB7CiAgICAgaWYgKGdsb2JhbE1heFFPU2NsYXNzICE9IFFPU19D
TEFTU19VTlNQRUNJRklFRCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9yaWdpbmFsQ2xhc3Ms
IGdsb2JhbE1heFFPU2NsYXNzKTsKQEAgLTE0OCw0ICsxNDgsOSBAQCBxb3NfY2xhc3NfdCBhZGp1
c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9CiAjZW5kaWYKIAordm9p
ZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
bV9pZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCA2YjU1OGIz
ZTFkNTE3ZTgxMGM1ZWE4ZjZiMmNhNDQwNWFjZjAxMmQyLi42OWFkOWM0YjQ4NDE2OTRmYjhlMDA3
ZGZmZWIyZjk5ZWQyMGMwOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5
Z29vZEByZWFrdGl4LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8
amhheWdvb2RAcmVha3RpeC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSw3NSArMzYsMTcyIEBACiAvLyBOb3RoaW5nIGluIHRoaXMgaGVhZGVyIGRlcGVuZHMg
b24gQXNzZXJ0aW9ucywgQXRvbWljcywgTG9ja2VyLCBOb25jb3B5YWJsZSwgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQsIG9yIFRocmVhZGluZ1ByaW1pdGl2ZXMuCiAKICNpbmNsdWRlIDxmdW5jdGlvbmFs
PgorI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVz
Lmg+CiAKKyNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhEQVJXSU4pCisjaW5jbHVkZSA8c2VtYXBo
b3JlLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAK
LXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFRocmVhZElkZW50aWZp
ZXIgPSB1aW50MzJfdDsKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1
bWVudCk7CiAKLS8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5LgotLy8gRGFyd2luIGlzIGFu
IGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNhbGwgaXQgZnJvbSBhbnkgdGhy
ZWFkLCB0aGUgb25seSAKLS8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3Qg
cmVlbnRyYW50LgotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygp
OworY2xhc3MgVGhyZWFkSG9sZGVyOworY2xhc3MgUHJpbnRTdHJlYW07CisKK2NsYXNzIFRocmVh
ZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBm
cmllbmQgY2xhc3MgVGhyZWFkSG9sZGVyOwogCi0vLyBSZXR1cm5zIDAgaWYgdGhyZWFkIGNyZWF0
aW9uIGZhaWxlZC4KLS8vIFRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIGEgbGl0ZXJhbCBzaW5jZSBv
biBzb21lIHBsYXRmb3JtcyBpdCdzIHBhc3NlZCBpbiB0byB0aGUgdGhyZWFkLgotV1RGX0VYUE9S
VF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkKGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5U
aHJlYWQoKTsKIAotLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJl
c3BvbnNpdmVuZXNzLgotLy8gcmVsYXRpdmVQcmlvcml0eSBpcyBhIHZhbHVlIGluIHRoZSByYW5n
ZSBbLTE1LCAwXSB3aGVyZSBhIGxvd2VyIHZhbHVlIGluZGljYXRlcyBhIGxvd2VyIHByaW9yaXR5
LgotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0
aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7
CisgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRocmVhZCBjcmVhdGlvbiBmYWlsZWQuCisgICAg
Ly8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZv
cm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUoY29uc3QgY2hhciogdGhyZWFkTmFtZSwgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0
cjxUaHJlYWQ+IGNyZWF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBj
b25zdCBjaGFyKiBuYW1lKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZElkZW50aWZpZXIg
Y3VycmVudFRocmVhZCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlVGhyZWFkUHJp
b3JpdHkoVGhyZWFkSWRlbnRpZmllciwgaW50KTsKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7Ci1XVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcik7CisgICAgLy8gUmV0dXJucyBU
aHJlYWQgb2JqZWN0LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBjdXJy
ZW50KCk7CiAKLS8vIERlcHJlY2F0ZWQgZnVuY3Rpb24tcG9pbnRlci1iYXNlZCB0aHJlYWQgY3Jl
YXRpb24uCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQo
VGhyZWFkRnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICAvLyBS
ZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUgdXNl
ciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CisgICAgLy8gb2YgdGhyZWFkcyBhbmQgZW5zdXJl
IHRoZSB0aHJlYWQgbGlmZXRpbWUuIFdoaWxlIFRocmVhZDo6Y3VycmVudCgpIGlzIG5vdCBzYWZl
IGlmIGl0IGlzIGNhbGxlZAorICAgIC8vIGZyb20gdGhlIGRlc3RydWN0b3Igb2YgdGhlIG90aGVy
IFRMUyBkYXRhLCBjdXJyZW50SUQoKSBhbHdheXMgcmV0dXJucyBtZWFuaW5nZnVsIHRocmVhZCBJ
RC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZElkZW50aWZpZXIgY3VycmVu
dElEKCk7CiAKLS8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIGNyZWF0ZVRocmVhZCBpbXBs
ZW1lbnRhdGlvbi4KLVRocmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFk
RnVuY3Rpb24sIHZvaWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBjaGFuZ2VQcmlvcml0eShpbnQpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBpbnQgd2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
ZXRhY2goKTsKIAotLy8gQ2FsbGVkIGluIHRoZSB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9u
LgotLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJl
IHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgotdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworI2lmIE9TKERBUldJTikKKyAgICB1
c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IGtlcm5fcmV0dXJuX3Q7CisjZWxpZiBVU0UoUFRI
UkVBRFMpCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBpbnQ7CisjZWxpZiBPUyhX
SU5ET1dTKQorICAgIHVzaW5nIFBsYXRmb3JtU3VzcGVuZEVycm9yID0gRFdPUkQ7CisjZW5kaWYK
IAotY29uc3QgY2hhciogbm9ybWFsaXplVGhyZWFkTmFtZShjb25zdCBjaGFyKiB0aHJlYWROYW1l
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5k
RXJyb3I+IHN1c3BlbmQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXN1bWUoKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lz
dGVycyYpOwogCiAjaWYgVVNFKFBUSFJFQURTKQotYm9vbCBzaWduYWxUaHJlYWQoVGhyZWFkSWRl
bnRpZmllciwgaW50IHNpZ25hbE51bWJlcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
c2lnbmFsKGludCBzaWduYWxOdW1iZXIpOwogI2VuZGlmCiAKKyAgICAvLyBNYXJrIHRoZSBjdXJy
ZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9uc2l2ZW5lc3MuCisgICAgLy8gcmVsYXRp
dmVQcmlvcml0eSBpcyBhIHZhbHVlIGluIHRoZSByYW5nZSBbLTE1LCAwXSB3aGVyZSBhIGxvd2Vy
IHZhbHVlIGluZGljYXRlcyBhIGxvd2VyIHByaW9yaXR5LgorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0
aXZlUHJpb3JpdHkgPSAwKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0
Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwor
CiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEdsb2Jh
bE1heFFPU0NsYXNzKHFvc19jbGFzc190KTsKLVdURl9FWFBPUlRfUFJJVkFURSBxb3NfY2xhc3Nf
dCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2NsYXNzX3QpOworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xh
c3NfdCk7CiAjZW5kaWYKIAotfSAvLyBuYW1lc3BhY2UgV1RGCisgICAgLy8gSW50ZXJuYWwgcGxh
dGZvcm0tc3BlY2lmaWMgVGhyZWFkOjpjcmVhdGUgaW1wbGVtZW50YXRpb24uCisgICAgc3RhdGlj
IFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29u
c3QgY2hhciogdGhyZWFkTmFtZSk7CiAKLXVzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKLXVz
aW5nIFdURjo6Y3JlYXRlVGhyZWFkOwotdXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwotdXNpbmcg
V1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eTsKLXVzaW5nIFdURjo6ZGV0YWNoVGhyZWFkOwotdXNp
bmcgV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbjsKKyAgICAvLyBDYWxsZWQgaW4gdGhlIHRo
cmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1z
IHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFk
LgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3Qg
Y2hhciogdGhyZWFkTmFtZSk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVh
ZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CiAKICNpZiBVU0UoUFRIUkVBRFMpCi11c2lu
ZyBXVEY6OnNpZ25hbFRocmVhZDsKKyAgICB2b2lkIGVzdGFibGlzaChwdGhyZWFkX3QpOworI2Vs
c2UKKyAgICB2b2lkIGVzdGFibGlzaChIQU5ETEUsIFRocmVhZElkZW50aWZpZXIpOwogI2VuZGlm
CiAKLSNpZiBIQVZFKFFPU19DTEFTU0VTKQotdXNpbmcgV1RGOjpzZXRHbG9iYWxNYXhRT1NDbGFz
czsKLXVzaW5nIFdURjo6YWRqdXN0ZWRRT1NDbGFzczsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisjaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoREFSV0lOKQorICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1l
KGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpOwogI2VuZGlmCiAKKyAgICBUaHJlYWRJ
ZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRocmVhZCYgdGhyZWFkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkKCkgPT0g
dGhyZWFkLmlkKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRocmVhZCYg
dGhyZWFkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkKCkgIT0gdGhyZWFkLmlkKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFRocmVhZCgpOworCisgICAgZW51bSBKb2luYWJsZVN0YXRlIHsK
KyAgICAgICAgLy8gVGhlIGRlZmF1bHQgdGhyZWFkIHN0YXRlLiBUaGUgdGhyZWFkIGNhbiBiZSBq
b2luZWQgb24uCisgICAgICAgIEpvaW5hYmxlLAorCisgICAgICAgIC8vIFNvbWVib2R5IHdhaXRl
ZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlzIHRocmVhZCBmaW5hbGx5IGV4aXRlZC4g
VGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJlIGEKKyAgICAgICAgLy8gcGVy
aW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0aHJlYWQgZXhpdHMgKHdoaWNoIGNhdXNlcyBw
dGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aGUgcmVtYWluZGVyIG9mIHdhaXRPblRocmVhZENv
bXBsZXRpb24gdG8gcnVuKQorICAgICAgICAvLyBhbmQgd2hlbiB0aHJlYWREaWRFeGl0IGlzIGNh
bGxlZC4gV2UgbmVlZCB0aHJlYWREaWRFeGl0IHRvIHRha2UgY2hhcmdlIGFuZCBkZWxldGUgdGhl
IHRocmVhZCBkYXRhIHNpbmNlIHRoZXJlJ3MKKyAgICAgICAgLy8gbm9ib2R5IGVsc2UgdG8gcGlj
ayB1cCB0aGUgc2xhY2sgaW4gdGhpcyBjYXNlIChzaW5jZSB3YWl0T25UaHJlYWRDb21wbGV0aW9u
IGhhcyBhbHJlYWR5IHJldHVybmVkKS4KKyAgICAgICAgSm9pbmVkLAorCisgICAgICAgIC8vIFRo
ZSB0aHJlYWQgaGFzIGJlZW4gZGV0YWNoZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgam9pbmVkIG9u
LiBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkIG11c3QgdGFrZSBjYXJlIG9mIGNsZWFuaW5nIHVw
IGFmdGVyIGl0c2VsZi4KKyAgICAgICAgRGV0YWNoZWQsCisgICAgfTsKKworICAgIEpvaW5hYmxl
U3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0dXJuIG1fam9pbmFibGVTdGF0ZTsgfQorICAgIHZv
aWQgZGlkQmVjb21lRGV0YWNoZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVkOyB9Cisg
ICAgdm9pZCBkaWRFeGl0KCk7CisgICAgdm9pZCBkaWRKb2luKCkgeyBtX2pvaW5hYmxlU3RhdGUg
PSBKb2luZWQ7IH0KKyAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1fZGlkRXhpdDsgfQor
CisgICAgLy8gV29yZExvY2sgJiBMb2NrIHJlbHkgb24gVGhyZWFkU3BlY2lmaWMuIEJ1dCBUaHJl
YWQgb2JqZWN0IGNhbiBiZSBkZXN0cm95ZWQgZXZlbiBhZnRlciBUaHJlYWRTcGVjaWZpYyB0aGlu
Z3MgYXJlIGRlc3Ryb3llZC4KKyAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgVGhyZWFkSWRl
bnRpZmllciBtX2lkIHsgMCB9OworICAgIEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlIHsg
Sm9pbmFibGUgfTsKKyAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07CisjaWYgVVNFKFBUSFJF
QURTKQorICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9w
b3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKKyNlbHNlCisgICAgc2VtX3QgbV9zZW1hcGhvcmVGb3JT
dXNwZW5kUmVzdW1lOworICAgIG1jb250ZXh0X3QgbV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsK
KyAgICB1bnNpZ25lZCBtX3N1c3BlbmRDb3VudCB7IDAgfTsKKyAgICBzdGQ6OmF0b21pYzxib29s
PiBtX3N1c3BlbmRlZCB7IGZhbHNlIH07CisjZW5kaWYKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAg
SEFORExFIG1faGFuZGxlOworI2Vsc2UKKyNlcnJvciBVbmtub3duIFN5c3RlbQorI2VuZGlmCit9
OworCisvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFk
LiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KKy8vIERhcndpbiBpcyBhbiBleGNl
cHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20gYW55IHRocmVhZCwg
dGhlIG9ubHkKKy8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFyZSBub3QgcmVlbnRy
YW50LgorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOworCitp
bmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gVGhy
ZWFkOjpjdXJyZW50SUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
VGhyZWFkSWRlbnRpZmllcjsKK3VzaW5nIFdURjo6VGhyZWFkOwordXNpbmcgV1RGOjpjdXJyZW50
VGhyZWFkOworCiAjZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcAppbmRleCBmNWNlZTNjMTc3ODJmNjZhZjliMDRjYzdkNTZjYTFkYTVhNjkyZDBmLi43
YzVjNTdjNzhmYzRkNTI4MGVkMDc4ZTQ5ZGQ3NTIyNjVhOWIwZjMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQorICog
Q29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFrdGl4LmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQx
LDEzICs0MiwxNyBAQAogI2luY2x1ZGUgIlJhbmRvbU51bWJlclNlZWQuaCIKICNpbmNsdWRlICJT
dGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKLSNp
bmNsdWRlICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCi0jaW5jbHVkZSAiVGhyZWFk
U3BlY2lmaWMuaCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKKyNpbmNsdWRlIDxlcnJuby5o
PgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFk
RGF0YS5oPgotI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CisK
KyNpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbmRpZgogCiAjaWYgIUNP
TVBJTEVSKE1TVkMpCiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC01NSwxMjcgKzYwLDE0MyBAQAog
I2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKIAotI2lmIE9TKExJTlVYKQotI2luY2x1ZGUg
PHN5cy9wcmN0bC5oPgotI2VuZGlmCi0KLSNpZiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNpZ25h
bC5oPgotI2VuZGlmCisjaWYgIU9TKERBUldJTikgJiYgT1MoVU5JWCkKIAotbmFtZXNwYWNlIFdU
RiB7CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KIAotY2xhc3Mg
UHRocmVhZFN0YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBlbnVtIEpvaW5hYmxlU3RhdGUgewotICAgICAgICBKb2luYWJsZSwgLy8gVGhlIGRlZmF1bHQg
dGhyZWFkIHN0YXRlLiBUaGUgdGhyZWFkIGNhbiBiZSBqb2luZWQgb24uCi0KLSAgICAgICAgSm9p
bmVkLCAvLyBTb21lYm9keSB3YWl0ZWQgb24gdGhpcyB0aHJlYWQgdG8gZXhpdCBhbmQgdGhpcyB0
aHJlYWQgZmluYWxseSBleGl0ZWQuIFRoaXMgc3RhdGUgaXMgaGVyZSBiZWNhdXNlIHRoZXJlIGNh
biBiZSBhIAotICAgICAgICAgICAgICAgIC8vIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gd2hlbiB0
aGUgdGhyZWFkIGV4aXRzICh3aGljaCBjYXVzZXMgcHRocmVhZF9qb2luIHRvIHJldHVybiBhbmQg
dGhlIHJlbWFpbmRlciBvZiB3YWl0T25UaHJlYWRDb21wbGV0aW9uIHRvIHJ1bikgCi0gICAgICAg
ICAgICAgICAgLy8gYW5kIHdoZW4gdGhyZWFkRGlkRXhpdCBpcyBjYWxsZWQuIFdlIG5lZWQgdGhy
ZWFkRGlkRXhpdCB0byB0YWtlIGNoYXJnZSBhbmQgZGVsZXRlIHRoZSB0aHJlYWQgZGF0YSBzaW5j
ZSB0aGVyZSdzIAotICAgICAgICAgICAgICAgIC8vIG5vYm9keSBlbHNlIHRvIHBpY2sgdXAgdGhl
IHNsYWNrIGluIHRoaXMgY2FzZSAoc2luY2Ugd2FpdE9uVGhyZWFkQ29tcGxldGlvbiBoYXMgYWxy
ZWFkeSByZXR1cm5lZCkuCi0KLSAgICAgICAgRGV0YWNoZWQgLy8gVGhlIHRocmVhZCBoYXMgYmVl
biBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQs
IHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgot
ICAgIH07Ci0KLSAgICAvLyBDdXJyZW50bHkgYWxsIHRocmVhZHMgY3JlYXRlZCBieSBXVEYgc3Rh
cnQgb3V0IGFzIGpvaW5hYmxlLiAKLSAgICBQdGhyZWFkU3RhdGUocHRocmVhZF90IGhhbmRsZSkK
LSAgICAgICAgOiBtX2pvaW5hYmxlU3RhdGUoSm9pbmFibGUpCi0gICAgICAgICwgbV9kaWRFeGl0
KGZhbHNlKQotICAgICAgICAsIG1fcHRocmVhZEhhbmRsZShoYW5kbGUpCi0gICAgewotICAgIH0K
LQotICAgIEpvaW5hYmxlU3RhdGUgam9pbmFibGVTdGF0ZSgpIHsgcmV0dXJuIG1fam9pbmFibGVT
dGF0ZTsgfQotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlKCkgeyByZXR1cm4gbV9wdGhyZWFk
SGFuZGxlOyB9Ci0gICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRl
ID0gRGV0YWNoZWQ7IH0KLSAgICB2b2lkIGRpZEV4aXQoKSB7IG1fZGlkRXhpdCA9IHRydWU7IH0K
LSAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQotICAgIGJv
b2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9kaWRFeGl0OyB9CisjaWYgT1MoU09MQVJJUykKKyNp
bmNsdWRlIDx0aHJlYWQuaD4KKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCiAK
LXByaXZhdGU6Ci0gICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGU7Ci0gICAgYm9vbCBt
X2RpZEV4aXQ7Ci0gICAgcHRocmVhZF90IG1fcHRocmVhZEhhbmRsZTsKLX07CisjaWYgSEFWRShQ
VEhSRUFEX05QX0gpCisjaW5jbHVkZSA8cHRocmVhZF9ucC5oPgorI2VuZGlmCiAKLXR5cGVkZWYg
SGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UHRocmVhZFN0YXRlPj4g
VGhyZWFkTWFwOworI2VuZGlmCiAKLXZvaWQgdW5zYWZlVGhyZWFkV2FzRGV0YWNoZWQoVGhyZWFk
SWRlbnRpZmllcik7Ci12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllcik7Ci12b2lk
IHRocmVhZFdhc0pvaW5lZChUaHJlYWRJZGVudGlmaWVyKTsKK25hbWVzcGFjZSBXVEYgewogCi1z
dGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKK1RocmVhZDo6VGhyZWFkKCkKIHsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKKyNp
ZiAhT1MoREFSV0lOKQorICAgIHNlbV9pbml0KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUs
IC8qIE9ubHkgYXZhaWxhYmxlIGluIHRoaXMgcHJvY2Vzcy4gKi8gMCwgLyogSW5pdGlhbCB2YWx1
ZSBmb3IgdGhlIHNlbWFwaG9yZS4gKi8gMCk7CisjZW5kaWYKIH0KIAotdm9pZCBpbml0aWFsaXpl
VGhyZWFkaW5nKCkKK1RocmVhZDo6flRocmVhZCgpCiB7Ci0gICAgc3RhdGljIGJvb2wgaXNJbml0
aWFsaXplZDsKLQotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246Omlu
aXRpYWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVj
dCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBzbyBl
bnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0ltcGw6
OmVtcHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9tTnVt
YmVyR2VuZXJhdG9yKCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNl
KCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVEYXRlcygpOworI2lmICFP
UyhEQVJXSU4pCisgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
CisjZW5kaWYKIH0KIAotc3RhdGljIFRocmVhZE1hcCYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTWFwPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KKyNp
ZiAhT1MoREFSV0lOKQogCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlQdGhy
ZWFkSGFuZGxlKGNvbnN0IHB0aHJlYWRfdCYgcHRocmVhZEhhbmRsZSkKLXsKLSAgICBNdXRleExv
Y2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7CisvLyBXZSB1c2UgU0lHVVNSMiB0byBzdXNw
ZW5kIGFuZCByZXN1bWUgbWFjaGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3JlLgorc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7Citz
dGF0aWMgc3RkOjphdG9taWM8VGhyZWFkKj4gdGFyZ2V0VGhyZWFkIHsgbnVsbHB0ciB9Oworc3Rh
dGljIFN0YXRpY1dvcmRMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOwogCi0gICAgVGhyZWFkTWFwOjpp
dGVyYXRvciBpID0gdGhyZWFkTWFwKCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaSAhPSB0aHJlYWRN
YXAoKS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKGktPnZhbHVlLT5w
dGhyZWFkSGFuZGxlKCksIHB0aHJlYWRIYW5kbGUpICYmICFpLT52YWx1ZS0+aGFzRXhpdGVkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gaS0+a2V5Owordm9pZCBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJT
dXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNvbnRleHQpCit7CisgICAgLy8g
VG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9tIHNpZ25hbCBoYW5kbGVycyBp
cyBhbGxvd2VkLgorICAgIFRocmVhZCogdGhyZWFkID0gdGFyZ2V0VGhyZWFkLmxvYWQoKTsKKwor
ICAgIGlmICh0aHJlYWQtPm1fc3VzcGVuZGVkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIHRoYXQg
aXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2lnc3VzcGVuZC4KKyAgICAgICAgLy8g
U28gdGhpcyBoYW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNob3VsZCBub3QgcHJvY2Vzcy4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2hlbiBzaWduYWwgY29tZXMsIGZpcnN0LCB0aGUgc3lzdGVt
IGNhbGxzIHNpZ25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNpZ3N1c3BlbmQgd2lsbCBiZSByZXN1
bWVkLiBTaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5cyBwcmVjZWRlcy4KKyAgICAgICAg
Ly8gU28sIHRoZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhhdCBzdXNwZW5kZWQuc3RvcmUodHJ1
ZSwgLi4uKSB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQuCisg
ICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkv
ZnVuY3Rpb25zL3NpZ3N1c3BlbmQuaHRtbAorICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
cmV0dXJuIDA7CisgICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29u
dGV4dF90Kj4odWNvbnRleHQpOworI2lmIENQVShQUEMpCisgICAgdGhyZWFkLT5tX3N1c3BlbmRl
ZE1hY2hpbmVDb250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOworI2Vs
c2UKKyAgICB0aHJlYWQtPm1fc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgPSB1c2VyQ29udGV4dC0+
dWNfbWNvbnRleHQ7CisjZW5kaWYKKworICAgIC8vIEFsbG93IHN1c3BlbmQgY2FsbGVyIHRvIHNl
ZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZC4KKyAgICAvLyBzZW1fcG9zdCBpcyBhc3lu
Yy1zaWduYWwtc2FmZSBmdW5jdGlvbi4gSXQgbWVhbnMgdGhhdCB3ZSBjYW4gY2FsbCB0aGlzIGZy
b20gYSBzaWduYWwgaGFuZGxlci4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29u
bGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0
XzAzCisgICAgLy8KKyAgICAvLyBBbmQgc2VtX3Bvc3QgZW1pdHMgbWVtb3J5IGJhcnJpZXIgdGhh
dCBlbnN1cmVzIHRoYXQgc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgaXMgY29ycmVjdGx5IHNhdmVk
LgorICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5
L2Jhc2VkZWZzL1YxX2NoYXAwNC5odG1sI3RhZ18wNF8xMQorICAgIHNlbV9wb3N0KCZ0aHJlYWQt
Pm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisKKyAgICAvLyBSZWFjaGluZyBoZXJlLCBT
aWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBoYW5kbGVyICh0aGlzIGlz
IGNvbmZpZ3VyZWQgYnkgc2lnYWN0aW9uJ3Mgc2FfbWFzaykuCisgICAgLy8gU28gYmVmb3JlIGNh
bGxpbmcgc2lnc3VzcGVuZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0byB0aGlzIHRocmVhZCBp
cyBkZWZlcnJlZC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGV4ZWN1dGVk
IHJlY3Vyc2l2ZWx5LgorICAgIHNpZ3NldF90IGJsb2NrZWRTaWduYWxTZXQ7CisgICAgc2lnZmls
bHNldCgmYmxvY2tlZFNpZ25hbFNldCk7CisgICAgc2lnZGVsc2V0KCZibG9ja2VkU2lnbmFsU2V0
LCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKKyAgICBzaWdzdXNwZW5kKCZibG9ja2VkU2lnbmFs
U2V0KTsKKworICAgIC8vIEFsbG93IHJlc3VtZSBjYWxsZXIgdG8gc2VlIHRoYXQgdGhpcyB0aHJl
YWQgaXMgcmVzdW1lZC4KKyAgICBzZW1fcG9zdCgmdGhyZWFkLT5tX3NlbWFwaG9yZUZvclN1c3Bl
bmRSZXN1bWUpOwogfQogCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBlc3RhYmxpc2hJZGVudGlm
aWVyRm9yUHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0aHJlYWRIYW5kbGUpCisjZW5k
aWYgLy8gIU9TKERBUldJTikKKwordm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBB
U1NFUlQoIWlkZW50aWZpZXJCeVB0aHJlYWRIYW5kbGUocHRocmVhZEhhbmRsZSkpOwotICAgIE11
dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBzdGF0aWMgVGhyZWFkSWRl
bnRpZmllciBpZGVudGlmaWVyQ291bnQgPSAxOwotICAgIHRocmVhZE1hcCgpLmFkZChpZGVudGlm
aWVyQ291bnQsIHN0ZDo6bWFrZV91bmlxdWU8UHRocmVhZFN0YXRlPihwdGhyZWFkSGFuZGxlKSk7
Ci0gICAgcmV0dXJuIGlkZW50aWZpZXJDb3VudCsrOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBpbml0aWFsaXplS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtdIHsK
KyAgICAgICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOworICAgICAgICBU
aHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAgIC8vIFN0cmluZ0ltcGw6OmVt
cHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2Fm
ZSBmYXNoaW9uLAorICAgICAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQg
ZnJvbSBoZXJlLgorICAgICAgICBTdHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICBpbml0aWFs
aXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKKyAg
ICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CisKKyNpZiAhT1MoREFSV0lOKQorICAgICAgICAvLyBT
aWduYWwgaGFuZGxlcnMgYXJlIHByb2Nlc3MgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uCisgICAgICAg
IC8vIEludGVudGlvbmFsbHkgYmxvY2sgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpbiB0aGUgaGFu
ZGxlci4KKyAgICAgICAgLy8gU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB3aWxsIGJlIGFsbG93ZWQg
aW4gdGhlIGhhbmRsZXIgYnkgc2lnc3VzcGVuZC4KKyAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBh
Y3Rpb247CisgICAgICAgIHNpZ2VtcHR5c2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAgIHNp
Z2FkZHNldCgmYWN0aW9uLnNhX21hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworCisgICAg
ICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBUaHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVz
dW1lOworICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsK
KyAgICAgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDApOwor
I2VuZGlmCisgICAgfSk7CiB9CiAKLXN0YXRpYyBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZUZvcklk
ZW50aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKFRocmVhZElkZW50aWZpZXIgaWQpCitzdGF0aWMg
dm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQogewotICAg
IHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpLT5wdGhyZWFkSGFuZGxlKCk7CisjaWYgIU9TKERB
UldJTikKKyAgICBzaWdzZXRfdCBtYXNrOworICAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKKyAgICBz
aWdhZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHB0aHJlYWRfc2ln
bWFzayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkKiB3
dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewotICAgIC8vIEJhbGFuY2VkIGJ5IC5s
ZWFrUHRyKCkgaW4gY3JlYXRlVGhyZWFkSW50ZXJuYWwuCisgICAgLy8gQmFsYW5jZWQgYnkgLmxl
YWtQdHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgogICAgIGF1dG8gaW52b2NhdGlvbiA9
IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRo
cmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CisKKyAgICBUaHJlYWRIb2xkZXI6Omlu
aXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0g
bnVsbHB0cjsKKwogICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZElu
dGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIq
KQorUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBl
bnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKIHsKLSAgICBhdXRvIGludm9jYXRp
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2lu
dCwgZGF0YSk7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVh
ZCgpKTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLmdldCgpLCBkYXRhKTsKICAgICBwdGhy
ZWFkX3QgdGhyZWFkSGFuZGxlOwogICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CiAgICAgcHRocmVh
ZF9hdHRyX2luaXQoJmF0dHIpOwpAQCAtMTg2LDE3ICsyMDcsMTggQEAgVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBk
YXRhLCBjb24KICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7CiAgICAgaWYgKGVycm9y
KSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5
IHBvaW50ICVwIHdpdGggZGF0YSAlcCIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24u
Z2V0KCkpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0
ZlRocmVhZEVudHJ5UG9pbnQuCiAgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJ
bnZvY2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7CiAgICAgVU5VU0VEX1BBUkFNKGxlYWtl
ZEludm9jYXRpb24pOwogCi0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFk
SGFuZGxlKHRocmVhZEhhbmRsZSk7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxl
KTsKKyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFk
SW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXpl
Q3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFW
RShQVEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcHRocmVhZF9zZXRuYW1lX25wKG5vcm1hbGl6ZVRo
cmVhZE5hbWUodGhyZWFkTmFtZSkpOwpAQCAtMjA1LDEyMyArMjI3LDIzNCBAQCB2b2lkIGluaXRp
YWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHRocmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVu
dGlmaWVyIGlkID0gaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0g
ICAgQVNTRVJUKGlkKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7
CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9Ci0g
ICAgCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQs
IGludCBkZWx0YSkKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQo
dGhyZWFkSUQpOwogCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFw
TXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRp
ZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVh
ZEhhbmRsZSk7Ci0gICAgfQordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKIAog
ICAgIGludCBwb2xpY3k7CiAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogCi0gICAgaWYg
KHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQor
ICAgIGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOwog
Ci0gICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBhcmFt
KTsKKyAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0obV9oYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsK
IH0KIAotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQpCitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgcHRocmVhZF90IHB0
aHJlYWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQorICAgIHB0aHJlYWRfdCBoYW5k
bGU7CiAgICAgewotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGxvY2sgYWNyb3NzIHRoZSBj
YWxsIHRvIGpvaW4sIHNpbmNlIHRoYXQgY2FuIGJsb2NrIG91ciB0aHJlYWQgYW5kIGNhdXNlIGRl
YWRsb2NrLgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0g
ICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2Nr
QWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAg
ICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKICAgICB9CiAKLSAgICBpbnQgam9pblJlc3VsdCA9IHB0
aHJlYWRfam9pbihwdGhyZWFkSGFuZGxlLCAwKTsKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJl
YWRfam9pbihoYW5kbGUsIDApOwogCiAgICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKLSAg
ICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFk
bG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1IoIlRo
cmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1
aXQiLCBtX2lkKTsKICAgICBlbHNlIGlmIChqb2luUmVzdWx0KQotICAgICAgICBMT0dfRVJST1Io
IlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBqb2luZWQuXG4iLCB0aHJlYWRJ
RCk7CisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRv
IGJlIGpvaW5lZC5cbiIsIG1faWQpOwogCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1h
cE11dGV4KCkpOwotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhy
ZWFkSUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgQVNTRVJUKHN0YXRlLT5qb2luYWJsZVN0
YXRlKCkgPT0gUHRocmVhZFN0YXRlOjpKb2luYWJsZSk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9
PSBKb2luYWJsZSk7CiAKLSAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgc28g
Y2xlYW4gdXAgYWZ0ZXIgaXQuCi0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAg
dGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJl
YWR5IGV4aXRlZCwgZG8gbm90aGluZy4KICAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQg
eWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBh
bHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxm
LgotICAgIGVsc2UKLSAgICAgICAgc3RhdGUtPmRpZEpvaW4oKTsKKyAgICBpZiAoIWhhc0V4aXRl
ZCgpKQorICAgICAgICBkaWRKb2luKCk7CiAKICAgICByZXR1cm4gam9pblJlc3VsdDsKIH0KIAot
dm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3ZvaWQgVGhyZWFk
OjpkZXRhY2goKQogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0KLSAgICBNdXRleExvY2tlciBs
b2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcHRocmVhZF90IHB0aHJlYWRIYW5kbGUgPSBw
dGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwot
ICAgIEFTU0VSVChwdGhyZWFkSGFuZGxlKTsKLQotICAgIGludCBkZXRhY2hSZXN1bHQgPSBwdGhy
ZWFkX2RldGFjaChwdGhyZWFkSGFuZGxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBpbnQgZGV0YWNoUmVzdWx0ID0gcHRocmVhZF9kZXRh
Y2gobV9oYW5kbGUpOwogICAgIGlmIChkZXRhY2hSZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigi
VGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4iLCB0aHJlYWRJ
RCk7Ci0KLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCkuZ2V0KHRocmVhZElE
KTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIGlmIChzdGF0ZS0+aGFzRXhpdGVkKCkpCi0gICAg
ICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7Ci0gICAgZWxzZQotICAgICAgICB0aHJl
YWRNYXAoKS5nZXQodGhyZWFkSUQpLT5kaWRCZWNvbWVEZXRhY2hlZCgpOworICAgICAgICBMT0df
RVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBkZXRhY2hlZFxuIiwg
bV9pZCk7CisKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hl
ZCgpOwogfQogCi12b2lkIHRocmVhZERpZEV4aXQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkK
K1RocmVhZCYgVGhyZWFkOjpjdXJyZW50KCkKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhy
ZWFkTWFwTXV0ZXgoKSk7Ci0gICAgUHRocmVhZFN0YXRlKiBzdGF0ZSA9IHRocmVhZE1hcCgpLmdl
dCh0aHJlYWRJRCk7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICAKLSAgICBzdGF0ZS0+ZGlkRXhp
dCgpOworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOwor
ICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CiAKLSAgICBpZiAo
c3RhdGUtPmpvaW5hYmxlU3RhdGUoKSAhPSBQdGhyZWFkU3RhdGU6OkpvaW5hYmxlKQotICAgICAg
ICB0aHJlYWRNYXAoKS5yZW1vdmUodGhyZWFkSUQpOworICAgIC8vIE5vdCBhIFdURi1jcmVhdGVk
IHRocmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgorICAgIFJl
ZlB0cjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgdGhyZWFk
LT5lc3RhYmxpc2gocHRocmVhZF9zZWxmKCkpOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6
ZSgqdGhyZWFkKTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0
ZWQoKTsKKyAgICByZXR1cm4gKnRocmVhZDsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50
VGhyZWFkKCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQogewotICAgIFRo
cmVhZElkZW50aWZpZXIgaWQgPSBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aWRlbnRpZmllcigpOwot
ICAgIGlmIChpZCkKLSAgICAgICAgcmV0dXJuIGlkOworICAgIHJldHVybiBjdXJyZW50KCkuaWQo
KTsKK30KIAotICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmll
ciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgotICAgIGlkID0gZXN0YWJsaXNoSWRlbnRpZmllckZv
clB0aHJlYWRIYW5kbGUocHRocmVhZF9zZWxmKCkpOwotICAgIFRocmVhZElkZW50aWZpZXJEYXRh
Ojppbml0aWFsaXplKGlkKTsKLSAgICByZXR1cm4gaWQ7Citib29sIFRocmVhZDo6c2lnbmFsKGlu
dCBzaWduYWxOdW1iZXIpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
ZXIobV9tdXRleCk7CisgICAgaW50IGVyck5vID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBzaWdu
YWxOdW1iZXIpOworICAgIHJldHVybiAhZXJyTm87IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNz
LgogfQogCi1ib29sIHNpZ25hbFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCBpbnQg
c2lnbmFsTnVtYmVyKQorYXV0byBUaHJlYWQ6OnN1c3BlbmQoKSAtPiBFeHBlY3RlZDx2b2lkLCBQ
bGF0Zm9ybVN1c3BlbmRFcnJvcj4KIHsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAg
ICBBU1NFUlQodGhyZWFkSUQpOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpZCgp
ICE9IGN1cnJlbnRUaHJlYWQoKSwgIldlIGRvIG5vdCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJl
bnQgdGhyZWFkIGl0c2VsZi4iKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisgICAga2Vybl9yZXR1cm5fdCByZXN1bHQg
PSB0aHJlYWRfc3VzcGVuZChtX3BsYXRmb3JtVGhyZWFkKTsKKyAgICBpZiAocmVzdWx0ICE9IEtF
Uk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7CisgICAg
cmV0dXJuIHsgfTsKKyNlbHNlCiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhy
ZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9y
SWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQo
cHRocmVhZEhhbmRsZSk7CisgICAgICAgIC8vIER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9yIHJl
c3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIGZyb20gdGhlIG90aGVyIHRocmVhZHMuCisgICAg
ICAgIC8vIFdlIHVzZSBnbG9iYWwgbG9jayBpbnN0ZWFkIG9mIHBlciB0aHJlYWQgbG9jay4KKyAg
ICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjYXNlLCB0aGVyZSBhcmUgdGhyZWFkcyBB
IGFuZCBCLgorICAgICAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1c3BlbmQgQiBhbmQgQiBhdHRl
bXB0IHRvIHN1c3BlbmQgQS4KKyAgICAgICAgLy8gQSBhbmQgQiBzZW5kIHNpZ25hbHMuIEFuZCBs
YXRlciwgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvIEEgYW5kIEIuCisgICAgICAgIC8vIEluIHRo
YXQgY2FzZSwgYm90aCB3aWxsIGJlIHN1c3BlbmRlZC4KKyAgICAgICAgV29yZExvY2tIb2xkZXIg
bG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRDb3VudCkg
eworICAgICAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRocmVhZF9z
aWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBzaWduYWwg
aGFuZGxlci4KKyAgICAgICAgICAgIC8vIEJ1dCBpdCBjYW4gYmUgdXNlZCBpbiBhIGZldyBwbGF0
Zm9ybXMsIGxpa2UgTGludXguCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB1c2UgVGhyZWFk
KiBzdG9yZWQgaW4gdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIHBhc3MgaXQgdG8gdGhlIHNp
Z25hbCBoYW5kbGVyLgorICAgICAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOworICAg
ICAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwgU2lnVGhyZWFkU3Vz
cGVuZFJlc3VtZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworICAgICAgICAgICAgc2VtX3dhaXQoJm1fc2Vt
YXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIg
ZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwg
dGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMgZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVkLnN0
b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAgICAg
ICsrbV9zdXNwZW5kQ291bnQ7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorI2VuZGlmCit9
CisKK3ZvaWQgVGhyZWFkOjpyZXN1bWUoKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyAgICB0aHJlYWRfcmVzdW1l
KG1fcGxhdGZvcm1UaHJlYWQpOworI2Vsc2UKKyAgICB7CisgICAgICAgIC8vIER1cmluZyByZXN1
bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3Ro
ZXIgdGhyZWFkcy4KKyAgICAgICAgV29yZExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRM
b2NrKTsKKyAgICAgICAgaWYgKG1fc3VzcGVuZENvdW50ID09IDEpIHsKKyAgICAgICAgICAgIC8v
IFdoZW4gYWxsb3dpbmcgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpbnRlcnJ1cHQgaW4gdGhlIHNp
Z25hbCBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQgYW5kIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgaXMg
YWN0dWFsbHkgaXNzdWVkLAorICAgICAgICAgICAgLy8gdGhlIHNpZ25hbCBoYW5kbGVyIGl0c2Vs
ZiB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWluLgorICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHNl
dmVyYWwgd2F5cyB0byBkaXN0aW5ndWlzaCB0aGUgaGFuZGxlciBpbnZvY2F0aW9uIGZvciBzdXNw
ZW5kIGFuZCByZXN1bWUuCisgICAgICAgICAgICAvLyAxLiBVc2UgZGlmZmVyZW50IHNpZ25hbCBu
dW1iZXJzLiBBbmQgY2hlY2sgdGhlIHNpZ25hbCBudW1iZXIgaW4gdGhlIGhhbmRsZXIuCisgICAg
ICAgICAgICAvLyAyLiBVc2Ugc29tZSBhcmd1bWVudHMgdG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBh
bmQgcmVzdW1lIGluIHRoZSBoYW5kbGVyLiBJZiBwdGhyZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2Vk
LCB3ZSBjYW4gdGFrZSB0aGlzLgorICAgICAgICAgICAgLy8gMy4gVXNlIHRocmVhZCBsb2NhbCBz
dG9yYWdlIHdpdGggYXRvbWljIHZhcmlhYmxlcyBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuCisgICAg
ICAgICAgICAvLyBJbiB0aGlzIGltcGxlbWVudGFpdG9uLCB3ZSB0YWtlICgzKS4gc3VzcGVuZGVk
IGZsYWcgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBpdC4KKyAgICAgICAgICAgIHRhcmdldFRocmVh
ZC5zdG9yZSh0aGlzKTsKKyAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwobV9oYW5kbGUsIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHNlbV93YWl0KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworICAg
ICAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBp
cyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUu
CisgICAgICAgICAgICBtX3N1c3BlbmRlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJf
cmVsZWFzZSk7CisgICAgICAgIH0KKyAgICAgICAgLS1tX3N1c3BlbmRDb3VudDsKKyAgICB9Cisj
ZW5kaWYKK30KKworc2l6ZV90IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJz
JiByZWdpc3RlcnMpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIo
bV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorI2lmIENQVShYODYpCisgICAgdW5zaWduZWQgdXNl
ckNvdW50ID0gc2l6ZW9mKHJlZ2lzdGVycykgLyBzaXplb2YoaW50KTsKKyAgICB0aHJlYWRfc3Rh
dGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoWDg2XzY0
KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHg4Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0geDg2X1RIUkVBRF9TVEFURTY0OworI2Vs
aWYgQ1BVKFBQQykKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFX0NP
VU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRF
OworI2VsaWYgQ1BVKFBQQzY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURf
U1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RI
UkVBRF9TVEFURTY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBB
Uk1fVEhSRUFEX1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSBBUk1fVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHVuc2lnbmVkIHVzZXJD
b3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9y
X3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0OworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFy
Y2hpdGVjdHVyZQorI2VuZGlmCisKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9n
ZXRfc3RhdGUobV9wbGF0Zm9ybVRocmVhZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lz
dGVycywgJnVzZXJDb3VudCk7CisgICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAg
ICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVzZSB0
aHJlYWRfZ2V0X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFibHkg
dGhlIHJlc3VsdCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3VwcG9y
dGVkLiIsIHJlc3VsdCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiB1c2Vy
Q291bnQgKiBzaXplb2YodWludHB0cl90KTsKKyNlbGlmIChPUyhGUkVFQlNEKSB8fCBkZWZpbmVk
KF9fR0xJQkNfXykpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBD
UFUoQVJNNjQpIHx8IENQVShNSVBTKSkKKyAgICByZWdpc3RlcnMgPSBtX3N1c3BlbmRlZE1hY2hp
bmVDb250ZXh0OworICAgIHJldHVybiBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpOworI2VsaWYg
T1MoT1BFTkJTRCkKKyAgICAvLyBodHRwOi8vbWFuLm9wZW5ic2Qub3JnL3B0aHJlYWRfc3RhY2tz
ZWdfbnAuMworICAgIHN0YWNrX3Qgc3M7CisgICAgaW50IHJjID0gcHRocmVhZF9zdGFja3NlZ19u
cChtX2hhbmRsZSwgJnNzKTsKKyAgICByZWdpc3RlcnMuc3RhY2tQb2ludGVyID0gc3Muc3Nfc3A7
CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZTsKKyAg
ICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlKTsKKyNpZiBIQVZFKFBUSFJFQURfTlBfSCkg
fHwgT1MoTkVUQlNEKQorICAgIC8vIGUuZy4gb24gRnJlZUJTRCA1LjQsIG5ldW5kb3JmQGtkZS5v
cmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKG1faGFuZGxlLCAmYXR0cmlidXRlKTsKKyNlbHNl
CisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJ
WCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKKyAgICBwdGhyZWFk
X2dldGF0dHJfbnAobV9oYW5kbGUsICZhdHRyaWJ1dGUpOworI2VuZGlmCisKKyAgICB2b2lkKiBz
dGFja0Jhc2UgPSAwOworICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAgIGludCByYyA9IHB0
aHJlYWRfYXR0cl9nZXRzdGFjaygmYXR0cmlidXRlLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJjLCAhcmMpOworICAgIEFTU0VSVChzdGFja0Jhc2UpOworICAg
IHJlZ2lzdGVycy5zdGFja1BvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSAr
IHN0YWNrU2l6ZTsKKworICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95KCZhdHRyaWJ1dGUpOworCisg
ICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIG1fZGlk
RXhpdCA9IHRydWU7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2gocHRocmVhZF90IGhhbmRs
ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsK
KyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBpZiAoIW1faWQpIHsKKyAgICAgICAgc3RhdGlj
IHN0ZDo6YXRvbWljPFRocmVhZElkZW50aWZpZXI+IHByb3ZpZGVyIHsgMCB9OworICAgICAgICBt
X2lkID0gKytwcm92aWRlcjsKKyNpZiBPUyhEQVJXSU4pCisgICAgICAgIG1fcGxhdGZvcm1UaHJl
YWQgPSBwdGhyZWFkX21hY2hfdGhyZWFkX25wKGhhbmRsZSk7CisjZW5kaWYKICAgICB9Ci0gICAg
aW50IGVyck5vID0gcHRocmVhZF9raWxsKHB0aHJlYWRIYW5kbGUsIHNpZ25hbE51bWJlcik7Ci0g
ICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9CiAKIE11dGV4
OjpNdXRleCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwIGIv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAppbmRleCA1NGI0M2VmZWYzNWNkNjYzMmE3
MDA4MTUwN2E1YjM3OTlkZWZiNmZiLi41ZjljMDAyNDNkZmQ4N2YzNDM3ZmUwNDk5ZWYwNzAxYzI5
MzQ4MTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKQEAgLTk0LDYgKzk0LDcgQEAKIAogI2lu
Y2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24u
aCIKKyNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjaW5j
bHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMTA5LDYg
KzExMCwxNCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorVGhyZWFkOjpUaHJlYWQoKQoreworfQor
CitUaHJlYWQ6On5UaHJlYWQoKQoreworfQorCiAvLyBNU19WQ19FWENFUFRJT04sIFRIUkVBRE5B
TUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9tIDxodHRwOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4uCiBzdGF0aWMg
Y29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAtMTIxLDcgKzEz
MCw3IEBAIHR5cGVkZWYgc3RydWN0IHRhZ1RIUkVBRE5BTUVfSU5GTyB7CiB9IFRIUkVBRE5BTUVf
SU5GTzsKICNwcmFnbWEgcGFjayhwb3ApCiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJ
bnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiB7CiAjaWYg
Q09NUElMRVIoTUlOR1cpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aHJlYWQgbmFtZSBzZXR0
aW5nIHdpdGggTWluZ1cuCkBAIC0xMjksNyArMTM4LDcgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICNlbHNlCiAgICAgVEhS
RUFETkFNRV9JTkZPIGluZm87CiAgICAgaW5mby5kd1R5cGUgPSAweDEwMDA7Ci0gICAgaW5mby5z
ek5hbWUgPSBub3JtYWxpemVUaHJlYWROYW1lKHN6VGhyZWFkTmFtZSk7CisgICAgaW5mby5zek5h
bWUgPSBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoc3pUaHJlYWROYW1lKTsKICAgICBpbmZv
LmR3VGhyZWFkSUQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICAgICBpbmZvLmR3RmxhZ3MgPSAw
OwogCkBAIC0xNDAsNzAgKzE0OSwzOSBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogc3pUaHJlYWROYW1lKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBNdXRl
eCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4g
bXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCiB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmco
KQogewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQ7Ci0gICAgCi0gICAgaWYgKGlzSW5p
dGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwot
Ci0gICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0cmlu
Z0ltcGw6OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEg
dGhyZWFkc2FmZSBmYXNoaW9uLAotICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFs
aXplZCBmcm9tIGhlcmUuCi0gICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRNYXBN
dXRleCgpOwotICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICB3dGZU
aHJlYWREYXRhKCk7Ci0gICAgaW5pdGlhbGl6ZURhdGVzKCk7Ci19Ci0KLXN0YXRpYyBIYXNoTWFw
PERXT1JELCBIQU5ETEU+JiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPERXT1JELCBIQU5ETEU+PiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0
aWFsaXplS2V5LCBbXSB7CisgICAgICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxp
emUoKTsKKyAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpOworICAgICAgICAv
LyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmlu
ZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKKyAgICAgICAgLy8gc28gZW5zdXJlIGl0IGhhcyBi
ZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsK
KyAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOworICAgICAgICB3dGZU
aHJlYWREYXRhKCk7CisgICAgICAgIGluaXRpYWxpemVEYXRlcygpOworICAgIH0pOwogfQogCi1z
dGF0aWMgdm9pZCBzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmllcihEV09SRCB0aHJlYWRJRCwg
SEFORExFIHRocmVhZEhhbmRsZSkKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFk
RW50cnlQb2ludCh2b2lkKiBwYXJhbSkKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
TWFwTXV0ZXgoKSk7Ci0gICAgQVNTRVJUKCF0aHJlYWRNYXAoKS5jb250YWlucyh0aHJlYWRJRCkp
OwotICAgIHRocmVhZE1hcCgpLmFkZCh0aHJlYWRJRCwgdGhyZWFkSGFuZGxlKTsKLX0KKyAgICAv
LyBCYWxhbmNlZCBieSAubGVha1B0cigpIGluIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwuCisgICAg
YXV0byBpbnZvY2F0aW9uID0gc3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlv
bj4oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKIAotc3Rh
dGljIEhBTkRMRSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQp
Ci17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHJldHVy
biB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQorICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSgq
aW52b2NhdGlvbi0+dGhyZWFkKTsKKyAgICBpbnZvY2F0aW9uLT50aHJlYWQgPSBudWxscHRyOwog
Ci1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRp
ZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0g
ICAgQVNTRVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgdGhyZWFkTWFwKCkucmVt
b3ZlKGlkKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRyeVBv
aW50KHZvaWQqIHBhcmFtKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24+IGludm9jYXRpb24oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
Kj4ocGFyYW0pKTsKICAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0aW9uLT5kYXRhKTsK
LQogICAgIHJldHVybiAwOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRo
cmVhZE5hbWUpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKFRocmVhZEZ1
bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7
CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAgICAg
dW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7CiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCA9IDA7Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRhdGEpOworICAgIGF1dG8gaW52b2NhdGlv
biA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihlbnRyeVBvaW50
LCB0aHJlYWQucHRyKCksIGRhdGEpOwogICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSByZWludGVy
cHJldF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwgd3RmVGhyZWFkRW50cnlQb2lu
dCwgaW52b2NhdGlvbi5nZXQoKSwgMCwgJnRocmVhZElkZW50aWZpZXIpKTsKICAgICBpZiAoIXRo
cmVhZEhhbmRsZSkgewogI2lmICFIQVZFKEVSUk5PX0gpCkBAIC0yMTksNTUgKzE5NywxMjEgQEAg
VGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURfUEFSQU0obGVha2VkSW52b2NhdGlv
bik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KHRocmVh
ZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJZGVudGlmaWVyKHRocmVhZElk
ZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1cm4gdGhyZWFkSUQ7CisgICAgdGhy
ZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVudGlmaWVyKTsKKyAgICByZXR1
cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZp
ZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK3ZvaWQgVGhyZWFkOjpjaGFuZ2VQcmlvcml0eShpbnQg
ZGVsdGEpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIEhBTkRMRSB0aHJlYWRIYW5k
bGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAoIXRocmVh
ZEhhbmRsZSkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IGRvZXMgbm90
IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCIsIHRocmVhZElEKTsKLQotICAgIFNldFRo
cmVhZFByaW9yaXR5KHRocmVhZEhhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1BTCArIGRlbHRh
KTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAg
ICBTZXRUaHJlYWRQcmlvcml0eShtX2hhbmRsZSwgVEhSRUFEX1BSSU9SSVRZX05PUk1BTCArIGRl
bHRhKTsKIH0KIAotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSUQpCitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgQVNTRVJU
KHRocmVhZElEKTsKLSAgICAKLSAgICBIQU5ETEUgdGhyZWFkSGFuZGxlID0gdGhyZWFkSGFuZGxl
Rm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYgKCF0aHJlYWRIYW5kbGUpCi0gICAgICAg
IExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSBkaWQgbm90IGNvcnJlc3BvbmQgdG8gYW4g
YWN0aXZlIHRocmVhZCB3aGVuIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwotIAotICAgIERX
T1JEIGpvaW5SZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZEhhbmRsZSwgSU5GSU5J
VEUpOworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2Nr
PHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7
CisgICAgfQorCisgICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFu
ZGxlLCBJTkZJTklURSk7CiAgICAgaWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAg
ICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxv
Y2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElEKTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJl
YWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0
IiwgbV9pZCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211
dGV4KTsKKyAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgpID09IEpvaW5hYmxlKTsKIAotICAgIENs
b3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlm
aWVyKHRocmVhZElEKTsKKyAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8g
bm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBj
bGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBv
biBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFz
RXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0Owog
fQogCi12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBU
aHJlYWQ6OmRldGFjaCgpCit7CisgICAgLy8gV2UgZm9sbG93IHRoZSBwdGhyZWFkIHNlbWFudGlj
czogZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNhbGxlZCwKKyAgICAvLyB3ZSBjYW4gc3RpbGwg
cGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgb250byB0aGUgdGhyZWFkLiBGb3IgZXhhbXBsZSwK
KyAgICAvLyB3ZSBjYW4gZG8gcHRocmVhZF9raWxsIGZvciB0aGUgZGV0YWNoZWQgdGhyZWFkLiBU
aGUgcHJvYmxlbSBpbiBXaW5kb3dzCisgICAgLy8gaXMgdGhhdCBjbG9zaW5nIEhBTkRMRSBsb3Nl
cyB0aGUgd2F5IHRvIGRvIHN1Y2ggb3BlcmF0aW9ucy4KKyAgICAvLyBUbyBkbyBzbywgd2UgZG8g
bm90aGluZyBoZXJlIGluIFdpbmRvd3MuIE9yaWdpbmFsIGRldGFjaCdzIHB1cnBvc2UsCisgICAg
Ly8gcmVsZWFzaW5nIHRocmVhZCByZXNvdXJjZSB3aGVuIHRoZSB0aHJlYWQgZXhpdHMsIHdpbGwg
YmUgYWNoaWV2ZWQgYnkKKyAgICAvLyBGbHNDYWxsYmFjayBhdXRvbWF0aWNhbGx5LiBGbHNDYWxs
YmFjayB3aWxsIGNhbGwgQ2xvc2VIYW5kbGUgdG8gY2xlYW4gdXAKKyAgICAvLyByZXNvdXJjZS4g
U28gaW4gdGhpcyBmdW5jdGlvbiwgd2UganVzdCBtYXJrIHRoZSB0aHJlYWQgYXMgZGV0YWNoZWQg
dG8KKyAgICAvLyBhdm9pZCBjYWxsaW5nIHdhaXRGb3JDb21wbGV0aW9uIGZvciB0aGlzIHRocmVh
ZC4KKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAg
ICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOworfQorCith
dXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVy
cm9yPgoreworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShpZCgpICE9IGN1cnJlbnRU
aHJlYWQoKSwgIldlIGRvIG5vdCBzdXBwb3J0IHN1c3BlbmQgdGhlIGN1cnJlbnQgdGhyZWFkIGl0
c2VsZi4iKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4
KTsKKyAgICBEV09SRCByZXN1bHQgPSBTdXNwZW5kVGhyZWFkKG1faGFuZGxlKTsKKyAgICBpZiAo
cmVzdWx0ICE9IChEV09SRCktMSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQocmVzdWx0KTsKK30KKworLy8gRHVyaW5nIHJlc3VtZSwgc3VzcGVuZCBvciBy
ZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgordm9p
ZCBUaHJlYWQ6OnJlc3VtZSgpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBs
b2NrZXIobV9tdXRleCk7CisgICAgUmVzdW1lVGhyZWFkKG1faGFuZGxlKTsKK30KKworc2l6ZV90
IFRocmVhZDo6Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCiB7Ci0g
ICAgQVNTRVJUKHRocmVhZElEKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyAgICByZWdpc3RlcnMuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9JTlRF
R0VSIHwgQ09OVEVYVF9DT05UUk9MOworICAgIEdldFRocmVhZENvbnRleHQobV9oYW5kbGUsICZy
ZWdpc3RlcnMpOworICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7Cit9CisKK1RocmVhZCYgVGhy
ZWFkOjpjdXJyZW50KCkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6
OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgp
OworCisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlz
IG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYo
Km5ldyBUaHJlYWQoKSk7CisKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGJvb2wgaXNTdWNjZXNz
ZnVsID0gRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJlbnRUaHJl
YWQoKSwgR2V0Q3VycmVudFByb2Nlc3MoKSwgJmhhbmRsZSwgMCwgRkFMU0UsIERVUExJQ0FURV9T
QU1FX0FDQ0VTUyk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVsKTsKIAotICAgIEhB
TkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsK
LSAgICBpZiAodGhyZWFkSGFuZGxlKQotICAgICAgICBDbG9zZUhhbmRsZSh0aHJlYWRIYW5kbGUp
OwotICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisgICAgdGhy
ZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7CisgICAgVGhyZWFkSG9sZGVyOjpp
bml0aWFsaXplKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJuIHRocmVhZC5nZXQoKTsKIH0KIAot
VGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK1RocmVhZElkZW50aWZpZXIgVGhyZWFk
OjpjdXJyZW50SUQoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVy
PihHZXRDdXJyZW50VGhyZWFkSWQoKSk7CiB9CiAKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBt
X2RpZEV4aXQgPSB0cnVlOworICAgIC8vIEl0IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxs
YmFjayB3aWxsIGJlIGNhbGxlZCBldmVuIGJlZm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRs
ZXMuCisgICAgLy8gVGhpcyBlYXNpbHkgZW5zdXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291
cmNlcyBhcmUgYXV0b21hdGljYWxseSBjbG9zZWQuCisgICAgaWYgKG1faGFuZGxlKQorICAgICAg
ICBDbG9zZUhhbmRsZShtX2hhbmRsZSk7Cit9CisKK3ZvaWQgVGhyZWFkOjplc3RhYmxpc2goSEFO
RExFIGhhbmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2hhbmRsZSA9IGhhbmRs
ZTsKKyAgICBtX2lkID0gdGhyZWFkSUQ7Cit9CisKIE11dGV4OjpNdXRleCgpCiB7CiAgICAgbV9t
dXRleC5tX3JlY3Vyc2lvbkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dv
cmtRdWV1ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IGIyYTBhNzlm
NGFiNWFhYzI4OWIxNjlmOTJiYmMxYTgwNTg1MmNhMzIuLjk3MzBmY2YwZjA5MjFmZGVkOTBmODlm
MTI5MGU3NzQ5MGI1Mzk3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2
b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogCiAgICAgICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh0aHJlYWRDb3VudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIG1fd29ya2Vycy5h
cHBlbmQoY3JlYXRlVGhyZWFkKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQb29sIFdvcmtlciAldSIs
IGkpLnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgbV93b3JrZXJzLmFw
cGVuZChUaHJlYWQ6OmNyZWF0ZShTdHJpbmc6OmZvcm1hdCgiVGhyZWFkUG9vbCBXb3JrZXIgJXUi
LCBpKS51dGY4KCkuZGF0YSgpLCBbdGhpc10gewogICAgICAgICAgICAgICAgICAgICB0aHJlYWRC
b2R5KCk7CiAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgfQpAQCAtMTE0LDcgKzEx
NCw3IEBAIHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMs
IGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAgICAgICAgIENvbmRpdGlvbiBtX2NvbmRp
dGlvbjsKICAgICAgICAgRGVxdWU8Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPio+IG1fcXVl
dWU7CiAKLSAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fd29ya2VyczsKKyAgICAg
ICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBtX3dvcmtlcnM7CiAgICAgfTsKIAogICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8VGhyZWFkUG9vbD4gdGhyZWFkUG9vbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgK
aW5kZXggYTQ3ZjIxZTIwZDMxYmM4YmY3MzE4ZjQxYjk1N2FiMzY2YzE5MTUwMy4uNzYzNDVjMDY5
MzE2NGY2OGNhNGIxYzY2NDQ4NGEyNzNjYzZlOGJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTEwMyw3
ICsxMDMsNyBAQCBjbGFzcyBXb3JrUXVldWUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25EaXNwYXRj
aGVyIHsKIAogICAgIEhBTkRMRSBtX3RpbWVyUXVldWU7CiAjZWxpZiBVU0UoR0xJQl9FVkVOVF9M
T09QKSB8fCBVU0UoR0VORVJJQ19FVkVOVF9MT09QKQotICAgIFRocmVhZElkZW50aWZpZXIgbV93
b3JrUXVldWVUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV93b3JrUXVldWVUaHJlYWQ7CiAg
ICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXg7CiAgICAgQ29uZGl0aW9u
IG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgUnVuTG9vcCogbV9ydW5Mb29wOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwIGIvU291
cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCmluZGV4IDFhNzIxOWFkMjU5ZWQ3
NTk3MmE1YTQ1OGM1YzQ4NDk3YTM4OGU0ZDMuLjU5ZWUxZjg1YjQzNWNlMWE3MmY1MDUwZjRkZjYy
ZWZjZmJiYzgyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNv
Y29hLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKQEAg
LTQ5LDE1ICs0OSwxNSBAQCBzdGF0aWMgZGlzcGF0Y2hfcW9zX2NsYXNzX3QgZGlzcGF0Y2hRT1ND
bGFzcyhXb3JrUXVldWU6OlFPUyBxb3MpCiB7CiAgICAgc3dpdGNoIChxb3MpIHsKICAgICBjYXNl
IFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmU6Ci0gICAgICAgIHJldHVybiBhZGp1c3Rl
ZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKTsKKyAgICAgICAgcmV0dXJuIFRo
cmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSk7CiAgICAg
Y2FzZSBXb3JrUXVldWU6OlFPUzo6VXNlckluaXRpYXRlZDoKLSAgICAgICAgcmV0dXJuIGFkanVz
dGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEKTsKKyAgICAgICAgcmV0dXJuIFRo
cmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOwogICAgIGNh
c2UgV29ya1F1ZXVlOjpRT1M6OkRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0Ns
YXNzKFFPU19DTEFTU19ERUZBVUxUKTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRR
T1NDbGFzcyhRT1NfQ0xBU1NfREVGQVVMVCk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXRp
bGl0eToKLSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VUSUxJVFkp
OworICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VVElM
SVRZKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kOgotICAgICAgICByZXR1
cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dST1VORCk7CisgICAgICAgIHJldHVy
biBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX0JBQ0tHUk9VTkQpOwogICAgIH0K
IH0KICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdl
bmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApp
bmRleCA5MzRhMzhjYmJlNjRiYmZmYWViNGQzN2RmMWI4ZDk5NTJiODg1MzQ0Li5kYTg3NWQxZmEw
NGNlZjUyNGIwZGMxODZiMzlhNDYyZDY4MDQ0NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dlbmVy
aWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIHZvaWQgV29ya1F1ZXVl
OjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSwgVHlwZSwgUU9TKQogewogICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7Ci0g
ICAgbV93b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVUaHJlYWQobmFtZSwgW3RoaXNdIHsKKyAgICBt
X3dvcmtRdWV1ZVRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKG5hbWUsIFt0aGlzXSB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25k
aXRpb25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVuTG9vcDo6Y3VycmVudCgp
OwpAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
ICAgICBpZiAobV9ydW5Mb29wKQogICAgICAgICBtX3J1bkxvb3AtPnN0b3AoKTsKICAgICBpZiAo
bV93b3JrUXVldWVUaHJlYWQpIHsKLSAgICAgICAgZGV0YWNoVGhyZWFkKG1fd29ya1F1ZXVlVGhy
ZWFkKTsKLSAgICAgICAgbV93b3JrUXVldWVUaHJlYWQgPSAwOworICAgICAgICBtX3dvcmtRdWV1
ZVRocmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gbnVsbHB0cjsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNz
dXJlSGFuZGxlckxpbnV4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJl
SGFuZGxlckxpbnV4LmNwcAppbmRleCBiMjk0MTk0NDRlNzQyNzM2YTY3ZGMwYzFhYTg1MWRlYzNh
ZTU4N2U0Li5mZmQ0MDA4NTViODI5M2E4YjVhM2MzYWViMjNhYjc3YWFmNWE3ZWU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51eC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTGludXguY3Bw
CkBAIC0xMTksNyArMTE5LDEwIEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6RXZlbnRGRFBvbGxl
cjo6RXZlbnRGRFBvbGxlcihpbnQgZmQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoCiAgICAgfSwgdGhp
cywgbnVsbHB0cik7CiAgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBudWxscHRy
KTsKICNlbHNlCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgiV1RGOiBNZW1vcnlQcmVz
c3VyZUhhbmRsZXIiLCBbdGhpc10geyByZWFkQW5kTm90aWZ5KCk7IH0KKyAgICBtX3RocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKCJXVEY6IE1lbW9yeVByZXNzdXJlSGFuZGxlciIsCisgICAgICAgIFt0
aGlzXSB7CisgICAgICAgICAgICByZWFkQW5kTm90aWZ5KCk7CisgICAgICAgIH0pOwogI2VuZGlm
CiB9CiAKQEAgLTEyOSw3ICsxMzIsNyBAQCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OkV2ZW50RkRQ
b2xsZXI6On5FdmVudEZEUG9sbGVyKCkKICNpZiBVU0UoR0xJQikKICAgICBnX3NvdXJjZV9kZXN0
cm95KG1fc291cmNlLmdldCgpKTsKICNlbHNlCi0gICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkSUQp
OworICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vTWFp
blRocmVhZFdpbi5jcHAKaW5kZXggZjMyNGU4YjYxZGQ0MWZhMDU2MDg2M2I2YzU4MTkxMGY4Njdk
MzZlYi4uYTY0NzNkMDdiNjdlYWNjODZiZTdhNGViNjk3NDk4OTNlYzYxNDk3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIGluaXRpYWxp
emVNYWluVGhyZWFkUGxhdGZvcm0oKQogICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VE
RUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIDAsIDApOwogICAgIHRocmVhZGluZ0ZpcmVkTWVz
c2FnZSA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZVcoTCJjb20uYXBwbGUuV2ViS2l0Lk1haW5UaHJl
YWRGaXJlZCIpOwogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCgiTWFpbiBU
aHJlYWQiKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoIk1h
aW4gVGhyZWFkIik7CiB9CiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRo
cmVhZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuY3BwCmluZGV4IDg3NDc2NDM4Y2FlNjVhNjM4N2Q5MDFhNzUyODgxNWVjOTU0
N2YyMzIuLjljZDNkYjRkMWJjMTRhMzYxNzMyMWFiMDA1YTAxOTYyMDUyNzgyNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwCkBAIC01Niw3ICs1Niw3IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKElEQkJhY2tpbmdTdG9y
ZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikKICAgICA6IG1fYmFja2luZ1N0b3Jl
VGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCiB7CiAgICAgTG9ja2VyPExvY2s+IGxv
Y2tlcihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0gY3Jl
YXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWRE
YXRhYmFzZSBTZXJ2ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNlcnZl
cjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsK
IH0KIAogSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9y
eVBhdGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikK
QEAgLTY2LDcgKzY2LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRh
YmFzZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmEKICAgICBMT0coSW5kZXhl
ZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aC51dGY4KCkuZGF0YSgpKTsKIAogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRo
cmVhZENyZWF0aW9uTG9jayk7Ci0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2
ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7
CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFk
RW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9CiAKIHZvaWQgSURCU2Vy
dmVyOjpyZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oCmluZGV4IDI1NmNkNTA3ZTZlNmQ3ZjY1NmVlY2UwYzExOTg5NDhmZDkyM2RhMWQuLjkz
NGExZDE3NDUyOTA4NDI4YTNhZTZlMGVkN2U1MTBhOWE5Y2E2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTEyNSw3
ICsxMjUsNyBAQCBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+
IHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SURCQ29ubmVjdGlvblRvQ2xpZW50Pj4g
bV9jb25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlmaWVyLCBSZWZQ
dHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwOwogCi0gICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhy
ZWFkIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jazsK
ICAgICBMb2NrIG1fbWFpblRocmVhZFJlcGx5TG9jazsKICAgICBib29sIG1fbWFpblRocmVhZFJl
cGx5U2NoZWR1bGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKaW5kZXggMjkyZjA1YjhjZDUwNmUyMjlh
ZTZiOGJkODYyOWMwOTU0ZDE4NDU5Yi4uN2NmN2FmOGZlYTJlMWU2N2Q1MjM3Yzg3MWEwMTViM2M0
OTAwYTI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3lu
Y0F1ZGlvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
c3luY0F1ZGlvRGVjb2Rlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgQXN5bmNBdWRpb0RlY29kZXI6
OkFzeW5jQXVkaW9EZWNvZGVyKCkKIHsKICAgICAvLyBTdGFydCB3b3JrZXIgdGhyZWFkLgogICAg
IExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkSUQg
PSBjcmVhdGVUaHJlYWQoQXN5bmNBdWRpb0RlY29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVk
aW8gRGVjb2RlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoQXN5bmNBdWRpb0Rl
Y29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVjb2RlciIpOwogfQogCiBBc3luY0F1
ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKQEAgLTQ3LDggKzQ3LDggQEAgQXN5bmNB
dWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCiAgICAgbV9xdWV1ZS5raWxsKCk7CiAg
ICAgCiAgICAgLy8gU3RvcCB0aHJlYWQuCi0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90
aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2b2lkIEFzeW5jQXVkaW9E
ZWNvZGVyOjpkZWNvZGVBc3luYyhSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBmbG9hdCBz
YW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ss
IFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCkBAIC03Miw3ICs3
Miw3IEBAIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3AoKQogICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogCiAgICAgewotICAgICAgICAvLyBXYWl0IGZvciB1bnRpbCB3ZSBoYXZl
IG1fdGhyZWFkSUQgZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4gbG9vcC4KKyAg
ICAgICAgLy8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVhZCBlc3RhYmxpc2hlZCBiZWZv
cmUgc3RhcnRpbmcgdGhlIHJ1biBsb29wLgogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAppbmRleCBiYjVjNWUzMzdiNWVjZjFmOGU2
MTc1M2EyOWY4ZDBmOTcxNDE1NTNkLi5mMTI1MTBkMTk3YzNkZjk2Y2MwNTY4NTQ2Y2JjM2ZiNDZl
YWFhOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5j
QXVkaW9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3lu
Y0F1ZGlvRGVjb2Rlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEFzeW5jQXVkaW9EZWNvZGVy
IHsKICAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKICAgICB2
b2lkIHJ1bkxvb3AoKTsKIAotICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIExvY2sgbV90aHJlYWRDcmVhdGlvbk11
dGV4OwogICAgIE1lc3NhZ2VRdWV1ZTxEZWNvZGluZ1Rhc2s+IG1fcXVldWU7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCmluZGV4IDUwNTIzMDQxOTdjZGVkZGU0N2ZkY2JiOTEyZWM0
NzQwNTU3OTc0MjguLmU3ZDU2N2RmZWFkNDQyYzM5NmFmMGY3MDUxMDk3M2ZmZTE0OGFiMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgY29uc3Qgc2l6
ZV90IHJlbmRlclF1YW50dW1TaXplID0gMTI4OwogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
OjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBBdWRp
b0J1ZmZlciogcmVuZGVyVGFyZ2V0KQogICAgIDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4
dCwgcmVuZGVyVGFyZ2V0LT5zYW1wbGVSYXRlKCkpCiAgICAgLCBtX3JlbmRlclRhcmdldChyZW5k
ZXJUYXJnZXQpCi0gICAgLCBtX3JlbmRlclRocmVhZCgwKQorICAgICwgbV9yZW5kZXJUaHJlYWQo
bnVsbHB0cikKICAgICAsIG1fc3RhcnRlZFJlbmRlcmluZyhmYWxzZSkKIHsKICAgICBtX3JlbmRl
ckJ1cyA9IEF1ZGlvQnVzOjpjcmVhdGUocmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCks
IHJlbmRlclF1YW50dW1TaXplKTsKQEAgLTY2LDggKzY2LDggQEAgdm9pZCBPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX3JlbmRlclRocmVhZCkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3Jl
bmRlclRocmVhZCk7Ci0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gMDsKKyAgICAgICAgbV9yZW5k
ZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0g
bnVsbHB0cjsKICAgICB9CiAKICAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwpAQCAtODMs
NyArODMsNyBAQCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJp
bmcoKQogICAgIGlmICghbV9zdGFydGVkUmVuZGVyaW5nKSB7CiAgICAgICAgIG1fc3RhcnRlZFJl
bmRlcmluZyA9IHRydWU7CiAgICAgICAgIHJlZigpOyAvLyBTZWUgY29ycmVzcG9uZGluZyBkZXJl
ZigpIGNhbGwgaW4gbm90aWZ5Q29tcGxldGVEaXNwYXRjaCgpLgotICAgICAgICBtX3JlbmRlclRo
cmVhZCA9IGNyZWF0ZVRocmVhZChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om9mZmxpbmVS
ZW5kZXJFbnRyeSwgdGhpcywgIm9mZmxpbmUgcmVuZGVyZXIiKTsKKyAgICAgICAgbV9yZW5kZXJU
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om9mZmxp
bmVSZW5kZXJFbnRyeSwgdGhpcywgIm9mZmxpbmUgcmVuZGVyZXIiKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oCmluZGV4IDc1NTYwNDY0NzIzMmM0YmM1MTNjYzllMzlkZDQ0
NWYzOGI2MmNlZjQuLjU2OTAxMzhiMTY1NzBiM2Y5ZDIzN2Y5ZGQ0YThlYTIzZDczZmZhYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBPZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5vZGUgewogICAg
IFJlZlB0cjxBdWRpb0J1cz4gbV9yZW5kZXJCdXM7CiAgICAgCiAgICAgLy8gUmVuZGVyaW5nIHRo
cmVhZC4KLSAgICB2b2xhdGlsZSBUaHJlYWRJZGVudGlmaWVyIG1fcmVuZGVyVGhyZWFkOworICAg
IFJlZlB0cjxUaHJlYWQ+IG1fcmVuZGVyVGhyZWFkOwogICAgIGJvb2wgbV9zdGFydGVkUmVuZGVy
aW5nOwogICAgIHN0YXRpYyB2b2lkIG9mZmxpbmVSZW5kZXJFbnRyeSh2b2lkKiB0aHJlYWREYXRh
KTsKICAgICB2b2lkIG9mZmxpbmVSZW5kZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKaW5kZXggODg2OWY2YmYyMjMyMzJlNjNjYzNmYjUy
ZTE2YWUxZGIzZWI0MWJlNi4uOGM5MmQ2ZTUzOTZhZGYxMmZiZGQ2OGQ3YWM5N2Y5ZWQxOWFkYzAx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5j
cHAKQEAgLTc3MCw4ICs3NzAsNyBAQCBTZWN1cml0eU9yaWdpbkRhdGEgRGF0YWJhc2U6OnNlY3Vy
aXR5T3JpZ2luKCkKIHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3Vy
aXR5T3JpZ2luKG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLSAgICBhdXRv
JiB0aHJlYWQgPSBkYXRhYmFzZVRocmVhZCgpOwotICAgIGlmIChjdXJyZW50VGhyZWFkKCkgPT0g
dGhyZWFkLmdldFRocmVhZElEKCkpCisgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFz
ZVRocmVhZCgpLmdldFRocmVhZElEKCkpCiAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRh
dGE6OmZyb21TZWN1cml0eU9yaWdpbihtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0
KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCmluZGV4
IDBkZGU1ZjcyNjhlZTY0MmMwMDQzMDVjZWZlMzZiMWM5ZTQ0Yjg3ZDMuLmQ3MDgxNGY5YjU1YjI0
OGZkNjRlMWFmZjQzZTM3Njc0ZjE2OTJkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCkBAIC02MCwxMiArNjAsMTIg
QEAgYm9vbCBEYXRhYmFzZVRocmVhZDo6c3RhcnQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayht
X3RocmVhZENyZWF0aW9uTXV0ZXgpOwogCi0gICAgaWYgKG1fdGhyZWFkSUQpCisgICAgaWYgKG1f
dGhyZWFkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVU
aHJlYWQoRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3Jl
OiBEYXRhYmFzZSIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoRGF0YWJhc2VUaHJl
YWQ6OmRhdGFiYXNlVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBEYXRhYmFzZSIpOwogCi0g
ICAgcmV0dXJuIG1fdGhyZWFkSUQ7CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIERh
dGFiYXNlVGhyZWFkOjpyZXF1ZXN0VGVybWluYXRpb24oRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
KiBjbGVhbnVwU3luYykKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpk
YXRhYmFzZVRocmVhZCgpCiAgICAgLy8gQ2xlYW4gdXAgdGhlIGxpc3Qgb2YgYWxsIHBlbmRpbmcg
dHJhbnNhY3Rpb25zIG9uIHRoaXMgZGF0YWJhc2UgdGhyZWFkCiAgICAgbV90cmFuc2FjdGlvbkNv
b3JkaW5hdG9yLT5zaHV0ZG93bigpOwogCi0gICAgTE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBk
ZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUgcmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3
aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIsIG1fdGhyZWFkSUQsIHRoaXMsIHJlZkNvdW50
KCkpOworICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQg
Y2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAl
aSByZWYocykiLCBtX3RocmVhZC0+aWQoKSwgdGhpcywgcmVmQ291bnQoKSk7CiAKICAgICAvLyBD
bG9zZSB0aGUgZGF0YWJhc2VzIHRoYXQgd2UgcmFuIHRyYW5zYWN0aW9ucyBvbi4gVGhpcyBlbnN1
cmVzIHRoYXQgaWYgYW55IHRyYW5zYWN0aW9ucyBhcmUgc3RpbGwgb3BlbiwgdGhleSBhcmUgcm9s
bGVkIGJhY2sgYW5kIHdlIGRvbid0IGxlYXZlIHRoZSBkYXRhYmFzZSBpbiBhbgogICAgIC8vIGlu
Y29uc2lzdGVudCBvciBsb2NrZWQgc3RhdGUuCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBvcGVuRGF0YWJhc2UtPnBlcmZv
cm1DbG9zZSgpOwogCiAgICAgLy8gRGV0YWNoIHRoZSB0aHJlYWQgc28gaXRzIHJlc291cmNlcyBh
cmUgbm8gbG9uZ2VyIG9mIGFueSBjb25jZXJuIHRvIGFueW9uZSBlbHNlCi0gICAgZGV0YWNoVGhy
ZWFkKG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKIAogICAgIERhdGFiYXNl
VGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMgPSBtX2NsZWFudXBTeW5jOwogCkBAIC0xNDIs
NyArMTQyLDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VPcGVuKERhdGFi
YXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0YWJhc2VTZXRN
dXRleCk7CiAKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSUQpOworICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPmlkKCkpOwogICAgIEFTU0VSVCgh
bV9vcGVuRGF0YWJhc2VTZXQuY29udGFpbnMoJmRhdGFiYXNlKSk7CiAgICAgbV9vcGVuRGF0YWJh
c2VTZXQuYWRkKCZkYXRhYmFzZSk7CiB9CkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBEYXRhYmFz
ZVRocmVhZDo6cmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UmIGRhdGFiYXNlKQogewogICAg
IExvY2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAotICAgIEFTU0VSVChj
dXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX3RocmVhZC0+aWQoKSk7CiAgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkgfHwgbV9v
cGVuRGF0YWJhc2VTZXQuY29udGFpbnMoJmRhdGFiYXNlKSk7CiAgICAgbV9vcGVuRGF0YWJhc2VT
ZXQucmVtb3ZlKCZkYXRhYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKaW5kZXggZWMwNDFlMzE4MTcyNDkyZWNhNmJj
ZWZlOGYxZGEyNWVjOTJlZDI2Yy4uYTUyMTJkZmI4YjE3MmNlMmZmNmE5ODg4ZGUwYTlkYjk3N2Fl
MmQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VUaHJlYWQuaApAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4gewogCiAgICAgdm9pZCBy
ZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UmKTsKICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xv
c2VkKERhdGFiYXNlJik7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0
dXJuIG1fdGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyBy
ZXR1cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KIAogICAgIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IHJldHVybiBtX3RyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KIApAQCAtNjksNyArNjksNyBAQCBjbGFzcyBEYXRh
YmFzZVRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZVRocmVhZD4g
ewogICAgIHZvaWQgZGF0YWJhc2VUaHJlYWQoKTsKIAogICAgIExvY2sgbV90aHJlYWRDcmVhdGlv
bk11dGV4OwotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRCB7IDAgfTsKKyAgICBSZWZQ
dHI8VGhyZWFkPiBtX3RocmVhZCB7IG51bGxwdHIgfTsKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJl
YWQ+IG1fc2VsZlJlZjsKIAogICAgIE1lc3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAppbmRleCBmZWZm
ZGExZjUzNTViNmQ2MzI4M2QxYmUyN2U2NDUyNjk2NGYxZDgyLi4wOGIxZTFmZTk0N2I0MzhmNmQy
MGZlNjA2MzQ3MTliZjk2OWZkYzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9HQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dD
Q29udHJvbGxlci5jcHAKQEAgLTEwMSwxNCArMTAxLDE0IEBAIHZvaWQgR0NDb250cm9sbGVyOjpn
YXJiYWdlQ29sbGVjdE5vd0lmTm90RG9uZVJlY2VudGx5KCkKIAogdm9pZCBHQ0NvbnRyb2xsZXI6
OmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcoYm9vbCB3YWl0VW50
aWxEb25lKQogewotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQo
Y29sbGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOworICAgIFJlZlB0cjxUaHJlYWQ+
IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xs
ZXIiKTsKIAogICAgIGlmICh3YWl0VW50aWxEb25lKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZElEKTsKKyAgICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsK
KyAgICB0aHJlYWQtPmRldGFjaCgpOwogfQogCiB2b2lkIEdDQ29udHJvbGxlcjo6c2V0SmF2YVNj
cmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXggMTY4ZTRlMjc3OTVkNDI1ZjQw
NGYxNzVjOWJjYmE5M2Y3MzY4MDc0Yy4uNTVjN2NiMDIzOTg1OTljOTcxZTZhMzdhMGY5YTcyNDg0
ODQyZTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJl
YW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcApA
QCAtNzQsNyArNzQsNyBAQCBzdGF0aWMgdm9pZCBjYWxsT25GaWxlVGhyZWFkKEZ1bmN0aW9uPHZv
aWQgKCk+JiYgZnVuY3Rpb24pCiAKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgY3JlYXRlRmls
ZVRocmVhZE9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2UoY3JlYXRlRmlsZVRocmVhZE9uY2UsIFtd
IHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKCJXZWJDb3JlOiBBc3luY0ZpbGVTdHJlYW0iLCBbXSB7
CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKCJXZWJDb3JlOiBBc3luY0ZpbGVTdHJlYW0iLCBbXSB7
CiAgICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgQXV0b2RyYWluZWRQb29s
IHBvb2w7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCmlu
ZGV4IDhkZTk0Y2U1ZGNhNzY3MTE2MzYyMDJlNmQzMWY3NTMwZDhhMjkyZDIuLjFlMzUzNzZiNmRk
OWViY2IzZTgzMjE0ZDYyNzQ4YzY2YWUxOTMxNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkRhdGFiYXNlLmNwcApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBBU1NFUlRf
Tk9UX1NZTkNfVEhSRUFEKCkgQVNTRVJUKCFtX3N5bmNUaHJlYWRSdW5uaW5nIHx8ICFJU19JQ09O
X1NZTkNfVEhSRUFEKCkpCiAKIC8vIEZvciBtZXRob2RzIHRoYXQgYXJlIG1lYW50IHRvIHN1cHBv
cnQgdGhlIHN5bmMgdGhyZWFkIE9OTFkKLSNkZWZpbmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpICht
X3N5bmNUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpKQorI2RlZmluZSBJU19JQ09OX1NZTkNfVEhS
RUFEKCkgKG1fc3luY1RocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCkpCiAjZGVmaW5lIEFT
U0VSVF9JQ09OX1NZTkNfVEhSRUFEKCkgQVNTRVJUKElTX0lDT05fU1lOQ19USFJFQUQoKSkKIAog
I2lmIFBMQVRGT1JNKEdUSykKQEAgLTE0MSw3ICsxNDEsNyBAQCBib29sIEljb25EYXRhYmFzZTo6
b3Blbihjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAg
ICAvLyBMb2NrIGhlcmUgYXMgd2VsbCBhcyBmaXJzdCB0aGluZyBpbiB0aGUgdGhyZWFkIHNvIHRo
ZSB0aHJlYWQgZG9lc24ndCBhY3R1YWxseSBjb21tZW5jZSB1bnRpbCB0aGUgY3JlYXRlVGhyZWFk
KCkgY2FsbCAKICAgICAvLyBjb21wbGV0ZXMgYW5kIG1fc3luY1RocmVhZFJ1bm5pbmcgaXMgcHJv
cGVybHkgc2V0CiAgICAgbV9zeW5jTG9jay5sb2NrKCk7Ci0gICAgbV9zeW5jVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0LCB0aGlz
LCAiV2ViQ29yZTogSWNvbkRhdGFiYXNlIik7CisgICAgbV9zeW5jVGhyZWFkID0gVGhyZWFkOjpj
cmVhdGUoSWNvbkRhdGFiYXNlOjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJX
ZWJDb3JlOiBJY29uRGF0YWJhc2UiKTsKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gbV9zeW5j
VGhyZWFkOwogICAgIG1fc3luY0xvY2sudW5sb2NrKCk7CiAgICAgaWYgKCFtX3N5bmNUaHJlYWQp
CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBJY29uRGF0YWJhc2U6OmNsb3NlKCkKICAgICAgICAg
d2FrZVN5bmNUaHJlYWQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBzeW5j
IHRocmVhZCB0byB0ZXJtaW5hdGUKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9z
eW5jVGhyZWFkKTsKKyAgICAgICAgbV9zeW5jVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwog
ICAgIH0KIAogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBmYWxzZTsgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oCmluZGV4IDA2MWFmNGExMjU1NzcxZGUxMWEz
MmY1NjgzYzBlZmRhNTkyOTNiOWQuLjg2NDA5NTU0NzUzM2ZkODkwZjAzYWZlOTJiYjA2ZjYwODdl
ZTczNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oCkBAIC0x
MTksNyArMTE5LDcgQEAgY2xhc3MgSWNvbkRhdGFiYXNlIGZpbmFsIDogcHVibGljIEljb25EYXRh
YmFzZUJhc2UgewogICAgIHZvaWQgc3luY1RpbWVyRmlyZWQoKTsKICAgICAKICAgICBUaW1lciBt
X3N5bmNUaW1lcjsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fc3luY1RocmVhZDsKKyAgICBSZWZQ
dHI8VGhyZWFkPiBtX3N5bmNUaHJlYWQ7CiAgICAgYm9vbCBtX3N5bmNUaHJlYWRSdW5uaW5nOwog
ICAgIAogICAgIEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50TG9hZGVyPj4gbV9sb2FkZXJzUGVuZGlu
Z0RlY2lzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdl
VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAK
aW5kZXggOTEyMDBjMzQ1ZjQ1NWY5NmQ0OTRiZmQyYWQ3MDNmMjhjNWM2MjlkMS4uZDliNmY3MmZh
MzZmYTcwMGM4MjZmM2M5N2Q2YmFhMDJkNDJlOGI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwCkBAIC05NiwxMSArOTYsMTEgQEAgdm9pZCBSZXNvdXJj
ZVVzYWdlVGhyZWFkOjpub3RpZnlPYnNlcnZlcnMoUmVzb3VyY2VVc2FnZURhdGEmJiBkYXRhKQog
CiB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIHsKLSAg
ICBpZiAobV90aHJlYWRJZGVudGlmaWVyKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV92bSA9ICZjb21tb25WTSgpOwotICAgIG1fdGhyZWFkSWRlbnRpZmllciA9
IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNh
Z2UiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKHRocmVhZENhbGxiYWNrLCB0aGlz
LCAiV2ViQ29yZTogUmVzb3VyY2VVc2FnZSIpOwogfQogCiB2b2lkIFJlc291cmNlVXNhZ2VUaHJl
YWQ6OnRocmVhZENhbGxiYWNrKHZvaWQqIHJlc291cmNlVXNhZ2VUaHJlYWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oCmluZGV4IDE4YTFlNjc1NDNkMjIwOWMxNzk1
NzQ3MzY2MjJhNzhiMzg0YmI4ZmMuLmVmZGUyN2VmZTZiMGFjNDU0NjRkZTg5MWM2N2NlNzlmOWNm
MmUxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oCkBAIC02
Miw3ICs2Miw3IEBAIGNsYXNzIFJlc291cmNlVXNhZ2VUaHJlYWQgewogICAgIHZvaWQgdGhyZWFk
Qm9keSgpOwogICAgIHZvaWQgcGxhdGZvcm1UaHJlYWRCb2R5KEpTQzo6Vk0qLCBSZXNvdXJjZVVz
YWdlRGF0YSYpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXIgeyAw
IH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgTG9jayBt
X2xvY2s7CiAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwogICAgIEhhc2hNYXA8dm9pZCosIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmKT4+IG1fb2JzZXJ2ZXJz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5j
cHAKaW5kZXggNzMwYzBhNmJkOTNmNDU3OGQxZWRiZjlhY2UxY2Q4NjU2NmU2Yzk4OC4uZDIwNzg0
MDU2MGRkZjkwNTkwYTBkYWRkMjczMDg0YzkxYzlmYjEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCkBAIC0zNSwxNCArMzUsMTQg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJl
YWQoKQotICAgIDogbV90aHJlYWRJZGVudGlmaWVyKDApCisgICAgOiBtX3RocmVhZChudWxscHRy
KQogewogfQogCiBib29sIFNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKCkKIHsKLSAg
ICBhdXRvIHRocmVhZElkZW50aWZpZXIgPSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1f
dGhyZWFkSWRlbnRpZmllcjsKLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllciAmJiBjdXJyZW50
VGhyZWFkKCkgPT0gdGhyZWFkSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQg
PSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkOworICAgIHJldHVybiB0aHJl
YWQgJiYgdGhyZWFkLT5pZCgpID09IGN1cnJlbnRUaHJlYWQoKTsKIH0KIAogdm9pZCBTY3JvbGxp
bmdUaHJlYWQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCkBAIC03NCwx
NCArNzQsMTQgQEAgU2Nyb2xsaW5nVGhyZWFkJiBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigp
CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAg
aWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6ZSB0aGUgcnVuIGxv
b3AuCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9pbml0aWFs
aXplUnVuTG9vcE11dGV4KTsKIAotICAgICAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVU
aHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKKyAgICAg
ICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNv
cmU6IFNjcm9sbGluZyIpOwogICAgICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAg
bV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdeyBy
ZXR1cm4gbV90aHJlYWRSdW5Mb29wOyB9KTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBTY3JvbGxp
bmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6
OnRocmVhZENhbGxiYWNrKHZvaWQqIHNjcm9sbGluZ1RocmVhZCkKIHsKLSAgICBXVEY6OnNldEN1
cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxpbmdU
aHJlYWQqPihzY3JvbGxpbmdUaHJlYWQpLT50aHJlYWRCb2R5KCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXggZGUwNjJkNzdh
YzAxZGY5ZDJhMDk4NjBlYmU2YjhlOWZkM2NmZjVjMC4uZDg4OTJmMDViZTY0MzdkNGFhY2MwYTc1
MWE3Y2E3ZTkzYmVlMGRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVGhyZWFkLmgKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgU2Nyb2xsaW5nVGhyZWFk
IHsKICAgICB2b2lkIHRocmVhZFJ1bkxvb3BTb3VyY2VDYWxsYmFjaygpOwogI2VuZGlmCiAKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFk
PiBtX3RocmVhZDsKIAogICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
VmFyaWFibGU7CiAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAppbmRl
eCBmNzEzMzNjNWEzN2E5OTg5NjRmM2E3NDFjNzMxNTJlOTUxNDY2Y2Y2Li5kZGJlM2JhOTgwZTQ1
MGE0OTRjZDA2NDhmNDFiNWUzNmFmZWViNWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAg
UGFzc1JlZlB0cjxIUlRGRGF0YWJhc2VMb2FkZXI+IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRl
QW5kTG9hZEFzeW5jaHJvbm91c2x5SWYKIH0KIAogSFJURkRhdGFiYXNlTG9hZGVyOjpIUlRGRGF0
YWJhc2VMb2FkZXIoZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1fZGF0YWJhc2VMb2FkZXJUaHJl
YWQoMCkKKyAgICA6IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQobnVsbHB0cikKICAgICAsIG1fZGF0
YWJhc2VTYW1wbGVSYXRlKHNhbXBsZVJhdGUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZEFzeW5j
aHJvbm91c2x5KCkKICAgICAKICAgICBpZiAoIW1faHJ0ZkRhdGFiYXNlLmdldCgpICYmICFtX2Rh
dGFiYXNlTG9hZGVyVGhyZWFkKSB7CiAgICAgICAgIC8vIFN0YXJ0IHRoZSBhc3luY2hyb25vdXMg
ZGF0YWJhc2UgbG9hZGluZyBwcm9jZXNzLgotICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFk
ID0gY3JlYXRlVGhyZWFkKGRhdGFiYXNlTG9hZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNl
IGxvYWRlciIpOworICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoZGF0YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJhc2UgbG9hZGVyIik7CiAg
ICAgfQogfQogCkBAIC0xMjEsOCArMTIxLDggQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6Ondh
aXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKCkKICAgICAKICAgICAvLyB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbigpIHNob3VsZCBub3QgYmUgY2FsbGVkIHR3aWNlIGZvciB0aGUgc2FtZSB0aHJl
YWQuCiAgICAgaWYgKG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQpCi0gICAgICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQpOwotICAgIG1fZGF0YWJhc2VMb2Fk
ZXJUaHJlYWQgPSAwOworICAgICAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkLT53YWl0Rm9yQ29t
cGxldGlvbigpOworICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBudWxscHRyOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oCmluZGV4IGM4NjlkMTM3YTFkYjJmNTI0OThkMGUxYjY1
ZDU4N2U2YzgxOWIzODEuLjNhZDI1MWYyMTk5MDlmNGJjNjQ1NGQwMTMyMDFiNmE3Y2E3MDI2ODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxv
YWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxv
YWRlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNsYXNzIEhSVEZEYXRhYmFzZUxvYWRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEhSVEZEYXRhYmFzZUxvYWRlcj4gewogCiAgICAgLy8gSG9sZGluZyBhIG1f
dGhyZWFkTG9jayBpcyByZXF1aXJlZCB3aGVuIGFjY2Vzc2luZyBtX2RhdGFiYXNlTG9hZGVyVGhy
ZWFkLgogICAgIExvY2sgbV90aHJlYWRMb2NrOwotICAgIFRocmVhZElkZW50aWZpZXIgbV9kYXRh
YmFzZUxvYWRlclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX2RhdGFiYXNlTG9hZGVyVGhy
ZWFkOwogCiAgICAgZmxvYXQgbV9kYXRhYmFzZVNhbXBsZVJhdGU7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKaW5kZXggOTZmMzMw
ODI4MDc5YTc5YWQ2NDgyMGQwNzIxYzU5YzVlYTE2ZmRiMS4uMjFiZTk5NmVmMzdlNTNkYjcwMzEw
MDE5NjI3YzBjNDBkMmIyMTBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgUmV2ZXJiQ29udm9s
dmVyOjpSZXZlcmJDb252b2x2ZXIoQXVkaW9DaGFubmVsKiBpbXB1bHNlUmVzcG9uc2UsIHNpemVf
dCByZW5kZXJTbGkKICAgICAvLyBTdGFydCB1cCBiYWNrZ3JvdW5kIHRocmVhZAogICAgIC8vIEZJ
WE1FOiB3b3VsZCBiZSBiZXR0ZXIgdG8gdXAgdGhlIHRocmVhZCBwcmlvcml0eSBoZXJlLiAgSXQg
ZG9lc24ndCBuZWVkIHRvIGJlIHJlYWwtdGltZSwgYnV0IGhpZ2hlciB0aGFuIHRoZSBkZWZhdWx0
Li4uCiAgICAgaWYgKHRoaXMtPnVzZUJhY2tncm91bmRUaHJlYWRzKCkgJiYgbV9iYWNrZ3JvdW5k
U3RhZ2VzLnNpemUoKSA+IDApCi0gICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IGNyZWF0ZVRo
cmVhZChXZWJDb3JlOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnksIHRoaXMsICJjb252b2x1dGlvbiBi
YWNrZ3JvdW5kIHRocmVhZCIpOworICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQgPSBUaHJlYWQ6
OmNyZWF0ZShXZWJDb3JlOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnksIHRoaXMsICJjb252b2x1dGlv
biBiYWNrZ3JvdW5kIHRocmVhZCIpOwogfQogCiBSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252
b2x2ZXIoKQpAQCAtMTQ2LDcgKzE0Niw3IEBAIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZv
bHZlcigpCiAgICAgICAgICAgICBtX2JhY2tncm91bmRUaHJlYWRDb25kaXRpb25WYXJpYWJsZS5u
b3RpZnlPbmUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KG1fYmFja2dyb3VuZFRocmVhZCk7CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZC0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgKaW5kZXggNmJhZWI3Y2NlMjk4OTZjOTg5NjM1MTJmNDFi
NDNhMmYxMjg4NTQxYy4uMDU5NjMzNjdhZTI4MzQ5NDg3OTBiYTdjY2I3MjA2MGVjNTk4MTA3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgK
QEAgLTg2LDcgKzg2LDcgQEAgY2xhc3MgUmV2ZXJiQ29udm9sdmVyIHsKIAogICAgIC8vIEJhY2tn
cm91bmQgdGhyZWFkIGFuZCBzeW5jaHJvbml6YXRpb24KICAgICBib29sIG1fdXNlQmFja2dyb3Vu
ZFRocmVhZHM7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2JhY2tncm91bmRUaHJlYWQ7CisgICAg
UmVmUHRyPFRocmVhZD4gbV9iYWNrZ3JvdW5kVGhyZWFkOwogICAgIGJvb2wgbV93YW50c1RvRXhp
dDsKICAgICBib29sIG1fbW9yZUlucHV0QnVmZmVyZWQ7CiAgICAgbXV0YWJsZSBMb2NrIG1fYmFj
a2dyb3VuZFRocmVhZE11dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNw
cAppbmRleCA2Y2Q4YmQ3ZjgxYmZmMjIyN2ZlMTRmYmNhMGZiZmQwNTVkMDljNTcxLi4xZjI1ZThl
NTRlOWVlODVmYTBjY2E2YTMxYjkyZTExMWU2ZGYwY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxl
UmVhZGVyR1N0cmVhbWVyLmNwcApAQCAtMzcwLDIwICszNzAsMjAgQEAgUGFzc1JlZlB0cjxBdWRp
b0J1cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9vbCBt
aXhUb01vbm8KIFBhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29u
c3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewog
ICAgIFJlZlB0cjxBdWRpb0J1cz4gcmV0dXJuVmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNy
ZWF0ZVRocmVhZCgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1p
eFRvTW9ubywgc2FtcGxlUmF0ZV0geworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
IkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNh
bXBsZVJhdGVdIHsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIoZmlsZVBh
dGgpLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0pOwotICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0
aW9uKCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCiBQYXNzUmVmUHRyPEF1ZGlvQnVz
PiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90
IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQ
dHI8QXVkaW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJl
YWQoIkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhU
b01vbm8sIHNhbXBsZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJB
dWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25v
LCBzYW1wbGVSYXRlXSB7CiAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVhZGVyKGRh
dGEsIGRhdGFTaXplKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9KTsK
LSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53YWl0
Rm9yQ29tcGxldGlvbigpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCAxYzVjMzBmMzc3YTQyYmUw
MDE3NzE2NTFlODdmNzA0M2E1ZDY1YzkwLi4yNjQ2NmY1M2I0ODIxOGQzMzdhNWE4OTRmMWRiNzI4
ZGY0YzQ3YzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cApAQCAtMTA4LDcgKzEwOCw3IEBAIGNsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtCiAgICAgICAgIHZv
aWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGNh
bm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKIAotICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkIHsgMCB9OworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVh
ZCB7IG51bGxwdHIgfTsKICAgICAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXg7CiAgICAgICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uOwog
ICAgICAgICBSdW5Mb29wKiBtX3J1bkxvb3AgeyBudWxscHRyIH07CkBAIC0xMDc3LDcgKzEwNzcs
NyBAQCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsCiAgICAgOiBTdHJlYW1pbmdDbGllbnQoc3JjKQog
ewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRl
eCk7Ci0gICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoIlJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpXSB7CisgICAgbV90aHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBbdGhp
cywgcmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKICAgICAgICAgewogICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKICAg
ICAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJyZW50KCk7CkBAIC0xMTEzLDggKzEx
MTMsOCBAQCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJl
YW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsCiBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0Ns
aWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCkKIHsKICAgICBpZiAobV90aHJl
YWQpIHsKLSAgICAgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFkKTsKLSAgICAgICAgbV90aHJlYWQg
PSAwOworICAgICAgICBtX3RocmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVs
bHB0cjsKICAgICB9CiAKICAgICBpZiAobV9ydW5Mb29wID09ICZSdW5Mb29wOjpjdXJyZW50KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1
bkxvb3BDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1
bkxvb3BDRi5jcHAKaW5kZXggNDZiODk5NGE4NDFlZjcxZWEyNzljZTc3Y2JjOGZiNDNjMjlmMGE2
Mi4uZmZiZmRhOWI4OTM0ODM1NDkwYzlhNDBiYTFmNDgzMzZlNDc2MGM4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNw
cApAQCAtNzcsNyArNzcsNyBAQCBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVuTG9vcCgpCiAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxTdGF0aWNMb2NrPiBsb2NrKGxvYWRlclJ1bkxvb3BNdXRleCk7CiAKICAg
ICBpZiAoIWxvYWRlclJ1bkxvb3BPYmplY3QpIHsKLSAgICAgICAgY3JlYXRlVGhyZWFkKHJ1bkxv
YWRlclRocmVhZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsKKyAgICAgICAgVGhy
ZWFkOjpjcmVhdGUocnVuTG9hZGVyVGhyZWFkLCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRl
ciIpOwogCiAgICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFtdIHsgcmV0dXJuIGxvYWRlclJ1bkxvb3BPYmplY3Q7IH0pOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5k
ZXggNDQwOGNkMTk4NzA1YmE4NmNjOGMxOTg2ZmIzZTJjYWRlNzk2ZGNjNi4uZjEwNTcxNWVkOGQ4
NzkzNzNiNjMzMWNiMjZlMDgyYzNlMWFiOGIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKQEAgLTk0LDEwICs5NCwx
MCBAQCBpbnQgQ3VybERvd25sb2FkTWFuYWdlcjo6Z2V0UGVuZGluZ0Rvd25sb2FkQ291bnQoKSBj
b25zdAogdm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKIHsK
ICAgICBpZiAoIXJ1blRocmVhZCgpKSB7Ci0gICAgICAgIGlmIChtX3RocmVhZElkKQotICAgICAg
ICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7CisgICAgICAgIGlmICht
X3RocmVhZCkKKyAgICAgICAgICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
ICAgICBzZXRSdW5UaHJlYWQodHJ1ZSk7Ci0gICAgICAgIG1fdGhyZWFkSWQgPSBjcmVhdGVUaHJl
YWQoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOworICAgICAgICBtX3Ro
cmVhZCA9IFRocmVhZDo6Y3JlYXRlKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93bmxvYWRUaHJl
YWQiKTsKICAgICB9CiB9CiAKQEAgLTEwNSw5ICsxMDUsOSBAQCB2b2lkIEN1cmxEb3dubG9hZE1h
bmFnZXI6OnN0b3BUaHJlYWQoKQogewogICAgIHNldFJ1blRocmVhZChmYWxzZSk7CiAKLSAgICBp
ZiAobV90aHJlYWRJZCkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVh
ZElkKTsKLSAgICAgICAgbV90aHJlYWRJZCA9IDA7CisgICAgaWYgKG1fdGhyZWFkKSB7CisgICAg
ICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICBtX3RocmVhZCA9IG51
bGxwdHI7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKaW5kZXggMDJjZTczMWJkMTBhODAxOWI3ZWJlMWZhYzUy
YjQ1ZTQwOTI1NjIzMS4uZjZiYmM3N2Y0ZDNjZTBiOTY4N2QxZDhmY2E2MDkxNTg3YzlhZTQ5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuaApAQCAtNjksNyArNjksNyBAQCBjbGFzcyBDdXJsRG93bmxvYWRNYW5hZ2VyIHsKIAog
ICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkVGhyZWFkKHZvaWQqIGRhdGEpOwogCi0gICAgVGhyZWFk
SWRlbnRpZmllciBtX3RocmVhZElkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAg
IENVUkxNKiBtX2N1cmxNdWx0aUhhbmRsZTsKICAgICBWZWN0b3I8Q1VSTCo+IG1fcGVuZGluZ0hh
bmRsZUxpc3Q7CiAgICAgVmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAppbmRleCA3YmQ3YjJkMzcwMmY1ZjljZDU3MTM2MWUxY2JiODVlYjk3
MTFlOTJkLi44MmJiNGE4MDUwNDEwMzdjNWFlZWViMjg1ZjQyNjQ2ZmZkYzg4N2Q4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsLmgKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgU29ja2V0U3RyZWFt
SGFuZGxlSW1wbCA6IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGUgewogICAgICAgICBzaXplX3Qg
c2l6ZSB7IDAgfTsKICAgICB9OwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtlclRocmVh
ZCB7IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3dvcmtlclRocmVhZCB7IG51bGxwdHIgfTsK
ICAgICBzdGQ6OmF0b21pYzxib29sPiBtX3N0b3BUaHJlYWQgeyBmYWxzZSB9OwogICAgIExvY2sg
bV9tdXRleFNlbmQ7CiAgICAgTG9jayBtX211dGV4UmVjZWl2ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3Vy
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbEN1cmwuY3BwCmluZGV4IDFlMzc5ZDFiMDBkMDk1NWZjMmRhMDBiZTNmOTZmOTky
YTkxYjk0M2YuLmVjYjlmNTRiNjVhMzM1MjRlM2EzNTZhM2JjMTNkMGUyZjZmNmFjYjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3RhcnRUaHJlYWQoKQogCiAgICAgcmVmKCk7IC8v
IHN0b3BUaHJlYWQoKSB3aWxsIGNhbGwgZGVyZWYoKS4KIAotICAgIG1fd29ya2VyVGhyZWFkID0g
Y3JlYXRlVGhyZWFkKCJXZWJTb2NrZXQgdGhyZWFkIiwgW3RoaXNdIHsKKyAgICBtX3dvcmtlclRo
cmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJXZWJTb2NrZXQgdGhyZWFkIiwgW3RoaXNdIHsKIAogICAg
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMjQ5LDggKzI0OSw4IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3RvcFRocmVhZCgpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fc3RvcFRocmVhZCA9IHRydWU7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV93
b3JrZXJUaHJlYWQpOwotICAgIG1fd29ya2VyVGhyZWFkID0gMDsKKyAgICBtX3dvcmtlclRocmVh
ZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICBtX3dvcmtlclRocmVhZCA9IG51bGxwdHI7CiAg
ICAgZGVyZWYoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCmlu
ZGV4IDdhZDViNTc5MTNhMTY3MmRmOTE5NmU5ZWIwMTMzZTIzZTIzMjk4NWQuLmRlZTZjZTZkNjcz
ZDc2YjQxZjI3NDU0MDRmYjA3OWYyMTk2NTNiNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclRocmVhZC5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6
OldvcmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHIK
IH0KIAogV29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0
cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBX
b3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtlclRocmVhZFN0
YXJ0TW9kZSBzdGFydE1vZGUsIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVh
ZGVycyYgY29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLCBib29sIHNob3VsZEJ5
cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSwgY29uc3QgU2VjdXJpdHlPcmlnaW4m
IHRvcE9yaWdpbiwgTW9ub3RvbmljVGltZSB0aW1lT3JpZ2luLCBJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Qcm94eSogY29ubmVjdGlvblByb3h5LCBTb2NrZXRQcm92aWRlciogc29ja2V0UHJvdmlk
ZXIsIEpTQzo6UnVudGltZUZsYWdzIHJ1bnRpbWVGbGFncykKLSAgICA6IG1fdGhyZWFkSUQoMCkK
KyAgICA6IG1fdGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtl
ckxvYWRlclByb3h5KQogICAgICwgbV93b3JrZXJSZXBvcnRpbmdQcm94eSh3b3JrZXJSZXBvcnRp
bmdQcm94eSkKICAgICAsIG1fcnVudGltZUZsYWdzKHJ1bnRpbWVGbGFncykKQEAgLTEzMywxNSAr
MTMzLDE1IEBAIFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCgpCiAKIGJvb2wgV29ya2VyVGhy
ZWFkOjpzdGFydCgpCiB7Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8g
ZW5zdXJlIHRoYXQgbV90aHJlYWRJRCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3Rh
cnRzLgorICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0
IG1fdGhyZWFkIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCiAgICAgTG9j
a0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJ
RCkKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJl
YWRJRCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlz
LCAiV2ViQ29yZTogV29ya2VyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShXb3Jr
ZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7CiAK
LSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQg
V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2b2lkKiB0aHJlYWQpCkBAIC0xOTMsNyAr
MTkzLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpCiAgICAgZ19tYWluX2Nv
bnRleHRfcG9wX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0LmdldCgpKTsKICNlbmRpZgogCi0g
ICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gcHJvdGVjdG9yID0gbV90aHJlYWQ7CiAKICAgICBBU1NFUlQobV93b3JrZXJHbG9iYWxT
Y29wZS0+aGFzT25lUmVmKCkpOwogCkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBXb3JrZXJUaHJl
YWQ6OndvcmtlclRocmVhZCgpCiAgICAgdGhyZWFkR2xvYmFsRGF0YSgpLmRlc3Ryb3koKTsKIAog
ICAgIC8vIFRoZSB0aHJlYWQgb2JqZWN0IG1heSBiZSBhbHJlYWR5IGRlc3Ryb3llZCBmcm9tIG5v
dGlmaWNhdGlvbiBub3csIGRvbid0IHRyeSB0byBhY2Nlc3MgInRoaXMiLgotICAgIGRldGFjaFRo
cmVhZCh0aHJlYWRJRCk7CisgICAgcHJvdGVjdG9yLT5kZXRhY2goKTsKIH0KIAogdm9pZCBXb3Jr
ZXJUaHJlYWQ6OnN0YXJ0UnVubmluZ0RlYnVnZ2VyVGFza3MoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmgKaW5kZXggMDdhZDNjZTc4NGY5MTlmNzBjNDU2ODFiOTU0YzAwOTk5NmY1
NTdmMi4uZjgwOWVlNjY3MjdlZTEzOWRjNGYxOWQyY2I2MWIyMjY1ZTRlYTRiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIFdvcmtl
clRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4gewogICAgIGJvb2wgc3Rh
cnQoKTsKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQo
KSBjb25zdCB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAg
ICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQogICAgIFdv
cmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29y
a2VyTG9hZGVyUHJveHk7IH0KICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0
aW5nUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OyB9CkBAIC05
OCw3ICs5OCw3IEBAIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtl
clRocmVhZD4gewogICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQqKTsKICAg
ICB2b2lkIHdvcmtlclRocmVhZCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElE
OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIFdvcmtlclJ1bkxvb3AgbV9ydW5M
b29wOwogICAgIFdvcmtlckxvYWRlclByb3h5JiBtX3dvcmtlckxvYWRlclByb3h5OwogICAgIFdv
cmtlclJlcG9ydGluZ1Byb3h5JiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYktpdC9T
dG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCmluZGV4IGJiNjZmY2VhN2U1MjhiYzI3ZjYzM2EzZTUy
ODc4YjUwMWVmMGUxODcuLjM1NzY3OTQ2YWRlMzcyYTQ3OTQ1Zjg1ZDNmODk1OGI1MjU0YWJlNDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKQEAgLTQwLDcgKzQwLDcg
QEAgc3RhdGljIEhhc2hTZXQ8U3RvcmFnZVRocmVhZCo+JiBhY3RpdmVTdG9yYWdlVGhyZWFkcygp
CiB9CiAKIFN0b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgw
KQorICAgIDogbV90aHJlYWQobnVsbHB0cikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogfQpAQCAtNDgsMTYgKzQ4LDE2IEBAIFN0b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQoKQog
U3RvcmFnZVRocmVhZDo6flN0b3JhZ2VUaHJlYWQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKCFtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkKTsK
IH0KIAogYm9vbCBTdG9yYWdlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBpZiAoIW1fdGhyZWFkSUQpCi0gICAgICAgIG1fdGhyZWFkSUQgPSBjcmVh
dGVUaHJlYWQoU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAi
V2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CisgICAgaWYgKCFtX3RocmVhZCkKKyAgICAgICAgbV90
aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2Fs
bGJhY2ssIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKICAgICBhY3RpdmVTdG9yYWdl
VGhyZWFkcygpLmFkZCh0aGlzKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4g
bV90aHJlYWQ7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludENhbGxi
YWNrKHZvaWQqIHRocmVhZCkKQEAgLTc4LDI1ICs3OCwyNSBAQCB2b2lkIFN0b3JhZ2VUaHJlYWQ6
OnRocmVhZEVudHJ5UG9pbnQoKQogdm9pZCBTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaChGdW5jdGlv
bjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIEFTU0VSVCgh
bV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZCk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxGdW5jdGlvbjx2b2lkICgpPj4oV1RGTW92ZShmdW5jdGlvbikpKTsKIH0KIAog
dm9pZCBTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUoKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAg
IEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZCk7CiAgICAgYWN0aXZlU3RvcmFn
ZVRocmVhZHMoKS5yZW1vdmUodGhpcyk7CiAgICAgLy8gRXZlbiBpbiB3ZWlyZCwgZXhjZXB0aW9u
YWwgY2FzZXMsIGRvbid0IHdhaXQgb24gYSBub25leGlzdGVudCB0aHJlYWQgdG8gdGVybWluYXRl
LgotICAgIGlmICghbV90aHJlYWRJRCkKKyAgICBpZiAoIW1fdGhyZWFkKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uPHZvaWQg
KCk+PihbdGhpc10gewogICAgICAgICBwZXJmb3JtVGVybWluYXRlKCk7CiAgICAgfSkpOwotICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkLT53YWl0
Rm9yQ29tcGxldGlvbigpOwogICAgIEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpKTsKLSAgICBtX3Ro
cmVhZElEID0gMDsKKyAgICBtX3RocmVhZCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgU3RvcmFnZVRo
cmVhZDo6cGVyZm9ybVRlcm1pbmF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZVRocmVhZC5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQu
aAppbmRleCA5NTY0YjhhYTA2ZTUyNDNlMzBlNDY3YzVmYmZlMmNkYWRiMjQwYzU2Li44Y2YxYjNk
NGFkYzVhMzA2YTc3ZWM3N2M5YzMyNjY2MTY4N2JlYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9T
dG9yYWdlVGhyZWFkLmgKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgU3RvcmFnZVRocmVhZCB7CiAg
ICAgLy8gQmFja2dyb3VuZCB0aHJlYWQgcGFydCBvZiB0aGUgdGVybWluYXRlIHByb2NlZHVyZS4K
ICAgICB2b2lkIHBlcmZvcm1UZXJtaW5hdGUoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBNZXNzYWdlUXVldWU8
RnVuY3Rpb248dm9pZCAoKT4+IG1fcXVldWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggM2I4NWYyMmZmYWUwMWUyOGFh
Yjk5ODE2Njk4YWRhZDdhMzg0M2M1Zi4uYjA0YWNjOGMzMWM1ZWNhODJhNTE3NDE2NjdkYjcwZTA1
M2YxZDJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcApAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiB7
CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CiAKLSAg
ICBXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKKyAgICBXVEY6OlRocmVh
ZDo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCgpOwogCiAgICAgbV9zdXBwcmVzc01l
bW9yeVByZXNzdXJlSGFuZGxlciA9IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXI7CiAgICAgbV9sb2FkVGhyb3R0bGVMYXRlbmN5ID0gcGFyYW1ldGVycy5sb2Fk
VGhyb3R0bGVMYXRlbmN5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAppbmRleCBl
ZjdiYTg5OTgyMDIzMjU4OWU3MzkxZjI3ZmNkM2Q2ZTE2OWY2ODk0Li5mYTAzMGZiM2EyYTBmODJk
NmEyNDViZjg1NmIzNmFhMjczMjAwNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luY0luVGhyZWFk
KHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzCiAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAKICAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsKHRo
aXMpOwotICAgIGRldGFjaFRocmVhZChjcmVhdGVUaHJlYWQoIklPQ2hhbm5lbDo6cmVhZFN5bmMi
LCBbY2hhbm5lbCwgc2l6ZSwgcXVldWUsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgVGhyZWFk
OjpjcmVhdGUoIklPQ2hhbm5lbDo6cmVhZFN5bmMiLCBbY2hhbm5lbCwgc2l6ZSwgcXVldWUsIGNv
bXBsZXRpb25IYW5kbGVyXSB7CiAgICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RkOjptaW4o
c2l6ZSwgZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CiAgICAgICAgIHVpbnQ4X3QqIGJ1ZmZlckRh
dGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhidWZmZXJTaXplKSk7CiAgICAg
ICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IGFkb3B0R1JlZihzb3VwX2J1ZmZl
cl9uZXdfd2l0aF9vd25lcihidWZmZXJEYXRhLCBidWZmZXJTaXplLCBidWZmZXJEYXRhLCBmYXN0
RnJlZSkpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luY0luVGhy
ZWFkKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzCiAgICAg
ICAgICAgICBEYXRhIGRhdGEgPSB7IFdURk1vdmUoYnVmZmVyKSB9OwogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoZGF0YSwgMCk7CiAgICAgICAgIH0sIHF1ZXVlKTsKLSAgICB9KSk7Cisg
ICAgfSktPmRldGFjaCgpOwogfQogCiBzdHJ1Y3QgV3JpdGVBc3luY0RhdGEgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGJhZjUzMDY2YmUyMDA5ZTI2
ZGJlYjdhYzg4OGM0MDVlM2JkYmE2ZmYuLmIzODdiNmI0NDVlMzdkM2RhM2U4YTcyYzdjMGJhMzVj
ODYzZjI3MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAK
QEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3Nh
Z2Uoc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IG1lc3NhZ2UpCiAKICNpZiBIQVZFKFFPU19DTEFT
U0VTKQogICAgIGlmIChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkgJiYgbV9zaG91bGRCb29zdE1h
aW5UaHJlYWRPblN5bmNNZXNzYWdlKSB7Ci0gICAgICAgIHB0aHJlYWRfb3ZlcnJpZGVfdCBvdmVy
cmlkZSA9IHB0aHJlYWRfb3ZlcnJpZGVfcW9zX2NsYXNzX3N0YXJ0X25wKG1fbWFpblRocmVhZCwg
YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTlRFUkFDVElWRSksIDApOworICAgICAg
ICBwdGhyZWFkX292ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFz
c19zdGFydF9ucChtX21haW5UaHJlYWQsIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xB
U1NfVVNFUl9JTlRFUkFDVElWRSksIDApOwogICAgICAgICBtZXNzYWdlLT5zZXRRT1NDbGFzc092
ZXJyaWRlKG92ZXJyaWRlKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VF
bnRyeVBvaW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9t
YWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCmluZGV4IDNiYjdjNmQ0N2Q0M2M2
OTc2YjAzY2ZmNzczNjQ0ZjQ4Nzg0OTNkNDEuLmYyM2RiNDNjMDIzNGRjN2M4MTA0OTUzZjA0ZWY4
Nzk1MmY5Yjg3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50
VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBD
U2VydmljZUVudHJ5UG9pbnQuaApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgWFBDU2VydmljZUlu
aXRpYWxpemVyKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19v
YmplY3RfCiAKICNpZiBIQVZFKFFPU19DTEFTU0VTKQogICAgIGlmIChwYXJhbWV0ZXJzLmV4dHJh
SW5pdGlhbGl6YXRpb25EYXRhLmNvbnRhaW5zKEFTQ0lJTGl0ZXJhbCgiYWx3YXlzLXJ1bnMtYXQt
YmFja2dyb3VuZC1wcmlvcml0eSIpKSkKLSAgICAgICAgc2V0R2xvYmFsTWF4UU9TQ2xhc3MoUU9T
X0NMQVNTX1VUSUxJVFkpOworICAgICAgICBUaHJlYWQ6OnNldEdsb2JhbE1heFFPU0NsYXNzKFFP
U19DTEFTU19VVElMSVRZKTsKICNlbmRpZgogCiAgICAgWFBDU2VydmljZVR5cGU6OnNpbmdsZXRv
bigpLmluaXRpYWxpemUocGFyYW1ldGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCmluZGV4IDA2MDhhYjcy
Zjk5MjQ4ZWYyNGNkMmQ1MjQ1ZWU1MzMzYTAwZDlkMGQuLjQ4ZDEwNjk3NzY1YTk1YThiMzU4NzIz
MGUxMDJkODAzYWQ1OGMwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9s
aW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAg
TWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3IoKQogICAgIGlmICht
X2V2ZW50RkQgPT0gLTEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgiTWVtb3J5UHJlc3N1cmVNb25pdG9yIiwg
W3RoaXNdIHsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiTWVt
b3J5UHJlc3N1cmVNb25pdG9yIiwgW3RoaXNdIHsKICAgICAgICAgZG91YmxlIHBvbGxJbnRlcnZh
bCA9IHNfbWF4UG9sbGluZ0ludGVydmFsSW5TZWNvbmRzOwogICAgICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICAgICAgc2xlZXAocG9sbEludGVydmFsKTsKQEAgLTI3MSw3ICsyNzEsNyBAQCBN
ZW1vcnlQcmVzc3VyZU1vbml0b3I6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcigpCiAgICAgICAgIH0K
ICAgICAgICAgY2xvc2UobV9ldmVudEZEKTsKICAgICB9KTsKLSAgICBkZXRhY2hUaHJlYWQodGhy
ZWFkSWRlbnRpZmllcik7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogSVBDOjpBdHRhY2ht
ZW50IE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6Y3JlYXRlSGFuZGxlKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDViOTVjNzk0MTUzYTRiYWFiMjI3
NjJhNjk0NjYzOWExM2FkOWJjNTAuLmNhOGU0NGViM2M3MDVlNjE2Y2Q1NDkzODJmMjQ1NGE3ZTYw
YTAzNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMjU4
LDcgKzI1OCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgcGxhdGZvcm1Jbml0aWFs
aXplV2ViUHJvY2VzcyhXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIAogICAgIC8vIE1hdGNoIHRoZSBR
b1Mgb2YgdGhlIFVJUHJvY2VzcyBhbmQgdGhlIHNjcm9sbGluZyB0aHJlYWQgYnV0IHVzZSBhIHNs
aWdodGx5IGxvd2VyIHByaW9yaXR5LgotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKC0xKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVudFRocmVhZElzVXNlcklu
dGVyYWN0aXZlKC0xKTsKIAogICAgIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBw
YXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIGlmICgh
bV9zdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcikgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGJiNjNjMTUzYmIxMDZlZWI5MTlmNmVjNjFl
MzU1MmE4MjUyM2RiMjAuLmMyMTJhNTE2ZTJmNTU4ZTNhN2I2YmY2MmYzNTM5MTlmZGQ5YmY5Yzkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxNy0wNC0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWVjaGFuaWNhbCBjaGFuZ2UuIFVzZSBUaHJlYWQ6OiBBUElzLgorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHA6CisgICAgICAg
IChydW5KYXZhU2NyaXB0VGhyZWFkKToKKyAgICAgICAgKHN0YXJ0SmF2YVNjcmlwdFRocmVhZHMp
OgorICAgICAgICAoc3RvcEphdmFTY3JpcHRUaHJlYWRzKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgICh0ZXN0VGhyZWFkSWRlbnRpZmll
ck1hcCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcDoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnJ1bkxvY2tUZXN0KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9QYXJraW5nTG90LmNwcDoKKwogMjAxNy0wNC0xMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmVydCByMjE1MjE3CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCmluZGV4IGUyZjliYWRlNmNh
N2MyNjk0ODVhNGNkY2JlNjA5OWMzNmJhMDIxOTguLjcxMGQyYTU5ZGE5MjkwMTZlNjA4YTRjZjdk
OTQ2ZmE4N2ZhZDkzMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3Jp
cHRUaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJl
YWRpbmcuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBMb2NrJiBqYXZhU2NyaXB0VGhyZWFk
c011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9CiAKLXR5cGVkZWYgSGFzaFNldDxU
aHJlYWRJZGVudGlmaWVyPiBUaHJlYWRTZXQ7Cit0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFRocmVh
ZD4+IFRocmVhZFNldDsKIHN0YXRpYyBUaHJlYWRTZXQmIGphdmFTY3JpcHRUaHJlYWRzKCkKIHsK
ICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVGhyZWFkU2V0LCBzdGF0aWNKYXZh
U2NyaXB0VGhyZWFkcywgKCkpOwpAQCAtMTA4LDEwICsxMDgsMTAgQEAgdm9pZCBydW5KYXZhU2Ny
aXB0VGhyZWFkKHZvaWQqKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKLSAgICAgICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGRldGFjaFRocmVhZCh0
aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLnJlbW92ZSh0aHJlYWQpOwotICAg
ICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFTY3JpcHRU
aHJlYWQsIDAsIDApKTsKKyAgICAgICAgVGhyZWFkJiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQo
KTsKKyAgICAgICAgdGhyZWFkLmRldGFjaCgpOworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygp
LnJlbW92ZSgmdGhyZWFkKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhyZWFk
OjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBzdGFydEphdmFTY3JpcHRUaHJlYWRzKCkK
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50OyArK2kpCi0gICAg
ICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRocmVhZCgmcnVuSmF2YVNjcmlwdFRo
cmVhZCwgMCwgMCkpOworICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChUaHJlYWQ6OmNy
ZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwogfQogCiB2b2lkIHN0b3BKYXZhU2Ny
aXB0VGhyZWFkcygpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVh
ZHMoKQogICAgICAgICBqYXZhU2NyaXB0VGhyZWFkc1Nob3VsZFRlcm1pbmF0ZSA9IHRydWU7CiAg
ICAgfQogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIGphdmFTY3JpcHRUaHJlYWRzQ291
bnQ+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCBqYXZhU2NyaXB0VGhyZWFk
c0NvdW50PiB0aHJlYWRzOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNj
cmlwdFRocmVhZHNNdXRleCgpKTsKICAgICAgICAgY29weVRvVmVjdG9yKGphdmFTY3JpcHRUaHJl
YWRzKCksIHRocmVhZHMpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgc3RvcEphdmFTY3JpcHRU
aHJlYWRzKCkKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGphdmFTY3JpcHRU
aHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
c1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICB7
CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggMGI1ZGJlMDBm
NDEyNGI3ZDhkZWFkZDUxNTY3YmJhMTc5MjM1MDg1MC4uYWYxNmQ2NjNmZDBjYzk4ZDk5MjUzNjY3
MTcxMmMzNzIxNDZiYjIwOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbQpAQCAtMTA3Miw4ICsxMDcyLDggQEAgc3RhdGljIHZvaWQgdGVzdFRocmVhZElkZW50
aWZpZXJNYXAoKQogICAgIHB0aHJlYWRfam9pbihwdGhyZWFkLCAwKTsKIAogICAgIC8vIE5vdyBj
cmVhdGUgYW5vdGhlciB0aHJlYWQgdXNpbmcgV1RGLiBPbiBPU1gsIGl0IHdpbGwgaGF2ZSB0aGUg
c2FtZSBwdGhyZWFkIGhhbmRsZQotICAgIC8vIGJ1dCBzaG91bGQgZ2V0IGEgZGlmZmVyZW50IFRo
cmVhZElkZW50aWZpZXIuCi0gICAgY3JlYXRlVGhyZWFkKHJ1blRocmVhZCwgMCwgIkR1bXBSZW5k
ZXJUcmVlOiB0ZXN0Iik7CisgICAgLy8gYnV0IHNob3VsZCBnZXQgYSBkaWZmZXJlbnQgUmVmUHRy
PFRocmVhZD4uCisgICAgVGhyZWFkOjpjcmVhdGUocnVuVGhyZWFkLCAwLCAiRHVtcFJlbmRlclRy
ZWU6IHRlc3QiKTsKIH0KIAogc3RhdGljIHZvaWQgYWxsb2NhdGVHbG9iYWxDb250cm9sbGVycygp
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAppbmRleCA4NDg1
MjczNTFmNjA2M2ZjMjYzNjg3ODA1NmQ5YzI0ZGJhYmU4M2RjLi43NzIxNjM2Yjc3ODA3ZjEzOTUx
ZWExMTJmYmQ0MTNlOGZhYzQ2MGJjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Db25kaXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0NvbmRpdGlvbi5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgQ29u
ZGl0aW9uIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlvbiBmdWxsQ29uZGl0aW9uOwogCi0g
ICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IGNvbnN1bWVyVGhyZWFkczsKLSAgICBWZWN0b3I8
VGhyZWFkSWRlbnRpZmllcj4gcHJvZHVjZXJUaHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhy
ZWFkPj4gY29uc3VtZXJUaHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gcHJvZHVj
ZXJUaHJlYWRzOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiByZWNlaXZlZDsKICAgICBMb2NrIHJl
Y2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGkt
LTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRl
VGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFk
OjpjcmVhdGUoCiAgICAgICAgICAgICAiQ29uc3VtZXIgdGhyZWFkIiwKICAgICAgICAgICAgIFsm
XSAoKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewpAQCAtMTA4LDcgKzEwOCw3IEBAIHZv
aWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUNvbmRpdGlvbiwg
bG9ja2VyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBDaGVj
a2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3Vs
ZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVh
ZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91
bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVl
dWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOwpAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICBzbGVlcChkZWxheSk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8
VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAi
UHJvZHVjZXIgVGhyZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzUGVyUHJvZHVjZXI7ICsraSkgewpA
QCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdWxsQ29uZGl0aW9uLCBsb2NrZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRD
b250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUu
c2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9uIHBy
ZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1ZXVl
LnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVv
dXQpOwpAQCAtMTU1LDggKzE1NSw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgcHJvZHVjZXJU
aHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQ
dHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0
aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgewogICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9ja2VyKGxvY2spOwpAQCAtMTY0LDggKzE2NCw4IEBAIHZv
aWQgcnVuVGVzdCgKICAgICB9CiAgICAgZW1wdHlDb25kaXRpb24ubm90aWZ5QWxsKCk7CiAKLSAg
ICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IGNvbnN1bWVyVGhyZWFk
cykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7Cisg
ICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogY29uc3VtZXJUaHJlYWRz
KQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAg
RVhQRUNUX0VRKG51bVByb2R1Y2VycyAqIG51bU1lc3NhZ2VzUGVyUHJvZHVjZXIsIHJlY2VpdmVk
LnNpemUoKSk7CiAgICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJlZ2luKCksIHJlY2VpdmVkLmVuZCgp
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKaW5kZXggNTU3NjMwMmQ2OTBk
ZmNhMzU5OTI5MjhiMWM4NTNjNzYyMmU0NWZiOS4uNmE0ZTUzOGY1NmY0NmQxNzdhM2Y2MmYxZGRl
YjNhNGQwYWYyYWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
TG9jay5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKQEAg
LTQ2LDEzICs0NiwxMyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3Vw
cywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZAogewogICAgIHN0ZDo6dW5p
cXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5cGVbXT4o
bnVtVGhyZWFkR3JvdXBzKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdvcmRzID0g
c3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxU
aHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQ
ZXJHcm91cCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1UaHJl
YWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKICAgICAgICAgd29yZHNbdGhyZWFkR3Jv
dXBJbmRleF0gPSAwOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1U
aHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7Ci0gICAgICAgICAgICB0aHJlYWRzW3Ro
cmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVh
dGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJl
YWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAg
ICAgICAiTG9jayB0ZXN0IHRocmVhZCIsCiAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5k
ZXgsICZsb2NrcywgJndvcmRzLCBudW1JdGVyYXRpb25zLCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9u
XSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUl0ZXJhdGlv
bnM7IGktLTspIHsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBydW5Mb2NrVGVzdCh1bnNpZ25lZCBu
dW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cCwgdW5zaWduZWQKICAg
ICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzICog
bnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykKLSAgICAgICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgICAgICB0aHJlYWRzW3RocmVh
ZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIGRvdWJsZSBleHBlY3RlZCA9IDA7
CiAgICAgZm9yICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0ZXJhdGlv
bnMpICogd29ya1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsgaS0tOykK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKaW5kZXggYzY3
ZTFlMDgxNWE4M2FmYTkzMzNlMmFjOWEyYmQ3OGI2N2IxNjQ1Yi4uNWFmOWM3YzgyN2IyMWUyMWQ4
ZGY5MzA1MjYwZDZmZmVlNjhmYmQxYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvUGFya2luZ0xvdC5jcHAKQEAgLTQ4LDE2ICs0OCwxNCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hU
ZXN0IHsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVRocmVhZHM7IGkt
LTspIHsKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKAotICAgICAgICAgICAgICAgIGNyZWF0
ZVRocmVhZCgKKyAgICAgICAgICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICAg
ICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAogICAgICAgICAgICAgICAgICAgICBbJl0gKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBjdXJyZW50VGhyZWFkKCkp
OwotCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRocmVhZCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhd2FrZS5hZGQoVGhyZWFkOjpjdXJyZW50KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdEF3b2tlbiA9ICZUaHJlYWQ6OmN1cnJlbnQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CiAgICAgICAgICAgICAgICAgICAgIH0p
KTsKICAgICAgICAgfQpAQCAtNjUsMTYgKzYzLDE2IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3Qg
ewogCiAgICAgdm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2luZ2xlVW5wYXJrSW5kZXgpCiAgICAg
ewotICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4pOworICAgICAgICBFWFBFQ1RfVFJV
RShudWxscHRyID09IGxhc3RBd29rZW4pOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgbnVt
V2FpdGluZ09uQWRkcmVzcyA9IDA7Ci0gICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyLCA4
PiBxdWV1ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+LCA4PiBxdWV1ZTsKICAgICAg
ICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBb
Jl0gKFRocmVhZCYgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgewogICAg
ICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZCh0aHJlYWRJZGVudGlm
aWVyKTsKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoJnRocmVhZElkZW50aWZpZXIpOwog
CiAgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOwogICAgICAgICAgICAgfSk7
CkBAIC04NywxMiArODUsMTIgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKICAgICAgICAgICAg
IHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJbmRleCArIDEpCiAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAgICAgICAgIEVYUEVDVF9ORSgwdSwg
bGFzdEF3b2tlbik7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShudWxscHRyICE9IGxhc3RBd29r
ZW4pOwogICAgICAgICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgcXVldWVbMF0gIT0gbGFz
dEF3b2tlbikgewogICAgICAgICAgICAgICAgIGRhdGFMb2coIldva2UgdXAgd3JvbmcgdGhyZWFk
OiBxdWV1ZSA9ICIsIGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFzdCBhd29rZW4gPSAiLCBsYXN0QXdv
a2VuLCAiXG4iKTsKICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEocXVldWVbMF0sIGxhc3RBd29r
ZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFzdEF3b2tlbiA9IDA7CisgICAgICAg
ICAgICBsYXN0QXdva2VuID0gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAwLDcg
Kzk4LDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgewogICAgICAgICB1bnNpZ25l
ZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgK
LSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykg
eworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIApAQCAtMTE0LDcgKzExMiw3IEBAIHN0cnVjdCBT
aW5nbGVMYXRjaFRlc3QgewogCiAgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwogICAg
ICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlm
aWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYsIGNv
bnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2Vt
YXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKQEAgLTEy
OSw4ICsxMjcsOCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgICAgICAgICBj
b25kaXRpb24ud2FpdChsb2NrZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQotICAgICAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIGZvciAoUmVmUHRy
PFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMpCisgICAgICAgICAgICB0aHJlYWRJ
ZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIAogICAgIC8vIFNlbWFwaG9y
ZSBvcGVyYXRpb25zLgpAQCAtMTc5LDkgKzE3Nyw5IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3Qg
ewogICAgIEF0b21pYzxpbnQ+IHNlbWFwaG9yZTsKICAgICBzdGQ6Om11dGV4IGxvY2s7CiAgICAg
c3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uOwotICAgIEhhc2hTZXQ8VGhyZWFkSWRl
bnRpZmllcj4gYXdha2U7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7Ci0g
ICAgVGhyZWFkSWRlbnRpZmllciBsYXN0QXdva2VuIHsgMCB9OworICAgIEhhc2hTZXQ8UmVmPFRo
cmVhZD4+IGF3YWtlOworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gdGhyZWFkczsKKyAgICBS
ZWZQdHI8VGhyZWFkPiBsYXN0QXdva2VuIHsgbnVsbHB0ciB9OwogfTsKIAogdm9pZCBydW5QYXJr
aW5nVGVzdCh1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxheSwgdW5zaWduZWQgbnVt
VGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykK
</data>
<flag name="review"
          id="328111"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306904</attachid>
            <date>2017-04-12 03:26:04 -0700</date>
            <delta_ts>2017-04-12 03:48:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170502-20170412192602.patch</filename>
            <type>text/plain</type>
            <size>230097</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
OTJjOWYwYTNmYTAyMGI4ZDU2YWRjN2VkYjgyMTczYjIzMTM5YThiLi4yZTVjMzFlYWJjMDY4Yzcw
ZGQ5NWMxOTZkYTVmN2QzMmI4MzVjYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6cmVtb3Zl
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91
bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6TWFjaGlu
ZVRocmVhZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpn
ZXRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVh
ZDo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBv
aW50ZXIpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVn
aXN0ZXJzOjpsbGludFBDKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVU
aHJlYWQ6OmNhcHR1cmVTdGFjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlD
b3B5T3RoZXJUaHJlYWRTdGFjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlD
b3B5T3RoZXJUaHJlYWRTdGFja3MpOgorICAgICAgICAocHRocmVhZFNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dGhyZWFkRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpv
cGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Om1hY2hp
bmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVhZERhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpyZXN1bWUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Z2V0UmVnaXN0
ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6
OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5z
dHJ1Y3Rpb25Qb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmNhcHR1cmVTdGFjayk6IERl
bGV0ZWQuCisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6cmVzdW1lKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnRocmVhZElEKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0VuZCk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjp0aHJlYWRzTGlzdEhlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZDo6c3VzcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjYXB0dXJlU3RhY2spOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpwbGF0Zm9ybVRocmVhZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnN0YWNrQmFz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnN0YWNr
RW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6
OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjp+SUNTdGF0cyk6Cisg
ICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVu
Y3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KToKKyAgICAgICAgKHN0YXJ0VGltZW91dFRocmVhZElmTmVl
ZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9j
azo6bG9jayk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suaDoKKyAgICAgICAgKEpTQzo6SlNM
b2NrOjpvd25lclRocmVhZCk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2spOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjppc1ZhbGlkRnJhbWVQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcik6CisgICAgICAgIChKU0M6
OlNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpW
TTo6b3duZXJUaHJlYWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAg
IChKU0M6OmZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFw
czo6U2lnbmFsU2VuZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6ZmlyZVRyYXAp
OgorCiAyMDE3LTA0LTExICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEaXNhYmxlIG91dGRhdGVkIFdyaXRhYmxlU3RyZWFtIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA5NGYwNzg0ZDhjOTYx
NDIwN2FhNTk3NWQwMTM4M2YwYWFhYmEyOTkzLi40MDQyNzJjOWE2NzIzODdjZjMyYWZjY2YwN2M5
YjY5NDhkZjIzOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MiBAQAorMjAxNy0wNC0xMiAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2Ug
VGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhy
ZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZWZh
Y3RvcmluZyBvZiBXVEYgVGhyZWFkaW5nIG1lY2hhbmlzbSB0byBtZXJnZSBKYXZhU2NyaXB0Q29y
ZSdzIHRocmVhZGluZyBleHRlbnNpb24gdG8gV1RGIFRocmVhZGluZy4KKyAgICAgICAgUHJldmlv
dXNseSwgSmF2YVNjcmlwdENvcmUgcmVxdWlyZXMgcmljaGVyIHRocmVhZGluZyBmZWF0dXJlcyAo
c3VjaCBhcyBzdXNwZW5kaW5nIGFuZCByZXN1bWluZyB0aHJlYWRzKSwgYW5kIHRoZXkKKyAgICAg
ICAgYXJlIGltcGxlbWVudGVkIGZvciBQbGF0Zm9ybVRocmVhZCBpbiBKYXZhU2NyaXB0Q29yZS4g
QnV0IHRoZXNlIGZlYXR1cmVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXVEYgVGhyZWFkaW5n
IHNpZGUKKyAgICAgICAgaW5zdGVhZCBvZiBtYWludGFpbmluZyBKU0MncyBvd24gdGhyZWFkaW5n
IGZlYXR1cmVzIHRvby4gVGhpcyBwYXRjaCByZW1vdmVzIHRoZXNlIGZlYXR1cmVzIGZyb20gSlND
IGFuZCBtb3ZlIGl0IHRvCisgICAgICAgIFdURiBUaHJlYWRpbmcuCisKKyAgICAgICAgSG93ZXZl
ciwgY3VycmVudCBXVEYgVGhyZWFkaW5nIGhhcyBvbmUgcHJvYmxlbTogV2luZG93cyB2ZXJzaW9u
IG9mIFdURiBUaHJlYWRpbmcgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZnJvbSBQdGhyZWFkcwor
ICAgICAgICBvbmUuIEluIFdpbmRvd3MgV1RGIFRocmVhZGluZywgd2UgY2Fubm90IHBlcmZvcm0g
YW55IG9wZXJhdGlvbiBhZnRlciB0aGUgdGFyZ2V0IHRocmVhZCBpcyBkZXRhY2hlZDogV1RGIFRo
cmVhZGluZyBzdG9wCisgICAgICAgIHRyYWNraW5nIHRoZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIG9u
Y2UgdGhlIHRocmVhZCBpcyBkZXRhY2hlZC4gQnV0IHRoaXMgaXMgbm90IHRoZSBzYW1lIHRvIFB0
aHJlYWRzIG9uZS4gSW4gUHRocmVhZHMsCisgICAgICAgIHB0aHJlYWRfZGV0YWNoIGp1c3QgbWVh
bnMgdGhhdCB0aGUgcmVzb3VyY2Ugb2YgdGhlIHRocmVhZCB3aWxsIGJlIGRlc3Ryb3llZCBhdXRv
bWF0aWNhbGx5LiBXaGlsZSBzb21lIG9wZXJhdGlvbnMgbGlrZQorICAgICAgICBwdGhyZWFkX2pv
aW4gd2lsbCBiZSByZWplY3RlZCwgc29tZSBvcGVyYXRpb25zIGxpa2UgcHRocmVhZF9raWxsIHdp
bGwgYmUgYWNjZXB0ZWQuCisKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhhdCBkZXRhY2hlZCB0
aHJlYWQgY2FuIGJlIHN1c3BlbmRlZCBhbmQgcmVzdW1lZCBpbiBKU0MuIEZvciBleGFtcGxlLCBp
biBqc2MuY3BwLCB3ZSBzdGFydCB0aGUgd29ya2VyCisgICAgICAgIHRocmVhZCBhbmQgZGV0YWNo
IGl0IGltbWVkaWF0ZWx5LiBJbiB3b3JrZXIgdGhyZWFkLCB3ZSB3aWxsIGNyZWF0ZSBWTSBhbmQg
dGh1cyBjb25jdXJyZW50IEdDIHdpbGwgc3VzcGVuZCBhbmQgcmVzdW1lCisgICAgICAgIHRoZSBk
ZXRhY2hlZCB0aHJlYWQuIEhvd2V2ZXIsIGluIFdpbmRvd3MgV1RGIFRocmVhZGluZywgd2UgaGF2
ZSBubyByZWZlcmVuY2UgdG8gdGhlIGRldGFjaGVkIHRocmVhZC4gVGh1cyB3ZSBjYW5ub3QKKyAg
ICAgICAgcGVyZm9ybSBzdXNwZW5kIGFuZCByZXN1bWUgb3BlcmF0aW9ucyBvbnRvIHRoZSBkZXRh
Y2hlZCB0aHJlYWQuCisKKyAgICAgICAgVG8gc29sdmUgdGhlIHByb2JsZW0sIHdlIGNoYW5nZSBX
aW5kb3dzIFRocmVhZGluZyBtZWNoYW5pc20gZHJhc3RpY2FsbHkgdG8gYWxpZ24gaXQgdG8gdGhl
IFB0aHJlYWQgc2VtYW50aWNzLiBJbiB0aGUKKyAgICAgICAgbmV3IFRocmVhZGluZywgd2UgaGF2
ZSBSZWZQdHI8VGhyZWFkPiBjbGFzcy4gSXQgaG9sZHMgYSBoYW5kbGUgdG8gYSBwbGF0Zm9ybSB0
aHJlYWQuIFdlIGNhbiBwZXJmb3JtIHRocmVhZGluZyBvcGVyYXRpb25zCisgICAgICAgIHdpdGgg
dGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsIFRocmVhZDo6c3VzcGVuZCBpcyBvZmZlcmVkLiBBbmQg
d2UgdXNlIGRlc3RydWN0b3Igb2YgdGhlIHRocmVhZCBsb2NhbCB2YXJpYWJsZSB0byByZWxlYXNl
CisgICAgICAgIHRoZSByZXNvdXJjZXMgaGVsZCBieSBSZWZQdHI8VGhyZWFkPi4gSW4gV2luZG93
cywgVGhyZWFkOjpkZXRhY2ggZG9lcyBub3RoaW5nIGJlY2F1c2UgdGhlIHJlc291cmNlIHdpbGwg
YmUgZGVzdHJveWVkCisgICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgUmVmUHRyPFRocmVhZD4uCisK
KyAgICAgICAgVG8gZG8gc28sIHdlIGludHJvZHVjZSBUaHJlYWRIb2xkZXIgZm9yIFdpbmRvd3Mu
IFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgVGhyZWFkSWRlbnRpZmllckRhdGEgZm9y
IFB0aHJlYWRzLgorICAgICAgICBJdCBob2xkcyBSZWZQdHI8VGhyZWFkPiBpbiB0aGUgdGhyZWFk
IGxvY2FsIHN0b3JhZ2UgKHRlY2huaWNhbGx5LCBpdCBpcyBGaWJlciBMb2NhbCBTdG9yYWdlIGlu
IFdpbmRvd3MpLiBUaHJlYWQ6OmN1cnJlbnQoKQorICAgICAgICB3aWxsIHJldHVybiB0aGlzIHJl
ZmVyZW5jZS4KKworICAgICAgICBUaGUgcHJvYmxlbWF0aWMgc2l0dWF0aW9uIGlzIHRoYXQgdGhl
IG9yZGVyIG9mIHRoZSBkZWFsbG9jYXRpb24gb2YgdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIGlz
IG5vdCBkZWZpbmVkLiBTbyB3ZSBzaG91bGQKKyAgICAgICAgbm90IHRvdWNoIHRocmVhZCBsb2Nh
bCBzdG9yYWdlIGluIHRoZSBkZXN0cnVjdG9yIG9mIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZS4g
VG8gYXZvaWQgc3VjaCBlZGdlIGNhc2VzLCB3ZSBoYXZlCisgICAgICAgIGN1cnJlbnRUaHJlYWQo
KSAvIFRocmVhZDo6Y3VycmVudElEKCkgQVBJcy4gVGhleSBhcmUgc2FmZSB0byBiZSBjYWxsZWQg
ZXZlbiBpbiB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgb3RoZXIgdGhyZWFkIGxvY2FsCisgICAgICAg
IHN0b3JhZ2UuIEFuZCBpbiBXaW5kb3dzLCBpbiB0aGUgRkxTIGRlc3RydWN0b3IsIHdlIHdpbGwg
Y3JlYXRlIHRoZSB0aHJlYWRfbG9jYWwgdmFyaWFibGUgdG8gZGVmZXIgdGhlIGRlc3RydWN0aW9u
IG9mCisgICAgICAgIHRoZSBUaHJlYWRIb2xkZXIuIFdlIGVuc3VyZSB0aGF0IHRoaXMgZGVzdHJ1
Y3RvciBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG90aGVyIEZMUyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVk
IGluIFdpbmRvd3MgMTAuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0
cmFsLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFy
a3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6CisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRU
ZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdU
Rjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisgICAgICAgICogd3RmL01lbW9yeVByZXNz
dXJlSGFuZGxlci5oOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcDoKKyAg
ICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6dHJ5TG9ja0Zv
cik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6Ondv
cmtlclRocmVhZCk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaDoKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6VGhyZWFkUHJpdmF0
ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorICAgICAgICAoV1RG
OjpQYXJraW5nTG90Ojpmb3JFYWNoSW1wbCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoK
KyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9yRWFjaCk6CisgICAgICAgICogd3RmL1BsYXRm
b3JtUmVnaXN0ZXJzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9QbGF0Zm9ybVRocmVhZC5oLgorICAgICAgICAqIHd0Zi9SZWZQdHIuaDoKKyAgICAgICAgKFdU
Rjo6UmVmUHRyOjpSZWZQdHIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaDoKKyAgICAgICAgKFdURjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uOjpUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24pOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmguCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6dGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjpUaHJlYWRIb2xkZXIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xk
ZXJQdGhyZWFkcy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFs
aXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xk
ZXJXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOgorICAgICAg
ICAoV1RGOjp0aHJlYWRNYXApOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxp
emVPbmNlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAgICogd3RmL1RocmVhZFNwZWNp
ZmljLmg6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAgICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6YWRqdXN0ZWRR
T1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZHVtcCk6CisgICAgICAgIChXVEY6Omlu
aXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjpub3JtYWxpemVUaHJlYWROYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
YWRqdXN0ZWRRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmlkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRCZWNvbWVE
ZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkSm9pbik6CisgICAgICAgIChXVEY6
OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisgICAg
ICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpU
aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFk
Ojppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjppbml0aWFsaXpl
Q3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQpOgorICAgICAgICAoV1RGOjp3dGZUaHJl
YWRFbnRyeVBvaW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjcmVhdGVJbnRlcm5hbCk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6Y2hhbmdlUHJpb3JpdHkpOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OndhaXRGb3JDb21wbGV0aW9uKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkZXRhY2gpOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1
cnJlbnRJRCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFsKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6ZGlkRXhpdCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0
YWJsaXNoKToKKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpQdGhyZWFkU3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmpvaW5hYmxlU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OnB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEJlY29tZURldGFjaGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpkaWRFeGl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6UHRocmVhZFN0YXRlOjpkaWRKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRo
cmVhZFN0YXRlOjpoYXNFeGl0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXBN
dXRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpp
ZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZXN0YWJs
aXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpw
dGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkRGlkRXhpdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzaWduYWxU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKToKKyAg
ICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6
OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Vy
cmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppbml0
aWFsaXplVGhyZWFkaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6c3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1dvcmtRdWV1ZS5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6Y29uY3Vy
cmVudEFwcGx5KToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2Nv
Y29hL1dvcmtRdWV1ZUNvY29hLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hRT1NDbGFzcyk6
CisgICAgICAgICogd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRm
b3JtSW52YWxpZGF0ZSk6CisgICAgICAgICogd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxl
ckxpbnV4LmNwcDoKKyAgICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZE
UG9sbGVyOjpFdmVudEZEUG9sbGVyKToKKyAgICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjpFdmVudEZEUG9sbGVyOjp+RXZlbnRGRFBvbGxlcik6CisgICAgICAgICogd3RmL3dpbi9N
YWluVGhyZWFkV2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0
Zm9ybSk6CisKIDIwMTctMDQtMTEgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdIFVzZSB0aGUgRGlzcGxheVJlZnJlc2hNb25pdG9yIGZhY2lsaXRp
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAyODAzNmY1OGU2NTA1NDUwZWViM2Y1NjYzODg2NGViODNkOWIyZjZj
Li43MTAwZGMwMjA5NWE1YjhkNDk1Mzc0MjMwM2FmYTRkZTYwNzUzOThjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTctMDQtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNl
IFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlv
biBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBVc2UgVGhyZWFkOjogQVBJcy4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFz
eW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5n
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6ZGF0
YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERh
dGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0
YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJl
YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpnZXRUaHJlYWRJRCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2lu
Zyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6b3Blbik6CisgICAgICAg
IChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVk
ZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
aHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OkhSVEZEYXRhYmFz
ZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OmxvYWRBc3lu
Y2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OndhaXRG
b3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
RGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJDb252b2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6flJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nm
L0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkZXJSdW5Mb29wKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVhZCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQpOgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0xMiAgUGVyIEFybmUgVm9sbGFuICA8cHZv
bGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IHN0cm9rZS1jb2xvciBDU1MgcHJv
cGVydHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDEyNzAxY2UzOWM4ZDRkYWMzYTlhYzI5YTBmYjQ5MjNkYjExNmUy
YmEuLjQyOWNiNGIwNzNiYzIxMWJjZTNlMGQyM2EyNmU5OWEyMjU3YzNhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTctMDQtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNl
IFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlv
biBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBVc2UgVGhyZWFkOjogQVBJcy4K
KworICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJl
YWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAgICog
U3RvcmFnZS9TdG9yYWdlVGhyZWFkLmg6CisKIDIwMTctMDQtMTAgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEcm9wIFRpbWVyOjpzdGFydE9uZVNob3QoKSBvdmVy
bG9hZCB0YWtpbmcgYSBkb3VibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2NWNlN2UzM2IyNzY2MGZiYWRmZDEz
OWU3YmEyMjNlMDI3ZDAxOGMxLi45OWRkNGE1MDA4YzVkMDdkYjYwNzlmMjcyYmZmZGFkZWU1MDEy
ODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMTIgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRo
cmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVh
ZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBV
c2UgVGhyZWFkOjogQVBJcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
SU9DaGFubmVsU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFu
bmVsOjpyZWFkU3luY0luVGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlv
bi5jcHA6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Up
OgorICAgICAgICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQ
Q1NlcnZpY2VFbnRyeVBvaW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0aWFs
aXplcik6CisgICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1
cmVNb25pdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTctMDQt
MTIgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQgR1RLKyBkZWJ1ZyBidWlsZCBmaXguIERyb3AgYW4gdW51c2VkIGRlYnVnLW9ubHkgbWVt
YmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVB
bmRTd2FwVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVB
bmRTd2FwVGVzdC5jcHAKaW5kZXggZTc4MDg2YzNhOTYxMmEyZjBiNGQ3YWFmMWFkYzdiYTFhMTAx
YzU0Ny4uNDNhZWYwNzc5NzBjZmVkYjJjYWMwNDYzZmNkOWVjY2EyOWQxNTI1NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcApAQCAtOTYsNyArOTYsNyBAQCB2b2lkIHRlc3RDb21wYXJlQW5kU3dhcCgpCiB7CiAgICAg
Qml0bWFwIGJpdG1hcDsKICAgICBjb25zdCBpbnQgbnVtVGhyZWFkcyA9IDU7Ci0gICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRHNbbnVtVGhyZWFkc107CisgICAgUmVmUHRyPFRocmVhZD4gdGhy
ZWFkc1tudW1UaHJlYWRzXTsKICAgICBEYXRhIGRhdGFbbnVtVGhyZWFkc107CiAKICAgICBXVEY6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTEwNywxMiArMTA3LDEyIEBAIHZvaWQgdGVzdENv
bXBhcmVBbmRTd2FwKCkKICAgICAgICAgZGF0YVtpXS5pZCA9IGk7CiAgICAgICAgIGRhdGFbaV0u
bnVtVGhyZWFkcyA9IG51bVRocmVhZHM7CiAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiB0
aHJlYWRGdW5jID0gc3RkOjpiaW5kKHNldEJpdFRocmVhZEZ1bmMsICZkYXRhW2ldKTsKLSAgICAg
ICAgdGhyZWFkSURzW2ldID0gY3JlYXRlVGhyZWFkKCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhyZWFk
RnVuYyk7CisgICAgICAgIHRocmVhZHNbaV0gPSBUaHJlYWQ6OmNyZWF0ZSgic2V0Qml0VGhyZWFk
RnVuYyIsIHRocmVhZEZ1bmMpOwogICAgIH0KIAogICAgIHByaW50ZigiV2FpdGluZyBmb3IgJWQg
dGhyZWFkcyB0byBqb2luXG4iLCBudW1UaHJlYWRzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
SURzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAg
IHByaW50ZigiUEFTUzogQ29tcGFyZUFuZFN3YXAgdGVzdCBjb21wbGV0ZWQgd2l0aG91dCBhIGhh
bmdcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZjE2NmMzN2RhNDlh
ZGRmZmFlYjc2N2NmMWM5OGJiZWFjN2IzMGZjLi45Yjk0ZjMwYjk4N2YzMDk2ZTAzNWE2ZjliNmZh
OWQ5MTFjNmY1YmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjQ3MSw3ICsy
NDcxLDYgQEAKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQyODdCMTE1RUM5
QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hk
b2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVE
OTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsgfTsKIAkJRkVEOTRGMkYx
NzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRUU0
M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRTQzRkNEMUU2NjQxNDAwMDc3RDZEMSAv
KiBQbGF0Zm9ybVRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRl
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVG
MDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgKi87IH07CiAJ
CUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRkQ2RkM1MUQ1RTc5NzAwMDhG
MkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCkBAIC01MTAx
LDcgKzUxMDAsNiBAQAogCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hkb2cuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRGIC8qIFBpbmdQb25nU3Rh
Y2tPdmVyZmxvd1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvUGluZ1BvbmdT
dGFja092ZXJmbG93VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREE1
MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsg
cGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRo
cmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRocmVhZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAg
LyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFu
ZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTIxQUFF
QzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9Db21w
YXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGRDZGQzUx
RDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY4NjYsNyArNjg2NCw2IEBACiAJCQkJRjY5MkE4NzgwMjU1NTk3RDAxRkY2MEY3IC8q
IE9wZXJhdGlvbnMuaCAqLywKIAkJCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9u
cy5jcHAgKi8sCiAJCQkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLywK
LQkJCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLywKIAkJ
CQk4Njg5MTZBOTE1NUYyODU0MDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCAqLywKIAkJCQkxNDcz
NDFERjFEQzJDRTk2MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUuY3BwICovLAogCQkJCTE0
NzM0MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5oICovLApAQCAtOTM0
OCw3ICs5MzQ1LDYgQEAKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1w
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRTQzRkNFMUU2NjQxNzEwMDc3
RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMjcxQkRB
MDhFRjAwMzMxQjg0IC8qIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzA1QjQxQjAxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAppbmRl
eCA4N2IzNTNhYTM3OTI1Y2ExZTJmYTg0MTE5OTc2YWRmMGIxZTA3YmFhLi5jOTE3NzA3OTU4OGY4
NmQ0MzFhMjhiYzA3NGQ0ZmUyZTNmMTNkYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvdGVzdGFpci5jcHAKQEAgLTE5MTMsMTAgKzE5MTMsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMo
KTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgIGNyZWF0ZVRo
cmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJ0ZXN0
YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAg
ICBmb3IgKDs7KSB7CkBAIC0xOTMzLDggKzE5MzMsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkIDogdGhyZWFkcykKKyAg
ICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNyYXNoTG9jay5sb2NrKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXggMDE5OTZhZjcxYWI0ZjA5
ZWI0OWI3MDExYzE3ZGJjOTNjNDBjZTg3YS4uOTA0NjU2NDg4N2I2YjNhNGFmYWMzNTlkYzEwYzUw
Mzg0ZDc0ZGVmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKQEAgLTE2ODUwLDEw
ICsxNjg1MCwxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBMb2NrIGxv
Y2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBWZWN0b3I8
UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8g
MSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CiAgICAgICAgIHRocmVh
ZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgVGhyZWFk
OjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAogICAgICAgICAgICAg
ICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTE2ODcwLDgg
KzE2ODcwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAgICAgICAgICAg
IH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkIDogdGhyZWFk
cykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAgICBmb3IgKFJl
ZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCmluZGV4IGE0ZTIxZjlmYTNjZDQ3
MjFlYTI2NzVlMDZlNGQ1MzBjNWJhOTViMzUuLmU5YjFmNWMyZjBiYzI3YjAyOTMxMGM1NTgxNTIw
YjFiNTUyMjU5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dXBlclNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBl
clNhbXBsZXIuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgaW5pdGlhbGl6ZVN1cGVyU2FtcGxl
cigpCiAgICAgaWYgKCFPcHRpb25zOjp1c2VTdXBlclNhbXBsZXIoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY3JlYXRlVGhyZWFkKAorICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAiSlND
IFN1cGVyIFNhbXBsZXIiLAogICAgICAgICBbXSAoKSB7CiAgICAgICAgICAgICBjb25zdCBpbnQg
c2xlZXBRdWFudHVtID0gMTA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwCmluZGV4IGNlZjk5MGNiNDgzM2E2YmI5NDcxYmQwOGE1MDRlNTVmYjQ3ZGY0NTguLmFkMGVj
YzY5YTc3ZDE3MmNmNGJjMWVmYWM5M2RmOTMwMjdjMDA5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3MgV29ya2xp
c3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKICAgICAgICAgICAgIGRh
dGFMb2cobV93b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0ZWRcbiIpOwogICAgICAgICAKICAgICAg
ICAgaWYgKG1fcmVsYXRpdmVQcmlvcml0eSkKLSAgICAgICAgICAgIGNoYW5nZVRocmVhZFByaW9y
aXR5KGN1cnJlbnRUaHJlYWQoKSwgbV9yZWxhdGl2ZVByaW9yaXR5KTsKKyAgICAgICAgICAgIFRo
cmVhZDo6Y3VycmVudCgpLmNoYW5nZVByaW9yaXR5KG1fcmVsYXRpdmVQcmlvcml0eSk7CiAgICAg
ICAgIAogICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uU2NvcGU+KCk7CiAgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPExvbmdMaXZlZFN0YXRlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4IDc4OGE2YzM2MjM2OWM1OGRhZDI5YTYw
YTM4NzEwNDRlNDY0ZWQzMDUuLjJiODI0ZWNmZGU1ODkzYjJjNmI3MDZmNDcwMmVjZDIyOTVkMjM1
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNz
ZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgQXN5bmNocm9ub3VzRGlzYXNzZW1i
bGVyIHsKIHB1YmxpYzoKICAgICBBc3luY2hyb25vdXNEaXNhc3NlbWJsZXIoKQogICAgIHsKLSAg
ICAgICAgY3JlYXRlVGhyZWFkKCJBc3luY2hyb25vdXMgRGlzYXNzZW1ibGVyIiwgWyZdICgpIHsg
cnVuKCk7IH0pOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiQXN5bmNocm9ub3VzIERpc2Fzc2Vt
YmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbnF1ZXVl
KHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+IHRhc2spCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCmluZGV4IDNhZWUzMDEwNGY1MjkxYTI4NzY0YTVjZGVlNWFhOGYwY2E3MmFk
MzEuLjcyMjNiMjBjOWRmYmExMDQzMDk4YTc4NTc0YmEyOGE2OTRjMDQ1YmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBIZWFwOjpsYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpCiAgICAgICAgICAgICBtX3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29u
dGludW91c2x5ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseUNvbmRp
dGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgfQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbihtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQpOworICAgICAgICBtX2NvbGxlY3RDb250
aW51b3VzbHlUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogICAgIAogICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQpAQCAtMjY4MSw3ICsyNjgxLDcgQEAgdm9pZCBIZWFwOjpub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKQogICAgIG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKICAgICAK
ICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKSB7Ci0gICAgICAgIG1fY29s
bGVjdENvbnRpbnVvdXNseVRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgbV9jb2xsZWN0
Q29udGludW91c2x5VGhyZWFkID0gV1RGOjpUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJK
U0MgREVCVUcgQ29udGludW91cyBHQyIsCiAgICAgICAgICAgICBbdGhpc10gKCkgewogICAgICAg
ICAgICAgICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAxNmJlZWY5YTg5ZDA2ZGYy
Nzk3MTdlNzcwYjE2NGE0NzE0Li5kNjc4MzdhZmVmMTMwMWY5NjcyZjYwZWEyOWM0M2ZjODU5N2Rl
YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC00OSw2ICs0OSw3IEBACiAjaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjY2LDcgKzY2Nyw3IEBAIGNsYXNzIEhlYXAg
ewogICAgIExvY2sgbV9jb2xsZWN0Q29udGludW91c2x5TG9jazsKICAgICBDb25kaXRpb24gbV9j
b2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uOwogICAgIGJvb2wgbV9zaG91bGRTdG9wQ29sbGVj
dGluZ0NvbnRpbnVvdXNseSB7IGZhbHNlIH07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2NvbGxl
Y3RDb250aW51b3VzbHlUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFdURjo6VGhyZWFkPiBtX2Nv
bGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyBudWxscHRyIH07CiAgICAgCiAgICAgTW9ub3Rvbmlj
VGltZSBtX2xhc3RHQ1N0YXJ0VGltZTsKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEdDRW5kVGlt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIu
Y3BwCmluZGV4IGI4NWI3NjQ4ZTJmNWQxOWZhMjJkNzYzZjdiY2RlZjhmNDRjNDJjODguLjkxYjhl
YWE3N2IyZGVlMGUwMmJjNDhhZGQxMjZiNWU3YjMxNGVhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApAQCAtMzYsOTIgKzM2LDEw
IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCi0jaWYgT1MoREFSV0lOKQotCi0jaW5jbHVkZSA8bWFjaC9tYWNoX2luaXQu
aD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgotI2luY2x1ZGUgPG1hY2gvdGFzay5oPgot
I2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+Ci0K
LSNlbGlmIE9TKFdJTkRPV1MpCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8bWFs
bG9jLmg+Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1
ZGUgPHVuaXN0ZC5oPgotCi0jaWYgT1MoU09MQVJJUykKLSNpbmNsdWRlIDx0aHJlYWQuaD4KLSNl
bHNlCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFKFBUSFJFQURfTlBf
SCkKLSNpbmNsdWRlIDxwdGhyZWFkX25wLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykg
JiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8v
IFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4g
SmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
PSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFsTG9jazsKLXRocmVhZF9s
b2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSo+
IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQotc3RhdGljIHZvaWQgcHRo
cmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNv
bnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9t
IHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQubG9hZCgpOwot
Ci0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0
aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCi0gICAgICAg
IC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3Mu
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5
c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUg
cmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCi0gICAg
ICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3Jl
KHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVk
LgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1
Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVj
b250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVD
b250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOwotI2Vsc2UKLSAgICB0
aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19tY29u
dGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQg
dGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25h
bC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNp
Z25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVi
cy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKLSAg
ICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3Vy
ZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCi0gICAg
Ly8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRl
ZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNl
bWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhy
ZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25m
aWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5n
IHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVm
ZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1
cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OwotICAgIHNpZ2ZpbGxzZXQo
JmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7
Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlz
IHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRS
ZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFP
UyhEQVJXSU4pCi0KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRocmVhZDsKLQogY2xhc3Mg
QWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyOwogc3RhdGljIEFjdGl2ZU1hY2hpbmVUaHJlYWRz
TWFuYWdlciYgYWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyKCk7CiAKQEAgLTE5NCw0MSArMTEy
LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNp
ZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBM
b2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgp
OwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAg
ICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKE1hY2hpbmVUaHJlYWQqIHQgPSBt
X3JlZ2lzdGVyZWRUaHJlYWRzOyB0OykgeworICAgICAgICBNYWNoaW5lVGhyZWFkKiBuZXh0ID0g
dC0+bmV4dDsKICAgICAgICAgZGVsZXRlIHQ7CiAgICAgICAgIHQgPSBuZXh0OwogICAgIH0KIH0K
IAotc3RhdGljIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhKiB0aHJlYWREYXRhKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkU3BlY2lmaWM8TWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGEsIENhbkJlR0NUaHJlYWQ6OlRydWU+PiB0aHJlYWREYXRhOwotICAgIHJldHVybiB0
aHJlYWREYXRhLmdldCgpOwotfQotCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpUaHJlYWQoVGhy
ZWFkRGF0YSogdGhyZWFkRGF0YSkKLSAgICA6IGRhdGEodGhyZWFkRGF0YSkKLXsKLSAgICBBU1NF
UlQodGhyZWFkRGF0YSk7Ci19Ci0KLVRocmVhZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6Y3Jl
YXRlRm9yQ3VycmVudFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIG5ldyBUaHJlYWQodGhyZWFkRGF0
YSgpKTsKLX0KLQotYm9vbCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpvcGVyYXRvcj09KGNvbnN0
IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QKLXsKLSNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJ
TkRPV1MpCi0gICAgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkID09IG90aGVyOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIHJldHVybiAhIXB0aHJlYWRfZXF1YWwoZGF0YS0+cGxhdGZvcm1U
aHJlYWQsIG90aGVyKTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBjb21wYXJlIHRocmVh
ZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KIHZvaWQgTWFjaGluZVRocmVhZHM6OmFk
ZEN1cnJlbnRUaHJlYWQoKQogewogICAgIGlmICh0aHJlYWRTcGVjaWZpY0dldChtX3RocmVhZFNw
ZWNpZmljRm9yTWFjaGluZVRocmVhZHMpKSB7CkBAIC0yMzksNyArMTI5LDcgQEAgdm9pZCBNYWNo
aW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwor
ICAgIE1hY2hpbmVUaHJlYWQqIHRocmVhZCA9IG5ldyBNYWNoaW5lVGhyZWFkKCk7CiAgICAgdGhy
ZWFkU3BlY2lmaWNTZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzLCB0aGlzKTsK
IAogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwpAQCAtMjQ4
LDEyICsxMzgsMTIgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiAg
ICAgbV9yZWdpc3RlcmVkVGhyZWFkcyA9IHRocmVhZDsKIH0KIAotVGhyZWFkKiBNYWNoaW5lVGhy
ZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKQorYXV0byBNYWNoaW5lVGhyZWFk
czo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKSAtPiBNYWNoaW5lVGhyZWFkKgogewog
ICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIFBsYXRm
b3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAg
Zm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkID09IHBsYXRmb3JtVGhyZWFk
KQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgZm9yIChN
YWNoaW5lVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpID09IGlk
KQogICAgICAgICAgICAgcmV0dXJuIHRocmVhZDsKICAgICB9CiAKQEAgLTI4MywyMiArMTczLDIx
IEBAIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZCh2b2lkKiBwKQogICAgICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICAgICAgbWFjaGlu
ZVRocmVhZHMtPnJlbW92ZVRocmVhZElmRm91bmQoY3VycmVudFBsYXRmb3JtVGhyZWFkKCkpOwor
ICAgICAgICBtYWNoaW5lVGhyZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJyZW50VGhyZWFk
KCkpOwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgUGxhdGZvcm1UaHJlYWQ+Ci12b2lk
IE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFBsYXRmb3JtVGhyZWFkIHBsYXRm
b3JtVGhyZWFkKQordm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJl
YWRJZGVudGlmaWVyIGlkKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJl
YWRzTXV0ZXgpOwotICAgIFRocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7Ci0gICAgaWYg
KCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAgTWFjaGluZVRocmVhZCogdCA9IG1fcmVnaXN0
ZXJlZFRocmVhZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgbV9y
ZWdpc3RlcmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7CiAgICAgICAgIGRl
bGV0ZSB0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7CisgICAgICAgIE1hY2hpbmVUaHJlYWQqIGxhc3QgPSBtX3JlZ2lzdGVyZWRUaHJl
YWRzOwogICAgICAgICBmb3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0OyB0OyB0ID0g
dC0+bmV4dCkgewotICAgICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAg
ICAgICAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAgICAgIGxhc3Qt
Pm5leHQgPSB0LT5uZXh0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMzIwLDIwNiArMjA5LDM0IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJy
ZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAgICAgY29uc2Vy
dmF0aXZlUm9vdHMuYWRkKGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3VycmVudFRocmVh
ZFN0YXRlLnN0YWNrT3JpZ2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCi1N
YWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5lVGhyZWFkczo6
TWFjaGluZVRocmVhZDo6TWFjaGluZVRocmVhZCgpCisgICAgOiBuZXh0KG51bGxwdHIpCisgICAg
LCBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIGF1dG8gc3RhY2tCb3Vu
ZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0Zm9ybVRocmVhZCA9IGN1cnJl
bnRQbGF0Zm9ybVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigp
OwotICAgIHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQot
ICAgIEFTU0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAg
Ym9vbCBpc1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFBy
b2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLAotICAgICAg
ICAgICAgJnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUND
RVNTKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwotI2VsaWYgVVNFKFBUSFJF
QURTKSAmJiAhT1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5zdG9yZSh0
aGlzKTsKLQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmln
dXJhdGlvbi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVNpZ25hbEhhbmRs
ZXI7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXIsIFtdIHsKLSAg
ICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRo
ZSBoYW5kbGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxs
b3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAg
ICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0K
LSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVu
ZFJlc3VtZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lO
Rk87Ci0gICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAw
KTsKLSAgICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAgc2lnZW1wdHlzZXQoJm1hc2sp
OwotICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgcHRo
cmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0KLSAgICBzZW1faW5pdCgmc2Vt
YXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNz
LiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKLSNlbmRp
ZgorICAgIG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7CisgICAgbV9zdGFja0Vu
ZCA9IHN0YWNrQm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6
flRocmVhZERhdGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpnZXRS
ZWdpc3RlcnMoTWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCiB7Ci0jaWYgT1Mo
V0lORE9XUykKLSAgICBDbG9zZUhhbmRsZShwbGF0Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBV
U0UoUFRIUkVBRFMpICYmICFPUyhEQVJXSU4pCi0gICAgc2VtX2Rlc3Ryb3koJnNlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOwotI2VuZGlmCi19Ci0KLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVh
ZERhdGE6OnN1c3BlbmQoKQotewotI2lmIE9TKERBUldJTikKLSAgICBrZXJuX3JldHVybl90IHJl
c3VsdCA9IHRocmVhZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFkKTsKLSAgICByZXR1cm4gcmVzdWx0
ID09IEtFUk5fU1VDQ0VTUzsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgYm9vbCB0aHJlYWRJc1N1
c3BlbmRlZCA9IChTdXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKSAhPSAoRFdPUkQp
LTEpOwotICAgIEFTU0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7Ci0gICAgcmV0dXJuIHRocmVhZElz
U3VzcGVuZGVkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
Y3VycmVudFBsYXRmb3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1UaHJlYWQsICJDdXJyZW50bHkgd2Ug
ZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7Ci0gICAg
ewotICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5v
dCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICAvLyBXZSB1c2Ug
Z2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCi0gICAgICAgIC8vIENvbnNp
ZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KLSAgICAg
ICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5k
IEEuCi0gICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMg
YXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgotICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGgg
d2lsbCBiZSBzdXNwZW5kZWQuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxTaWduYWxM
b2NrKTsKLSAgICAgICAgaWYgKCFzdXNwZW5kQ291bnQpIHsKLSAgICAgICAgICAgIC8vIElkZWFs
bHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0
byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAv
LyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgotICAg
ICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQg
bG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAg
ICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSAgICAgICAgICAgIC8vIFJl
bGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1
dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgotICAgICAgICAgICAg
c3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAg
ICB9Ci0gICAgICAgICsrc3VzcGVuZENvdW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSNl
bHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBzdXNwZW5kIHRocmVhZHMgb24gdGhpcyBwbGF0Zm9y
bQotI2VuZGlmCisgICAgV1RGOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5y
ZWdzOworICAgIHJldHVybiBtX3RocmVhZC0+Z2V0UmVnaXN0ZXJzKHJlZ3MpOwogfQogCi12b2lk
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpyZXN1bWUoKQotewotI2lmIE9TKERBUldJTikK
LSAgICB0aHJlYWRfcmVzdW1lKHBsYXRmb3JtVGhyZWFkKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0g
ICAgUmVzdW1lVGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKLSNlbGlmIFVTRShQVEhSRUFE
UykKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNo
b3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoc3VzcGVuZENvdW50
ID09IDEpIHsKLSAgICAgICAgICAgIC8vIFdoZW4gYWxsb3dpbmcgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSBpbnRlcnJ1cHQgaW4gdGhlIHNpZ25hbCBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQgYW5kIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYWN0dWFsbHkgaXNzdWVkLAotICAgICAgICAgICAgLy8g
dGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWluLgotICAg
ICAgICAgICAgLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkaXN0aW5ndWlzaCB0aGUgaGFu
ZGxlciBpbnZvY2F0aW9uIGZvciBzdXNwZW5kIGFuZCByZXN1bWUuCi0gICAgICAgICAgICAvLyAx
LiBVc2UgZGlmZmVyZW50IHNpZ25hbCBudW1iZXJzLiBBbmQgY2hlY2sgdGhlIHNpZ25hbCBudW1i
ZXIgaW4gdGhlIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyAyLiBVc2Ugc29tZSBhcmd1bWVudHMg
dG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBhbmQgcmVzdW1lIGluIHRoZSBoYW5kbGVyLiBJZiBwdGhy
ZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2VkLCB3ZSBjYW4gdGFrZSB0aGlzLgotICAgICAgICAgICAg
Ly8gMy4gVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpdGggYXRvbWljIHZhcmlhYmxlcyBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBJbiB0aGlzIGltcGxlbWVudGFpdG9u
LCB3ZSB0YWtlICgzKS4gc3VzcGVuZGVkIGZsYWcgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBpdC4K
LSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNpZ1RocmVhZFN1
c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSAgICAgICAgICAgIC8v
IFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4
ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgotICAgICAgICAg
ICAgc3VzcGVuZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAg
ICAgICAgfQotICAgICAgICAtLXN1c3BlbmRDb3VudDsKLSAgICB9Ci0jZWxzZQotI2Vycm9yIE5l
ZWQgYSB3YXkgdG8gcmVzdW1lIHRocmVhZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0K
LXNpemVfdCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Z2V0UmVnaXN0ZXJzKFRocmVhZERh
dGE6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQotewotICAgIFRocmVhZERhdGE6OlJlZ2lzdGVyczo6
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsKLSNpZiBPUyhEQVJXSU4p
Ci0jaWYgQ1BVKFg4NikKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gc2l6ZW9mKHJlZ3MpL3Np
emVvZihpbnQpOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVB
RF9TVEFURTsKLSNlbGlmIENQVShYODZfNjQpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHg4
Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9y
ID0geDg2X1RIUkVBRF9TVEFURTY0OwotI2VsaWYgQ1BVKFBQQykgCi0gICAgdW5zaWduZWQgdXNl
cl9jb3VudCA9IFBQQ19USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoUFBDNjQpCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IFBQQ19USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTY0OwotI2VsaWYgQ1BVKEFS
TSkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKLSAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKLSNlbGlm
IENQVShBUk02NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0
X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NU
QVRFNjQ7Ci0jZWxzZQotI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCi0jZW5kaWYKLQotICAg
IGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX2dldF9zdGF0ZShwbGF0Zm9ybVRocmVhZCwg
Zmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ3MsICZ1c2VyX2NvdW50KTsKLSAgICBpZiAocmVz
dWx0ICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRo
cmVhZF9nZXRfc3RhdGUgcmV0dXJuZWQgYW4gZXJyb3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0
aGUgcmVzdWx0IG9mIHJ1bm5pbmcgaW5zaWRlIFJvc2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0
ZWQuIiwgcmVzdWx0KTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVzZXJf
Y291bnQgKiBzaXplb2YodWludHB0cl90KTsKLS8vIGVuZCBPUyhEQVJXSU4pCi0KLSNlbGlmIE9T
KFdJTkRPV1MpCi0gICAgcmVncy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05U
RVhUX0NPTlRST0w7Ci0gICAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9ybVRocmVhZEhhbmRsZSwg
JnJlZ3MpOwotICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7Ci0jZWxpZiAoKE9TKEZSRUVCU0Qp
IHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCi0gICAgcmVncyA9IHN1c3Bl
bmRlZE1hY2hpbmVDb250ZXh0OwotICAgIHJldHVybiBzaXplb2YoUmVnaXN0ZXJzOjpQbGF0Zm9y
bVJlZ2lzdGVycyk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcHRocmVhZF9hdHRyX2luaXQo
JnJlZ3MuYXR0cmlidXRlKTsKLSNpZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQot
I2lmICFPUyhPUEVOQlNEKQotICAgIC8vIGUuZy4gb24gRnJlZUJTRCA1LjQsIG5ldW5kb3JmQGtk
ZS5vcmcKLSAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHBsYXRmb3JtVGhyZWFkLCAmcmVncy5hdHRy
aWJ1dGUpOwotI2VuZGlmCi0jZWxzZQotICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5v
bi1wb3J0YWJsZTsgb3RoZXIgUE9TSVggc3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0
ZXJuYXRpdmVzCi0gICAgcHRocmVhZF9nZXRhdHRyX25wKHBsYXRmb3JtVGhyZWFkLCAmcmVncy5h
dHRyaWJ1dGUpOwotI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3
YXkgdG8gZ2V0IHRocmVhZCByZWdpc3RlcnMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0K
LXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRl
cigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJz
OjpzdGFja1BvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykg
fHwgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQog
ICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwogI2VsaWYgVVNF
KFBUSFJFQURTKQotICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7Ci0gICAgc2l6ZV90IHN0YWNrU2l6
ZSA9IDA7Ci0jaWYgT1MoT1BFTkJTRCkKLSAgICBzdGFja190IHNzOwotICAgIGludCByYyA9IHB0
aHJlYWRfc3RhY2tzZWdfbnAocHRocmVhZF9zZWxmKCksICZzcyk7Ci0gICAgc3RhY2tCYXNlID0g
KHZvaWQqKSgoc2l6ZV90KSBzcy5zc19zcCAtIHNzLnNzX3NpemUpOwotICAgIHN0YWNrU2l6ZSA9
IHNzLnNzX3NpemU7Ci0jZWxzZQotICAgIGludCByYyA9IHB0aHJlYWRfYXR0cl9nZXRzdGFjaygm
cmVncy5hdHRyaWJ1dGUsICZzdGFja0Jhc2UsICZzdGFja1NpemUpOwotI2VuZGlmCi0gICAgKHZv
aWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21laG93PyBTZWVtcyBmYXRh
bC4KLSAgICBBU1NFUlQoc3RhY2tCYXNlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+
KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7CisgICAgcmV0dXJuIHJlZ3Muc3RhY2tQb2ludGVyOwog
I2Vsc2UKICNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aGUgc3RhY2sgcG9pbnRlciBmb3IgYW5v
dGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQogI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjpmcmFtZVBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVU
aHJlYWQ6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4p
IHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAg
ICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBAIC01MjgsNyAr
MjQ1LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJh
bWVQb2ludGVyKCkgY29uc3QKICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAordm9pZCogTWFj
aGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVy
KCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNE
KSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjppbnN0
cnVjdGlvblBvaW50ZXIocmVncyk7CkBAIC01MzcsNyArMjU0LDcgQEAgdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3QK
ICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJz
OjpsbGludFBDKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpS
ZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewogICAgIC8vIExMSW50IHVzZXMgcmVnVDQgYXMg
UEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVm
aW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICsyNjUsNiBAQCB2b2lkKiBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKIH0KICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERh
dGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0g
ICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lz
dGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJX
SU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJ
VCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9z
UmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGludCByZWRab25lQWRqdXN0bWVudCA9IDA7CkBA
IC01NzMsMTcgKzI4MCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50
KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1lbnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0
YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5l
VGhyZWFkOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4g
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tCYXNlKTsKKyAgICBjaGFyKiBiZWdp
biA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrQmFzZSk7CiAgICAgY2hhciog
ZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrVG9wKSkpOwogICAgIEFT
U0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5kV2l0aFJlZFpvbmUgPSBlbmQgKyBv
c1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpv
bmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKTsKIAot
ICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQotICAgICAgICBlbmRXaXRoUmVkWm9u
ZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0VuZCk7CisgICAgaWYgKGVuZFdp
dGhSZWRab25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVy
cHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4s
IGVuZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdp
dGhSZWRab25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzMyMyw5IEBAIHN0YXRpYyB2b2lkIGNvcHlN
ZW1vcnkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBzaXplKQogLy8gc2lnbmlm
aWNhbnQgcGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayBpcyBvbmx5
IGNhbGxlZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAvLyBvcGVyYXRpb24uIEFzIHRoZSBo
ZWFwIGlzIGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRoZSBzdGFjayB0aGUgcGVyZm9ybWFu
Y2UgaGl0IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6
ZV90KiBzaXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2so
TWFjaGluZVRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6
ZV90KiBzaXplKQogewotICAgIFRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICBNYWNo
aW5lVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCByZWdpc3RlcnNTaXpl
ID0gdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6OnBhaXI8dm9pZCos
IHNpemVfdD4gc3RhY2sgPSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3RlcnMuc3RhY2tQb2lu
dGVyKCkpOwogCkBAIC02MzEsOCArMzM4LDYgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29w
eU90aGVyVGhyZWFkU3RhY2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV8KICAg
ICBpZiAoY2FuQ29weSkKICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2FzdDxjaGFyKj4oYnVm
ZmVyKSArICpzaXplLCBzdGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAgICAqc2l6ZSArPSBz
dGFjay5zZWNvbmQ7Ci0KLSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKIH0K
IAogYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6
ZSkKQEAgLTY0NCwzNiArMzQ5LDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhl
clRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAKICAgICAq
c2l6ZSA9IDA7CiAKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQ
bGF0Zm9ybVRocmVhZCgpOworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFk
KCk7CiAgICAgaW50IG51bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAgdG8gZGVub3RlIHRo
YXQgd2UgaGF2ZW4ndCBjb3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5ZXQuCiAgICAgaW50
IGluZGV4ID0gMTsKLSAgICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7Cisg
ICAgTWFjaGluZVRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAotICAgIFRo
cmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQg
PSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAgaWYgKCp0
aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRo
cmVhZC0+c3VzcGVuZCgpOworICAgIE1hY2hpbmVUaHJlYWQqIHByZXZpb3VzVGhyZWFkID0gbnVs
bHB0cjsKKyAgICBmb3IgKE1hY2hpbmVUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7IHRocmVhZDsgaW5kZXgrKykgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9
IGlkKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lm
IE9TKERBUldJTikKLSAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBpZiAoIW51bWJlck9mVGhyZWFkcykgewotICAg
ICAgICAgICAgICAgICAgICBmb3IgKFRocmVhZCogY291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNvdW50ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5u
ZXh0KQorICAgICAgICAgICAgICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWQqIGNvdW50ZWRUaHJl
YWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhyZWFkOyBjb3VudGVkVGhyZWFkID0g
Y291bnRlZFRocmVhZC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mVGhy
ZWFkcysrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyBSZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQgdGhlIGFjdHVhbCBmYWlsdXJlIHJl
c3VsdCBmb3IgbG9nZ2luZy4KLSAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0g
dGhyZWFkX3N1c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCgpKTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQuZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwogCiAgICAgICAgICAgICAgICAgV1RG
UmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLAotICAg
ICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVy
ZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIHBsYXRm
b3JtVGhyZWFkICVwLiIsCi0gICAgICAgICAgICAgICAgICAgIGVycm9yLCBpbmRleCwgbnVtYmVy
T2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+cGxhdGZv
cm1UaHJlYWQoKSkpOworICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNv
bGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFk
IFslZC8lZDogJXBdIGlkICV1LiIsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcigp
LCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHRocmVhZC0+dGhyZWFkSUQoKSk7CiAK
ICAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIGludmFsaWQgdGhyZWFkIG9uIHRoZSB0aHJlYWRz
VG9CZURlbGV0ZWQgbGlzdC4KICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGRlbGV0
ZSBpdCBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBzdXNwZW5kZWQgb3RoZXIKICAgICAgICAgICAgICAg
ICAvLyB0aHJlYWRzLCBhbmQgdGhleSBtYXkgc3RpbGwgYmUgaG9sZGluZyB0aGUgQyBoZWFwIGxv
Y2sgd2hpY2gKICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIGZvciBkZWxldGluZyB0aGUgaW52
YWxpZCB0aHJlYWQuIEhlbmNlLCB3ZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgLy8gZGVmZXIg
dGhlIGRlbGV0aW9uIHRpbGwgYWZ0ZXIgd2UgaGF2ZSByZXN1bWVkIGFsbCB0aHJlYWRzLgotICAg
ICAgICAgICAgICAgIFRocmVhZCogbmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAgICAgICAg
ICAgICAgICBNYWNoaW5lVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAg
ICAgICAgICAgIHRocmVhZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsKICAgICAgICAgICAg
ICAgICB0aHJlYWRzVG9CZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4NywyNSArMzkwLDI1IEBA
IGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0
cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KG51bWJlck9mVGhyZWFkcyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJldmlvdXNUaHJl
YWQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIH0K
ICAgICAgICAgcHJldmlvdXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IHRocmVh
ZC0+bmV4dDsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0
aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChNYWNoaW5lVGhyZWFkKiB0aHJlYWQg
PSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewor
ICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdHJ5Q29w
eU90aGVyVGhyZWFkU3RhY2sodGhyZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsKICAgICB9
CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZv
cm1UaHJlYWQpCisgICAgZm9yIChNYWNoaW5lVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRU
aHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBpZiAodGhy
ZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdGhyZWFkLT5yZXN1bWUoKTsKICAg
ICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gdGhyZWFkc1RvQmVEZWxldGVkOyB0aHJl
YWQ7ICkgewotICAgICAgICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CisgICAg
Zm9yIChNYWNoaW5lVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsg
KSB7CisgICAgICAgIE1hY2hpbmVUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAg
ICAgICAgIGRlbGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IG5leHRUaHJlYWQ7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApp
bmRleCBkMTk2ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3OTk0NDg3ZjIyLi4yOGQ3ZDI5NGE3
NTE3YmUyMTIzMWY4YWUxYmYyOTIyYWRiMjA3Yjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtMjIsMjUgKzIyLDEyIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1UaHJlYWQuaCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVk
TGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKLSNpZiBVU0UoUFRI
UkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNlbWFwaG9y
ZS5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1ha2Ug
bWNvbnRleHRfdCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KLS8vIFRoaXMg
YnVnIGhhcyBiZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdvcmth
cm91bmQgY2FuIGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4KLS8v
IGh0dHBzOi8vYnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc5
Ci0jaWYgT1MoRlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4dC5oPgotI2VuZGlmCi0jZW5kaWYK
LQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKQEAgLTY0LDEzICs1MSwx
MCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFkZEN1cnJlbnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0byBiZSBjYWxsZWQgYnkgY2xpZW50
cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCiAKLSAg
ICBjbGFzcyBUaHJlYWREYXRhIHsKKyAgICBjbGFzcyBNYWNoaW5lVGhyZWFkIHsKICAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBUaHJlYWREYXRh
KCk7Ci0gICAgICAgIH5UaHJlYWREYXRhKCk7Ci0KLSAgICAgICAgc3RhdGljIFRocmVhZERhdGEq
IGNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgTWFjaGluZVRocmVhZCgpOwogCiAg
ICAgICAgIHN0cnVjdCBSZWdpc3RlcnMgewogICAgICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVy
KCkgY29uc3Q7CkBAIC03OSw4NCArNjMsNDAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAg
ICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2
b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQotICAgICAgICAgICAgCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAg
ICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBNYWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdp
c3RlcnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFC
TEUoSklUKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90
OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgICAgICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0
ZXJzIHsKLSAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAg
ICAgICB9OwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgdGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3Ig
dGhpcyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAgICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJl
Z3M7CisgICAgICAgICAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07
CiAKLSAgICAgICAgYm9vbCBzdXNwZW5kKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAg
ICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJl
Z2lzdGVycyhSZWdpc3RlcnMmKTsKKyAgICAgICAgRXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0
Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpIHsgcmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7
IH0KKyAgICAgICAgdm9pZCByZXN1bWUoKSB7IG1fdGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAg
ICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFp
cjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAg
IFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkOwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7
Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRM
RSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJ
TikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNv
bnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3Vu
dCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9taWM8Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsK
LSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFzcyBUaHJlYWQgewotICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICAgICAgVGhyZWFkKFRocmVhZERhdGEqKTsKLQotICAgIHB1Ymxp
YzoKLSAgICAgICAgdXNpbmcgUmVnaXN0ZXJzID0gVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0g
ICAgICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgICAgICBib29sIHN1c3BlbmQoKSB7
IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0KLSAgICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEt
PnJlc3VtZSgpOyB9Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdz
KSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVl
UmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykgeyBkYXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9
Ci0gICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3Rh
Y2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1cmVTdGFjayhzdGFja1RvcCk7IH0KLQotICAgICAg
ICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5w
bGF0Zm9ybVRocmVhZDsgfQotICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVy
biBkYXRhLT5zdGFja0Jhc2U7IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJl
dHVybiBkYXRhLT5zdGFja0VuZDsgfQorICAgICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBz
dGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBz
dGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQq
IG5leHQ7Ci0gICAgICAgIFRocmVhZERhdGEqIGRhdGE7CisgICAgICAgIE1hY2hpbmVUaHJlYWQq
IG5leHQ7CisgICAgICAgIFJlZjxXVEY6OlRocmVhZD4gbV90aHJlYWQ7CisgICAgICAgIHZvaWQq
IG1fc3RhY2tCYXNlOworICAgICAgICB2b2lkKiBtX3N0YWNrRW5kOwogICAgIH07CiAKICAgICBM
b2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OyB9Ci0gICAg
VGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFT
U0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lz
dGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVh
ZCgpOworICAgIE1hY2hpbmVUaHJlYWQqIHRocmVhZHNMaXN0SGVhZChjb25zdCBBYnN0cmFjdExv
Y2tlciYpIGNvbnN0IHsgQVNTRVJUKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleC5pc0xvY2tlZCgp
KTsgcmV0dXJuIG1fcmVnaXN0ZXJlZFRocmVhZHM7IH0KKyAgICBNYWNoaW5lVGhyZWFkKiBtYWNo
aW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVy
RnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYs
IENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0gICAgdm9pZCB0cnlDb3B5
T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qq
KTsKKyAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKE1hY2hpbmVUaHJlYWQqLCB2b2lk
Kiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29sIHRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgcmVtb3ZlVGhy
ZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFkPgotICAg
IHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCk7CisgICAgdm9pZCByZW1v
dmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAgICAgTG9jayBtX3JlZ2lzdGVy
ZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOworICAgIE1h
Y2hpbmVUaHJlYWQqIG1fcmVnaXN0ZXJlZFRocmVhZHM7CiAgICAgV1RGOjpUaHJlYWRTcGVjaWZp
Y0tleSBtX3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRocmVhZHM7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAppbmRleCAyMDgwY2Q5MzQ1ODMzZDJkMjMyYjhhOWNkNmYz
ZGJmZWJlMDVjYjIzLi5lMGFiZjI5OGJmYmUyZWVlYzM0MjViNjYwOWNlNzIxMzNjNDFjZGQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgQXRv
bWljPElDU3RhdHMqPiBJQ1N0YXRzOjpzX2luc3RhbmNlOwogCiBJQ1N0YXRzOjpJQ1N0YXRzKCkK
IHsKLSAgICBtX3RocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6
Y3JlYXRlKAogICAgICAgICAiSlNDIElDU3RhdHMiLAogICAgICAgICBbdGhpc10gKCkgewogICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKQEAgLTg0LDcgKzg0LDcgQEAgSUNT
dGF0czo6fklDU3RhdHMoKQogICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKICAgICB9
CiAgICAgCi0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWQpOworICAgIG1fdGhy
ZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogfQogCiB2b2lkIElDU3RhdHM6OmFkZChjb25zdCBJ
Q0V2ZW50JiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNT
dGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKaW5kZXggZTc1Y2Zk
ZjRkNGQ5ZDdkY2JmMWEzMWE5ODI5NDE5MmU1NWI5Y2ZiMC4uZWI3ZTFlOTJjZTk3ZGQxZDk1MDg5
NzI3Yzg0YTljNWVjN2Y1N2M3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKQEAg
LTE3OSw3ICsxNzksNyBAQCBjbGFzcyBJQ1N0YXRzIHsKIHByaXZhdGU6CiAKICAgICBTcGVjdHJ1
bTxJQ0V2ZW50LCB1aW50NjRfdD4gbV9zcGVjdHJ1bTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1f
dGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIExvY2sgbV9sb2NrOwog
ICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBib29sIG1fc2hvdWxkU3RvcCB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDkwOTUwYjk4NTk3ZmYzOThkNDIxM2RkZjkwOTA3
YmQzYzE3ZDI3YjkuLjE4OWU3OTViNjcwMmNjYmZhZTU0NDkxZGE0ZDM5NzAxMmFiZWJiM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0yNTQ0LDcgKzI1NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgQ29uZGl0aW9uIGRpZFN0YXJ0Q29uZGl0aW9uOwogICAgIGJvb2wgZGlkU3RhcnQgPSBmYWxz
ZTsKICAgICAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAg
ICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBB
Z2VudCIsCiAgICAgICAgIFtzb3VyY2VDb2RlLCAmZGlkU3RhcnRMb2NrLCAmZGlkU3RhcnRDb25k
aXRpb24sICZkaWRTdGFydF0gKCkgewogICAgICAgICAgICAgQ29tbWFuZExpbmUgY29tbWFuZExp
bmUoMCwgbnVsbHB0cik7CkBAIC0yNTcxLDcgKzI1NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9KTsKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkKTsKKyAgICB0aHJlYWQtPmRldGFjaCgp
OwogICAgIAogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhkaWRTdGFydExv
Y2spOwpAQCAtMzMxMSw3ICszMzExLDcgQEAgc3RhdGljIHZvaWQgc3RhcnRUaW1lb3V0VGhyZWFk
SWZOZWVkZWQoKQogICAgICAgICAgICAgZGF0YUxvZygiV0FSTklORzogdGltZW91dCBzdHJpbmcg
aXMgbWFsZm9ybWVkLCBnb3QgIiwgdGltZW91dFN0cmluZywKICAgICAgICAgICAgICAgICAiIGJ1
dCBleHBlY3RlZCBhIG51bWJlci4gTm90IHVzaW5nIGEgdGltZW91dC5cbiIpOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNyZWF0ZVRocmVhZCh0aW1lb3V0VGhyZWFkTWFpbiwgMCwgImpz
YyBUaW1lb3V0IFRocmVhZCIpOworICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUodGltZW91dFRo
cmVhZE1haW4sIDAsICJqc2MgVGltZW91dCBUaHJlYWQiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IDAxYjFmZTEyN2U4YjczMWZiNTNi
N2MyY2RiOTllZTE5ZGQ1YWRhNjguLjYzMjJlNzMzMjI5MjExNGYwZTI1NGE4ZTFlZjEzZGE1YzQx
OTUxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMTA5
LDcgKzEwOSw3IEBAIHZvaWQgSlNMb2NrOjpsb2NrKGludHB0cl90IGxvY2tDb3VudCkKICAgICAg
ICAgbV9sb2NrLmxvY2soKTsKICAgICB9CiAKLSAgICBtX293bmVyVGhyZWFkID0gY3VycmVudFRo
cmVhZCgpOworICAgIG1fb3duZXJUaHJlYWQgPSAmVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX2hhc093bmVyVGhyZWFkID0gdHJ1ZTsKICAgICBB
U1NFUlQoIW1fbG9ja0NvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgK
aW5kZXggMGMzNTg0N2U0MjNlNjRiYzcwNTAzZDVlMWQ4NWQ0ODA1MDlkYmU3NC4uMWFjYTRiOWE3
YmI0ZGNhZjA0ZGYxMjE3MTA5NzIwZWM4ZTJkNjhmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmgKQEAgLTkyLDEzICs5MiwxMyBAQCBjbGFzcyBKU0xvY2sgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAKICAgICBWTSogdm0oKSB7IHJldHVybiBt
X3ZtOyB9CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFk
KCkgY29uc3QKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZlB0cjxUaHJlYWQ+PiBvd25lclRocmVhZCgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9oYXNPd25lclRocmVhZCkKICAgICAgICAgICAg
IHJldHVybiBtX293bmVyVGhyZWFkOwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KLSAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9oYXNP
d25lclRocmVhZCAmJiBtX293bmVyVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsgfQorICAgIGJv
b2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB7IHJldHVybiBtX2hhc093bmVyVGhyZWFk
ICYmIG1fb3duZXJUaHJlYWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgpOyB9CiAKICAgICB2b2lk
IHdpbGxEZXN0cm95Vk0oVk0qKTsKIApAQCAtMTM1LDcgKzEzNSw3IEBAIGNsYXNzIEpTTG9jayA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKICAgICAvLyBkaWZmZXJlbnQg
dGhyZWFkLCBhbmQgYW4gb3B0aW9uYWwgaXMgdnVsbmVyYWJsZSB0byByYWNlcy4KICAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTA0MiNjNgogICAg
IGJvb2wgbV9oYXNPd25lclRocmVhZCB7IGZhbHNlIH07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBt
X293bmVyVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fb3duZXJUaHJlYWQ7CiAgICAgaW50
cHRyX3QgbV9sb2NrQ291bnQ7CiAgICAgdW5zaWduZWQgbV9sb2NrRHJvcERlcHRoOwogICAgIGJv
b2wgbV9zaG91bGRSZWxlYXNlSGVhcEFjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
NDE5N2U3M2M4NDEyYTgwZjM2MTQwYzdhZDg2ZWM3NjRmYWMyOTM3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1BsYXRmb3JtVGhyZWFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBPUyhEQVJXSU4pIHx8IE9TKFVOSVgpCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlm
Ci0KLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8bWFj
aC90aHJlYWRfYWN0Lmg+Ci0jZWxpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4K
LSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIE9TKERBUldJTikKLXR5cGVkZWYgbWFj
aF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBPUyhXSU5ET1dTKQotdHlwZWRlZiBEV09S
RCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIFVTRShQVEhSRUFEUykKLXR5cGVkZWYgcHRocmVhZF90
IFBsYXRmb3JtVGhyZWFkOwotI2VuZGlmIC8vIE9TKERBUldJTikKLSAgICAKLWlubGluZSBQbGF0
Zm9ybVRocmVhZCBjdXJyZW50UGxhdGZvcm1UaHJlYWQoKQotewotI2lmIE9TKERBUldJTikKLSAg
ICByZXR1cm4gcHRocmVhZF9tYWNoX3RocmVhZF9ucChwdGhyZWFkX3NlbGYoKSk7Ci0jZWxpZiBP
UyhXSU5ET1dTKQotICAgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKLSNlbGlmIFVTRShQ
VEhSRUFEUykKLSAgICByZXR1cm4gcHRocmVhZF9zZWxmKCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuY3BwCmluZGV4IDdkMzdhNjc0YWJhMDk0NzIzMTg0OTNiMzNiYzg5ZmUzZmFk
OThhOWQuLmE4YjgxMTExYzA1YzE2OTY1ZTk4MzNhODQ1NmYyOTlhMDZjODc3MDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBA
IC0xNjcsNyArMTY3LDcgQEAgY2xhc3MgRnJhbWVXYWxrZXIgewogICAgIGJvb2wgaXNWYWxpZEZy
YW1lUG9pbnRlcih2b2lkKiBleGVjKQogICAgIHsKICAgICAgICAgdWludDhfdCogZnBDYXN0ID0g
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPihleGVjKTsKLSAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFk
czo6VGhyZWFkKiB0aHJlYWQgPSBtX3ZtLmhlYXAubWFjaGluZVRocmVhZHMoKS50aHJlYWRzTGlz
dEhlYWQobV9tYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5u
ZXh0KSB7CisgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQqIHRocmVh
ZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVU
aHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAg
ICAgIHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0
YWNrQmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrTGltaXQgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YWNrQmFzZSk7CkBAIC0yNzksNyArMjc5LDYgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2Ft
cGxpbmdQcm9maWxlcihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAg
ICwgbV93ZWFrUmFuZG9tKCkKICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkK
ICAgICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhPcHRpb25z
OjpzYW1wbGVJbnRlcnZhbCgpKSkKLSAgICAsIG1fdGhyZWFkSWRlbnRpZmllcigwKQogICAgICwg
bV9qc2NFeGVjdXRpb25UaHJlYWQobnVsbHB0cikKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCiAg
ICAgLCBtX2lzU2h1dERvd24oZmFsc2UpCkBAIC0zMDAsMTEgKzI5OSwxMSBAQCB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2Vy
JikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogCi0gICAgaWYgKG1fdGhyZWFk
SWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBwcm9maWxlciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVu
dGlmaWVyID0gY3JlYXRlVGhyZWFkKCJqc2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3By
b2ZpbGVyXSB7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXBy
b2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0gewogICAgICAgICBwcm9maWxlci0+dGltZXJMb29w
KCk7CiAgICAgfSk7CiB9CkBAIC0zNDQsNyArMzQzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
Ojp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b24KICAgICAgICAgTG9ja0hvbGRlciBjb2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVC
bG9ja1NldCgpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9j
YXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkpOwog
Ci0gICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5k
KCk7CisgICAgICAgIGF1dG8gZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNw
ZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CiAgICAgICAgICAgICAvLyBXaGlsZSB0
aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdlIGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxv
YyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCiAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0
aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQsMTMgKzM1MywxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbgogICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKICAgICAgICAg
ICAgIHZvaWQqIGxsaW50UEM7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBN
YWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKICAgICAg
ICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+Z2V0UmVnaXN0ZXJzKHJlZ2lzdGVycyk7
CiAgICAgICAgICAgICAgICAgbWFjaGluZUZyYW1lID0gcmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigp
OwogICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PEV4ZWNTdGF0ZSo+KG1h
Y2hpbmVGcmFtZSk7CiAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gcmVnaXN0ZXJzLmluc3Ry
dWN0aW9uUG9pbnRlcigpOwogICAgICAgICAgICAgICAgIGxsaW50UEMgPSByZWdpc3RlcnMubGxp
bnRQQygpOwotICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVnaXN0
ZXJzKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBGSVhNRTogTGV0
cyBoYXZlIGEgd2F5IG9mIGRldGVjdGluZyB3aGVuIHdlJ3JlIHBhcnNpbmcgY29kZS4KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaApp
bmRleCBiNDRhM2JhNDdmOWU2NzY4YWQ0MzdiYjE4ZTBhOGFiYzc5NWJkNmNmLi43OGI5YmViMjk2
Zjc0ZTc5YzZlZGEwZDQ5ZGVjNzRkNDdjYmY0OGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCkBAIC0xOTUsOCArMTk1LDggQEAgY2xh
c3MgU2FtcGxpbmdQcm9maWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGlu
Z1Byb2ZpbGVyPiB7CiAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBtX3RpbWluZ0ludGVy
dmFsOwogICAgIGRvdWJsZSBtX2xhc3RUaW1lOwogICAgIExvY2sgbV9sb2NrOwotICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyOwotICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQqIG1fanNjRXhlY3V0aW9uVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwor
ICAgIE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsK
ICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lzU2h1dERvd247CiAgICAgYm9vbCBt
X25lZWRzUmVwb3J0QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5NWY0NmUuLmU5N2MzMTg1
ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENvZGVCbG9jayosIGNvbnN0
IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAgc3RkOjpvcHRpb25hbDxU
aHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBpTG9jay0+
b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVy
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CiAKICAg
ICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNkNDYzYjcyZjMzZTQ2NGI3
YjVhNTlkMDExOTM4ZjY5Li4xMTYzZmZiOWViMmU3YTIwMjJhNjAzZDA3ODdlNTNmZTI1M2MyZGNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtMTEwLDcg
KzExMCw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8Vk0qLCBTdGFja0JvdW5kcz4sIFZN
VHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAgICAgICAgICAgICByZXR1cm4gVk1J
bnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBUcnkgbmV4dCBWTS4KICAgICAg
ICAgfQogCi0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbWFj
aGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6
TWFjaGluZVRocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1h
Y2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tCYXNlKCkpOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIGlmIChz
dGFja1BvaW50ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBzdGFja1BvaW50ZXIgPj0gdGhy
ZWFkLT5zdGFja0VuZCgpKSB7CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBWTVRyYXBzOjpTaWdu
YWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0gKm1fdm07CiAgICAgICAgICAg
ICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOwogICAgICAgICAg
ICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzaWduYWxUaHJl
YWQob3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLCBTSUdVU1IxKTsKKyAgICAgICAgICAgICAg
ICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChTSUdVU1IxKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDkzLDcgKzQ5Myw3IEBAIHZvaWQg
Vk1UcmFwczo6ZmlyZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKICAgICAgICAg
Ly8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KICAgICAgICAgUmVmUHRyPFNpZ25hbFNlbmRl
cj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2bSgpLCBldmVudFR5cGUpKTsK
ICAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7Ci0gICAgICAgIGNyZWF0ZVRo
cmVhZCgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBbc2VuZGVyXSB7CisgICAgICAg
IFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5nLnRocmVhZCIsIFtzZW5kZXJd
IHsKICAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwogICAgICAgICB9KTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3Yzc3NGQ5N2RkNDE4NzJh
MjBmMzk5Yzk2YTM1OTFkN2E0Y2FlMTQ5Li44YmNmZWJjNDcwMTQyYzE4M2VkNTE1MmJiZDBmMGZi
NDBhNmNmMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTMyNyw4ICszMjcsNyBAQAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3
MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0NjE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5n
LmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCAq
LzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRp
ZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhv
bGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5j
cHAgKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJCUE4QTQ3NDRCMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLzsg
fTsKIAkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzM1MTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi87IH07CkBAIC0zNzQsNiAr
MzczLDkgQEAKIAkJREU1QTA5RkMxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkIx
QkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1NTZGNTE4
QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4
RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2MThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyog
Q3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oICovOyB9OworCQlFMzIwMEFCNzFFOUE1MzZEMDAzQjU5
RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzMjAwQUI0MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lz
dGVycy5oICovOyB9OworCQlFMzIwMEFCODFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjAw
QUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovOyB9OworCQlFMzIwMEFC
OTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyogVGhy
ZWFkSG9sZGVyLmggKi87IH07CiAJCUU0M0E0Njk1MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5
MDFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oICovOyB9OwogCQlFNDNBNDY5NjFFMjI4Qjkx
MDAyNzZCMDUgLyogRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQzQTQ2OTExRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCAqLzsgfTsK
IAkJRTQzQTQ2OTcxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTIxRTIyOEI5MTAwMjc2QjA1
IC8qIERlY29kZXIuY3BwICovOyB9OwpAQCAtNzMxLDggKzczMyw3IEBACiAJCUE4QTQ3MzJEMTUx
QTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzAxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJl
YWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZEhvbGRl
clB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQcmltaXRpdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzcsNiArNzc4LDkgQEAKIAkJREU1QTA5RkIxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21tb25DcnlwdG9TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkY0MThBMENDMTgw
MDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAv
KiBUaHJlYWRIb2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGhyZWFkSG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyMDBBQjYx
RTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUaHJlYWRIb2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQzQTQ2OTAxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDNBNDY5MTFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTEwMCw2ICsxMTA0LDcgQEAKIAkJCQkwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXNzUmVm
UHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8s
CisJCQkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8s
CiAJCQkJRENFRTIxRkUxQ0VBNzU1MTAwMEMyMzk2IC8qIFBsYXRmb3JtVXNlclByZWZlcnJlZExh
bmd1YWdlcy5oICovLAogCQkJCURDRUUyMUZGMUNFQTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXNNYWMubW0gKi8sCiAJCQkJMEZGODYwOTQxQkNDQkQ3NDAwNDUx
MjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8sCkBAIC0xMTY3LDggKzExNzIsOSBAQAogCQkJ
CTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8s
CiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLywKIAkJ
CQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgg
Ki8sCi0JCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwICovLAotCQkJCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJ
ZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8sCisJCQkJRTMyMDBBQjUxRTlBNTM2RDAwM0I1OUQy
IC8qIFRocmVhZEhvbGRlci5jcHAgKi8sCisJCQkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8q
IFRocmVhZEhvbGRlci5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmlt
aXRpdmVzLmggKi8sCkBAIC0xNTU2LDYgKzE1NjIsNyBAQAogCQkJCUE4QTQ3NDBDMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODc2REJEODE1MTgx
NkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjAyMUNF
QTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUzMjAwQUI5MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29t
cGFyaXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzNjMxNjVEQkE3MzAwNUFEMzg3IC8q
IFByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0NDg4MzE2RkU5RkUxMDA4NDRC
RTkgLyogUHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLywKQEAgLTE2MjIsNyArMTYyOSw2IEBACiAJ
CQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBvc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQ0OTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRT
YWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjQ4LDYgKzE2NTQsNyBAQAogCQkJ
CUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNjZCMjkzMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUUzMjAwQUI3MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBp
biBIZWFkZXJzICovLAogCQkJCTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhy
ZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29y
ZExvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMTgzMCw2ICsxODM3LDcgQEAKIAkJCQlBNzQ4NzQ1
MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRTMyMDBBQjgxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3Rh
Y2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2
MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xODQ3LDcgKzE4NTUs
NyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERBMDBGNUZBMTYgLyogVGV4dEJyZWFr
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOTYxRDMwODAwQTAwRjVGQTE2
IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Db25k
aXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVk
VGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2YWJmNjBlYzM4ZWEwYjhkZGU3Mi4u
NGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJjM2I3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dU
Ri9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKQEAgLTc5LDE0ICs3OSwxNCBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25k
aXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4g
Y29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRo
cmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAg
VmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5z
aWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8
VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0
aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7
CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRD
b250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUu
c2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgpKQpAQCAtMTE0LDExICsxMTQs
MTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhy
ZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsK
ICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAor
ICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAg
ICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytp
KSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91
bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVl
dWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9u
IHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1
ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG11c3RO
b3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEgKzEzOCwxMSBAQCB2b2lkIHJ1blRl
c3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0eUNvbmRpdGlvbiwgbXVzdE5vdGlm
eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIHByb2R1Y2Vy
VGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIHByb2R1Y2VyVGhyZWFk
cy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiYgdGhy
ZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9u
KCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrVHlwZT4gbG9ja2VyKGxv
Y2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3Qu
Y3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCmluZGV4IGYw
ODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5NGYuLjY4Y2U4NGM0OGEzZmQ0Yzhm
ODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvYmVuY2htYXJr
cy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0Zh
aXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAg
ewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWdu
ZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZFtdPihudW1UaHJlYWRzKTsK
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0
ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRzKTsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwogICAgIAogICAgICAgICB2b2xhdGls
ZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBC
ZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVt
VGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRl
eF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQo
CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAg
ICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJiwgdGhy
ZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaWNyb3NlY29uZHNJbkNy
aXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewog
ICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVh
ZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJl
YWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAgYi9Tb3VyY2Uv
V1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5kZXggNTQ1ZDJlMGIwNDg4ZjMzODk0
YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3MDZjMTljZTRmMjk0YzliNjFiMmFi
YjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcApAQCAtNzcs
NyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFdp
dGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMpOwogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8
V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91cHMpOwotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxU
aHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJl
YWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsK
IApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAgICAgIHdvcmRz
W3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAg
ICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3Jv
dXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgdGhyZWFk
c1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0g
VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwK
ICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCAm
a2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1JdGVyYXRpb25zXSAoKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3JkID0gMDsKQEAgLTEyMSw3ICsxMjEs
NyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2VlcEdvaW5nID0gZmFsc2U7CiAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBu
dW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAgICAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgICAgICAgICAgdGhyZWFk
c1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICAgICAgZG91YmxlIGFm
dGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvQXV0b21h
dGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3
ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9tYXRpY1Ro
cmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIAogICAgIG1faGFzVW5kZXJs
eWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBj
cmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
CiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAgICAgIFs9XSAoKSB7CiAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9tYXRpY1Ro
cmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51ZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0
YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1NWZlYmEy
YzcuLjFiYWUzYmI5MGIzNzEyMGE1MWM0ODk5ZDk4N2Q4YTM0MTI1NDBkNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CkBAIC05NSw2ICs5NSw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIFBhcmtpbmdM
b3QuaAogICAgIFBhc3NSZWZQdHIuaAogICAgIFBsYXRmb3JtLmgKKyAgICBQbGF0Zm9ybVJlZ2lz
dGVycy5oCiAgICAgUHJpbnRTdHJlYW0uaAogICAgIFByb2Nlc3NJRC5oCiAgICAgUkFNU2l6ZS5o
CkBAIC0xMjgsNyArMTI5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU3RyaW5nRXh0cmFzLmgK
ICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisgICAgVGhyZWFkSG9sZGVyLmNwcAogICAgIFRocmVh
ZFNhZmVSZWZDb3VudGVkLmgKICAgICBUaHJlYWRTcGVjaWZpYy5oCiAgICAgVGhyZWFkaW5nLmgK
QEAgLTMyOSwxNiArMzMwLDE0IEBAIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKIGlmIChXSU4z
MikKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAgICBPU0FsbG9jYXRvcldpbi5j
cHAKKyAgICAgICAgVGhyZWFkSG9sZGVyV2luLmNwcAogICAgICAgICBUaHJlYWRTcGVjaWZpY1dp
bi5jcHAKICAgICAgICAgVGhyZWFkaW5nV2luLmNwcAogICAgICkKIGVsc2UgKCkKLSAgICBsaXN0
KEFQUEVORCBXVEZfSEVBREVSUwotICAgICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmgKLSAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgT1NBbGxvY2F0
b3JQb3NpeC5jcHAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKyAg
ICAgICAgVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCiAgICAgICAgIFRocmVhZGluZ1B0aHJlYWRz
LmNwcAogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhy
ZWFkLmggYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggMjVkOGY3NjZkY2ZiODc5
YTFkNzY4M2NlNTUwOGRkOGQ3ZjFkNzdhZi4uMGU3OGU4ZTUxYWJlOGQ5NTU0NzJjNzlkZDM0Njky
ZjE1NDZkYjFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaApAQCAtMzQsMTMgKzM0LDEyIEBACiAjaW5jbHVk
ZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IAogY2xhc3MgUHJpbnRTdHJlYW07CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmll
cjsKLQogLy8gTXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9y
eVByZXNzdXJlSGFuZGxlci5oCmluZGV4IGRmZGRmMGE5NTU1MmRiM2UyYWVjZmVmNGVjMTZlZmI1
YzZlNmM3YmQuLjQxMjhmNWNkNzFhN2RiMmY0ZmQ3MDMyOTUzZjBjM2YxZjUwMGQxMzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC0xNzMsNyArMTczLDcgQEAgY2xh
c3MgTWVtb3J5UHJlc3N1cmVIYW5kbGVyIHsKICNpZiBVU0UoR0xJQikKICAgICAgICAgR1JlZlB0
cjxHU291cmNlPiBtX3NvdXJjZTsKICNlbHNlCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJRDsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAjZW5kaWYKICAgICB9
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCmluZGV4IDQwMjNm
NDNlNmYyMGEzOGUxMDNlN2M5YTJlNGYwZjdlMDYxMDU3MTQuLmNjZTExMDZkNDY3YjcyMDgzYzFl
ZGIyMTNhZDU5YzQ0MDMxN2E0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVs
Sm9ic0dlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
Y3BwCkBAIC05MywxNCArOTMsMTQgQEAgYm9vbCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQ
cml2YXRlOjp0cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90
aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0
ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisgICAgaWYgKCFtX3Ro
cmVhZCkKKyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgmUGFyYWxsZWxFbnZpcm9u
bWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2Vy
Iik7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1f
cGFyZW50ID0gcGFyZW50OwogCiAgICAgbV9tdXRleC51bmxvY2soKTsKLSAgICByZXR1cm4gbV90
aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgUGFyYWxsZWxFbnZpcm9u
bWVudDo6VGhyZWFkUHJpdmF0ZTo6ZXhlY3V0ZShUaHJlYWRGdW5jdGlvbiB0aHJlYWRGdW5jdGlv
biwgdm9pZCogcGFyYW1ldGVycykKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFBhcmFsbGVsRW52
aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCh2b2lkKiB0aHJlYWREYXRhKQog
ICAgIFRocmVhZFByaXZhdGUqIHNoYXJlZFRocmVhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFk
UHJpdmF0ZSo+KHRocmVhZERhdGEpOwogICAgIExvY2tIb2xkZXIgbG9jayhzaGFyZWRUaHJlYWQt
Pm1fbXV0ZXgpOwogCi0gICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkgeworICAg
IHdoaWxlIChzaGFyZWRUaHJlYWQtPm1fdGhyZWFkKSB7CiAgICAgICAgIGlmIChzaGFyZWRUaHJl
YWQtPm1fcnVubmluZykgewogICAgICAgICAgICAgKCpzaGFyZWRUaHJlYWQtPm1fdGhyZWFkRnVu
Y3Rpb24pKHNoYXJlZFRocmVhZC0+bV9wYXJhbWV0ZXJzKTsKICAgICAgICAgICAgIHNoYXJlZFRo
cmVhZC0+bV9ydW5uaW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEpvYnNHZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgK
aW5kZXggNDU4NDA3YzRjYjRhM2Y5OTVjOTBjNTU1NjI3YzFjYmQyMmI0MWI1Yy4uYTIwY2FiNjFl
ZTc5Y2VhYmQ1NGU2Mjc3Y2ViNTdkZjY4ZTY2YTkwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9i
c0dlbmVyaWMuaApAQCAtNTMsMTMgKzUzLDYgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7
CiAKICAgICBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8VGhyZWFkUHJp
dmF0ZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgVGhyZWFkUHJpdmF0ZSgpCi0gICAgICAgICAg
ICA6IG1fdGhyZWFkSUQoMCkKLSAgICAgICAgICAgICwgbV9ydW5uaW5nKGZhbHNlKQotICAgICAg
ICAgICAgLCBtX3BhcmVudCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICBib29s
IHRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCopOwogCiAgICAgICAgIHZvaWQgZXhlY3V0
ZShUaHJlYWRGdW5jdGlvbiwgdm9pZCopOwpAQCAtNzQsOSArNjcsOSBAQCBjbGFzcyBQYXJhbGxl
bEVudmlyb25tZW50IHsKICAgICAgICAgc3RhdGljIHZvaWQgd29ya2VyVGhyZWFkKHZvaWQqKTsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKLSAg
ICAgICAgYm9vbCBtX3J1bm5pbmc7Ci0gICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQqIG1fcGFy
ZW50OworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKKyAgICAgICAgYm9vbCBtX3J1
bm5pbmcgeyBmYWxzZSB9OworICAgICAgICBQYXJhbGxlbEVudmlyb25tZW50KiBtX3BhcmVudCB7
IG51bGxwdHIgfTsKIAogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAgICAgICAgQ29u
ZGl0aW9uIG1fdGhyZWFkQ29uZGl0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFy
a2luZ0xvdC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAppbmRleCBlNmM2Nzhi
ZWZjMGYxOTBhMjIzZTlhZGRiMmNjNTgxMGI1NmUxYzE0Li5jYzFhMjFiOWVhNWNjY2M2ZjFhY2U0
Yzk3NDk4OTliYmRhNWQ3ZTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcApAQCAtNTIsNyArNTIsNyBA
QCBzdHJ1Y3QgVGhyZWFkRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRE
YXRhPiB7CiAgICAgVGhyZWFkRGF0YSgpOwogICAgIH5UaHJlYWREYXRhKCk7CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkOwog
ICAgIAogICAgIE11dGV4IHBhcmtpbmdMb2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBwYXJraW5n
Q29uZGl0aW9uOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1
bnNpZ25lZCBudW1UaHJlYWRzKQogfQogCiBUaHJlYWREYXRhOjpUaHJlYWREYXRhKCkKLSAgICA6
IHRocmVhZElkZW50aWZpZXIoY3VycmVudFRocmVhZCgpKQorICAgIDogdGhyZWFkKFRocmVhZDo6
Y3VycmVudCgpKQogewogICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOwogICAgIGZvciAo
OzspIHsKQEAgLTc5Myw3ICs3OTMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojp1
bnBhcmtBbGwoY29uc3Qgdm9pZCogYWRkcmVzcykKICAgICB1bnBhcmtDb3VudChhZGRyZXNzLCBV
SU5UX01BWCk7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBs
KGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4m
IGNhbGxiYWNrKQorTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29u
c3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCiB7
CiAgICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsK
IApAQCAtODAzLDcgKzgwMyw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVh
Y2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpCiAgICAgICAgIGlm
ICghYnVja2V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoVGhyZWFkRGF0
YSogY3VycmVudFRocmVhZERhdGEgPSBidWNrZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERh
dGE7IGN1cnJlbnRUaHJlYWREYXRhID0gY3VycmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQot
ICAgICAgICAgICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIs
IGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJl
bnRUaHJlYWREYXRhLT50aHJlYWQuZ2V0KCksIGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsK
ICAgICB9CiAgICAgCiAgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJr
aW5nTG90LmgKaW5kZXggN2Q1ZmIxN2VmYTAyYWI3NmIxMjhlYWY1OTk4MTM4MDEwMGJhYmQ5Ni4u
YjZkODgzMGQxOWM3YjdmZDRjYzZhY2FlMzYyYWVhM2I5NDNhOWQ1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3Qu
aApAQCAtMTU4LDcgKzE1OCw3IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgc3RhdGljIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQog
ICAgIHsKLSAgICAgICAgZm9yRWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQoVGhyZWFkSWRl
bnRpZmllciwgY29uc3Qgdm9pZCopPihmdW5jKSk7CisgICAgICAgIGZvckVhY2hJbXBsKHNjb3Bl
ZExhbWJkYVJlZjx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4oZnVuYykpOwogICAgIH0KIAog
cHJpdmF0ZToKQEAgLTE3MSw3ICsxNzEsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qg
dm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+
JiBjYWxsYmFjayk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFj
aEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9p
ZCopPiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChj
b25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+Jik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVn
aXN0ZXJzLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNjZGFkZjk3NDNlMmVjY2NiODQ4NDNiMTRhZmVhNzNmZDhhNjcxN2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09P
R0xFLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBPUyhEQVJXSU4p
CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZWxpZiBPUyhXSU5ET1dTKQorI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV1RGIHsKKworI2lmIE9TKERBUldJTikKKworI2lmIENQVShYODYpCit0eXBlZGVm
IGkzODZfdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoWDg2XzY0
KQordHlwZWRlZiB4ODZfdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlm
IENQVShQUEMpCit0eXBlZGVmIHBwY190aHJlYWRfc3RhdGVfdCBQbGF0Zm9ybVJlZ2lzdGVyczsK
KyNlbGlmIENQVShQUEM2NCkKK3R5cGVkZWYgcHBjX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1S
ZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNKQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlX3QgUGxh
dGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNNjQpCit0eXBlZGVmIGFybV90aHJlYWRfc3Rh
dGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVj
dHVyZQorI2VuZGlmCisKKyNlbGlmIE9TKFdJTkRPV1MpCisKK3VzaW5nIFBsYXRmb3JtUmVnaXN0
ZXJzID0gQ09OVEVYVDsKKworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19f
KSkgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkg
fHwgQ1BVKE1JUFMpKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7CisK
KyNlbHNlCisKK3N0cnVjdCBQbGF0Zm9ybVJlZ2lzdGVycyB7CisgICAgdm9pZCogc3RhY2tQb2lu
dGVyOworfTsKKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaAppbmRleCBmZTE2
MzBjOTczNWI1ZmY1MzUzY2IyYzU1OGUzMTA1ODEyNDc4N2Q4Li4yNzdlNjc1ZGIzYzU1NWQ1ZTRj
NmNlMDQ5NDY4ODc0ZDM2NzY5NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaApAQCAtNDIsNyArNDIsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHIgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzUmVmUHRyID0gdHJ1ZTsKIAotICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKCkgOiBtX3B0cihu
dWxscHRyKSB7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0ZXhwciBSZWZQdHIoKSA6IG1fcHRy
KG51bGxwdHIpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKFQqIHB0cikgOiBtX3B0cihw
dHIpIHsgcmVmSWZOb3ROdWxsKHB0cik7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihjb25z
dCBSZWZQdHImIG8pIDogbV9wdHIoby5tX3B0cikgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmVmUHRyKGNvbnN0IFJlZlB0cjxVPiYgbykgOiBtX3B0
cihvLmdldCgpKSB7IHJlZklmTm90TnVsbChtX3B0cik7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uLmgKaW5kZXggOTQzZmQ2ZDc5ZDA5NDQyNTUwM2FjODk3MzFiMGEw
NmE2YWM0MGZmZC4uY2IyNzVmNzAxMmNmZTU2NjFlNDllMGI0ZmYwZDljNjIxYjBlNDk5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKQEAgLTI5LDYgKzI5LDgg
QEAKICNpZm5kZWYgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uX2gKICNkZWZpbmUgVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uX2gKIAorI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCiBuYW1lc3BhY2Ug
V1RGIHsKIAogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsK
QEAgLTM2LDEzICszOCwxNSBAQCB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCog
YXJndW1lbnQpOwogc3RydWN0IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
KFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBkYXRhKQorICAgIFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgUmVmUHRyPFRocmVhZD4mJiB0aHJl
YWQsIHZvaWQqIGRhdGEpCiAgICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwg
dGhyZWFkKFdURk1vdmUodGhyZWFkKSkKICAgICAgICAgLCBkYXRhKGRhdGEpCiAgICAgewogICAg
IH0KIAogICAgIFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uOworICAgIFJlZlB0cjxUaHJlYWQ+IHRo
cmVhZDsKICAgICB2b2lkKiBkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
VGhyZWFkSG9sZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2I5ODEzY2Y3YzQ5MTJlMjYzMmQwMDRlNjZhYzMwODdjMWE0MTc1MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlci5o
IgorCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitUaHJlYWRT
cGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5
OworCitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRF
eGl0KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKFRocmVhZCYgdGhyZWFk
KQoreworICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAgIC8vIElkZWFsbHkgd2UnZCBoYXZl
IHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0
IHBlcmZvcm1hbmNlLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJl
IG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgor
ICAgICAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICAg
ICAgdGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZEhvbGRlci5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjg0MDI0MjFiNjYzNmE1MWFjZmVhYzQ1MmIzODQ2NzMwMWUyZDM2MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFk
IGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4gVGhlIGRlc3RydWN0b3Igb2YgdGhpcyBo
b2xkZXIgcmVsaWFibHkgZGVzdHJveSBUaHJlYWQuCisvLyBGb3IgcHRocmVhZCwgaXQgZW1wbG95
cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3Zl
IFRocmVhZC4KKy8vIEZvciBXaW5kb3dzLCB3ZSB1c2UgdGhyZWFkX2xvY2FsIHRvIGRlZmVyIHRo
cmVhZCBob2xkZXIgZGVzdHJ1Y3Rpb24uIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZp
YworLy8gdHlwZXMgZG9uJ3QgdXNlIG11bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFzcyBU
aHJlYWRIb2xkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEhvbGRlcik7Citw
dWJsaWM6CisgICAgflRocmVhZEhvbGRlcigpOworCisgICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6
YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9sZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBtdXN0
IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgpIGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUu
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKKworICAgIC8vIENyZWF0ZXMgYW5k
IHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkSG9sZGVyIGludG8gdGhyZWFkLXNwZWNpZmljIHN0
b3JhZ2UuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWQmKTsKKworICAgIC8vIFJl
dHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgor
ICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIqIGN1cnJlbnQoKTsKKworICAgIFRocmVhZCYgdGhyZWFk
KCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRIb2xk
ZXIoVGhyZWFkJiB0aHJlYWQpCisgICAgICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgICAgICAs
IG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRo
cmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNhbGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFkIHRl
cm1pbmF0ZXM6CisgICAgLy8gLSBmaXJzdCwgd2hlbiBhbGwgdGhlIG90aGVyIHRocmVhZC1zcGVj
aWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBpdCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdhcyAn
ZGVzdHJveWVkIG9uY2UnCisgICAgLy8gYW5kICgxKSByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0
aHJlYWQtc3BlY2lmaWMgc2xvdCBvciAoMikgY29uc3RydWN0cyB0aHJlYWQgbG9jYWwgdmFsdWUg
dG8gY2FsbCBpdCBhZ2FpbiBsYXRlci4KKyAgICAvLyAtIHNlY29uZCwgYWZ0ZXIgYWxsIHRocmVh
ZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGludm9rZWQsIGl0IGdldHMgY2FsbGVkIGFnYWlu
IC0gdGhpcyB0aW1lLCB3ZSByZW1vdmUgdGhlCisgICAgLy8gVGhyZWFkIGZyb20gdGhlIHRocmVh
ZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KKyAgICBzdGF0aWMgdm9pZCBUSFJFQURfU1BF
Q0lGSUNfQ0FMTCBkZXN0cnVjdCh2b2lkKiBkYXRhKTsKKworICAgIFJlZjxUaHJlYWQ+IG1fdGhy
ZWFkOworICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7CisgICAgc3RhdGljIFRocmVhZFNwZWNp
ZmljS2V5IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY4MTVhYmI2ZjRlZWZjNTIzZWRiOTc5
MzViOWUyNzU1ZTg2NGVmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlclB0aHJlYWRzLmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlh
bGl6ZU9uY2UoKQoreworICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1
Y3QpOworfQorCitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAg
QVNTRVJUKG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHRocmVhZFNwZWNpZmljR2V0KG1fa2V5KSk7Cit9CisK
K3ZvaWQgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQoreworICAgIFRocmVhZEhv
bGRlciogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihk
YXRhKTsKKyAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmllckRhdGEpOworCisgICAgaWYgKHRocmVh
ZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICBkZWxldGUgdGhy
ZWFkSWRlbnRpZmllckRhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aHJlYWRJ
ZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworICAgIC8vIFJlLXNldHRp
bmcgdGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3QoKSBjYWxsIGFmdGVy
IGFsbCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQuCisgICAg
dGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJX
aW4uY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MjQzNGExYzIyZjFlODgwOTAzZDhhNmQ0MWZjYmE1NTIwYTZlOWM5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmNwcApAQCAtMCwwICsxLDEyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCisKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUgSW52YWxpZFRo
cmVhZEhvbGRlciAoKFRocmVhZEhvbGRlciopKDB4YmJhZGJlZWYpKQorCitzdGF0aWMgc3RkOjpt
dXRleCYgdGhyZWFkTWFwTXV0ZXgoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6
Om11dGV4PiBtdXRleDsKKyAgICByZXR1cm4gbXV0ZXguZ2V0KCk7Cit9CisKK3N0YXRpYyBIYXNo
TWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVhZEhvbGRlcio+JiB0aHJlYWRNYXAoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVhZEhv
bGRlcio+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKwordm9pZCBUaHJlYWRIb2xk
ZXI6OmluaXRpYWxpemVPbmNlKCkKK3sKKyAgICB0aHJlYWRNYXBNdXRleCgpOworICAgIHRocmVh
ZE1hcCgpOworICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOwor
fQorCitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAgQVNTRVJU
KG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgVGhyZWFkSG9sZGVyKiBo
b2xkZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPih0aHJlYWRTcGVjaWZpY0dldChtX2tl
eSkpOworICAgIGlmIChob2xkZXIpIHsKKyAgICAgICAgQVNTRVJUKGhvbGRlciAhPSBJbnZhbGlk
VGhyZWFkSG9sZGVyKTsKKyAgICAgICAgcmV0dXJuIGhvbGRlcjsKKyAgICB9CisKKyAgICAvLyBB
ZnRlciBGTFMgaXMgZGVzdHJveWVkLCB0aGlzIG1hcCBvZmZlcnMgdGhlIHZhbHVlIHVudGlsIHRo
ZSBzZWNvbmQgdGhyZWFkIGV4aXQgY2FsbGJhY2sgaXMgY2FsbGVkLgorICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgIHJldHVybiB0
aHJlYWRNYXAoKS5nZXQoY3VycmVudFRocmVhZCgpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6
OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAgaWYgKGRhdGEgPT0gSW52YWxpZFRocmVhZEhv
bGRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGhyZWFkSG9sZGVyKiBob2xkZXIgPSBzdGF0
aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQoaG9sZGVyKTsKKworICAg
IC8vIERlbGF5IHRoZSBkZWFsbG9jYXRpb24gb2YgVGhyZWFkSG9sZGVyIG1vcmUuCisgICAgLy8g
SXQgZGVmZXJzIFRocmVhZEhvbGRlciBkZWFsbG9jYXRpb24gYWZ0ZXIgdGhlIG90aGVyIFRocmVh
ZFNwZWNpZmljIHZhbHVlcyBhcmUgZGVhbGxvY2F0ZWQuCisgICAgc3RhdGljIHRocmVhZF9sb2Nh
bCBjbGFzcyBUaHJlYWRFeGl0Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGhyZWFk
RXhpdENhbGxiYWNrKFRocmVhZEhvbGRlciogaG9sZGVyKQorICAgICAgICAgICAgOiBtX2hvbGRl
cihob2xkZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5UaHJlYWRFeGl0Q2Fs
bGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KG1f
aG9sZGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFkSG9sZGVy
KiBtX2hvbGRlcjsKKyAgICB9IGNhbGxiYWNrKGhvbGRlcik7CisKKyAgICBpZiAoaG9sZGVyLT5t
X2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhob2xkZXItPm1fdGhyZWFkLT5pZCgpKSk7CisgICAg
ICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaG9sZGVyLT5tX3RocmVhZC0+aWQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlIGhvbGRlcjsKKworICAgICAgICAvLyBGaWxsIHRoZSBGTFMg
d2l0aCB0aGUgbm9uLW51bGxwdHIgdmFsdWUuIFdoaWxlIEZMUyBkZXN0cnVjdG9yIHdvbid0IGJl
IGNhbGxlZCBmb3IgdGhhdCwKKyAgICAgICAgLy8gbm9uLW51bGxwdHIgdmFsdWUgdGVsbHMgdXMg
dGhhdCB3ZSBhbHJlYWR5IGRlc3RydWN0ZWQgVGhyZWFkSG9sZGVyLiBUaGlzIGFsbG93cyB1cyB0
bworICAgICAgICAvLyBkZXRlY3QgaW5jb3JyZWN0IHVzZSBvZiBUaHJlYWQ6OmN1cnJlbnQoKSBh
ZnRlciB0aGlzIHBvaW50IGJlY2F1c2UgaXQgd2lsbCBjcmFzaC4KKyAgICAgICAgdGhyZWFkU3Bl
Y2lmaWNTZXQobV9rZXksIEludmFsaWRUaHJlYWRIb2xkZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICAgICAgdGhyZWFkTWFwKCkuYWRkKGhvbGRlci0+bV90
aHJlYWQtPmlkKCksIGhvbGRlcik7CisgICAgfQorICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5
LCBJbnZhbGlkVGhyZWFkSG9sZGVyKTsKKyAgICBob2xkZXItPm1faXNEZXN0cm95ZWRPbmNlID0g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2NTcyMWRkMTY5YmZmMTQzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShQVEhSRUFEUykKLQotI2luY2x1ZGUg
IlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLQotI2luY2x1ZGUgIlRocmVhZGluZy5o
IgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQgaW4g
YmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgotI2RlZmlu
ZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNlbHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRpZmllckRh
dGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01BWDsKLQotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVh
ZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVudGlmaWVyRGF0YTo6flRocmVhZElkZW50aWZpZXJE
YXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0KG1faWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgVGhy
ZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCkKLXsKLSAgICBpbnQgZXJyb3IgPSBw
dGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBkZXN0cnVjdCk7Ci0gICAgaWYgKGVycm9yKQotICAg
ICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIFRocmVhZElkZW50aWZpZXJEYXRh
OjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7
Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGlj
X2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEqPihwdGhyZWFkX2dldHNwZWNpZmljKG1fa2V5KSk7
Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllckRhdGEgPyB0aHJlYWRJZGVudGlmaWVyRGF0
YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5p
dGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllcigp
KTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZl
cnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVydCBwZXJmb3JtYW5lLgotICAgIC8vIEhhdmluZyB0
aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3Qg
Y2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdz
IGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxFQVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tF
WVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCBuZXcgVGhyZWFkSWRlbnRp
ZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6ZGVzdHJ1Y3Qo
dm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmll
ckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KGRhdGEpOwotICAgIEFT
U0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci0KLSAgICBpZiAodGhyZWFkSWRlbnRpZmllckRh
dGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVy
RGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRocmVhZElkZW50aWZpZXJEYXRh
LT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUg
Zm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRo
cmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KLSAgICBwdGhyZWFkX3NldHNw
ZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcyNWJkMjc1ZTcyZWJkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotI2RlZmluZSBUaHJlYWRJZGVudGlmaWVy
RGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNl
IFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElkZW50aWZpZXIgaW4gdGhlIHRocmVhZC1zcGVjaWZp
YyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlv
biB0byByZWxpYWJseSByZW1vdmUKLS8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aHJlYWRNYXAu
IEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlw
bGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNzIFRocmVhZElkZW50aWZpZXJEYXRhIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJZGVudGlmaWVyRGF0YSk7Ci1wdWJsaWM6Ci0gICAg
flRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0KLSAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlv
biBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgotICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUg
Y2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQgcHV0
cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVudGlmaWVyRGF0YSBpbnRvIHRocmVhZC1zcGVjaWZp
YyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkSWRlbnRpZmllciBp
ZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFn
ZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50
aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YShUaHJlYWRJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0g
ICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIC8v
IFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0
aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhy
ZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMg
aXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0
aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWlu
IGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3Ry
dWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdl
IHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJZGVudGlmaWVyIGZyb20gdGhlIHRocmVhZE1hcCwg
Y29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lkKiBk
YXRhKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwotICAgIGJvb2wgbV9p
c0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGljIHB0aHJlYWRfa2V5X3QgbV9rZXk7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmggYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCmluZGV4IGYwOTA0ZmNmNjI0NDllMmQzYmFj
NzAzZDJkYTc0NjAwYmI3ZTM5NDguLjFmOTgzNjNlOTM0MTM0YzQxNDMzMzZjOGI4MmY4YWZjNDM4
MTVlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaApAQCAtNDgsNiArNDgsMTQgQEAKIAogI2lm
IFVTRShQVEhSRUFEUykKICNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpZiBPUyhIVVJEKQorLy8g
UFRIUkVBRF9LRVlTX01BWCBpcyBub3QgZGVmaW5lZCBpbiBiaW9uaWMgbm9yIGluIEh1cmQsIHNv
IGV4cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUuCisjZGVmaW5lIFBUSFJFQURfS0VZU19NQVggMTAy
NAorI2Vsc2UKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCiAjZWxpZiBPUyhXSU5ET1dT
KQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgpAQCAtMTA5LDYgKzExNyw4IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIENhbkJlR0NUaHJlYWQgY2FuQmVHQ1RocmVhZCA9IENhbkJlR0NUaHJl
YWQ6OkZhbHNlPiBjbGFzcyBUCiAKIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBUaHJlYWRTcGVjaWZp
Y0tleTsKIAorc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBUaHJlYWRTcGVjaWZpY0tleSBJbnZhbGlk
VGhyZWFkU3BlY2lmaWNLZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCiBpbmxpbmUgdm9pZCB0aHJl
YWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVjaWZpY0tleSoga2V5LCB2b2lkICgqZGVzdHJ1
Y3Rvcikodm9pZCAqKSkKIHsKICAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoa2V5
LCBkZXN0cnVjdG9yKTsKQEAgLTE3MSw2ICsxODEsOCBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgRFdP
UkQqIGZsc0tleXMoKTsKIAogdHlwZWRlZiBEV09SRCBUaHJlYWRTcGVjaWZpY0tleTsKIAorc3Rh
dGljIGNvbnN0IGNvbnN0ZXhwciBUaHJlYWRTcGVjaWZpY0tleSBJbnZhbGlkVGhyZWFkU3BlY2lm
aWNLZXkgPSBGTFNfT1VUX09GX0lOREVYRVM7CisKIGlubGluZSB2b2lkIHRocmVhZFNwZWNpZmlj
S2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKFRIUkVBRF9TUEVDSUZJQ19D
QUxMICpkZXN0cnVjdG9yKSh2b2lkICopKQogewogICAgIERXT1JEIGZsc0tleSA9IEZsc0FsbG9j
KGRlc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXggYzFkYzM1MDE5MDNhYjc2YjM3MDQ2
ZDkzMzNmOTMyYTNlZjBjNmM2ZS4uYmM0ZjgzMTA5N2FjMzVkNzZmNDRmNjQ1NGY4ZmI1YTUyNmU4
ODI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC0yNiw5ICsyNiwxNSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRocmVhZGluZy5oIgogCisjaW5jbHVkZSAiZHRvYS5oIgorI2lu
Y2x1ZGUgImR0b2EvY2FjaGVkLXBvd2Vycy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs
dWRlIDxjbWF0aD4KICNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5o
PgorI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXJTZWVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZEhvbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmlldy5oPgogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKQEAgLTQ1LDcgKzUx
LDcgQEAgc3RydWN0IE5ld1RocmVhZENvbnRleHQgewogICAgIE11dGV4IGNyZWF0aW9uTXV0ZXg7
CiB9OwogCi1jb25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUpCitjb25zdCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hh
ciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9OUCkKICAgICByZXR1
cm4gdGhyZWFkTmFtZTsKQEAgLTgyLDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQ
b2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRl
eHQtPmNyZWF0aW9uTXV0ZXgpOwogICAgIH0KIAotICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFk
SW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CisgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRo
cmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUpOwogCiAgICAgYXV0byBlbnRyeVBvaW50ID0gV1RG
TW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKIApAQCAtOTIsMjQgKzk4LDI0IEBAIHN0YXRpYyB2
b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAgZW50cnlQb2ludCgp
OwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludCkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6
Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50
KQogewogICAgIE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4
dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIHsgfSB9OwogCiAgICAgLy8gUHJldmVudCB0
aGUgdGhyZWFkIGJvZHkgZnJvbSBleGVjdXRpbmcgdW50aWwgd2UndmUgZXN0YWJsaXNoZWQgdGhl
IHRocmVhZCBpZGVudGlmaWVyLgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVh
dGlvbk11dGV4KTsKIAotICAgIHJldHVybiBjcmVhdGVUaHJlYWRJbnRlcm5hbCh0aHJlYWRFbnRy
eVBvaW50LCBjb250ZXh0LCBuYW1lKTsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGVJbnRlcm5h
bCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBuYW1lKTsKIH0KIAotVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29u
c3QgY2hhciogbmFtZSkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKFRocmVhZEZ1bmN0
aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZVRocmVhZChuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0geworICAgIHJldHVybiBU
aHJlYWQ6OmNyZWF0ZShuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0gewogICAgICAgICBlbnRyeVBv
aW50KGRhdGEpOwogICAgIH0pOwogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRl
cmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShR
T1NfQ0xBU1NFUykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEyMCw3
ICsxMjYsNyBAQCB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVs
YXRpdmVQcmlvcml0eSkKICNlbmRpZgogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJ
bml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRo
cmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFP
U19DTEFTU0VTKQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTM0LDEz
ICsxNDAsMTMgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxh
dGl2ZVByaW9yaXR5KQogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiBzdGF0aWMgcW9zX2NsYXNzX3Qg
Z2xvYmFsTWF4UU9TY2xhc3MgeyBRT1NfQ0xBU1NfVU5TUEVDSUZJRUQgfTsKIAotdm9pZCBzZXRH
bG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKK3ZvaWQgVGhyZWFkOjpzZXRH
bG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKIHsKICAgICBibWFsbG9jOjph
cGk6OnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG1heENsYXNzKTsKICAgICBnbG9iYWxNYXhR
T1NjbGFzcyA9IG1heENsYXNzOwogfQogCi1xb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFv
c19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCitxb3NfY2xhc3NfdCBUaHJlYWQ6OmFkanVzdGVkUU9T
Q2xhc3MocW9zX2NsYXNzX3Qgb3JpZ2luYWxDbGFzcykKIHsKICAgICBpZiAoZ2xvYmFsTWF4UU9T
Y2xhc3MgIT0gUU9TX0NMQVNTX1VOU1BFQ0lGSUVEKQogICAgICAgICByZXR1cm4gc3RkOjptaW4o
b3JpZ2luYWxDbGFzcywgZ2xvYmFsTWF4UU9TY2xhc3MpOwpAQCAtMTQ4LDQgKzE1NCwyNSBAQCBx
b3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9
CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9pZCk7Cit9CisKK3ZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCit7
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9u
Ojppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsK
KyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0
YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3Vy
ZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6
OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAg
ICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICAg
ICAgVGhyZWFkOjppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKTsKKyAgICB9KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDZiNTU4YjNlMWQ1MTdlODEwYzVl
YThmNmIyY2E0NDA1YWNmMDEyZDIuLmU4ZGY5NDQyMDJiYjNmYmExZjM1ODhiNWZhZWE5MzJhOTVm
YzZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXgu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFr
dGl4LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDc1ICsz
NiwxNzYgQEAKIC8vIE5vdGhpbmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5kcyBvbiBBc3NlcnRpb25z
LCBBdG9taWNzLCBMb2NrZXIsIE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgb3Ig
VGhyZWFkaW5nUHJpbWl0aXZlcy4KIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
bXV0ZXg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
ICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAorI2lmIFVT
RShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNs
dWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAotdHlwZWRlZiB1aW50
MzJfdCBUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQzMl90
OwogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIAotLy8g
VGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMg
c2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRv
IHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5
IAotLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CitjbGFzcyBUaHJl
YWRIb2xkZXI7CitjbGFzcyBQcmludFN0cmVhbTsKKworY2xhc3MgVGhyZWFkIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBU
aHJlYWRIb2xkZXI7CiAKLS8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgot
Ly8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZv
cm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhy
ZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogdGhyZWFkTmFtZSwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgflRocmVhZCgpOwogCi0v
LyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9uc2l2ZW5lc3Mu
Ci0vLyByZWxhdGl2ZVByaW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTUsIDBdIHdo
ZXJlIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJpb3JpdHkuCi1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0
aXZlUHJpb3JpdHkgPSAwKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKyAgICAvLyBSZXR1
cm5zIG51bGxwdHIgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KKyAgICAvLyBUaGUgdGhyZWFk
IG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNz
ZWQgaW4gdG8gdGhlIHRocmVhZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0
cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3Jl
YXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5h
bWUpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFk
KCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJ
ZGVudGlmaWVyLCBpbnQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGludCB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihUaHJlYWRJZGVudGlmaWVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRldGFj
aFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3Qu
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKIAotLy8g
RGVwcmVjYXRlZCBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIHRocmVhZCBjcmVhdGlvbi4KLVdURl9F
WFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlv
biwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIC8vIFJldHVybnMgVGhyZWFk
SWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9ubHkgY2FyZXMg
YWJvdXQgaWRlbnRpdHkKKyAgICAvLyBvZiB0aHJlYWRzLiBBdCB0aGF0IHRpbWUsIHVzZXJzIHNo
b3VsZCBrbm93IHRoYXQgaG9sZGluZyB0aGlzIFRocmVhZElkZW50aWZpZXIgZG9lcyBub3QgZW5z
dXJlCisgICAgLy8gdGhhdCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGlzIGFsaXZlLiBXaGlsZSBU
aHJlYWQ6OmN1cnJlbnQoKSBpcyBub3Qgc2FmZSBpZiBpdCBpcyBjYWxsZWQKKyAgICAvLyBmcm9t
IHRoZSBkZXN0cnVjdG9yIG9mIHRoZSBvdGhlciBUTFMgZGF0YSwgY3VycmVudElEKCkgYWx3YXlz
IHJldHVybnMgbWVhbmluZ2Z1bCB0aHJlYWQgSUQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9y
bS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciog
dGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHko
aW50KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUg
dGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3
aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4K
LXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBr
ZXJuX3JldHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3Vz
cGVuZEVycm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1
c3BlbmRFcnJvciA9IERXT1JEOworI2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVh
ZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4
cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVzdW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykK
LWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNl
bmRpZgogCisgICAgLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJl
c3BvbnNpdmVuZXNzLgorICAgIC8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUg
cmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlv
cml0eS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVh
ZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQo
aW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3Nf
dCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0Ns
YXNzKHFvc19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFz
c190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNw
YWNlIFdURgorICAgIC8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlv
bi4KKyAgICAvLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11
c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAotdXNp
bmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwotdXNpbmcgV1RGOjpjcmVhdGVUaHJlYWQ7Ci11c2lu
ZyBXVEY6OmN1cnJlbnRUaHJlYWQ7Ci11c2luZyBXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5Owot
dXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2luZyBXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0
aW9uOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRocmVhZCYgdGhyZWFkKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlkKCkgPT0gdGhyZWFkLmlkKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFRocmVhZCYgdGhyZWFkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkKCkg
IT0gdGhyZWFkLmlkKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBsYXRm
b3JtVGhyZWFkaW5nKCk7CisKK3ByaXZhdGU6CisgICAgVGhyZWFkKCk7CisKKyAgICAvLyBJbnRl
cm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0ZSBpbXBsZW1lbnRhdGlvbi4KKyAg
ICBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZv
aWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLXVzaW5n
IFdURjo6c2lnbmFsVGhyZWFkOworICAgIHZvaWQgZXN0YWJsaXNoKHB0aHJlYWRfdCk7CisjZWxz
ZQorICAgIHZvaWQgZXN0YWJsaXNoKEhBTkRMRSwgVGhyZWFkSWRlbnRpZmllcik7CiAjZW5kaWYK
IAotI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi11c2luZyBXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNz
OwotdXNpbmcgV1RGOjphZGp1c3RlZFFPU0NsYXNzOworI2lmIFVTRShQVEhSRUFEUykgJiYgIU9T
KERBUldJTikKKyAgICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQs
IHNpZ2luZm9fdCosIHZvaWQqIHVjb250ZXh0KTsKKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKKyAg
ICBlbnVtIEpvaW5hYmxlU3RhdGUgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3Rh
dGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KKyAgICAgICAgSm9pbmFibGUsCisKKyAg
ICAgICAgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMg
dGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBj
YW4gYmUgYQorICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVh
ZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1h
aW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pCisgICAgICAgIC8vIGFuZCB3
aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFr
ZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncworICAgICAg
ICAvLyBub2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNl
IHdhaXRPblRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgorICAgICAgICBK
b2luZWQsCisKKyAgICAgICAgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2Fu
IG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0
YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgorICAgICAgICBEZXRhY2hlZCwK
KyAgICB9OworCisgICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9q
b2luYWJsZVN0YXRlOyB9CisgICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJs
ZVN0YXRlID0gRGV0YWNoZWQ7IH0KKyAgICB2b2lkIGRpZEV4aXQoKTsKKyAgICB2b2lkIGRpZEpv
aW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkg
eyByZXR1cm4gbV9kaWRFeGl0OyB9CisKKyAgICAvLyBXb3JkTG9jayAmIExvY2sgcmVseSBvbiBU
aHJlYWRTcGVjaWZpYy4gQnV0IFRocmVhZCBvYmplY3QgY2FuIGJlIGRlc3Ryb3llZCBldmVuIGFm
dGVyIFRocmVhZFNwZWNpZmljIHRoaW5ncyBhcmUgZGVzdHJveWVkLgorICAgIHN0ZDo6bXV0ZXgg
bV9tdXRleDsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1faWQgeyAwIH07CisgICAgSm9pbmFibGVT
dGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJsZSB9OworICAgIGJvb2wgbV9kaWRFeGl0IHsg
ZmFsc2UgfTsKKyNpZiBVU0UoUFRIUkVBRFMpCisgICAgcHRocmVhZF90IG1faGFuZGxlOworI2lm
IE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOworI2Vsc2UKKyAg
ICBzZW1fdCBtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWU7CisgICAgbWNvbnRleHRfdCBtX3N1
c3BlbmRlZE1hY2hpbmVDb250ZXh0OworICAgIHVuc2lnbmVkIG1fc3VzcGVuZENvdW50IHsgMCB9
OworICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKKyNlbmRpZgor
I2VsaWYgT1MoV0lORE9XUykKKyAgICBIQU5ETEUgbV9oYW5kbGU7CisjZWxzZQorI2Vycm9yIFVu
a25vd24gU3lzdGVtCiAjZW5kaWYKK307CisKKy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxs
ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5
LgorLy8gRGFyd2luIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNh
bGwgaXQgZnJvbSBhbnkgdGhyZWFkLCB0aGUgb25seQorLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0
aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0
aWFsaXplVGhyZWFkaW5nKCk7CisKK2lubGluZSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJl
YWQoKQoreworICAgIHJldHVybiBUaHJlYWQ6OmN1cnJlbnRJRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgV1RGOjpUaHJl
YWQ7Cit1c2luZyBXVEY6OmN1cnJlbnRUaHJlYWQ7CiAKICNlbmRpZiAvLyBUaHJlYWRpbmdfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IGY1Y2VlM2MxNzc4MmY2NmFmOWIw
NGNjN2Q1NmNhMWRhNWE2OTJkMGYuLjM5YjRmNjQ2MTllNThiZjBkN2JmY2ZkNzEwY2QzNGM2NTVl
NmM3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAgLTEsNyArMSw4IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhh
eWdvb2RAcmVha3RpeC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2Qg
PGpoYXlnb29kQHJlYWt0aXguY29tPgogICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQ5ICszNCwxNTEgQEAKIAogI2lmIFVTRShQVEhSRUFE
UykKIAotI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKLSNp
bmNsdWRlICJkdG9hLmgiCi0jaW5jbHVkZSAiZHRvYS9jYWNoZWQtcG93ZXJzLmgiCi0jaW5jbHVk
ZSAiSGFzaE1hcC5oIgotI2luY2x1ZGUgIlJhbmRvbU51bWJlclNlZWQuaCIKLSNpbmNsdWRlICJT
dGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKLSNp
bmNsdWRlICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCi0jaW5jbHVkZSAiVGhyZWFk
U3BlY2lmaWMuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvV1RGVGhy
ZWFkRGF0YS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiAhQ09NUElMRVIoTVNWQykKLSNp
bmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzY2hlZC5oPgotI2luY2x1ZGUgPHN5cy90aW1l
Lmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KIAogI2lmIE9TKExJTlVYKQogI2luY2x1ZGUg
PHN5cy9wcmN0bC5oPgogI2VuZGlmCiAKLSNpZiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNpZ25h
bC5oPgorI2lmICFDT01QSUxFUihNU1ZDKQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUg
PHNjaGVkLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi1uYW1lc3BhY2UgV1RG
IHsKKyNpZiAhT1MoREFSV0lOKSAmJiBPUyhVTklYKQogCi1jbGFzcyBQdGhyZWFkU3RhdGUgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gSm9pbmFibGVT
dGF0ZSB7Ci0gICAgICAgIEpvaW5hYmxlLCAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUuIFRo
ZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KLQotICAgICAgICBKb2luZWQsIC8vIFNvbWVib2R5
IHdhaXRlZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlzIHRocmVhZCBmaW5hbGx5IGV4
aXRlZC4gVGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJlIGEgCi0gICAgICAg
ICAgICAgICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0aHJlYWQgZXhpdHMg
KHdoaWNoIGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aGUgcmVtYWluZGVyIG9m
IHdhaXRPblRocmVhZENvbXBsZXRpb24gdG8gcnVuKSAKLSAgICAgICAgICAgICAgICAvLyBhbmQg
d2hlbiB0aHJlYWREaWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0aHJlYWREaWRFeGl0IHRvIHRh
a2UgY2hhcmdlIGFuZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNpbmNlIHRoZXJlJ3MgCi0gICAg
ICAgICAgICAgICAgLy8gbm9ib2R5IGVsc2UgdG8gcGljayB1cCB0aGUgc2xhY2sgaW4gdGhpcyBj
YXNlIChzaW5jZSB3YWl0T25UaHJlYWRDb21wbGV0aW9uIGhhcyBhbHJlYWR5IHJldHVybmVkKS4K
LQotICAgICAgICBEZXRhY2hlZCAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBj
YW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0
IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCi0gICAgfTsKLQotICAgIC8v
IEN1cnJlbnRseSBhbGwgdGhyZWFkcyBjcmVhdGVkIGJ5IFdURiBzdGFydCBvdXQgYXMgam9pbmFi
bGUuIAotICAgIFB0aHJlYWRTdGF0ZShwdGhyZWFkX3QgaGFuZGxlKQotICAgICAgICA6IG1fam9p
bmFibGVTdGF0ZShKb2luYWJsZSkKLSAgICAgICAgLCBtX2RpZEV4aXQoZmFsc2UpCi0gICAgICAg
ICwgbV9wdGhyZWFkSGFuZGxlKGhhbmRsZSkKLSAgICB7Ci0gICAgfQorI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxl
U3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KLSAgICBwdGhyZWFkX3QgcHRocmVh
ZEhhbmRsZSgpIHsgcmV0dXJuIG1fcHRocmVhZEhhbmRsZTsgfQotICAgIHZvaWQgZGlkQmVjb21l
RGV0YWNoZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVkOyB9Ci0gICAgdm9pZCBkaWRF
eGl0KCkgeyBtX2RpZEV4aXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBkaWRKb2luKCkgeyBtX2pvaW5h
YmxlU3RhdGUgPSBKb2luZWQ7IH0KLSAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1fZGlk
RXhpdDsgfQorI2lmIE9TKFNPTEFSSVMpCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjZWxzZQorI2lu
Y2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgogCi1wcml2YXRlOgotICAgIEpvaW5hYmxlU3RhdGUg
bV9qb2luYWJsZVN0YXRlOwotICAgIGJvb2wgbV9kaWRFeGl0OwotICAgIHB0aHJlYWRfdCBtX3B0
aHJlYWRIYW5kbGU7Ci19OworI2lmIEhBVkUoUFRIUkVBRF9OUF9IKQorI2luY2x1ZGUgPHB0aHJl
YWRfbnAuaD4KKyNlbmRpZgogCi10eXBlZGVmIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgc3Rk
Ojp1bmlxdWVfcHRyPFB0aHJlYWRTdGF0ZT4+IFRocmVhZE1hcDsKKyNlbmRpZgogCi12b2lkIHVu
c2FmZVRocmVhZFdhc0RldGFjaGVkKFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWREaWRF
eGl0KFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWRXYXNKb2luZWQoVGhyZWFkSWRlbnRp
Zmllcik7CituYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgp
CitUaHJlYWQ6OlRocmVhZCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE11dGV4PiBt
dXRleDsKLSAgICByZXR1cm4gbXV0ZXg7CisjaWYgIU9TKERBUldJTikKKyAgICBzZW1faW5pdCgm
bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHBy
b2Nlc3MuICovIDAsIC8qIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwor
I2VuZGlmCiB9CiAKLXZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCitUaHJlYWQ6On5UaHJlYWQo
KQogewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQ7Ci0KLSAgICBpZiAoaXNJbml0aWFs
aXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAg
ICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7Ci0gICAgLy8gU3RyaW5nSW1w
bDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJl
YWRzYWZlIGZhc2hpb24sCi0gICAgLy8gc28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVk
IGZyb20gaGVyZS4KLSAgICBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIHRocmVhZE1hcE11dGV4
KCk7Ci0gICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgIFRocmVhZElk
ZW50aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgpOwotICAgIHd0ZlRocmVhZERhdGEoKTsKLSAg
ICBpbml0aWFsaXplRGF0ZXMoKTsKKyNpZiAhT1MoREFSV0lOKQorICAgIHNlbV9kZXN0cm95KCZt
X3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworI2VuZGlmCiB9CiAKLXN0YXRpYyBUaHJlYWRN
YXAmIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZE1hcD4g
bWFwOwotICAgIHJldHVybiBtYXA7Ci19CisjaWYgIU9TKERBUldJTikKIAotc3RhdGljIFRocmVh
ZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0
aHJlYWRIYW5kbGUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkp
OworLy8gV2UgdXNlIFNJR1VTUjIgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFk
cyBpbiBKYXZhU2NyaXB0Q29yZS4KK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgaW50IFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOworc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZCo+IHRh
cmdldFRocmVhZCB7IG51bGxwdHIgfTsKK3N0YXRpYyBTdGF0aWNXb3JkTG9jayBnbG9iYWxTdXNw
ZW5kTG9jazsKIAotICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2lu
KCk7Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBp
ZiAocHRocmVhZF9lcXVhbChpLT52YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxl
KSAmJiAhaS0+dmFsdWUtPmhhc0V4aXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmtleTsK
K3ZvaWQgVGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCos
IHZvaWQqIHVjb250ZXh0KQoreworICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2NhbCBhdG9taWMg
dHlwZXMgZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJlYWQqIHRocmVh
ZCA9IHRhcmdldFRocmVhZC5sb2FkKCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1c3BlbmRlZC5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc2ln
bmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVz
dW1lIHNpZ3N1c3BlbmQuCisgICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0
c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gc2ln
bmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxh
dGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlv
biBhbHdheXMgcHJlY2VkZXMuCisgICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBw
ZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZv
cmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgorICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3Jv
dXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHVjb250ZXh0X3QqIHVz
ZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKKyNpZiBDUFUo
UFBDKQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9ICp1c2VyQ29udGV4
dC0+dWNfbWNvbnRleHQudWNfcmVnczsKKyNlbHNlCisgICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1h
Y2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OworI2VuZGlmCisKKyAgICAv
LyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBpcyBzdXNwZW5k
ZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb24uIEl0IG1l
YW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuCisgICAgLy8g
aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMv
eHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMworICAgIC8vCisgICAgLy8gQW5kIHNlbV9w
b3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0IHN1c3BlbmRlZE1hY2hp
bmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3Jv
dXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdf
MDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFkLT5tX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUp
OworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9j
a2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNh
X21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1
c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0
IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4KKyAgICBzaWdzZXRfdCBi
bG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOworICAg
IHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Cisg
ICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7CisKKyAgICAvLyBBbGxvdyByZXN1bWUg
Y2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCisgICAgc2VtX3Bvc3Qo
JnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKIH0KIAotc3RhdGljIFRocmVh
ZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUoY29uc3QgcHRo
cmVhZF90JiBwdGhyZWFkSGFuZGxlKQorI2VuZGlmIC8vICFPUyhEQVJXSU4pCisKK3ZvaWQgVGhy
ZWFkOjppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKQogewotICAgIEFTU0VSVCghaWRlbnRp
ZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50
aWZpZXJDb3VudCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgc3Rk
OjptYWtlX3VuaXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRIYW5kbGUpKTsKLSAgICByZXR1cm4g
aWRlbnRpZmllckNvdW50Kys7CisjaWYgIU9TKERBUldJTikKKyAgICAvLyBTaWduYWwgaGFuZGxl
cnMgYXJlIHByb2Nlc3MgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uCisgICAgLy8gSW50ZW50aW9uYWxs
eSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVyLgorICAgIC8vIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNp
Z3N1c3BlbmQuCisgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgc2lnZW1wdHlzZXQo
JmFjdGlvbi5zYV9tYXNrKTsKKyAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lKTsKKworICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSAmc2lnbmFsSGFu
ZGxlclN1c3BlbmRSZXN1bWU7CisgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNB
X1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24s
IDApOworI2VuZGlmCiB9CiAKLXN0YXRpYyBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZUZvcklkZW50
aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKFRocmVhZElkZW50aWZpZXIgaWQpCitzdGF0aWMgdm9p
ZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQogewotICAgIHJl
dHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpLT5wdGhyZWFkSGFuZGxlKCk7CisjaWYgIU9TKERBUldJ
TikKKyAgICBzaWdzZXRfdCBtYXNrOworICAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKKyAgICBzaWdh
ZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHB0aHJlYWRfc2lnbWFz
ayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkKiB3dGZU
aHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewotICAgIC8vIEJhbGFuY2VkIGJ5IC5sZWFr
UHRyKCkgaW4gY3JlYXRlVGhyZWFkSW50ZXJuYWwuCisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQ
dHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgogICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0
ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CisKKyAgICBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0gbnVs
bHB0cjsKKwogICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQor
UmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKIHsKLSAgICBhdXRvIGludm9jYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwg
ZGF0YSk7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgp
KTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLmdldCgpLCBkYXRhKTsKICAgICBwdGhyZWFk
X3QgdGhyZWFkSGFuZGxlOwogICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CiAgICAgcHRocmVhZF9h
dHRyX2luaXQoJmF0dHIpOwpAQCAtMTg2LDE3ICsxODksMTggQEAgVGhyZWFkSWRlbnRpZmllciBj
cmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb24KICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7CiAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBv
aW50ICVwIHdpdGggZGF0YSAlcCIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0
KCkpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0ZlRo
cmVhZEVudHJ5UG9pbnQuCiAgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJbnZv
Y2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7CiAgICAgVU5VU0VEX1BBUkFNKGxlYWtlZElu
dm9jYXRpb24pOwogCi0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFu
ZGxlKHRocmVhZEhhbmRsZSk7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlKTsK
KyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3Vy
cmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFWRShQ
VEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcHRocmVhZF9zZXRuYW1lX25wKG5vcm1hbGl6ZVRocmVh
ZE5hbWUodGhyZWFkTmFtZSkpOwpAQCAtMjA1LDEyMyArMjA5LDIzNCBAQCB2b2lkIGluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHRocmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlm
aWVyIGlkID0gaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAg
QVNTRVJUKGlkKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Cisg
ICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9Ci0gICAg
Ci12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGlu
dCBkZWx0YSkKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhy
ZWFkSUQpOwogCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhh
bmRsZSk7Ci0gICAgfQordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKIAogICAg
IGludCBwb2xpY3k7CiAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogCi0gICAgaWYgKHB0
aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQorICAg
IGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOwogCi0g
ICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsK
KyAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0obV9oYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKIH0K
IAotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQp
CitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgcHRocmVhZF90IHB0aHJl
YWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQorICAgIHB0aHJlYWRfdCBoYW5kbGU7
CiAgICAgewotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGxvY2sgYWNyb3NzIHRoZSBjYWxs
IHRvIGpvaW4sIHNpbmNlIHRoYXQgY2FuIGJsb2NrIG91ciB0aHJlYWQgYW5kIGNhdXNlIGRlYWRs
b2NrLgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
ICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxy
ZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgICAg
ICBoYW5kbGUgPSBtX2hhbmRsZTsKICAgICB9CiAKLSAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJl
YWRfam9pbihwdGhyZWFkSGFuZGxlLCAwKTsKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRf
am9pbihoYW5kbGUsIDApOwogCiAgICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKLSAgICAg
ICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9j
a2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1IoIlRocmVh
ZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQi
LCBtX2lkKTsKICAgICBlbHNlIGlmIChqb2luUmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIlRo
cmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBqb2luZWQuXG4iLCB0aHJlYWRJRCk7
CisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJl
IGpvaW5lZC5cbiIsIG1faWQpOwogCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11
dGV4KCkpOwotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFk
SUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgQVNTRVJUKHN0YXRlLT5qb2luYWJsZVN0YXRl
KCkgPT0gUHRocmVhZFN0YXRlOjpKb2luYWJsZSk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6
Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBK
b2luYWJsZSk7CiAKLSAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgc28gY2xl
YW4gdXAgYWZ0ZXIgaXQuCi0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhy
ZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLSAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0
ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2
ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRz
ZWxmLgotICAgIGVsc2UKLSAgICAgICAgc3RhdGUtPmRpZEpvaW4oKTsKKyAgICAvLyBJZiB0aGUg
dGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgdGhlbiBkbyBub3RoaW5nLiBJZiB0aGUgdGhyZWFk
IGhhc24ndCBleGl0ZWQgeWV0LCB0aGVuIGp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBq
b2luZWQgb24gaXQuCisgICAgLy8gSW4gYm90aCBjYXNlcywgVGhyZWFkSG9sZGVyOjpkZXN0cnVj
dCgpIHdpbGwgdGFrZSBjYXJlIG9mIGRlc3Ryb3lpbmcgVGhyZWFkLgorICAgIGlmICghaGFzRXhp
dGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQog
Ci12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJl
YWQ6OmRldGFjaCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7
Ci0gICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotCi0gICAgaW50IGRldGFjaFJlc3VsdCA9IHB0
aHJlYWRfZGV0YWNoKHB0aHJlYWRIYW5kbGUpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBkZXRhY2hSZXN1bHQgPSBwdGhyZWFkX2Rl
dGFjaChtX2hhbmRsZSk7CiAgICAgaWYgKGRldGFjaFJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9S
KCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRocmVh
ZElEKTsKLQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFk
SUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAg
ICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLSAgICBlbHNlCi0gICAgICAgIHRo
cmVhZE1hcCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIExP
R19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4i
LCBtX2lkKTsKKworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFj
aGVkKCk7CiB9CiAKLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
KQorVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCku
Z2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRF
eGl0KCk7CisgICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7
CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKIAotICAgIGlm
IChzdGF0ZS0+am9pbmFibGVTdGF0ZSgpICE9IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpCi0gICAg
ICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0
ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAg
UmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICB0aHJl
YWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYoKSk7CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFs
aXplKCp0aHJlYWQpOworICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCgpOworICAgIHJldHVybiAqdGhyZWFkOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKQorVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiB7Ci0gICAg
VGhyZWFkSWRlbnRpZmllciBpZCA9IFRocmVhZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCk7
Ci0gICAgaWYgKGlkKQotICAgICAgICByZXR1cm4gaWQ7CisgICAgcmV0dXJuIGN1cnJlbnQoKS5p
ZCgpOworfQogCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlm
aWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVy
Rm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRh
dGE6OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsKK2Jvb2wgVGhyZWFkOjpzaWduYWwo
aW50IHNpZ25hbE51bWJlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNp
Z25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nl
c3MuCiB9CiAKLWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGlu
dCBzaWduYWxOdW1iZXIpCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQs
IFBsYXRmb3JtU3VzcGVuZEVycm9yPgogewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwot
ICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGlk
KCkgIT0gY3VycmVudFRocmVhZCgpLCAiV2UgZG8gbm90IHN1cHBvcnQgc3VzcGVuZGluZyB0aGUg
Y3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRl
eD4gbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyAgICBrZXJuX3JldHVybl90IHJl
c3VsdCA9IHRocmVhZF9zdXNwZW5kKG1fcGxhdGZvcm1UaHJlYWQpOworICAgIGlmIChyZXN1bHQg
IT0gS0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworI2Vsc2UKICAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5k
bGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFT
U0VSVChwdGhyZWFkSGFuZGxlKTsKKyAgICAgICAgLy8gRHVyaW5nIHN1c3BlbmQsIHN1c3BlbmQg
b3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4K
KyAgICAgICAgLy8gV2UgdXNlIGdsb2JhbCBsb2NrIGluc3RlYWQgb2YgcGVyIHRocmVhZCBsb2Nr
LgorICAgICAgICAvLyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhc2UsIHRoZXJlIGFyZSB0aHJl
YWRzIEEgYW5kIEIuCisgICAgICAgIC8vIEFuZCBBIGF0dGVtcHQgdG8gc3VzcGVuZCBCIGFuZCBC
IGF0dGVtcHQgdG8gc3VzcGVuZCBBLgorICAgICAgICAvLyBBIGFuZCBCIHNlbmQgc2lnbmFscy4g
QW5kIGxhdGVyLCBzaWduYWxzIGFyZSBkZWxpdmVyZWQgdG8gQSBhbmQgQi4KKyAgICAgICAgLy8g
SW4gdGhhdCBjYXNlLCBib3RoIHdpbGwgYmUgc3VzcGVuZGVkLgorICAgICAgICBXb3JkTG9ja0hv
bGRlciBsb2NrZXIoZ2xvYmFsU3VzcGVuZExvY2spOworICAgICAgICBpZiAoIW1fc3VzcGVuZENv
dW50KSB7CisgICAgICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSBwdGhy
ZWFkX3NpZ3F1ZXVlLiBJdCBhbGxvd3MgdXMgdG8gcGFzcyB0aGUgYXJndW1lbnQgdG8gdGhlIHNp
Z25hbCBoYW5kbGVyLgorICAgICAgICAgICAgLy8gQnV0IGl0IGNhbiBiZSB1c2VkIGluIGEgZmV3
IHBsYXRmb3JtcywgbGlrZSBMaW51eC4KKyAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIHVzZSBU
aHJlYWQqIHN0b3JlZCBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdG8gcGFzcyBpdCB0byB0
aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7
CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7CisgICAgICAgICAgICBzZW1fd2FpdCgm
bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFy
cmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVy
IGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9zdXNwZW5k
ZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIH0KKyAg
ICAgICAgKyttX3N1c3BlbmRDb3VudDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5k
aWYKK30KKwordm9pZCBUaHJlYWQ6OnJlc3VtZSgpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorICAgIHRocmVhZF9y
ZXN1bWUobV9wbGF0Zm9ybVRocmVhZCk7CisjZWxzZQorICAgIHsKKyAgICAgICAgLy8gRHVyaW5n
IHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRo
ZSBvdGhlciB0aHJlYWRzLgorICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU3Vz
cGVuZExvY2spOworICAgICAgICBpZiAobV9zdXNwZW5kQ291bnQgPT0gMSkgeworICAgICAgICAg
ICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSBpcyBhY3R1YWxseSBpc3N1ZWQsCisgICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIg
aXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCisgICAgICAgICAgICAvLyBUaGVyZSBh
cmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9y
IHN1c3BlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2ln
bmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4K
KyAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNw
ZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJl
IHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCisgICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxv
Y2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4K
KyAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNw
ZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgorICAgICAgICAgICAgdGFyZ2V0
VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChtX2hhbmRs
ZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgc2VtX3dhaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0
aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMg
ZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQorICAgICAgICAtLW1fc3VzcGVuZENvdW50OworICAg
IH0KKyNlbmRpZgorfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVycykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShY
ODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5U
OworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7
CisjZWxpZiBDUFUoUFBDKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURfU1RB
VEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURf
U1RBVEU7CisjZWxpZiBDUFUoUFBDNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBDX1RI
UkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQ
UENfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3Vu
dCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhy
ZWFkX2dldF9zdGF0ZShtX3BsYXRmb3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3RhdGVfdCkm
cmVnaXN0ZXJzLCAmdXNlckNvdW50KTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykg
eworICAgICAgICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BS
RVRUWV9GVU5DVElPTiwgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZhaWxlZCBiZWNh
dXNlIHRocmVhZF9nZXRfc3RhdGUgcmV0dXJuZWQgYW4gZXJyb3IgKCVkKS4gVGhpcyBpcyBwcm9i
YWJseSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgaW5zaWRlIFJvc2V0dGEsIHdoaWNoIGlzIG5vdCBz
dXBwb3J0ZWQuIiwgcmVzdWx0KTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgcmV0dXJu
IHVzZXJDb3VudCAqIHNpemVvZih1aW50cHRyX3QpOworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRl
ZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0p
IHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKQorICAgIHJlZ2lzdGVycyA9IG1fc3VzcGVuZGVk
TWFjaGluZUNvbnRleHQ7CisgICAgcmV0dXJuIHNpemVvZihQbGF0Zm9ybVJlZ2lzdGVycyk7Cisj
ZWxpZiBPUyhPUEVOQlNEKQorICAgIC8vIGh0dHA6Ly9tYW4ub3BlbmJzZC5vcmcvcHRocmVhZF9z
dGFja3NlZ19ucC4zCisgICAgc3RhY2tfdCBzczsKKyAgICBpbnQgcmMgPSBwdGhyZWFkX3N0YWNr
c2VnX25wKG1faGFuZGxlLCAmc3MpOworICAgIHJlZ2lzdGVycy5zdGFja1BvaW50ZXIgPSBzcy5z
c19zcDsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRl
OworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGUpOworI2lmIEhBVkUoUFRIUkVBRF9O
UF9IKSB8fCBPUyhORVRCU0QpCisgICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZA
a2RlLm9yZworICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAobV9oYW5kbGUsICZhdHRyaWJ1dGUpOwor
I2Vsc2UKKyAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVy
IFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcworICAgIHB0
aHJlYWRfZ2V0YXR0cl9ucChtX2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZW5kaWYKKworICAgIHZv
aWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7CisgICAgaW50IHJj
ID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZhdHRyaWJ1dGUsICZzdGFja0Jhc2UsICZzdGFja1Np
emUpOworICAgIEFTU0VSVF9VTlVTRUQocmMsICFyYyk7CisgICAgQVNTRVJUKHN0YWNrQmFzZSk7
CisgICAgcmVnaXN0ZXJzLnN0YWNrUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jh
c2UpICsgc3RhY2tTaXplOworCisgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHJpYnV0ZSk7
CisKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIFRocmVhZDo6ZGlkRXhpdCgpCit7
CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAg
bV9kaWRFeGl0ID0gdHJ1ZTsKK30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChwdGhyZWFkX3Qg
aGFuZGxlKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0
ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIGlmICghbV9pZCkgeworICAgICAgICBz
dGF0aWMgc3RkOjphdG9taWM8VGhyZWFkSWRlbnRpZmllcj4gcHJvdmlkZXIgeyAwIH07CisgICAg
ICAgIG1faWQgPSArK3Byb3ZpZGVyOworI2lmIE9TKERBUldJTikKKyAgICAgICAgbV9wbGF0Zm9y
bVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxlKTsKKyNlbmRpZgogICAgIH0K
LSAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVy
KTsKLSAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KIH0KIAog
TXV0ZXg6Ok11dGV4KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IDU0YjQzZWZlZjM1Y2Q2
NjMyYTcwMDgxNTA3YTViMzc5OWRlZmI2ZmIuLmYxNmU4ZmM1Y2RiMzZhN2ZiMzFmM2VmMmI2MTg2
MmI5MjcxYjZlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtODgsMjAgKzg4LDE0IEBA
CiAKICNpZiBPUyhXSU5ET1dTKQogCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKLSNpbmNsdWRlICJk
dG9hLmgiCi0jaW5jbHVkZSAiZHRvYS9jYWNoZWQtcG93ZXJzLmgiCi0KLSNpbmNsdWRlICJNYWlu
VGhyZWFkLmgiCi0jaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCiAjaW5jbHVk
ZSA8cHJvY2Vzcy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyU2VlZC5oPgotI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIuaD4KIAogI2lmIEhBVkUoRVJSTk9f
SCkKICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMTA5LDYgKzEwMywxNCBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAorVGhyZWFkOjpUaHJlYWQoKQoreworfQorCitUaHJlYWQ6On5UaHJlYWQoKQorewor
fQorCiAvLyBNU19WQ19FWENFUFRJT04sIFRIUkVBRE5BTUVfSU5GTywgYW5kIHNldFRocmVhZE5h
bWVJbnRlcm5hbCBhbGwgY29tZSBmcm9tIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkveGNiMno4aHMuYXNweD4uCiBzdGF0aWMgY29uc3QgRFdPUkQgTVNfVkNfRVhDRVBU
SU9OID0gMHg0MDZEMTM4ODsKIApAQCAtMTIxLDcgKzEyMyw3IEBAIHR5cGVkZWYgc3RydWN0IHRh
Z1RIUkVBRE5BTUVfSU5GTyB7CiB9IFRIUkVBRE5BTUVfSU5GTzsKICNwcmFnbWEgcGFjayhwb3Ap
CiAKLXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRo
cmVhZE5hbWUpCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChj
b25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiB7CiAjaWYgQ09NUElMRVIoTUlOR1cpCiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aHJlYWQgbmFtZSBzZXR0aW5nIHdpdGggTWluZ1cuCkBAIC0xMjks
NyArMTMxLDcgQEAgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNo
YXIqIHN6VGhyZWFkTmFtZSkKICNlbHNlCiAgICAgVEhSRUFETkFNRV9JTkZPIGluZm87CiAgICAg
aW5mby5kd1R5cGUgPSAweDEwMDA7Ci0gICAgaW5mby5zek5hbWUgPSBub3JtYWxpemVUaHJlYWRO
YW1lKHN6VGhyZWFkTmFtZSk7CisgICAgaW5mby5zek5hbWUgPSBUaHJlYWQ6Om5vcm1hbGl6ZVRo
cmVhZE5hbWUoc3pUaHJlYWROYW1lKTsKICAgICBpbmZvLmR3VGhyZWFkSUQgPSBHZXRDdXJyZW50
VGhyZWFkSWQoKTsKICAgICBpbmZvLmR3RmxhZ3MgPSAwOwogCkBAIC0xNDAsNzAgKzE0MiwyOCBA
QCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogc3pUaHJl
YWROYW1lKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNdXRleD4gbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4
OwotfQotCi12b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQotewotICAgIHN0YXRpYyBib29sIGlz
SW5pdGlhbGl6ZWQ7Ci0gICAgCi0gICAgaWYgKGlzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgV1RGOjpkb3VibGVfY29udmVy
c2lvbjo6aW5pdGlhbGl6ZSgpOwotICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5KCkgZG9lcyBub3Qg
Y29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBmYXNoaW9uLAotICAg
IC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCi0gICAgU3Ry
aW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAgIGluaXRpYWxpemVS
YW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKLSAgICB3dGZUaHJlYWREYXRhKCk7Ci0gICAgaW5pdGlh
bGl6ZURhdGVzKCk7Ci19Ci0KLXN0YXRpYyBIYXNoTWFwPERXT1JELCBIQU5ETEU+JiB0aHJlYWRN
YXAoKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpCiB7Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8RFdPUkQsIEhBTkRMRT4+IG1hcDsKLSAgICBy
ZXR1cm4gbWFwOwogfQogCi1zdGF0aWMgdm9pZCBzdG9yZVRocmVhZEhhbmRsZUJ5SWRlbnRpZmll
cihEV09SRCB0aHJlYWRJRCwgSEFORExFIHRocmVhZEhhbmRsZSkKLXsKLSAgICBNdXRleExvY2tl
ciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgQVNTRVJUKCF0aHJlYWRNYXAoKS5jb250
YWlucyh0aHJlYWRJRCkpOwotICAgIHRocmVhZE1hcCgpLmFkZCh0aHJlYWRJRCwgdGhyZWFkSGFu
ZGxlKTsKLX0KLQotc3RhdGljIEhBTkRMRSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKFRocmVh
ZElkZW50aWZpZXIgaWQpCitzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5
UG9pbnQodm9pZCogcGFyYW0pCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11
dGV4KCkpOwotICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpOwotfQorICAgIC8vIEJhbGFu
Y2VkIGJ5IC5sZWFrUHRyKCkgaW4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbC4KKyAgICBhdXRvIGlu
dm9jYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPihzdGF0
aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwogCi1zdGF0aWMgdm9p
ZCBjbGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsK
LSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgQVNTRVJUKHRo
cmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7Ci0gICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKLX0K
KyAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAg
aW52b2NhdGlvbi0+dGhyZWFkID0gbnVsbHB0cjsKIAotc3RhdGljIHVuc2lnbmVkIF9fc3RkY2Fs
bCB3dGZUaHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQotewotICAgIHN0ZDo6dW5pcXVlX3B0
cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+IGludm9jYXRpb24oc3RhdGljX2Nhc3Q8VGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKICAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihp
bnZvY2F0aW9uLT5kYXRhKTsKLQogICAgIHJldHVybiAwOwogfQogCi1UaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRh
dGEsIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCitSZWZQdHI8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0
ZUludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUpCiB7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5l
dyBUaHJlYWQoKSk7CiAgICAgdW5zaWduZWQgdGhyZWFkSWRlbnRpZmllciA9IDA7CiAgICAgVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IDA7Ci0gICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIGRhdGEpOwor
ICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkRnVuY3Rpb25JbnZv
Y2F0aW9uPihlbnRyeVBvaW50LCB0aHJlYWQucHRyKCksIGRhdGEpOwogICAgIEhBTkRMRSB0aHJl
YWRIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoMCwgMCwg
d3RmVGhyZWFkRW50cnlQb2ludCwgaW52b2NhdGlvbi5nZXQoKSwgMCwgJnRocmVhZElkZW50aWZp
ZXIpKTsKICAgICBpZiAoIXRocmVhZEhhbmRsZSkgewogI2lmICFIQVZFKEVSUk5PX0gpCkBAIC0y
MTksNTUgKzE3OSwxMjggQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChU
aHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb24KICAgICBVTlVTRURfUEFS
QU0obGVha2VkSW52b2NhdGlvbik7CiAKICAgICB0aHJlYWRJRCA9IHN0YXRpY19jYXN0PFRocmVh
ZElkZW50aWZpZXI+KHRocmVhZElkZW50aWZpZXIpOwotICAgIHN0b3JlVGhyZWFkSGFuZGxlQnlJ
ZGVudGlmaWVyKHRocmVhZElkZW50aWZpZXIsIHRocmVhZEhhbmRsZSk7CiAKLSAgICByZXR1cm4g
dGhyZWFkSUQ7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlLCB0aHJlYWRJZGVu
dGlmaWVyKTsKKyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGNoYW5nZVRocmVhZFByaW9y
aXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGludCBkZWx0YSkKK3ZvaWQgVGhyZWFkOjpj
aGFuZ2VQcmlvcml0eShpbnQgZGVsdGEpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAg
IEhBTkRMRSB0aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElE
KTsKLSAgICBpZiAoIXRocmVhZEhhbmRsZSkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVu
dGlmaWVyICV1IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCIsIHRocmVh
ZElEKTsKLQotICAgIFNldFRocmVhZFByaW9yaXR5KHRocmVhZEhhbmRsZSwgVEhSRUFEX1BSSU9S
SVRZX05PUk1BTCArIGRlbHRhKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyAgICBpZiAoIW1faGFuZGxlKQorICAgICAgICBMT0dfRVJST1IoIlRo
cmVhZElkZW50aWZpZXIgJXUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFk
IiwgbV9pZCk7CisgICAgU2V0VGhyZWFkUHJpb3JpdHkobV9oYW5kbGUsIFRIUkVBRF9QUklPUklU
WV9OT1JNQUwgKyBkZWx0YSk7CiB9CiAKLWludCB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElEKQoraW50IFRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24oKQog
ewotICAgIEFTU0VSVCh0aHJlYWRJRCk7Ci0gICAgCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9
IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFu
ZGxlKQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3Jy
ZXNwb25kIHRvIGFuIGFjdGl2ZSB0aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElE
KTsKLSAKLSAgICBEV09SRCBqb2luUmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRI
YW5kbGUsIElORklOSVRFKTsKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIHsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGhhbmRs
ZSA9IG1faGFuZGxlOworICAgIH0KKworICAgIGlmICghaGFuZGxlKQorICAgICAgICBMT0dfRVJS
T1IoIlRocmVhZElkZW50aWZpZXIgJXUgZGlkIG5vdCBjb3JyZXNwb25kIHRvIGFuIGFjdGl2ZSB0
aHJlYWQgd2hlbiB0cnlpbmcgdG8gcXVpdCIsIG1faWQpOworCisgICAgRFdPUkQgam9pblJlc3Vs
dCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCBJTkZJTklURSk7CiAgICAgaWYgKGpvaW5S
ZXN1bHQgPT0gV0FJVF9GQUlMRUQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmll
ciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIHRocmVhZElE
KTsKKyAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBi
ZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgbV9pZCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9s
b2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBBU1NFUlQoam9pbmFibGVTdGF0
ZSgpID09IEpvaW5hYmxlKTsKIAotICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAg
Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICAvLyBUaGUgdGhy
ZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgZG8gbm90aGluZy4KKyAgICAvLyBUaGUgdGhyZWFkIGhh
c24ndCBleGl0ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwg
dGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAg
YWZ0ZXIgaXRzZWxmLgorICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsK
IAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQogCi12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJlYWQ6OmRldGFjaCgpCit7CisgICAgLy8gV2Ug
Zm9sbG93IHRoZSBwdGhyZWFkIHNlbWFudGljczogZXZlbiBhZnRlciB0aGUgZGV0YWNoIGlzIGNh
bGxlZCwKKyAgICAvLyB3ZSBjYW4gc3RpbGwgcGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbnMgb250
byB0aGUgdGhyZWFkLiBGb3IgZXhhbXBsZSwKKyAgICAvLyB3ZSBjYW4gZG8gcHRocmVhZF9raWxs
IGZvciB0aGUgZGV0YWNoZWQgdGhyZWFkLiBUaGUgcHJvYmxlbSBpbiBXaW5kb3dzCisgICAgLy8g
aXMgdGhhdCBjbG9zaW5nIEhBTkRMRSBsb3NlcyB0aGUgd2F5IHRvIGRvIHN1Y2ggb3BlcmF0aW9u
cy4KKyAgICAvLyBUbyBkbyBzbywgd2UgZG8gbm90aGluZyBoZXJlIGluIFdpbmRvd3MuIE9yaWdp
bmFsIGRldGFjaCdzIHB1cnBvc2UsCisgICAgLy8gcmVsZWFzaW5nIHRocmVhZCByZXNvdXJjZSB3
aGVuIHRoZSB0aHJlYWQgZXhpdHMsIHdpbGwgYmUgYWNoaWV2ZWQgYnkKKyAgICAvLyBGbHNDYWxs
YmFjayBhdXRvbWF0aWNhbGx5LiBGbHNDYWxsYmFjayB3aWxsIGNhbGwgQ2xvc2VIYW5kbGUgdG8g
Y2xlYW4gdXAKKyAgICAvLyByZXNvdXJjZS4gU28gaW4gdGhpcyBmdW5jdGlvbiwgd2UganVzdCBt
YXJrIHRoZSB0aHJlYWQgYXMgZGV0YWNoZWQgdG8KKyAgICAvLyBhdm9pZCBjYWxsaW5nIHdhaXRG
b3JDb21wbGV0aW9uIGZvciB0aGlzIHRocmVhZC4KKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6
bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBpZiAoIWhhc0V4aXRlZCgpKQorICAgICAgICBk
aWRCZWNvbWVEZXRhY2hlZCgpOworfQorCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVj
dGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPgogewotICAgIEFTU0VSVCh0aHJlYWRJRCk7
CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGlkKCkgIT0gY3VycmVudFRocmVhZCgp
LCAiV2UgZG8gbm90IHN1cHBvcnQgc3VzcGVuZGluZyB0aGUgY3VycmVudCB0aHJlYWQgaXRzZWxm
LiIpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwor
ICAgIERXT1JEIHJlc3VsdCA9IFN1c3BlbmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlmIChyZXN1
bHQgIT0gKERXT1JEKS0xKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChyZXN1bHQpOworfQogCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJlYWRIYW5kbGUpCi0gICAg
ICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKHRocmVhZElEKTsKKy8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1l
IHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KK3ZvaWQgVGhy
ZWFkOjpyZXN1bWUoKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2Vy
KG1fbXV0ZXgpOworICAgIFJlc3VtZVRocmVhZChtX2hhbmRsZSk7Cit9CisKK3NpemVfdCBUaHJl
YWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQoreworICAgIHN0
ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIHJlZ2lzdGVy
cy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05URVhUX0NPTlRST0w7CisgICAg
R2V0VGhyZWFkQ29udGV4dChtX2hhbmRsZSwgJnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVv
ZihDT05URVhUKTsKIH0KIAotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK1RocmVh
ZCYgVGhyZWFkOjpjdXJyZW50KCkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRI
b2xkZXI6OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRo
cmVhZCgpOworCisgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlm
aWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRv
cHRSZWYoKm5ldyBUaHJlYWQoKSk7CisKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGJvb2wgaXNT
dWNjZXNzZnVsID0gRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksIEdldEN1cnJl
bnRUaHJlYWQoKSwgR2V0Q3VycmVudFByb2Nlc3MoKSwgJmhhbmRsZSwgMCwgRkFMU0UsIERVUExJ
Q0FURV9TQU1FX0FDQ0VTUyk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNTdWNjZXNzZnVsKTsKKwor
ICAgIHRocmVhZC0+ZXN0YWJsaXNoKGhhbmRsZSwgY3VycmVudElEKCkpOworICAgIFRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOworICAgIHJldHVybiB0aHJlYWQuZ2V0KCk7
Cit9CisKK1RocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQogewogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyPihHZXRDdXJyZW50VGhyZWFkSWQoKSk7CiB9
CiAKK3ZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6
bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBtX2RpZEV4aXQgPSB0cnVlOworICAgIC8vIEl0
IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBldmVuIGJl
Zm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRsZXMuCisgICAgLy8gVGhpcyBlYXNpbHkgZW5z
dXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291cmNlcyBhcmUgYXV0b21hdGljYWxseSBjbG9z
ZWQuCisgICAgaWYgKG1faGFuZGxlKSB7CisgICAgICAgIENsb3NlSGFuZGxlKG1faGFuZGxlKTsK
KyAgICAgICAgbV9oYW5kbGUgPSAwOworICAgIH0KK30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlz
aChIQU5ETEUgaGFuZGxlLCBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoreworICAgIHN0ZDo6
dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIG1faGFuZGxlID0g
aGFuZGxlOworICAgIG1faWQgPSB0aHJlYWRJRDsKK30KKwogTXV0ZXg6Ok11dGV4KCkKIHsKICAg
ICBtX211dGV4Lm1fcmVjdXJzaW9uQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKaW5kZXggYjJh
MGE3OWY0YWI1YWFjMjg5YjE2OWY5MmJiYzFhODA1ODUyY2EzMi4uOTczMGZjZjBmMDkyMWZkZWQ5
MGY4OWYxMjkwZTc3NDkwYjUzOTcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1
ZXVlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCkBAIC03NCw3ICs3NCw3
IEBAIHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNv
bnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAKICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3Jr
ZXJzLmFwcGVuZChjcmVhdGVUaHJlYWQoU3RyaW5nOjpmb3JtYXQoIlRocmVhZFBvb2wgV29ya2Vy
ICV1IiwgaSkudXRmOCgpLmRhdGEoKSwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtl
cnMuYXBwZW5kKFRocmVhZDo6Y3JlYXRlKFN0cmluZzo6Zm9ybWF0KCJUaHJlYWRQb29sIFdvcmtl
ciAldSIsIGkpLnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CiAgICAgICAgICAgICAgICAgICAgIHRo
cmVhZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICB9CkBAIC0xMTQs
NyArMTE0LDcgQEAgdm9pZCBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShzaXplX3QgaXRlcmF0
aW9ucywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChzaXoKICAgICAgICAgQ29uZGl0aW9uIG1f
Y29uZGl0aW9uOwogICAgICAgICBEZXF1ZTxjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Kj4g
bV9xdWV1ZTsKIAotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV93b3JrZXJzOwor
ICAgICAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IG1fd29ya2VyczsKICAgICB9OwogCiAgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxUaHJlYWRQb29sPiB0aHJlYWRQb29sOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuaAppbmRleCBhNDdmMjFlMjBkMzFiYzhiZjczMThmNDFiOTU3YWIzNjZjMTkxNTAzLi43NjM0
NWMwNjkzMTY0ZjY4Y2E0YjFjNjY0NDg0YTI3M2NjNmU4YmUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApAQCAt
MTAzLDcgKzEwMyw3IEBAIGNsYXNzIFdvcmtRdWV1ZSBmaW5hbCA6IHB1YmxpYyBGdW5jdGlvbkRp
c3BhdGNoZXIgewogCiAgICAgSEFORExFIG1fdGltZXJRdWV1ZTsKICNlbGlmIFVTRShHTElCX0VW
RU5UX0xPT1ApIHx8IFVTRShHRU5FUklDX0VWRU5UX0xPT1ApCi0gICAgVGhyZWFkSWRlbnRpZmll
ciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3dvcmtRdWV1ZVRocmVh
ZDsKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAgICBDb25k
aXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICBSdW5Mb29wKiBtX3J1bkxv
b3A7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKaW5kZXggMWE3MjE5YWQy
NTllZDc1OTcyYTVhNDU4YzVjNDg0OTdhMzg4ZTRkMy4uNTllZTFmODViNDM1Y2UxYTcyZjUwNTBm
NGRmNjJlZmNmYmJjODJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1
ZXVlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNw
cApAQCAtNDksMTUgKzQ5LDE1IEBAIHN0YXRpYyBkaXNwYXRjaF9xb3NfY2xhc3NfdCBkaXNwYXRj
aFFPU0NsYXNzKFdvcmtRdWV1ZTo6UU9TIHFvcykKIHsKICAgICBzd2l0Y2ggKHFvcykgewogICAg
IGNhc2UgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbnRlcmFjdGl2ZToKLSAgICAgICAgcmV0dXJuIGFk
anVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpOworICAgICAgICByZXR1
cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKTsK
ICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW5pdGlhdGVkOgotICAgICAgICByZXR1cm4g
YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQpOworICAgICAgICByZXR1
cm4gVGhyZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCk7CiAg
ICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6RGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGFkanVzdGVk
UU9TQ2xhc3MoUU9TX0NMQVNTX0RFRkFVTFQpOworICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1
c3RlZFFPU0NsYXNzKFFPU19DTEFTU19ERUZBVUxUKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9T
OjpVdGlsaXR5OgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJ
TElUWSk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNT
X1VUSUxJVFkpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OkJhY2tncm91bmQ6Ci0gICAgICAg
IHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19CQUNLR1JPVU5EKTsKKyAgICAgICAg
cmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dST1VORCk7CiAg
ICAgfQogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1
ZXVlR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMu
Y3BwCmluZGV4IDkzNGEzOGNiYmU2NGJiZmZhZWI0ZDM3ZGYxYjhkOTk1MmI4ODUzNDQuLmRhODc1
ZDFmYTA0Y2VmNTI0YjBkYzE4NmIzOWE0NjJkNjgwNDQ2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2VuZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtMzUsNyArMzUsNyBAQAogdm9pZCBXb3Jr
UXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MpCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4
KTsKLSAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZChuYW1lLCBbdGhpc10gewor
ICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUobmFtZSwgW3RoaXNdIHsKICAg
ICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9v
cENvbmRpdGlvbk11dGV4KTsKICAgICAgICAgICAgIG1fcnVuTG9vcCA9ICZSdW5Mb29wOjpjdXJy
ZW50KCk7CkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRh
dGUoKQogICAgIGlmIChtX3J1bkxvb3ApCiAgICAgICAgIG1fcnVuTG9vcC0+c3RvcCgpOwogICAg
IGlmIChtX3dvcmtRdWV1ZVRocmVhZCkgewotICAgICAgICBkZXRhY2hUaHJlYWQobV93b3JrUXVl
dWVUaHJlYWQpOwotICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IDA7CisgICAgICAgIG1fd29y
a1F1ZXVlVGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV93b3JrUXVldWVUaHJlYWQgPSBudWxs
cHRyOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5
UHJlc3N1cmVIYW5kbGVyTGludXguY3BwIGIvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyTGludXguY3BwCmluZGV4IGIyOTQxOTQ0NGU3NDI3MzZhNjdkYzBjMWFhODUx
ZGVjM2FlNTg3ZTQuLmZmZDQwMDg1NWI4MjkzYThiNWEzYzNhZWIyM2FiNzdhYWY1YTdlZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJMaW51
eC5jcHAKQEAgLTExOSw3ICsxMTksMTAgQEAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZE
UG9sbGVyOjpFdmVudEZEUG9sbGVyKGludCBmZCwgc3RkOjpmdW5jdGlvbjx2b2lkICgKICAgICB9
LCB0aGlzLCBudWxscHRyKTsKICAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIG51
bGxwdHIpOwogI2Vsc2UKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKCJXVEY6IE1lbW9y
eVByZXNzdXJlSGFuZGxlciIsIFt0aGlzXSB7IHJlYWRBbmROb3RpZnkoKTsgfQorICAgIG1fdGhy
ZWFkID0gVGhyZWFkOjpjcmVhdGUoIldURjogTWVtb3J5UHJlc3N1cmVIYW5kbGVyIiwKKyAgICAg
ICAgW3RoaXNdIHsKKyAgICAgICAgICAgIHJlYWRBbmROb3RpZnkoKTsKKyAgICAgICAgfSk7CiAj
ZW5kaWYKIH0KIApAQCAtMTI5LDcgKzEzMiw3IEBAIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6RXZl
bnRGRFBvbGxlcjo6fkV2ZW50RkRQb2xsZXIoKQogI2lmIFVTRShHTElCKQogICAgIGdfc291cmNl
X2Rlc3Ryb3kobV9zb3VyY2UuZ2V0KCkpOwogI2Vsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90aHJl
YWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dp
bi9NYWluVGhyZWFkV2luLmNwcAppbmRleCBmMzI0ZThiNjFkZDQxZmEwNTYwODYzYjZjNTgxOTEw
Zjg2N2QzNmViLi5hNjQ3M2QwN2I2N2VhY2M4NmJlN2E0ZWI2OTc0OTg5M2VjNjE0OTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgaW5p
dGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCiAgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENX
X1VTRURFRkFVTFQsIDAsIEhXTkRfTUVTU0FHRSwgMCwgMCwgMCk7CiAgICAgdGhyZWFkaW5nRmly
ZWRNZXNzYWdlID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlVyhMImNvbS5hcHBsZS5XZWJLaXQuTWFp
blRocmVhZEZpcmVkIik7CiAKLSAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKCJN
YWluIFRocmVhZCIpOworICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5h
bCgiTWFpbiBUaHJlYWQiKTsKIH0KIAogdm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25N
YWluVGhyZWFkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggODc0NzY0MzhjYWU2NWE2Mzg3ZDkwMWE3NTI4ODE1
ZWM5NTQ3ZjIzMi4uOWNkM2RiNGQxYmMxNGEzNjE3MzIxYWIwMDVhMDE5NjIwNTI3ODI3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2ZXIoSURCQmFja2lu
Z1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQogICAgIDogbV9iYWNraW5n
U3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMb2NrZXI8TG9j
az4gbG9ja2VyKG1fZGF0YWJhc2VUaHJlYWRDcmVhdGlvbkxvY2spOwotICAgIG1fdGhyZWFkSUQg
PSBjcmVhdGVUaHJlYWQoSURCU2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5k
ZXhlZERhdGFiYXNlIFNlcnZlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoSURC
U2VydmVyOjpkYXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZl
ciIpOwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5k
bGVyKQpAQCAtNjYsNyArNjYsNyBAQCBJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYQogICAgIExPRyhJ
bmRleGVkREIsICJJREJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2RhdGFi
YXNlVGhyZWFkQ3JlYXRpb25Mb2NrKTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKElE
QlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2
ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKElEQlNlcnZlcjo6ZGF0YWJhc2VU
aHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAogdm9pZCBJ
REJTZXJ2ZXI6OnJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5l
Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmgKaW5kZXggMjU2Y2Q1MDdlNmU2ZDdmNjU2ZWVjZTBjMTE5ODk0OGZkOTIzZGEx
ZC4uOTM0YTFkMTc0NTI5MDg0MjhhM2FlNmUwZWQ3ZTUxMGE5YTljYTZlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAt
MTI1LDcgKzEyNSw3IEBAIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNl
cnZlcj4gewogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGll
bnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIs
IFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CiAKLSAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4g
bV90aHJlYWQgeyBudWxscHRyIH07CiAgICAgTG9jayBtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25M
b2NrOwogICAgIExvY2sgbV9tYWluVGhyZWFkUmVwbHlMb2NrOwogICAgIGJvb2wgbV9tYWluVGhy
ZWFkUmVwbHlTY2hlZHVsZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAppbmRleCAyOTJmMDViOGNkNTA2
ZTIyOWFlNmI4YmQ4NjI5YzA5NTRkMTg0NTliLi43Y2Y3YWY4ZmVhMmUxZTY3ZDUyMzdjODcxYTAx
NWIzYzQ5MDBhMjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcApAQCAtMzksNyArMzksNyBAQCBBc3luY0F1ZGlvRGVj
b2Rlcjo6QXN5bmNBdWRpb0RlY29kZXIoKQogewogICAgIC8vIFN0YXJ0IHdvcmtlciB0aHJlYWQu
CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Ci0gICAgbV90aHJl
YWRJRCA9IGNyZWF0ZVRocmVhZChBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnksIHRoaXMs
ICJBdWRpbyBEZWNvZGVyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShBc3luY0F1
ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnksIHRoaXMsICJBdWRpbyBEZWNvZGVyIik7CiB9CiAKIEFz
eW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQpAQCAtNDcsOCArNDcsOCBAQCBB
c3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKICAgICBtX3F1ZXVlLmtpbGwo
KTsKICAgICAKICAgICAvLyBTdG9wIHRocmVhZC4KLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bihtX3RocmVhZElEKTsKLSAgICBtX3RocmVhZElEID0gMDsKKyAgICBtX3RocmVhZC0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKKyAgICBtX3RocmVhZCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQXN5bmNB
dWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKFJlZjxBcnJheUJ1ZmZlcj4mJiBhdWRpb0RhdGEsIGZs
b2F0IHNhbXBsZVJhdGUsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIHN1Y2Nlc3NDYWxs
YmFjaywgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgZXJyb3JDYWxsYmFjaykKQEAgLTcy
LDcgKzcyLDcgQEAgdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAKICAgICB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIHVudGlsIHdl
IGhhdmUgbV90aHJlYWRJRCBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIHJ1biBsb29w
LgorICAgICAgICAvLyBXYWl0IGZvciB1bnRpbCB3ZSBoYXZlIG1fdGhyZWFkIGVzdGFibGlzaGVk
IGJlZm9yZSBzdGFydGluZyB0aGUgcnVuIGxvb3AuCiAgICAgICAgIExvY2tIb2xkZXIgbG9jayht
X3RocmVhZENyZWF0aW9uTXV0ZXgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCmluZGV4IGJiNWM1ZTMzN2I1ZWNm
MWY4ZTYxNzUzYTI5ZjhkMGY5NzE0MTU1M2QuLmYxMjUxMGQxOTdjM2RmOTZjYzA1Njg1NDZjYmMz
ZmI0NmVhYWE4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmgKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgQXN5bmNBdWRpb0Rl
Y29kZXIgewogICAgIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwog
ICAgIHZvaWQgcnVuTG9vcCgpOwogCi0gICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgTG9jayBtX3RocmVhZENyZWF0
aW9uTXV0ZXg7CiAgICAgTWVzc2FnZVF1ZXVlPERlY29kaW5nVGFzaz4gbV9xdWV1ZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKaW5kZXggNTA1MjMwNDE5N2NkZWRkZTQ3ZmRjYmI5
MTJlYzQ3NDA1NTc5NzQyOC4uMzdiOTU4ODQwNDFkYzQ1ZGY1NDgyOTRhMmY0ZDE4MWMwZmE4YWU5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtNDEsNyArNDEsNiBAQCBjb25z
dCBzaXplX3QgcmVuZGVyUXVhbnR1bVNpemUgPSAxMjg7CiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlv
bk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQmIGNvbnRleHQs
IEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCiAgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShj
b250ZXh0LCByZW5kZXJUYXJnZXQtPnNhbXBsZVJhdGUoKSkKICAgICAsIG1fcmVuZGVyVGFyZ2V0
KHJlbmRlclRhcmdldCkKLSAgICAsIG1fcmVuZGVyVGhyZWFkKDApCiAgICAgLCBtX3N0YXJ0ZWRS
ZW5kZXJpbmcoZmFsc2UpCiB7CiAgICAgbV9yZW5kZXJCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKHJl
bmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSk7CkBAIC02
Niw4ICs2NSw4IEBAIHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxp
emUoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKLSAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAgICBtX3Jl
bmRlclRocmVhZCA9IDA7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlv
bigpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgQXVk
aW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKQEAgLTgzLDcgKzgyLDcgQEAgdm9pZCBPZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKICAgICBpZiAoIW1fc3RhcnRlZFJl
bmRlcmluZykgewogICAgICAgICBtX3N0YXJ0ZWRSZW5kZXJpbmcgPSB0cnVlOwogICAgICAgICBy
ZWYoKTsgLy8gU2VlIGNvcnJlc3BvbmRpbmcgZGVyZWYoKSBjYWxsIGluIG5vdGlmeUNvbXBsZXRl
RGlzcGF0Y2goKS4KLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5l
IHJlbmRlcmVyIik7CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpvZmZsaW5lUmVuZGVyRW50cnksIHRoaXMsICJvZmZs
aW5lIHJlbmRlcmVyIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRl
eCA3NTU2MDQ2NDcyMzJjNGJjNTEzY2M5ZTM5ZGQ0NDVmMzhiNjJjZWY0Li41NjkwMTM4YjE2NTcw
YjNmOWQyMzdmOWRkNGE4ZWEyM2Q3M2ZmYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgK
QEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVi
bGljIEF1ZGlvRGVzdGluYXRpb25Ob2RlIHsKICAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVy
QnVzOwogICAgIAogICAgIC8vIFJlbmRlcmluZyB0aHJlYWQuCi0gICAgdm9sYXRpbGUgVGhyZWFk
SWRlbnRpZmllciBtX3JlbmRlclRocmVhZDsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3JlbmRlclRo
cmVhZDsKICAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsKICAgICBzdGF0aWMgdm9pZCBvZmZs
aW5lUmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CiAgICAgdm9pZCBvZmZsaW5lUmVuZGVy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3Bw
CmluZGV4IDg4NjlmNmJmMjIzMjMyZTYzY2MzZmI1MmUxNmFlMWRiM2ViNDFiZTYuLjhjOTJkNmU1
Mzk2YWRmMTJmYmRkNjhkN2FjOTdmOWVkMTlhZGMwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC03NzAsOCArNzcwLDcgQEAgU2Vj
dXJpdHlPcmlnaW5EYXRhIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpCiB7CiAgICAgaWYgKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCiAgICAgICAgIHJldHVy
biBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX2NvbnRleHRUaHJlYWRT
ZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0gICAgYXV0byYgdGhyZWFkID0gZGF0YWJhc2VUaHJlYWQo
KTsKLSAgICBpZiAoY3VycmVudFRocmVhZCgpID09IHRocmVhZC5nZXRUaHJlYWRJRCgpKQorICAg
IGlmIChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VUaHJlYWQoKS5nZXRUaHJlYWRJRCgpKQog
ICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9k
YXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAwZGRlNWY3MjY4ZWU2NDJjMDA0MzA1Y2Vm
ZTM2YjFjOWU0NGI4N2QzLi5kNzA4MTRmOWI1NWIyNDhmZDY0ZTFhZmY0M2UzNzY3NGYxNjkyZDRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVGhyZWFkLmNwcApAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wgRGF0YWJhc2VUaHJlYWQ6OnN0
YXJ0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKIAot
ICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKERhdGFiYXNlVGhyZWFkOjpkYXRh
YmFzZVRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKKyAgICBtX3RocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZFN0YXJ0LCB0
aGlzLCAiV2ViQ29yZTogRGF0YWJhc2UiKTsKIAotICAgIHJldHVybiBtX3RocmVhZElEOworICAg
IHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBEYXRhYmFzZVRocmVhZDo6cmVxdWVzdFRlcm1p
bmF0aW9uKERhdGFiYXNlVGFza1N5bmNocm9uaXplciogY2xlYW51cFN5bmMpCkBAIC0xMTAsNyAr
MTEwLDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgIC8vIENs
ZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGRhdGFi
YXNlIHRocmVhZAogICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+c2h1dGRvd24oKTsKIAot
ICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIg
dGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYo
cykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKKyAgICBMT0coU3RvcmFnZUFQSSwg
IkFib3V0IHRvIGRldGFjaCB0aHJlYWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VU
aHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWQtPmlkKCks
IHRoaXMsIHJlZkNvdW50KCkpOwogCiAgICAgLy8gQ2xvc2UgdGhlIGRhdGFiYXNlcyB0aGF0IHdl
IHJhbiB0cmFuc2FjdGlvbnMgb24uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFueSB0cmFuc2FjdGlv
bnMgYXJlIHN0aWxsIG9wZW4sIHRoZXkgYXJlIHJvbGxlZCBiYWNrIGFuZCB3ZSBkb24ndCBsZWF2
ZSB0aGUgZGF0YWJhc2UgaW4gYW4KICAgICAvLyBpbmNvbnNpc3RlbnQgb3IgbG9ja2VkIHN0YXRl
LgpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFk
KCkKICAgICAgICAgb3BlbkRhdGFiYXNlLT5wZXJmb3JtQ2xvc2UoKTsKIAogICAgIC8vIERldGFj
aCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkgY29uY2Vy
biB0byBhbnlvbmUgZWxzZQotICAgIGRldGFjaFRocmVhZChtX3RocmVhZElEKTsKKyAgICBtX3Ro
cmVhZC0+ZGV0YWNoKCk7CiAKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBT
eW5jID0gbV9jbGVhbnVwU3luYzsKIApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgRGF0YWJhc2VU
aHJlYWQ6OnJlY29yZERhdGFiYXNlT3BlbihEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09
IG1fdGhyZWFkLT5pZCgpKTsKICAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5z
KCZkYXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LmFkZCgmZGF0YWJhc2UpOwogfQpA
QCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNlQ2xv
c2VkKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9vcGVuRGF0
YWJhc2VTZXRNdXRleCk7CiAKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFk
SUQpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWQtPmlkKCkpOwogICAg
IEFTU0VSVChtX3F1ZXVlLmtpbGxlZCgpIHx8IG1fb3BlbkRhdGFiYXNlU2V0LmNvbnRhaW5zKCZk
YXRhYmFzZSkpOwogICAgIG1fb3BlbkRhdGFiYXNlU2V0LnJlbW92ZSgmZGF0YWJhc2UpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRo
cmVhZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVh
ZC5oCmluZGV4IGVjMDQxZTMxODE3MjQ5MmVjYTZiY2VmZThmMWRhMjVlYzkyZWQyNmMuLjBlN2Ew
MDBiNGI3NjNmZmI3YWM1ZWEwMGFhOTU4N2IwNzhlNmEzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmgKQEAgLTU4LDcgKzU4
LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
RGF0YWJhc2VUaHJlYWQ+IHsKIAogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNl
Jik7CiAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYpOwotICAgIFRocmVh
ZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhy
ZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQt
PmlkKCkgOiAwOyB9CiAKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9
CiAKQEAgLTY5LDcgKzY5LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKICAgICB2b2lkIGRhdGFiYXNlVGhyZWFk
KCk7CiAKICAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBUaHJlYWRJZGVudGlm
aWVyIG1fdGhyZWFkSUQgeyAwIH07CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAg
UmVmUHRyPERhdGFiYXNlVGhyZWFkPiBtX3NlbGZSZWY7CiAKICAgICBNZXNzYWdlUXVldWU8RGF0
YWJhc2VUYXNrPiBtX3F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvR0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJv
bGxlci5jcHAKaW5kZXggZmVmZmRhMWY1MzU1YjZkNjMyODNkMWJlMjdlNjQ1MjY5NjRmMWQ4Mi4u
MDhiMWUxZmU5NDdiNDM4ZjZkMjBmZTYwNjM0NzE5YmY5NjlmZGMwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCB2
b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiAK
IHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVi
dWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKIHsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEID0gY3JlYXRlVGhyZWFkKGNvbGxlY3QsIDAsICJXZWJDb3JlOiBHQ0NvbnRyb2xsZXIiKTsK
KyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShjb2xsZWN0LCAwLCAi
V2ViQ29yZTogR0NDb250cm9sbGVyIik7CiAKICAgICBpZiAod2FpdFVudGlsRG9uZSkgewotICAg
ICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgICAgIHRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRldGFj
aFRocmVhZCh0aHJlYWRJRCk7CisgICAgdGhyZWFkLT5kZXRhY2goKTsKIH0KIAogdm9pZCBHQ0Nv
bnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wg
ZW5hYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJl
YW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCmluZGV4
IDE2OGU0ZTI3Nzk1ZDQyNWY0MDRmMTc1YzliY2JhOTNmNzM2ODA3NGMuLjU1YzdjYjAyMzk4NTk5
Yzk3MWU2YTM3YTBmOWE3MjQ4NDg0MmU2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgY2FsbE9uRmls
ZVRocmVhZChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogCiAgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGNyZWF0
ZUZpbGVUaHJlYWRPbmNlLCBbXSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZCgiV2ViQ29yZTogQXN5
bmNGaWxlU3RyZWFtIiwgW10geworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiV2ViQ29yZTogQXN5
bmNGaWxlU3RyZWFtIiwgW10gewogICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAg
ICAgIEF1dG9kcmFpbmVkUG9vbCBwb29sOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcAppbmRleCA4ZGU5NGNlNWRjYTc2NzExNjM2MjAyZTZkMzFmNzUzMGQ4
YTI5MmQyLi4xZTM1Mzc2YjZkZDllYmNiM2U4MzIxNGQ2Mjc0OGM2NmFlMTkzMTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKQEAgLTQ3LDcgKzQ3LDcg
QEAKICNkZWZpbmUgQVNTRVJUX05PVF9TWU5DX1RIUkVBRCgpIEFTU0VSVCghbV9zeW5jVGhyZWFk
UnVubmluZyB8fCAhSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAvLyBGb3IgbWV0aG9kcyB0aGF0
IGFyZSBtZWFudCB0byBzdXBwb3J0IHRoZSBzeW5jIHRocmVhZCBPTkxZCi0jZGVmaW5lIElTX0lD
T05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKSkKKyNkZWZp
bmUgSVNfSUNPTl9TWU5DX1RIUkVBRCgpIChtX3N5bmNUaHJlYWQtPmlkKCkgPT0gY3VycmVudFRo
cmVhZCgpKQogI2RlZmluZSBBU1NFUlRfSUNPTl9TWU5DX1RIUkVBRCgpIEFTU0VSVChJU19JQ09O
X1NZTkNfVEhSRUFEKCkpCiAKICNpZiBQTEFURk9STShHVEspCkBAIC0xNDEsNyArMTQxLDcgQEAg
Ym9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCiAgICAgLy8gTG9jayBoZXJlIGFzIHdlbGwgYXMgZmlyc3QgdGhpbmcg
aW4gdGhlIHRocmVhZCBzbyB0aGUgdGhyZWFkIGRvZXNuJ3QgYWN0dWFsbHkgY29tbWVuY2UgdW50
aWwgdGhlIGNyZWF0ZVRocmVhZCgpIGNhbGwgCiAgICAgLy8gY29tcGxldGVzIGFuZCBtX3N5bmNU
aHJlYWRSdW5uaW5nIGlzIHByb3Blcmx5IHNldAogICAgIG1fc3luY0xvY2subG9jaygpOwotICAg
IG1fc3luY1RocmVhZCA9IGNyZWF0ZVRocmVhZChJY29uRGF0YWJhc2U6Omljb25EYXRhYmFzZVN5
bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIpOworICAgIG1fc3lu
Y1RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKEljb25EYXRhYmFzZTo6aWNvbkRhdGFiYXNlU3luY1Ro
cmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogSWNvbkRhdGFiYXNlIik7CiAgICAgbV9zeW5jVGhy
ZWFkUnVubmluZyA9IG1fc3luY1RocmVhZDsKICAgICBtX3N5bmNMb2NrLnVubG9jaygpOwogICAg
IGlmICghbV9zeW5jVGhyZWFkKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNl
OjpjbG9zZSgpCiAgICAgICAgIHdha2VTeW5jVGhyZWFkKCk7CiAgICAgICAgIAogICAgICAgICAv
LyBXYWl0IGZvciB0aGUgc3luYyB0aHJlYWQgdG8gdGVybWluYXRlCi0gICAgICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKG1fc3luY1RocmVhZCk7CisgICAgICAgIG1fc3luY1RocmVhZC0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKICAgICB9CiAKICAgICBtX3N5bmNUaHJlYWRSdW5uaW5nID0gZmFs
c2U7ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaAppbmRleCAw
NjFhZjRhMTI1NTc3MWRlMTFhMzJmNTY4M2MwZWZkYTU5MjkzYjlkLi44NjQwOTU1NDc1MzNmZDg5
MGYwM2FmZTkyYmIwNmY2MDg3ZWU3MzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuaApAQCAtMTE5LDcgKzExOSw3IEBAIGNsYXNzIEljb25EYXRhYmFzZSBmaW5h
bCA6IHB1YmxpYyBJY29uRGF0YWJhc2VCYXNlIHsKICAgICB2b2lkIHN5bmNUaW1lckZpcmVkKCk7
CiAgICAgCiAgICAgVGltZXIgbV9zeW5jVGltZXI7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3N5
bmNUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9zeW5jVGhyZWFkOwogICAgIGJvb2wgbV9z
eW5jVGhyZWFkUnVubmluZzsKICAgICAKICAgICBIYXNoU2V0PFJlZlB0cjxEb2N1bWVudExvYWRl
cj4+IG1fbG9hZGVyc1BlbmRpbmdEZWNpc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291
cmNlVXNhZ2VUaHJlYWQuY3BwCmluZGV4IDkxMjAwYzM0NWY0NTVmOTZkNDk0YmZkMmFkNzAzZjI4
YzVjNjI5ZDEuLmQ5YjZmNzJmYTM2ZmE3MDBjODI2ZjNjOTdkNmJhYTAyZDQyZThiNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcApAQCAtOTYsMTEgKzk2
LDExIEBAIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6bm90aWZ5T2JzZXJ2ZXJzKFJlc291cmNl
VXNhZ2VEYXRhJiYgZGF0YSkKIAogdm9pZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjpjcmVhdGVUaHJl
YWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAobV90
aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdm0gPSAmY29tbW9uVk0oKTsKLSAgICBt
X3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJX
ZWJDb3JlOiBSZXNvdXJjZVVzYWdlIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSh0
aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFJlc291cmNlVXNhZ2UiKTsKIH0KIAogdm9p
ZCBSZXNvdXJjZVVzYWdlVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiByZXNvdXJjZVVzYWdl
VGhyZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhy
ZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuaAppbmRleCAx
OGExZTY3NTQzZDIyMDljMTc5NTc0NzM2NjIyYTc4YjM4NGJiOGZjLi4zNjE3YjdhZGVjMDE5MjIy
MTEzMDgxYWQ0YjNhODg3NTRmMWZhNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1Jlc291cmNlVXNhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNl
VXNhZ2VUaHJlYWQuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBSZXNvdXJjZVVzYWdlVGhyZWFk
IHsKICAgICB2b2lkIHRocmVhZEJvZHkoKTsKICAgICB2b2lkIHBsYXRmb3JtVGhyZWFkQm9keShK
U0M6OlZNKiwgUmVzb3VyY2VVc2FnZURhdGEmKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJZGVudGlmaWVyIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAg
IExvY2sgbV9sb2NrOwogICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBIYXNoTWFwPHZv
aWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJik+PiBtX29i
c2VydmVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuY3BwCmluZGV4IDczMGMwYTZiZDkzZjQ1NzhkMWVkYmY5YWNlMWNkODY1NjZlNmM5ODgu
LjY0ZDA1MGE2ODQ4ZTgxYjU2OGRkNWI4NjUxZTRiOWZmMGRiYjc1NTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtMzUsMTQg
KzM1LDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcm9sbGluZ1RocmVhZDo6U2Nyb2xs
aW5nVGhyZWFkKCkKLSAgICA6IG1fdGhyZWFkSWRlbnRpZmllcigwKQogewogfQogCiBib29sIFNj
cm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKCkKIHsKLSAgICBhdXRvIHRocmVhZElkZW50
aWZpZXIgPSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkSWRlbnRpZmllcjsK
LSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gdGhyZWFk
SWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBTY3JvbGxpbmdUaHJlYWQ6
OnNpbmdsZXRvbigpLm1fdGhyZWFkOworICAgIHJldHVybiB0aHJlYWQgJiYgdGhyZWFkLT5pZCgp
ID09IGN1cnJlbnRUaHJlYWQoKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNo
KEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCkBAIC03NCwxNCArNzMsMTQgQEAgU2Nyb2xs
aW5nVGhyZWFkJiBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpCiAKIHZvaWQgU2Nyb2xsaW5n
VGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fdGhyZWFkSWRlbnRp
ZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdhaXQg
Zm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3AuCiAgICAgewogICAgICAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9pbml0aWFsaXplUnVuTG9vcE11dGV4KTsK
IAotICAgICAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJh
Y2ssIHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKKyAgICAgICAgbV90aHJlYWQgPSBUaHJl
YWQ6OmNyZWF0ZSh0aHJlYWRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IFNjcm9sbGluZyIpOwog
ICAgICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgbV9pbml0aWFsaXplUnVuTG9v
cENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdeyByZXR1cm4gbV90aHJlYWRSdW5M
b29wOyB9KTsKQEAgLTkxLDcgKzkwLDcgQEAgdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRo
cmVhZElmTmVlZGVkKCkKIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OnRocmVhZENhbGxiYWNrKHZv
aWQqIHNjcm9sbGluZ1RocmVhZCkKIHsKLSAgICBXVEY6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJ
bnRlcmFjdGl2ZSgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50
ZXJhY3RpdmUoKTsKICAgICBzdGF0aWNfY2FzdDxTY3JvbGxpbmdUaHJlYWQqPihzY3JvbGxpbmdU
aHJlYWQpLT50aHJlYWRCb2R5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXggZGUwNjJkNzdhYzAxZGY5ZDJhMDk4NjBlYmU2
YjhlOWZkM2NmZjVjMC4uZDg4OTJmMDViZTY0MzdkNGFhY2MwYTc1MWE3Y2E3ZTkzYmVlMGRmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgK
QEAgLTczLDcgKzczLDcgQEAgY2xhc3MgU2Nyb2xsaW5nVGhyZWFkIHsKICAgICB2b2lkIHRocmVh
ZFJ1bkxvb3BTb3VyY2VDYWxsYmFjaygpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fdGhyZWFkSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKIAogICAg
IENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGU7CiAgICAgTG9j
ayBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAppbmRleCBmNzEzMzNjNWEzN2E5OTg5
NjRmM2E3NDFjNzMxNTJlOTUxNDY2Y2Y2Li4wNjJlNDdiM2Q4MmZkYTZjMWM5NWVlNTEzZDkxNWY5
NWU1MTBmOGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRG
RGF0YWJhc2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZEYXRhYmFzZUxvYWRlci5jcHAKQEAgLTY0LDggKzY0LDcgQEAgUGFzc1JlZlB0cjxIUlRGRGF0
YWJhc2VMb2FkZXI+IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5kTG9hZEFzeW5jaHJvbm91
c2x5SWYKIH0KIAogSFJURkRhdGFiYXNlTG9hZGVyOjpIUlRGRGF0YWJhc2VMb2FkZXIoZmxvYXQg
c2FtcGxlUmF0ZSkKLSAgICA6IG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQoMCkKLSAgICAsIG1fZGF0
YWJhc2VTYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgOiBtX2RhdGFiYXNlU2FtcGxlUmF0ZShz
YW1wbGVSYXRlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiB9CkBAIC0xMDYsNyAr
MTA1LDcgQEAgdm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseSgpCiAg
ICAgCiAgICAgaWYgKCFtX2hydGZEYXRhYmFzZS5nZXQoKSAmJiAhbV9kYXRhYmFzZUxvYWRlclRo
cmVhZCkgewogICAgICAgICAvLyBTdGFydCB0aGUgYXN5bmNocm9ub3VzIGRhdGFiYXNlIGxvYWRp
bmcgcHJvY2Vzcy4KLSAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IGNyZWF0ZVRocmVh
ZChkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsKKyAg
ICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKGRhdGFiYXNlTG9h
ZGVyRW50cnksIHRoaXMsICJIUlRGIGRhdGFiYXNlIGxvYWRlciIpOwogICAgIH0KIH0KIApAQCAt
MTIxLDggKzEyMCw4IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjp3YWl0Rm9yTG9hZGVyVGhy
ZWFkQ29tcGxldGlvbigpCiAgICAgCiAgICAgLy8gd2FpdEZvclRocmVhZENvbXBsZXRpb24oKSBz
aG91bGQgbm90IGJlIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgdGhyZWFkLgogICAgIGlmICht
X2RhdGFiYXNlTG9hZGVyVGhyZWFkKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKLSAgICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gMDsK
KyAgICAgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAg
ICBtX2RhdGFiYXNlTG9hZGVyVGhyZWFkID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRh
dGFiYXNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJh
c2VMb2FkZXIuaAppbmRleCBjODY5ZDEzN2ExZGIyZjUyNDk4ZDBlMWI2NWQ1ODdlNmM4MTliMzgx
Li4zYWQyNTFmMjE5OTA5ZjRiYzY0NTRkMDEzMjAxYjZhN2NhNzAyNjgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaApAQCAtNzcs
NyArNzcsNyBAQCBjbGFzcyBIUlRGRGF0YWJhc2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxI
UlRGRGF0YWJhc2VMb2FkZXI+IHsKIAogICAgIC8vIEhvbGRpbmcgYSBtX3RocmVhZExvY2sgaXMg
cmVxdWlyZWQgd2hlbiBhY2Nlc3NpbmcgbV9kYXRhYmFzZUxvYWRlclRocmVhZC4KICAgICBMb2Nr
IG1fdGhyZWFkTG9jazsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fZGF0YWJhc2VMb2FkZXJUaHJl
YWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV9kYXRhYmFzZUxvYWRlclRocmVhZDsKIAogICAgIGZs
b2F0IG1fZGF0YWJhc2VTYW1wbGVSYXRlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCmluZGV4IDk2ZjMzMDgyODA3OWE3OWFkNjQ4
MjBkMDcyMWM1OWM1ZWExNmZkYjEuLjIxYmU5OTZlZjM3ZTUzZGI3MDMxMDAxOTYyN2MwYzQwZDJi
MjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29u
dm9sdmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIFJldmVyYkNvbnZvbHZlcjo6UmV2ZXJiQ29u
dm9sdmVyKEF1ZGlvQ2hhbm5lbCogaW1wdWxzZVJlc3BvbnNlLCBzaXplX3QgcmVuZGVyU2xpCiAg
ICAgLy8gU3RhcnQgdXAgYmFja2dyb3VuZCB0aHJlYWQKICAgICAvLyBGSVhNRTogd291bGQgYmUg
YmV0dGVyIHRvIHVwIHRoZSB0aHJlYWQgcHJpb3JpdHkgaGVyZS4gIEl0IGRvZXNuJ3QgbmVlZCB0
byBiZSByZWFsLXRpbWUsIGJ1dCBoaWdoZXIgdGhhbiB0aGUgZGVmYXVsdC4uLgogICAgIGlmICh0
aGlzLT51c2VCYWNrZ3JvdW5kVGhyZWFkcygpICYmIG1fYmFja2dyb3VuZFN0YWdlcy5zaXplKCkg
PiAwKQotICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQgPSBjcmVhdGVUaHJlYWQoV2ViQ29yZTo6
YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0aHJl
YWQiKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoV2ViQ29y
ZTo6YmFja2dyb3VuZFRocmVhZEVudHJ5LCB0aGlzLCAiY29udm9sdXRpb24gYmFja2dyb3VuZCB0
aHJlYWQiKTsKIH0KIAogUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVyKCkKQEAgLTE0
Niw3ICsxNDYsNyBAQCBSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIoKQogICAgICAg
ICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2JhY2tncm91bmRU
aHJlYWQpOworICAgICAgICBtX2JhY2tncm91bmRUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9S
ZXZlcmJDb252b2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNv
bnZvbHZlci5oCmluZGV4IDZiYWViN2NjZTI5ODk2Yzk4OTYzNTEyZjQxYjQzYTJmMTI4ODU0MWMu
LjA1OTYzMzY3YWUyODM0OTQ4NzkwYmE3Y2NiNzIwNjBlYzU5ODEwNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5oCkBAIC04Niw3ICs4Niw3
IEBAIGNsYXNzIFJldmVyYkNvbnZvbHZlciB7CiAKICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBh
bmQgc3luY2hyb25pemF0aW9uCiAgICAgYm9vbCBtX3VzZUJhY2tncm91bmRUaHJlYWRzOwotICAg
IFRocmVhZElkZW50aWZpZXIgbV9iYWNrZ3JvdW5kVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+
IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBt
X21vcmVJbnB1dEJ1ZmZlcmVkOwogICAgIG11dGFibGUgTG9jayBtX2JhY2tncm91bmRUaHJlYWRN
dXRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKaW5kZXggNmNkOGJk
N2Y4MWJmZjIyMjdmZTE0ZmJjYTBmYmZkMDU1ZDA5YzU3MS4uMWYyNWU4ZTU0ZTllZTg1ZmEwY2Nh
NmEzMWI5MmUxMTFlNmRmMGNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1l
ci5jcHAKQEAgLTM3MCwyMCArMzcwLDIwIEBAIFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmls
ZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiBQYXNz
UmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQ
YXRoLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKIHsKICAgICBSZWZQdHI8QXVk
aW9CdXM+IHJldHVyblZhbHVlOwotICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoIkF1
ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGZpbGVQYXRoLCBtaXhUb01vbm8sIHNhbXBs
ZVJhdGVdIHsKKyAgICBhdXRvIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJBdWRpb0ZpbGVSZWFk
ZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CiAg
ICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMo
c2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKICAgICB9KTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbih0aHJlYWRJRCk7CisgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKIH0KIAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJv
bUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9v
bCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiBy
ZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVS
ZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBzYW1wbGVS
YXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiQXVkaW9GaWxlUmVhZGVy
IiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZV0g
ewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSku
Y3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24o
KTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMWM1YzMwZjM3N2E0MmJlMDAxNzcxNjUxZTg3Zjcw
NDNhNWQ2NWM5MC4uNGVlYWM3M2ZhM2Q0NGI3N2QxOGEzNDliNmQwYTFhMjE3MmU5MmM1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTEwOCw3ICsx
MDgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNv
dXJjZUhhbmRsZUNsaWVudCwgcHVibGljIFN0cmVhbQogICAgICAgICB2b2lkIHdhc0Jsb2NrZWQo
UmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJl
c291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3Ro
cmVhZCB7IDAgfTsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgICAgIExv
Y2sgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4OwogICAgICAgICBDb25kaXRpb24g
bV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbjsKICAgICAgICAgUnVuTG9vcCogbV9ydW5Mb29w
IHsgbnVsbHB0ciB9OwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgUmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3Jj
LAogICAgIDogU3RyZWFtaW5nQ2xpZW50KHNyYykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkID0gY3JlYXRl
VGhyZWFkKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0ID0g
V1RGTW92ZShyZXF1ZXN0KV0geworICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIlJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IiwgW3RoaXMsIHJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVl
c3QpXSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlh
bGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3AgPSAmUnVu
TG9vcDo6Y3VycmVudCgpOwpAQCAtMTExMyw4ICsxMTEzLDggQEAgUmVzb3VyY2VIYW5kbGVTdHJl
YW1pbmdDbGllbnQ6OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyog
c3JjLAogUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudCgpCiB7CiAgICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIGRldGFjaFRocmVh
ZChtX3RocmVhZCk7Ci0gICAgICAgIG1fdGhyZWFkID0gMDsKKyAgICAgICAgbV90aHJlYWQtPmRl
dGFjaCgpOworICAgICAgICBtX3RocmVhZCA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKG1f
cnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCmluZGV4IDQ2Yjg5OTRh
ODQxZWY3MWVhMjc5Y2U3N2NiYzhmYjQzYzI5ZjBhNjIuLmZmYmZkYTliODkzNDgzNTQ5MGM5YTQw
YmExZjQ4MzM2ZTQ3NjBjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgQ0ZSdW5M
b29wUmVmIGxvYWRlclJ1bkxvb3AoKQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTG9jaz4g
bG9jayhsb2FkZXJSdW5Mb29wTXV0ZXgpOwogCiAgICAgaWYgKCFsb2FkZXJSdW5Mb29wT2JqZWN0
KSB7Ci0gICAgICAgIGNyZWF0ZVRocmVhZChydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBD
Rk5ldHdvcmsgTG9hZGVyIik7CisgICAgICAgIFRocmVhZDo6Y3JlYXRlKHJ1bkxvYWRlclRocmVh
ZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsKIAogICAgICAgICBsb2FkZXJSdW5M
b29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29w
T2JqZWN0OyB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IDQ0MDhjZDE5ODcwNWJhODZjYzhjMTk4
NmZiM2UyY2FkZTc5NmRjYzYuLmYxMDU3MTVlZDhkODc5MzczYjYzMzFjYjI2ZTA4MmMzZTFhYjhi
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuY3BwCkBAIC05NCwxMCArOTQsMTAgQEAgaW50IEN1cmxEb3dubG9hZE1hbmFn
ZXI6OmdldFBlbmRpbmdEb3dubG9hZENvdW50KCkgY29uc3QKIHZvaWQgQ3VybERvd25sb2FkTWFu
YWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFydW5UaHJlYWQoKSkgewot
ICAgICAgICBpZiAobV90aHJlYWRJZCkKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKG1fdGhyZWFkSWQpOworICAgICAgICBpZiAobV90aHJlYWQpCisgICAgICAgICAgICBtX3Ro
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICAgICAgc2V0UnVuVGhyZWFkKHRydWUpOwot
ICAgICAgICBtX3RocmVhZElkID0gY3JlYXRlVGhyZWFkKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAi
ZG93bmxvYWRUaHJlYWQiKTsKKyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShkb3du
bG9hZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7CiAgICAgfQogfQogCkBAIC0xMDUs
OSArMTA1LDkgQEAgdm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKIHsKICAg
ICBzZXRSdW5UaHJlYWQoZmFsc2UpOwogCi0gICAgaWYgKG1fdGhyZWFkSWQpIHsKLSAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7Ci0gICAgICAgIG1fdGhyZWFkSWQg
PSAwOworICAgIGlmIChtX3RocmVhZCkgeworICAgICAgICBtX3RocmVhZC0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCmlu
ZGV4IDAyY2U3MzFiZDEwYTgwMTliN2ViZTFmYWM1MmI0NWU0MDkyNTYyMzEuLmY2YmJjNzdmNGQz
Y2UwYjk2ODdkMWQ4ZmNhNjA5MTU4N2M5YWU0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTY5LDcgKzY5LDcgQEAg
Y2xhc3MgQ3VybERvd25sb2FkTWFuYWdlciB7CiAKICAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFRo
cmVhZCh2b2lkKiBkYXRhKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyAg
ICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKICAgICBDVVJMTSogbV9jdXJsTXVsdGlIYW5kbGU7
CiAgICAgVmVjdG9yPENVUkwqPiBtX3BlbmRpbmdIYW5kbGVMaXN0OwogICAgIFZlY3RvcjxDVVJM
Kj4gbV9hY3RpdmVIYW5kbGVMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKaW5kZXggN2Jk
N2IyZDM3MDJmNWY5Y2Q1NzEzNjFlMWNiYjg1ZWI5NzExZTkyZC4uZGIzMDkwZTg4YTY0N2M4MTdj
NjY2NTkxMzJlNGZhMjJmZTRmMjZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCkBAIC05
Miw3ICs5Miw3IEBAIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0
U3RyZWFtSGFuZGxlIHsKICAgICAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgfTsKIAotICAg
IFRocmVhZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFRocmVh
ZD4gbV93b3JrZXJUaHJlYWQ7CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsg
ZmFsc2UgfTsKICAgICBMb2NrIG1fbXV0ZXhTZW5kOwogICAgIExvY2sgbV9tdXRleFJlY2VpdmU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAppbmRleCAxZTM3OWQxYjAwZDA5
NTVmYzJkYTAwYmUzZjk2Zjk5MmE5MWI5NDNmLi5lY2I5ZjU0YjY1YTMzNTI0ZTNhMzU2YTNiYzEz
ZDBlMmY2ZjZhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKQEAg
LTE5OSw3ICsxOTksNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFk
KCkKIAogICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVmKCkuCiAKLSAg
ICBtX3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRocmVhZCIsIFt0aGlz
XSB7CisgICAgbV93b3JrZXJUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV2ViU29ja2V0IHRocmVh
ZCIsIFt0aGlzXSB7CiAKICAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTI0
OSw4ICsyNDksOCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOwotICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKLSAgICBtX3dvcmtlclRocmVhZCA9IDA7
CisgICAgbV93b3JrZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV93b3JrZXJU
aHJlYWQgPSBudWxscHRyOwogICAgIGRlcmVmKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcAppbmRleCA3YWQ1YjU3OTEzYTE2NzJkZjkxOTZlOWViMDEzM2UyM2Uy
MzI5ODVkLi5hZjU1Mzk1MmM5MTY1YTY2ODYzYTFjNTM0MDBjYzJiYzRmOWQwNDg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC05OSw4ICs5OSw3IEBAIFdvcmtl
clRocmVhZFN0YXJ0dXBEYXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBVUkwmIHNj
cmlwdFVSTCwgY29uc3QgU3RyCiB9CiAKIFdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0
IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
dXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3
b3JrZXJMb2FkZXJQcm94eSwgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1By
b3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBDb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVh
ZGVycywgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNv
bnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwg
SURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGNvbm5lY3Rpb25Qcm94eSwgU29ja2V0UHJv
dmlkZXIqIHNvY2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRpbWVGbGFncyBydW50aW1lRmxhZ3MpCi0g
ICAgOiBtX3RocmVhZElEKDApCi0gICAgLCBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRl
clByb3h5KQorICAgIDogbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAg
ICAsIG1fd29ya2VyUmVwb3J0aW5nUHJveHkod29ya2VyUmVwb3J0aW5nUHJveHkpCiAgICAgLCBt
X3J1bnRpbWVGbGFncyhydW50aW1lRmxhZ3MpCiAgICAgLCBtX3N0YXJ0dXBEYXRhKHN0ZDo6bWFr
ZV91bmlxdWU8V29ya2VyVGhyZWFkU3RhcnR1cERhdGE+KHNjcmlwdFVSTCwgaWRlbnRpZmllciwg
dXNlckFnZW50LCBzb3VyY2VDb2RlLCBzdGFydE1vZGUsIGNvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycywgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5
LCB0b3BPcmlnaW4sIHRpbWVPcmlnaW4pKQpAQCAtMTMzLDE1ICsxMzIsMTUgQEAgV29ya2VyVGhy
ZWFkOjp+V29ya2VyVGhyZWFkKCkKIAogYm9vbCBXb3JrZXJUaHJlYWQ6OnN0YXJ0KCkKIHsKLSAg
ICAvLyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBtX3RocmVh
ZElEIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCisgICAgLy8gTXV0ZXgg
cHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWQgaXMgaW5pdGlh
bGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KICAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJl
YWRDcmVhdGlvbk11dGV4KTsKIAotICAgIGlmIChtX3RocmVhZElEKQorICAgIGlmIChtX3RocmVh
ZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIi
KTsKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFdvcmtlclRocmVhZDo6d29ya2VyVGhy
ZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKIAotICAgIHJldHVybiBtX3RocmVh
ZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWQ6Ondvcmtl
clRocmVhZFN0YXJ0KHZvaWQqIHRocmVhZCkKQEAgLTE5Myw3ICsxOTIsNyBAQCB2b2lkIFdvcmtl
clRocmVhZDo6d29ya2VyVGhyZWFkKCkKICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2Rl
ZmF1bHQobWFpbkNvbnRleHQuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEID0gbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8VGhyZWFkPiBwcm90ZWN0b3IgPSBt
X3RocmVhZDsKIAogICAgIEFTU0VSVChtX3dvcmtlckdsb2JhbFNjb3BlLT5oYXNPbmVSZWYoKSk7
CiAKQEAgLTIwNSw3ICsyMDQsNyBAQCB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkK
ICAgICB0aHJlYWRHbG9iYWxEYXRhKCkuZGVzdHJveSgpOwogCiAgICAgLy8gVGhlIHRocmVhZCBv
YmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIGZyb20gbm90aWZpY2F0aW9uIG5vdywgZG9u
J3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCi0gICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsKKyAg
ICBwcm90ZWN0b3ItPmRldGFjaCgpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZDo6c3RhcnRSdW5u
aW5nRGVidWdnZXJUYXNrcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAppbmRl
eCAwN2FkM2NlNzg0ZjkxOWY3MGM0NTY4MWI5NTRjMDA5OTk2ZjU1N2YyLi5mODA5ZWU2NjcyN2Vl
MTM5ZGM0ZjE5ZDJjYjYxYjIyNjVlNGVhNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgV29ya2VyVGhyZWFkIDogcHVibGljIFJl
ZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgYm9vbCBzdGFydCgpOwogICAgIHZvaWQgc3Rv
cCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGhyZWFkSUQ7IH0KKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1
cm4gbV90aHJlYWQgPyBtX3RocmVhZC0+aWQoKSA6IDA7IH0KICAgICBXb3JrZXJSdW5Mb29wJiBy
dW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkmIHdv
cmtlckxvYWRlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJMb2FkZXJQcm94eTsgfQog
ICAgIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgpIGNvbnN0IHsg
cmV0dXJuIG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KQEAgLTk4LDcgKzk4LDcgQEAgY2xhc3Mg
V29ya2VyVGhyZWFkIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgc3Rh
dGljIHZvaWQgd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOwogICAgIHZvaWQgd29ya2VyVGhyZWFk
KCk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVh
ZD4gbV90aHJlYWQ7CiAgICAgV29ya2VyUnVuTG9vcCBtX3J1bkxvb3A7CiAgICAgV29ya2VyTG9h
ZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkm
IG1fd29ya2VyUmVwb3J0aW5nUHJveHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3Jh
Z2UvU3RvcmFnZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVh
ZC5jcHAKaW5kZXggYmI2NmZjZWE3ZTUyOGJjMjdmNjMzYTNlNTI4NzhiNTAxZWYwZTE4Ny4uZjNj
YmVkMzEwOGI0ZDFmZmFlYzJiNDBiYmVjZjViYzg3NjEzZDZiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU3Rv
cmFnZS9TdG9yYWdlVGhyZWFkLmNwcApAQCAtNDAsNyArNDAsNiBAQCBzdGF0aWMgSGFzaFNldDxT
dG9yYWdlVGhyZWFkKj4mIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkKIH0KIAogU3RvcmFnZVRocmVh
ZDo6U3RvcmFnZVRocmVhZCgpCi0gICAgOiBtX3RocmVhZElEKDApCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIH0KQEAgLTQ4LDE2ICs0NywxNiBAQCBTdG9yYWdlVGhyZWFkOjpTdG9y
YWdlVGhyZWFkKCkKIFN0b3JhZ2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgQVNTRVJU
KCFtX3RocmVhZCk7CiB9CiAKIGJvb2wgU3RvcmFnZVRocmVhZDo6c3RhcnQoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3RocmVhZElEKQotICAgICAgICBtX3Ro
cmVhZElEID0gY3JlYXRlVGhyZWFkKFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxs
YmFjaywgdGhpcywgIldlYkNvcmU6IExvY2FsU3RvcmFnZSIpOworICAgIGlmICghbV90aHJlYWQp
CisgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoU3RvcmFnZVRocmVhZDo6dGhyZWFk
RW50cnlQb2ludENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogTG9jYWxTdG9yYWdlIik7CiAgICAg
YWN0aXZlU3RvcmFnZVRocmVhZHMoKS5hZGQodGhpcyk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7
CisgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRocmVhZEVu
dHJ5UG9pbnRDYWxsYmFjayh2b2lkKiB0aHJlYWQpCkBAIC03OCwyNSArNzcsMjUgQEAgdm9pZCBT
dG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKIHZvaWQgU3RvcmFnZVRocmVhZDo6ZGlz
cGF0Y2goRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsK
KyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAgIG1fcXVldWUu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFdURk1vdmUoZnVuY3Rp
b24pKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3Ro
cmVhZElEKTsKKyAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWQpOwogICAg
IGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwogICAgIC8vIEV2ZW4gaW4gd2Vp
cmQsIGV4Y2VwdGlvbmFsIGNhc2VzLCBkb24ndCB3YWl0IG9uIGEgbm9uZXhpc3RlbnQgdGhyZWFk
IHRvIHRlcm1pbmF0ZS4KLSAgICBpZiAoIW1fdGhyZWFkSUQpCisgICAgaWYgKCFtX3RocmVhZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxG
dW5jdGlvbjx2b2lkICgpPj4oW3RoaXNdIHsKICAgICAgICAgcGVyZm9ybVRlcm1pbmF0ZSgpOwog
ICAgIH0pKTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElEKTsKKyAgICBt
X3RocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQo
KSk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwogfQogCiB2
b2lkIFN0b3JhZ2VUaHJlYWQ6OnBlcmZvcm1UZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9T
dG9yYWdlVGhyZWFkLmgKaW5kZXggOTU2NGI4YWEwNmU1MjQzZTMwZTQ2N2M1ZmJmZTJjZGFkYjI0
MGM1Ni4uOGNmMWIzZDRhZGM1YTMwNmE3N2VjNzdjOWMzMjY2NjE2ODdiZWM1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFN0b3Jh
Z2VUaHJlYWQgewogICAgIC8vIEJhY2tncm91bmQgdGhyZWFkIHBhcnQgb2YgdGhlIHRlcm1pbmF0
ZSBwcm9jZWR1cmUuCiAgICAgdm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKLSAgICBUaHJlYWRJ
ZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAg
TWVzc2FnZVF1ZXVlPEZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVlOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDNiODVm
MjJmZmFlMDFlMjhhYWI5OTgxNjY5OGFkYWQ3YTM4NDNjNWYuLmIwNGFjYzhjMzFjNWVjYTgyYTUx
NzQxNjY3ZGI3MGUwNTNmMWQyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmJgogewogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFt
ZXRlcnMpOwogCi0gICAgV1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKCk7Cisg
ICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQoKTsKIAogICAg
IG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBwYXJhbWV0ZXJzLnNob3VsZFN1cHBy
ZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyOwogICAgIG1fbG9hZFRocm90dGxlTGF0ZW5jeSA9IHBh
cmFtZXRlcnMubG9hZFRocm90dGxlTGF0ZW5jeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291
cC5jcHAKaW5kZXggZWY3YmE4OTk4MjAyMzI1ODllNzM5MWYyN2ZjZDNkNmUxNjlmNjg5NC4uZmEw
MzBmYjNhMmEwZjgyZDZhMjQ1YmY4NTZiMzZhYTI3MzIwMDcxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
SU9DaGFubmVsU291cC5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIElPQ2hhbm5lbDo6cmVh
ZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1
ZSwgcwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUmVmUHRyPElPQ2hhbm5l
bD4gY2hhbm5lbCh0aGlzKTsKLSAgICBkZXRhY2hUaHJlYWQoY3JlYXRlVGhyZWFkKCJJT0NoYW5u
ZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNpemUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0g
eworICAgIFRocmVhZDo6Y3JlYXRlKCJJT0NoYW5uZWw6OnJlYWRTeW5jIiwgW2NoYW5uZWwsIHNp
emUsIHF1ZXVlLCBjb21wbGV0aW9uSGFuZGxlcl0gewogICAgICAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUpOwogICAgICAgICB1aW50
OF90KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxsb2MoYnVmZmVy
U2l6ZSkpOwogICAgICAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IHJlYWRCdWZmZXIgPSBhZG9wdEdS
ZWYoc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwgYnVm
ZmVyRGF0YSwgZmFzdEZyZWUpKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIElPQ2hhbm5lbDo6
cmVhZFN5bmNJblRocmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBx
dWV1ZSwgcwogICAgICAgICAgICAgRGF0YSBkYXRhID0geyBXVEZNb3ZlKGJ1ZmZlcikgfTsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRhdGEsIDApOwogICAgICAgICB9LCBxdWV1ZSk7
Ci0gICAgfSkpOworICAgIH0pLT5kZXRhY2goKTsKIH0KIAogc3RydWN0IFdyaXRlQXN5bmNEYXRh
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBiYWY1
MzA2NmJlMjAwOWUyNmRiZWI3YWM4ODhjNDA1ZTNiZGJhNmZmLi5iMzg3YjZiNDQ1ZTM3ZDNkYTNl
OGE3MmM3YzBiYTM1Yzg2M2YyNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uY3BwCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNz
SW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBtZXNzYWdlKQogCiAjaWYg
SEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpICYmIG1f
c2hvdWxkQm9vc3RNYWluVGhyZWFkT25TeW5jTWVzc2FnZSkgewotICAgICAgICBwdGhyZWFkX292
ZXJyaWRlX3Qgb3ZlcnJpZGUgPSBwdGhyZWFkX292ZXJyaWRlX3Fvc19jbGFzc19zdGFydF9ucCht
X21haW5UaHJlYWQsIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUp
LCAwKTsKKyAgICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9vdmVy
cmlkZV9xb3NfY2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBUaHJlYWQ6OmFkanVzdGVkUU9T
Q2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUpLCAwKTsKICAgICAgICAgbWVzc2FnZS0+
c2V0UU9TQ2xhc3NPdmVycmlkZShvdmVycmlkZSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2Vydmlj
ZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9p
bnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAppbmRleCAz
YmI3YzZkNDdkNDNjNjk3NmIwM2NmZjc3MzY0NGY0ODc4NDkzZDQxLi5mMjNkYjQzYzAyMzRkYzdj
ODEwNDk1M2YwNGVmODc5NTJmOWI4NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2lu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9Y
UENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lk
IFhQQ1NlcnZpY2VJbml0aWFsaXplcihPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiBjb25u
ZWN0aW9uLCB4cGNfb2JqZWN0XwogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKICAgICBpZiAocGFy
YW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5jb250YWlucyhBU0NJSUxpdGVyYWwoImFs
d2F5cy1ydW5zLWF0LWJhY2tncm91bmQtcHJpb3JpdHkiKSkpCi0gICAgICAgIHNldEdsb2JhbE1h
eFFPU0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKKyAgICAgICAgVGhyZWFkOjpzZXRHbG9iYWxN
YXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7CiAjZW5kaWYKIAogICAgIFhQQ1NlcnZpY2VU
eXBlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcApp
bmRleCAwNjA4YWI3MmY5OTI0OGVmMjRjZDJkNTI0NWVlNTMzM2EwMGQ5ZDBkLi40OGQxMDY5Nzc2
NWE5NWE4YjM1ODcyMzBlMTAyZDgwM2FkNThjMGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcApAQCAtMjQ4
LDcgKzI0OCw3IEBAIE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1cmVNb25pdG9y
KCkKICAgICBpZiAobV9ldmVudEZEID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoIk1lbW9yeVByZXNz
dXJlTW9uaXRvciIsIFt0aGlzXSB7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoIk1lbW9yeVByZXNzdXJlTW9uaXRvciIsIFt0aGlzXSB7CiAgICAgICAgIGRvdWJs
ZSBwb2xsSW50ZXJ2YWwgPSBzX21heFBvbGxpbmdJbnRlcnZhbEluU2Vjb25kczsKICAgICAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIHNsZWVwKHBvbGxJbnRlcnZhbCk7CkBAIC0yNzEs
NyArMjcxLDcgQEAgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpNZW1vcnlQcmVzc3VyZU1vbml0b3Io
KQogICAgICAgICB9CiAgICAgICAgIGNsb3NlKG1fZXZlbnRGRCk7CiAgICAgfSk7Ci0gICAgZGV0
YWNoVGhyZWFkKHRocmVhZElkZW50aWZpZXIpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7CiB9CiAK
IElQQzo6QXR0YWNobWVudCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6OmNyZWF0ZUhhbmRsZSgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA1Yjk1Yzc5
NDE1M2E0YmFhYjIyNzYyYTY5NDY2MzlhMTNhZDliYzUwLi5jYThlNDRlYjNjNzA1ZTYxNmNkNTQ5
MzgyZjI0NTRhN2U2MGEwMzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQ
cm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAKICAgICAv
LyBNYXRjaCB0aGUgUW9TIG9mIHRoZSBVSVByb2Nlc3MgYW5kIHRoZSBzY3JvbGxpbmcgdGhyZWFk
IGJ1dCB1c2UgYSBzbGlnaHRseSBsb3dlciBwcmlvcml0eS4KLSAgICBXVEY6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CisgICAgV1RGOjpUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZSgtMSk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1
cmVIYW5kbGVyID0gcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxl
cjsKICAgICBpZiAoIW1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIpIHsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZTQ2ZTFiOGIwYzUy
ZDQzZWRmNTFkZGEwMjA4Y2Q3NGQ0YjBiYzUyLi45NmM2YTllODRiNmU4MThmM2ZmZmIzYWM0MmYx
MzExZmFkZDQyNWFlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTctMDQtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFz
cyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBs
ZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBVc2UgVGhyZWFk
OjogQVBJcy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcu
Y3BwOgorICAgICAgICAocnVuSmF2YVNjcmlwdFRocmVhZCk6CisgICAgICAgIChzdGFydEphdmFT
Y3JpcHRUaHJlYWRzKToKKyAgICAgICAgKHN0b3BKYXZhU2NyaXB0VGhyZWFkcyk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAodGVzdFRo
cmVhZElkZW50aWZpZXJNYXApOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Nv
bmRpdGlvbi5jcHA6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpydW5Mb2NrVGVzdCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHA6CisKIDIwMTctMDQtMTEgIERlYW4gSmFj
a3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgb3V0ZGF0ZWQgV3JpdGFi
bGVTdHJlYW0gQVBJCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0
VGhyZWFkaW5nLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcu
Y3BwCmluZGV4IGUyZjliYWRlNmNhN2MyNjk0ODVhNGNkY2JlNjA5OWMzNmJhMDIxOTguLjcxMGQy
YTU5ZGE5MjkwMTZlNjA4YTRjZjdkOTQ2ZmE4N2ZhZDkzMmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyBM
b2NrJiBqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9
CiAKLXR5cGVkZWYgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBUaHJlYWRTZXQ7Cit0eXBlZGVm
IEhhc2hTZXQ8UmVmUHRyPFRocmVhZD4+IFRocmVhZFNldDsKIHN0YXRpYyBUaHJlYWRTZXQmIGph
dmFTY3JpcHRUaHJlYWRzKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
VGhyZWFkU2V0LCBzdGF0aWNKYXZhU2NyaXB0VGhyZWFkcywgKCkpOwpAQCAtMTA4LDEwICsxMDgs
MTAgQEAgdm9pZCBydW5KYXZhU2NyaXB0VGhyZWFkKHZvaWQqKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgp
KTsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0g
ICAgICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygp
LnJlbW92ZSh0aHJlYWQpOwotICAgICAgICBqYXZhU2NyaXB0VGhyZWFkcygpLmFkZChjcmVhdGVU
aHJlYWQoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAgICAgVGhyZWFkJiB0aHJl
YWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKKyAgICAgICAgdGhyZWFkLmRldGFjaCgpOworICAgICAg
ICBqYXZhU2NyaXB0VGhyZWFkcygpLnJlbW92ZSgmdGhyZWFkKTsKKyAgICAgICAgamF2YVNjcmlw
dFRocmVhZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDAp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBzdGFy
dEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICBMb2NrSG9sZGVyIGxvY2tlcihqYXZhU2NyaXB0VGhy
ZWFkc011dGV4KCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhy
ZWFkc0NvdW50OyArK2kpCi0gICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKGNyZWF0ZVRo
cmVhZCgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOworICAgICAgICBqYXZhU2NyaXB0VGhy
ZWFkcygpLmFkZChUaHJlYWQ6OmNyZWF0ZSgmcnVuSmF2YVNjcmlwdFRocmVhZCwgMCwgMCkpOwog
fQogCiB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9p
ZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQogICAgICAgICBqYXZhU2NyaXB0VGhyZWFkc1Nob3Vs
ZFRlcm1pbmF0ZSA9IHRydWU7CiAgICAgfQogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIs
IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJl
YWQ+LCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0aHJlYWRzOwogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKICAgICAgICAgY29weVRv
VmVjdG9yKGphdmFTY3JpcHRUaHJlYWRzKCksIHRocmVhZHMpOwpAQCAtMTQ2LDcgKzE0Niw3IEBA
IHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGphdmFTY3JpcHRUaHJlYWRzQ291bnQ7ICsraSkKLSAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkc1tpXSk7CisgICAgICAgIHRocmVhZHNbaV0tPndhaXRGb3JD
b21wbGV0aW9uKCk7CiAKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3Jp
cHRUaHJlYWRzTXV0ZXgoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0KaW5kZXggMGI1ZGJlMDBmNDEyNGI3ZDhkZWFkZDUxNTY3YmJhMTc5MjM1MDg1MC4uYWYx
NmQ2NjNmZDBjYzk4ZDk5MjUzNjY3MTcxMmMzNzIxNDZiYjIwOCAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtMTA3Miw4ICsxMDcyLDggQEAgc3RhdGlj
IHZvaWQgdGVzdFRocmVhZElkZW50aWZpZXJNYXAoKQogICAgIHB0aHJlYWRfam9pbihwdGhyZWFk
LCAwKTsKIAogICAgIC8vIE5vdyBjcmVhdGUgYW5vdGhlciB0aHJlYWQgdXNpbmcgV1RGLiBPbiBP
U1gsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZSBwdGhyZWFkIGhhbmRsZQotICAgIC8vIGJ1dCBzaG91
bGQgZ2V0IGEgZGlmZmVyZW50IFRocmVhZElkZW50aWZpZXIuCi0gICAgY3JlYXRlVGhyZWFkKHJ1
blRocmVhZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0ZXN0Iik7CisgICAgLy8gYnV0IHNob3VsZCBn
ZXQgYSBkaWZmZXJlbnQgUmVmUHRyPFRocmVhZD4uCisgICAgVGhyZWFkOjpjcmVhdGUocnVuVGhy
ZWFkLCAwLCAiRHVtcFJlbmRlclRyZWU6IHRlc3QiKTsKIH0KIAogc3RhdGljIHZvaWQgYWxsb2Nh
dGVHbG9iYWxDb250cm9sbGVycygpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Db25kaXRpb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29u
ZGl0aW9uLmNwcAppbmRleCA4NDg1MjczNTFmNjA2M2ZjMjYzNjg3ODA1NmQ5YzI0ZGJhYmU4M2Rj
Li43NzIxNjM2Yjc3ODA3ZjEzOTUxZWExMTJmYmQ0MTNlOGZhYzQ2MGJjIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uIGVtcHR5Q29uZGl0aW9uOwogICAgIENvbmRpdGlv
biBmdWxsQ29uZGl0aW9uOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IGNvbnN1bWVy
VGhyZWFkczsKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gcHJvZHVjZXJUaHJlYWRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkPj4gY29uc3VtZXJUaHJlYWRzOworICAgIFZlY3RvcjxS
ZWZQdHI8VGhyZWFkPj4gcHJvZHVjZXJUaHJlYWRzOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBy
ZWNlaXZlZDsKICAgICBMb2NrIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJl
YWRJZGVudGlmaWVyID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAiQ29uc3VtZXIgdGhy
ZWFkIiwKICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewpA
QCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbXB0eUNvbmRpdGlvbiwgbG9ja2VyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91
bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVl
dWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlv
biBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBx
dWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHko
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICBz
bGVlcChkZWxheSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTsp
IHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKAorICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyID0gVGhyZWFkOjpj
cmVhdGUoCiAgICAgICAgICAgICAiUHJvZHVjZXIgVGhyZWFkIiwKICAgICAgICAgICAgIFsmXSAo
KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2Vz
UGVyUHJvZHVjZXI7ICsraSkgewpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgcnVuVGVzdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ29uZGl0aW9uLCBsb2NrZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBD
aGVja2luZyBwcm9kdWN0aW9uIHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hv
dWxkQ29udGludWUsICIsIHF1ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1h
eFF1ZXVlU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVvdXQpOwpAQCAtMTU1LDggKzE1NSw4IEBAIHZvaWQgcnVuVGVz
dCgKICAgICAgICAgcHJvZHVjZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAg
ICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IHByb2R1
Y2VyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRp
Zmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlmaWVyIDogcHJvZHVj
ZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigp
OwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9ja2VyKGxvY2spOwpA
QCAtMTY0LDggKzE2NCw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICB9CiAgICAgZW1wdHlDb25kaXRp
b24ubm90aWZ5QWxsKCk7CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRp
ZmllciA6IGNvbnN1bWVyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiB0aHJlYWRJZGVudGlm
aWVyIDogY29uc3VtZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9y
Q29tcGxldGlvbigpOwogCiAgICAgRVhQRUNUX0VRKG51bVByb2R1Y2VycyAqIG51bU1lc3NhZ2Vz
UGVyUHJvZHVjZXIsIHJlY2VpdmVkLnNpemUoKSk7CiAgICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJl
Z2luKCksIHJlY2VpdmVkLmVuZCgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5j
cHAKaW5kZXggNTU3NjMwMmQ2OTBkZmNhMzU5OTI5MjhiMWM4NTNjNzYyMmU0NWZiOS4uNmE0ZTUz
OGY1NmY0NmQxNzdhM2Y2MmYxZGRlYjNhNGQwYWYyYWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTG9jay5jcHAKQEAgLTQ2LDEzICs0NiwxMyBAQCB2b2lkIHJ1bkxvY2tUZXN0KHVu
c2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNp
Z25lZAogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFr
ZV91bmlxdWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8ZG91YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFk
R3JvdXBzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAq
IG51bVRocmVhZHNQZXJHcm91cCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+
W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVh
ZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVh
ZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKICAg
ICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOwogCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7Ci0g
ICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAg
KyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBUaHJlYWQ6
OmNyZWF0ZSgKICAgICAgICAgICAgICAgICAiTG9jayB0ZXN0IHRocmVhZCIsCiAgICAgICAgICAg
ICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCBudW1JdGVyYXRpb25zLCB3
b3JrUGVyQ3JpdGljYWxTZWN0aW9uXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBy
dW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVhZHNQ
ZXJHcm91cCwgdW5zaWduZWQKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4
ID0gbnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykK
LSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOwor
ICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAg
IGRvdWJsZSBleHBlY3RlZCA9IDA7CiAgICAgZm9yICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRo
cmVhZHNQZXJHcm91cDsgaS0tOykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1BhcmtpbmdMb3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFy
a2luZ0xvdC5jcHAKaW5kZXggYzY3ZTFlMDgxNWE4M2FmYTkzMzNlMmFjOWEyYmQ3OGI2N2IxNjQ1
Yi4uYmE4ZGQ1NmE1YjMwYTI0ZWY1ZmRjZTNiZDMwMWQwNmY1NGFkNGU4OCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKQEAgLTQ4LDE2ICs0OCwxNSBA
QCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bVRocmVhZHM7IGktLTspIHsKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKAot
ICAgICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICBUaHJlYWQ6OmNy
ZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAogICAgICAg
ICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05F
KDB1LCBjdXJyZW50VGhyZWFkKCkpOwotCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrZXIobG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRo
cmVhZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhy
ZWFkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoVGhyZWFkOjpjdXJyZW50
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9ICZUaHJlYWQ6OmN1cnJl
bnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgfQpAQCAtNjUsMTYgKzY0LDE2IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgdm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2lu
Z2xlVW5wYXJrSW5kZXgpCiAgICAgewotICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4p
OworICAgICAgICBFWFBFQ1RfVFJVRShudWxscHRyID09IGxhc3RBd29rZW4pOwogICAgICAgICAK
ICAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7Ci0gICAgICAgIFZlY3Rv
cjxUaHJlYWRJZGVudGlmaWVyLCA4PiBxdWV1ZTsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxUaHJl
YWQ+LCA4PiBxdWV1ZTsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAg
IFsmXSAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRy
ZXNzKSB7CisgICAgICAgICAgICBbJl0gKFRocmVhZCYgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qg
dm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZzZW1hcGhv
cmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIHF1ZXVl
LmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQo
JnRocmVhZElkZW50aWZpZXIpOwogCiAgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVz
cysrOwogICAgICAgICAgICAgfSk7CkBAIC04NywxMiArODYsMTIgQEAgc3RydWN0IFNpbmdsZUxh
dGNoVGVzdCB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tl
cihsb2NrKTsKICAgICAgICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJ
bmRleCArIDEpCiAgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAg
ICAgICAgIEVYUEVDVF9ORSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShudWxscHRyICE9IGxhc3RBd29rZW4pOwogICAgICAgICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5
KCkgJiYgcXVldWVbMF0gIT0gbGFzdEF3b2tlbikgewogICAgICAgICAgICAgICAgIGRhdGFMb2co
Ildva2UgdXAgd3JvbmcgdGhyZWFkOiBxdWV1ZSA9ICIsIGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFz
dCBhd29rZW4gPSAiLCBsYXN0QXdva2VuLCAiXG4iKTsKICAgICAgICAgICAgICAgICBFWFBFQ1Rf
RVEocXVldWVbMF0sIGxhc3RBd29rZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFz
dEF3b2tlbiA9IDA7CisgICAgICAgICAgICBsYXN0QXdva2VuID0gbnVsbHB0cjsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTAwLDcgKzk5LDcgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAg
UGFya2luZ0xvdDo6Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwg
Y29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2
b2lkKiBhZGRyZXNzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9y
ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIApAQCAtMTE0
LDcgKzExMyw3IEBAIHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogCiAgICAgICAgIG51bVdhaXRp
bmdPbkFkZHJlc3MgPSAwOwogICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAotICAgICAgICAg
ICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAg
ICAgICBbJl0gKFRocmVhZCYsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAg
ICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKQEAgLTEyOSw4ICsxMjgsOCBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0
IHsKICAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwogICAgICAgICB9CiAK
LSAgICAgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRz
KQotICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7
CisgICAgICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA6IHRocmVhZHMp
CisgICAgICAgICAgICB0aHJlYWRJZGVudGlmaWVyLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAg
IH0KIAogICAgIC8vIFNlbWFwaG9yZSBvcGVyYXRpb25zLgpAQCAtMTc5LDkgKzE3OCw5IEBAIHN0
cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgIEF0b21pYzxpbnQ+IHNlbWFwaG9yZTsKICAgICBz
dGQ6Om11dGV4IGxvY2s7CiAgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uOwot
ICAgIEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gYXdha2U7Ci0gICAgVmVjdG9yPFRocmVhZElk
ZW50aWZpZXI+IHRocmVhZHM7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBsYXN0QXdva2VuIHsgMCB9
OworICAgIEhhc2hTZXQ8UmVmPFRocmVhZD4+IGF3YWtlOworICAgIFZlY3RvcjxSZWZQdHI8VGhy
ZWFkPj4gdGhyZWFkczsKKyAgICBSZWZQdHI8VGhyZWFkPiBsYXN0QXdva2VuOwogfTsKIAogdm9p
ZCBydW5QYXJraW5nVGVzdCh1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxheSwgdW5z
aWduZWQgbnVtVGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306905</attachid>
            <date>2017-04-12 03:49:59 -0700</date>
            <delta_ts>2017-04-12 03:49:59 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170502-20170412194958.patch</filename>
            <type>text/plain</type>
            <size>229828</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1MjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
OTJjOWYwYTNmYTAyMGI4ZDU2YWRjN2VkYjgyMTczYjIzMTM5YThiLi4yZTVjMzFlYWJjMDY4Yzcw
ZGQ5NWMxOTZkYTVmN2QzMmI4MzVjYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxNy0wNC0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVm
UHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhyZWFkaW5nIGltcGxlbWVudGF0aW9uIHNl
bWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDoKKyAgICAg
ICAgKHRlc3RDb21wYXJlQW5kU3dhcCk6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIvdGVzdGFpci5jcHA6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICog
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVN1cGVy
U2FtcGxlcik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Okhl
YXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6cmVtb3Zl
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVhZElmRm91
bmQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6TWFjaGlu
ZVRocmVhZCk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpn
ZXRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVh
ZDo6UmVnaXN0ZXJzOjpzdGFja1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFk
czo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzOjpmcmFtZVBvaW50ZXIpOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBv
aW50ZXIpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVn
aXN0ZXJzOjpsbGludFBDKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVU
aHJlYWQ6OmNhcHR1cmVTdGFjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlD
b3B5T3RoZXJUaHJlYWRTdGFjayk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlD
b3B5T3RoZXJUaHJlYWRTdGFja3MpOgorICAgICAgICAocHRocmVhZFNpZ25hbEhhbmRsZXJTdXNw
ZW5kUmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dGhyZWFkRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlRocmVhZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmNyZWF0ZUZvckN1cnJlbnRU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpv
cGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Om1hY2hp
bmVUaHJlYWRGb3JDdXJyZW50VGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlRocmVhZERhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6flRocmVhZERhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6c3VzcGVuZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpyZXN1bWUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Z2V0UmVnaXN0
ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6
OlJlZ2lzdGVyczo6c3RhY2tQb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGlu
ZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5z
dHJ1Y3Rpb25Qb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6bGxpbnRQQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpmcmVlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OmNhcHR1cmVTdGFjayk6IERl
bGV0ZWQuCisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpT
Qzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN1c3BlbmQpOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6cmVzdW1lKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnRocmVhZElEKToKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0VuZCk6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjp0aHJlYWRzTGlzdEhlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6VGhyZWFkOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFj
aGluZVRocmVhZHM6OlRocmVhZDo6c3VzcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
Y2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OmZyZWVSZWdpc3RlcnMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpjYXB0dXJlU3RhY2spOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpwbGF0Zm9ybVRocmVhZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnN0YWNrQmFz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OnN0YWNr
RW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6
OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAoSlNDOjpJQ1N0YXRzOjp+SUNTdGF0cyk6Cisg
ICAgICAgICogaml0L0lDU3RhdHMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVu
Y3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KToKKyAgICAgICAgKHN0YXJ0VGltZW91dFRocmVhZElmTmVl
ZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9j
azo6bG9jayk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suaDoKKyAgICAgICAgKEpTQzo6SlNM
b2NrOjpvd25lclRocmVhZCk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2spOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjppc1ZhbGlkRnJhbWVQb2ludGVyKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcik6CisgICAgICAgIChKU0M6
OlNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpW
TTo6b3duZXJUaHJlYWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAg
IChKU0M6OmZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKToKKyAgICAgICAgKEpTQzo6Vk1UcmFw
czo6U2lnbmFsU2VuZGVyOjpzZW5kKToKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6ZmlyZVRyYXAp
OgorCiAyMDE3LTA0LTExICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEaXNhYmxlIG91dGRhdGVkIFdyaXRhYmxlU3RyZWFtIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA5NGYwNzg0ZDhjOTYx
NDIwN2FhNTk3NWQwMTM4M2YwYWFhYmEyOTkzLi40MDQyNzJjOWE2NzIzODdjZjMyYWZjY2YwN2M5
YjY5NDhkZjIzOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MiBAQAorMjAxNy0wNC0xMiAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2Ug
VGhyZWFkIGNsYXNzIGFuZCB1c2UgUmVmUHRyPFRocmVhZD4gYW5kIGFsaWduIFdpbmRvd3MgVGhy
ZWFkaW5nIGltcGxlbWVudGF0aW9uIHNlbWFudGljcyB0byBQdGhyZWFkIG9uZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNTAyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZWZh
Y3RvcmluZyBvZiBXVEYgVGhyZWFkaW5nIG1lY2hhbmlzbSB0byBtZXJnZSBKYXZhU2NyaXB0Q29y
ZSdzIHRocmVhZGluZyBleHRlbnNpb24gdG8gV1RGIFRocmVhZGluZy4KKyAgICAgICAgUHJldmlv
dXNseSwgSmF2YVNjcmlwdENvcmUgcmVxdWlyZXMgcmljaGVyIHRocmVhZGluZyBmZWF0dXJlcyAo
c3VjaCBhcyBzdXNwZW5kaW5nIGFuZCByZXN1bWluZyB0aHJlYWRzKSwgYW5kIHRoZXkKKyAgICAg
ICAgYXJlIGltcGxlbWVudGVkIGZvciBQbGF0Zm9ybVRocmVhZCBpbiBKYXZhU2NyaXB0Q29yZS4g
QnV0IHRoZXNlIGZlYXR1cmVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXVEYgVGhyZWFkaW5n
IHNpZGUKKyAgICAgICAgaW5zdGVhZCBvZiBtYWludGFpbmluZyBKU0MncyBvd24gdGhyZWFkaW5n
IGZlYXR1cmVzIHRvby4gVGhpcyBwYXRjaCByZW1vdmVzIHRoZXNlIGZlYXR1cmVzIGZyb20gSlND
IGFuZCBtb3ZlIGl0IHRvCisgICAgICAgIFdURiBUaHJlYWRpbmcuCisKKyAgICAgICAgSG93ZXZl
ciwgY3VycmVudCBXVEYgVGhyZWFkaW5nIGhhcyBvbmUgcHJvYmxlbTogV2luZG93cyB2ZXJzaW9u
IG9mIFdURiBUaHJlYWRpbmcgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZnJvbSBQdGhyZWFkcwor
ICAgICAgICBvbmUuIEluIFdpbmRvd3MgV1RGIFRocmVhZGluZywgd2UgY2Fubm90IHBlcmZvcm0g
YW55IG9wZXJhdGlvbiBhZnRlciB0aGUgdGFyZ2V0IHRocmVhZCBpcyBkZXRhY2hlZDogV1RGIFRo
cmVhZGluZyBzdG9wCisgICAgICAgIHRyYWNraW5nIHRoZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIG9u
Y2UgdGhlIHRocmVhZCBpcyBkZXRhY2hlZC4gQnV0IHRoaXMgaXMgbm90IHRoZSBzYW1lIHRvIFB0
aHJlYWRzIG9uZS4gSW4gUHRocmVhZHMsCisgICAgICAgIHB0aHJlYWRfZGV0YWNoIGp1c3QgbWVh
bnMgdGhhdCB0aGUgcmVzb3VyY2Ugb2YgdGhlIHRocmVhZCB3aWxsIGJlIGRlc3Ryb3llZCBhdXRv
bWF0aWNhbGx5LiBXaGlsZSBzb21lIG9wZXJhdGlvbnMgbGlrZQorICAgICAgICBwdGhyZWFkX2pv
aW4gd2lsbCBiZSByZWplY3RlZCwgc29tZSBvcGVyYXRpb25zIGxpa2UgcHRocmVhZF9raWxsIHdp
bGwgYmUgYWNjZXB0ZWQuCisKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhhdCBkZXRhY2hlZCB0
aHJlYWQgY2FuIGJlIHN1c3BlbmRlZCBhbmQgcmVzdW1lZCBpbiBKU0MuIEZvciBleGFtcGxlLCBp
biBqc2MuY3BwLCB3ZSBzdGFydCB0aGUgd29ya2VyCisgICAgICAgIHRocmVhZCBhbmQgZGV0YWNo
IGl0IGltbWVkaWF0ZWx5LiBJbiB3b3JrZXIgdGhyZWFkLCB3ZSB3aWxsIGNyZWF0ZSBWTSBhbmQg
dGh1cyBjb25jdXJyZW50IEdDIHdpbGwgc3VzcGVuZCBhbmQgcmVzdW1lCisgICAgICAgIHRoZSBk
ZXRhY2hlZCB0aHJlYWQuIEhvd2V2ZXIsIGluIFdpbmRvd3MgV1RGIFRocmVhZGluZywgd2UgaGF2
ZSBubyByZWZlcmVuY2UgdG8gdGhlIGRldGFjaGVkIHRocmVhZC4gVGh1cyB3ZSBjYW5ub3QKKyAg
ICAgICAgcGVyZm9ybSBzdXNwZW5kIGFuZCByZXN1bWUgb3BlcmF0aW9ucyBvbnRvIHRoZSBkZXRh
Y2hlZCB0aHJlYWQuCisKKyAgICAgICAgVG8gc29sdmUgdGhlIHByb2JsZW0sIHdlIGNoYW5nZSBX
aW5kb3dzIFRocmVhZGluZyBtZWNoYW5pc20gZHJhc3RpY2FsbHkgdG8gYWxpZ24gaXQgdG8gdGhl
IFB0aHJlYWQgc2VtYW50aWNzLiBJbiB0aGUKKyAgICAgICAgbmV3IFRocmVhZGluZywgd2UgaGF2
ZSBSZWZQdHI8VGhyZWFkPiBjbGFzcy4gSXQgaG9sZHMgYSBoYW5kbGUgdG8gYSBwbGF0Zm9ybSB0
aHJlYWQuIFdlIGNhbiBwZXJmb3JtIHRocmVhZGluZyBvcGVyYXRpb25zCisgICAgICAgIHdpdGgg
dGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsIFRocmVhZDo6c3VzcGVuZCBpcyBvZmZlcmVkLiBBbmQg
d2UgdXNlIGRlc3RydWN0b3Igb2YgdGhlIHRocmVhZCBsb2NhbCB2YXJpYWJsZSB0byByZWxlYXNl
CisgICAgICAgIHRoZSByZXNvdXJjZXMgaGVsZCBieSBSZWZQdHI8VGhyZWFkPi4gSW4gV2luZG93
cywgVGhyZWFkOjpkZXRhY2ggZG9lcyBub3RoaW5nIGJlY2F1c2UgdGhlIHJlc291cmNlIHdpbGwg
YmUgZGVzdHJveWVkCisgICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgUmVmUHRyPFRocmVhZD4uCisK
KyAgICAgICAgVG8gZG8gc28sIHdlIGludHJvZHVjZSBUaHJlYWRIb2xkZXIgZm9yIFdpbmRvd3Mu
IFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgVGhyZWFkSWRlbnRpZmllckRhdGEgZm9y
IFB0aHJlYWRzLgorICAgICAgICBJdCBob2xkcyBSZWZQdHI8VGhyZWFkPiBpbiB0aGUgdGhyZWFk
IGxvY2FsIHN0b3JhZ2UgKHRlY2huaWNhbGx5LCBpdCBpcyBGaWJlciBMb2NhbCBTdG9yYWdlIGlu
IFdpbmRvd3MpLiBUaHJlYWQ6OmN1cnJlbnQoKQorICAgICAgICB3aWxsIHJldHVybiB0aGlzIHJl
ZmVyZW5jZS4KKworICAgICAgICBUaGUgcHJvYmxlbWF0aWMgc2l0dWF0aW9uIGlzIHRoYXQgdGhl
IG9yZGVyIG9mIHRoZSBkZWFsbG9jYXRpb24gb2YgdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIGlz
IG5vdCBkZWZpbmVkLiBTbyB3ZSBzaG91bGQKKyAgICAgICAgbm90IHRvdWNoIHRocmVhZCBsb2Nh
bCBzdG9yYWdlIGluIHRoZSBkZXN0cnVjdG9yIG9mIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZS4g
VG8gYXZvaWQgc3VjaCBlZGdlIGNhc2VzLCB3ZSBoYXZlCisgICAgICAgIGN1cnJlbnRUaHJlYWQo
KSAvIFRocmVhZDo6Y3VycmVudElEKCkgQVBJcy4gVGhleSBhcmUgc2FmZSB0byBiZSBjYWxsZWQg
ZXZlbiBpbiB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgb3RoZXIgdGhyZWFkIGxvY2FsCisgICAgICAg
IHN0b3JhZ2UuIEFuZCBpbiBXaW5kb3dzLCBpbiB0aGUgRkxTIGRlc3RydWN0b3IsIHdlIHdpbGwg
Y3JlYXRlIHRoZSB0aHJlYWRfbG9jYWwgdmFyaWFibGUgdG8gZGVmZXIgdGhlIGRlc3RydWN0aW9u
IG9mCisgICAgICAgIHRoZSBUaHJlYWRIb2xkZXIuIFdlIGVuc3VyZSB0aGF0IHRoaXMgZGVzdHJ1
Y3RvciBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG90aGVyIEZMUyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVk
IGluIFdpbmRvd3MgMTAuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0
cmFsLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwOgorICAgICAgICAqIGJlbmNobWFy
a3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHA6CisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRU
ZXN0LmNwcDoKKyAgICAgICAgKiB3dGYvQXV0b21hdGljVGhyZWFkLmNwcDoKKyAgICAgICAgKFdU
Rjo6QXV0b21hdGljVGhyZWFkOjpzdGFydCk6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmg6CisgICAgICAgICogd3RmL01lbW9yeVByZXNz
dXJlSGFuZGxlci5oOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmNwcDoKKyAg
ICAgICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6dHJ5TG9ja0Zv
cik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsRW52aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6Ondv
cmtlclRocmVhZCk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuaDoKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0ZTo6VGhyZWFkUHJpdmF0
ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuY3BwOgorICAgICAgICAoV1RG
OjpQYXJraW5nTG90Ojpmb3JFYWNoSW1wbCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoK
KyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6Zm9yRWFjaCk6CisgICAgICAgICogd3RmL1BsYXRm
b3JtUmVnaXN0ZXJzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9QbGF0Zm9ybVRocmVhZC5oLgorICAgICAgICAqIHd0Zi9SZWZQdHIuaDoKKyAgICAgICAgKFdU
Rjo6UmVmUHRyOjpSZWZQdHIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaDoKKyAgICAgICAgKFdURjo6VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uOjpUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24pOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJl
YWRzLmguCisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6dGhyZWFkKToKKyAgICAgICAgKFdU
Rjo6VGhyZWFkSG9sZGVyOjpUaHJlYWRIb2xkZXIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xk
ZXJQdGhyZWFkcy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcC4KKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjppbml0aWFs
aXplT25jZSk6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6Y3VycmVudCk6CisgICAgICAg
IChXVEY6OlRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3QpOgorICAgICAgICAqIHd0Zi9UaHJlYWRIb2xk
ZXJXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOgorICAgICAg
ICAoV1RGOjp0aHJlYWRNYXApOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6OmluaXRpYWxp
emVPbmNlKToKKyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjpjdXJyZW50KToKKyAgICAgICAg
KFdURjo6VGhyZWFkSG9sZGVyOjpkZXN0cnVjdCk6CisgICAgICAgICogd3RmL1RocmVhZFNwZWNp
ZmljLmg6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6bm9ybWFsaXplVGhyZWFkTmFtZSk6CisgICAgICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFk
OjpzZXRHbG9iYWxNYXhRT1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6YWRqdXN0ZWRR
T1NDbGFzcyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZHVtcCk6CisgICAgICAgIChXVEY6Omlu
aXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjpub3JtYWxpemVUaHJlYWROYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckludGVyYWN0aXZlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
YWRqdXN0ZWRRT1NDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmlkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpqb2luYWJsZVN0YXRlKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkaWRCZWNvbWVE
ZXRhY2hlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZGlkSm9pbik6CisgICAgICAgIChXVEY6
OlRocmVhZDo6aGFzRXhpdGVkKToKKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6CisgICAg
ICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpU
aHJlYWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAoV1RGOjpU
aHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKToKKyAgICAgICAgKFdURjo6VGhyZWFk
Ojppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcpOgorICAgICAgICAoV1RGOjppbml0aWFsaXpl
Q3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQpOgorICAgICAgICAoV1RGOjp3dGZUaHJl
YWRFbnRyeVBvaW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjcmVhdGVJbnRlcm5hbCk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6Y2hhbmdlUHJpb3JpdHkpOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OndhaXRGb3JDb21wbGV0aW9uKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpkZXRhY2gpOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1
cnJlbnRJRCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFsKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpyZXN1bWUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6Cisg
ICAgICAgIChXVEY6OlRocmVhZDo6ZGlkRXhpdCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6ZXN0
YWJsaXNoKToKKyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpQdGhyZWFkU3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmpvaW5hYmxlU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OnB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpQdGhyZWFkU3RhdGU6OmRpZEJlY29tZURldGFjaGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6UHRocmVhZFN0YXRlOjpkaWRFeGl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6UHRocmVhZFN0YXRlOjpkaWRKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UHRo
cmVhZFN0YXRlOjpoYXNFeGl0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXBN
dXRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRNYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpp
ZGVudGlmaWVyQnlQdGhyZWFkSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZXN0YWJs
aXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpw
dGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxyZWFkeUhlbGQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpjcmVhdGVUaHJlYWRJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkRGlkRXhpdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmN1cnJlbnRUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzaWduYWxU
aHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCk6
CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKToKKyAg
ICAgICAgKFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6
Y3JlYXRlSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbik6CisgICAgICAgIChXVEY6
OlRocmVhZDo6ZGV0YWNoKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpyZXN1bWUpOgorICAgICAg
ICAoV1RGOjpUaHJlYWQ6OmdldFJlZ2lzdGVycyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Vy
cmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudElEKToKKyAgICAgICAgKFdURjo6
VGhyZWFkOjpkaWRFeGl0KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjplc3RhYmxpc2gpOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6dGhyZWFkTWFwTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjppbml0
aWFsaXplVGhyZWFkaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkTWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6c3RvcmVUaHJlYWRIYW5kbGVCeUlkZW50aWZpZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Y2xlYXJUaHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Y3JlYXRlVGhyZWFkSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpjaGFuZ2VUaHJlYWRQcmlvcml0eSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OndhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6ZGV0YWNoVGhyZWFk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1dvcmtRdWV1ZS5jcHA6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6Y29uY3Vy
cmVudEFwcGx5KToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2Nv
Y29hL1dvcmtRdWV1ZUNvY29hLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hRT1NDbGFzcyk6
CisgICAgICAgICogd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChX
b3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRm
b3JtSW52YWxpZGF0ZSk6CisgICAgICAgICogd3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxl
ckxpbnV4LmNwcDoKKyAgICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpFdmVudEZE
UG9sbGVyOjpFdmVudEZEUG9sbGVyKToKKyAgICAgICAgKFdURjo6TWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjpFdmVudEZEUG9sbGVyOjp+RXZlbnRGRFBvbGxlcik6CisgICAgICAgICogd3RmL3dpbi9N
YWluVGhyZWFkV2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0
Zm9ybSk6CisKIDIwMTctMDQtMTEgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdIFVzZSB0aGUgRGlzcGxheVJlZnJlc2hNb25pdG9yIGZhY2lsaXRp
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAyODAzNmY1OGU2NTA1NDUwZWViM2Y1NjYzODg2NGViODNkOWIyZjZj
Li43MTAwZGMwMjA5NWE1YjhkNDk1Mzc0MjMwM2FmYTRkZTYwNzUzOThjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTctMDQtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNl
IFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlv
biBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBVc2UgVGhyZWFkOjogQVBJcy4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5
bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFz
eW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxvb3ApOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5n
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6ZGF0
YWJhc2VUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnJlY29yZERh
dGFiYXNlT3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6cmVjb3JkRGF0
YWJhc2VDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJl
YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGhyZWFkOjpnZXRUaHJlYWRJRCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2lu
Zyk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZTo6b3Blbik6CisgICAgICAg
IChXZWJDb3JlOjpJY29uRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVk
ZWQpOgorICAgICAgICAqIHBhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5oOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
aHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RocmVhZDo6dGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RocmVhZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OkhSVEZEYXRhYmFz
ZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OmxvYWRBc3lu
Y2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpIUlRGRGF0YWJhc2VMb2FkZXI6OndhaXRG
b3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRG
RGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpSZXZlcmJDb252b2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6flJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nm
L0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2FkZXJSdW5Mb29wKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkTWFuYWdlcjo6c3RvcFRocmVhZCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BUaHJlYWQpOgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OnRocmVhZElEKToKKwogMjAxNy0wNC0xMiAgUGVyIEFybmUgVm9sbGFuICA8cHZv
bGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IHN0cm9rZS1jb2xvciBDU1MgcHJv
cGVydHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDEyNzAxY2UzOWM4ZDRkYWMzYTlhYzI5YTBmYjQ5MjNkYjExNmUy
YmEuLjQyOWNiNGIwNzNiYzIxMWJjZTNlMGQyM2EyNmU5OWEyMjU3YzNhZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTctMDQtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRocmVhZCBjbGFzcyBhbmQgdXNl
IFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVhZGluZyBpbXBsZW1lbnRhdGlv
biBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBVc2UgVGhyZWFkOjogQVBJcy4K
KworICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlVGhyZWFkOjpTdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VUaHJlYWQ6On5TdG9yYWdlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJl
YWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0ZSk6CisgICAgICAgICog
U3RvcmFnZS9TdG9yYWdlVGhyZWFkLmg6CisKIDIwMTctMDQtMTAgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEcm9wIFRpbWVyOjpzdGFydE9uZVNob3QoKSBvdmVy
bG9hZCB0YWtpbmcgYSBkb3VibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2NWNlN2UzM2IyNzY2MGZiYWRmZDEz
OWU3YmEyMjNlMDI3ZDAxOGMxLi45OWRkNGE1MDA4YzVkMDdkYjYwNzlmMjcyYmZmZGFkZWU1MDEy
ODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMTIgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFRo
cmVhZCBjbGFzcyBhbmQgdXNlIFJlZlB0cjxUaHJlYWQ+IGFuZCBhbGlnbiBXaW5kb3dzIFRocmVh
ZGluZyBpbXBsZW1lbnRhdGlvbiBzZW1hbnRpY3MgdG8gUHRocmVhZCBvbmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDUwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlLiBV
c2UgVGhyZWFkOjogQVBJcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
SU9DaGFubmVsU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFu
bmVsOjpyZWFkU3luY0luVGhyZWFkKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlv
bi5jcHA6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Up
OgorICAgICAgICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQ
Q1NlcnZpY2VFbnRyeVBvaW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlhQQ1NlcnZpY2VJbml0aWFs
aXplcik6CisgICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5UHJlc3N1
cmVNb25pdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTctMDQt
MTIgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQgR1RLKyBkZWJ1ZyBidWlsZCBmaXguIERyb3AgYW4gdW51c2VkIGRlYnVnLW9ubHkgbWVt
YmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVB
bmRTd2FwVGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0NvbXBhcmVB
bmRTd2FwVGVzdC5jcHAKaW5kZXggZTc4MDg2YzNhOTYxMmEyZjBiNGQ3YWFmMWFkYzdiYTFhMTAx
YzU0Ny4uNDNhZWYwNzc5NzBjZmVkYjJjYWMwNDYzZmNkOWVjY2EyOWQxNTI1NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcApAQCAtOTYsNyArOTYsNyBAQCB2b2lkIHRlc3RDb21wYXJlQW5kU3dhcCgpCiB7CiAgICAg
Qml0bWFwIGJpdG1hcDsKICAgICBjb25zdCBpbnQgbnVtVGhyZWFkcyA9IDU7Ci0gICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRHNbbnVtVGhyZWFkc107CisgICAgUmVmUHRyPFRocmVhZD4gdGhy
ZWFkc1tudW1UaHJlYWRzXTsKICAgICBEYXRhIGRhdGFbbnVtVGhyZWFkc107CiAKICAgICBXVEY6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTEwNywxMiArMTA3LDEyIEBAIHZvaWQgdGVzdENv
bXBhcmVBbmRTd2FwKCkKICAgICAgICAgZGF0YVtpXS5pZCA9IGk7CiAgICAgICAgIGRhdGFbaV0u
bnVtVGhyZWFkcyA9IG51bVRocmVhZHM7CiAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiB0
aHJlYWRGdW5jID0gc3RkOjpiaW5kKHNldEJpdFRocmVhZEZ1bmMsICZkYXRhW2ldKTsKLSAgICAg
ICAgdGhyZWFkSURzW2ldID0gY3JlYXRlVGhyZWFkKCJzZXRCaXRUaHJlYWRGdW5jIiwgdGhyZWFk
RnVuYyk7CisgICAgICAgIHRocmVhZHNbaV0gPSBUaHJlYWQ6OmNyZWF0ZSgic2V0Qml0VGhyZWFk
RnVuYyIsIHRocmVhZEZ1bmMpOwogICAgIH0KIAogICAgIHByaW50ZigiV2FpdGluZyBmb3IgJWQg
dGhyZWFkcyB0byBqb2luXG4iLCBudW1UaHJlYWRzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVRocmVhZHM7IGkrKykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
SURzW2ldKTsKKyAgICAgICAgdGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAg
IHByaW50ZigiUEFTUzogQ29tcGFyZUFuZFN3YXAgdGVzdCBjb21wbGV0ZWQgd2l0aG91dCBhIGhh
bmdcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZjE2NmMzN2RhNDlh
ZGRmZmFlYjc2N2NmMWM5OGJiZWFjN2IzMGZjLi45Yjk0ZjMwYjk4N2YzMDk2ZTAzNWE2ZjliNmZh
OWQ5MTFjNmY1YmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjQ3MSw3ICsy
NDcxLDYgQEAKIAkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQyODdCMTE1RUM5
QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hk
b2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVE
OTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLzsgfTsKIAkJRkVEOTRGMkYx
NzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRUU0
M0ZDRTFFNjY0MTcxMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRTQzRkNEMUU2NjQxNDAwMDc3RDZEMSAv
KiBQbGF0Zm9ybVRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRl
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVG
MDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgKi87IH07CiAJ
CUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRkQ2RkM1MUQ1RTc5NzAwMDhG
MkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCkBAIC01MTAx
LDcgKzUxMDAsNiBAQAogCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hkb2cuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRGIC8qIFBpbmdQb25nU3Rh
Y2tPdmVyZmxvd1Rlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvUGluZ1BvbmdT
dGFja092ZXJmbG93VGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFREE1
MEQ1MUI5N0Y0RDkwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuaDsg
cGF0aCA9IEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUZFRTQzRkNEMUU2NjQxNDAwMDc3RDZEMSAvKiBQbGF0Zm9ybVRo
cmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRocmVhZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAg
LyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFu
ZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTIxQUFF
QzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9Db21w
YXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGRDZGQzUx
RDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY4NjYsNyArNjg2NCw2IEBACiAJCQkJRjY5MkE4NzgwMjU1NTk3RDAxRkY2MEY3IC8q
IE9wZXJhdGlvbnMuaCAqLywKIAkJCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9u
cy5jcHAgKi8sCiAJCQkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLywK
LQkJCQlGRUU0M0ZDRDFFNjY0MTQwMDA3N0Q2RDEgLyogUGxhdGZvcm1UaHJlYWQuaCAqLywKIAkJ
CQk4Njg5MTZBOTE1NUYyODU0MDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCAqLywKIAkJCQkxNDcz
NDFERjFEQzJDRTk2MDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFibGUuY3BwICovLAogCQkJCTE0
NzM0MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5oICovLApAQCAtOTM0
OCw3ICs5MzQ1LDYgQEAKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1w
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBQzFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFBRTFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFRTQzRkNFMUU2NjQxNzEwMDc3
RDZEMSAvKiBQbGF0Zm9ybVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMjcxQkRB
MDhFRjAwMzMxQjg0IC8qIFN5bWJvbENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzA1QjQxQjAxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rl
c3RhaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAppbmRl
eCA4N2IzNTNhYTM3OTI1Y2ExZTJmYTg0MTE5OTc2YWRmMGIxZTA3YmFhLi5jOTE3NzA3OTU4OGY4
NmQ0MzFhMjhiYzA3NGQ0ZmUyZTNmMTNkYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvdGVzdGFpci5jcHAKQEAgLTE5MTMsMTAgKzE5MTMsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQogCiAgICAgTG9jayBsb2NrOwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IHRocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiB0aHJlYWRzOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IGZpbHRlciA/IDEgOiBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMo
KTsgaS0tOykgewogICAgICAgICB0aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgIGNyZWF0ZVRo
cmVhZCgKKyAgICAgICAgICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgICJ0ZXN0
YjMgdGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgICAg
ICBmb3IgKDs7KSB7CkBAIC0xOTMzLDggKzE5MzMsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIpCiAgICAgICAgICAgICAgICAgfSkpOwogICAgIH0KIAotICAgIGZvciAoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWQgOiB0aHJlYWRzKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bih0aHJlYWQpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkIDogdGhyZWFkcykKKyAg
ICAgICAgdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogICAgIGNyYXNoTG9jay5sb2NrKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXggMDE5OTZhZjcxYWI0ZjA5
ZWI0OWI3MDExYzE3ZGJjOTNjNDBjZTg3YS4uOTA0NjU2NDg4N2I2YjNhNGFmYWMzNTlkYzEwYzUw
Mzg0ZDc0ZGVmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKQEAgLTE2ODUwLDEw
ICsxNjg1MCwxMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBMb2NrIGxv
Y2s7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBWZWN0b3I8
UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmlsdGVyID8g
MSA6IFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpLS07KSB7CiAgICAgICAgIHRocmVh
ZHMuYXBwZW5kKAotICAgICAgICAgICAgY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgVGhyZWFk
OjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgInRlc3RiMyB0aHJlYWQiLAogICAgICAgICAgICAg
ICAgIFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKQEAgLTE2ODcwLDgg
KzE2ODcwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAgICAgICAgICAg
IH0pKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkIDogdGhyZWFk
cykKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkKTsKKyAgICBmb3IgKFJl
ZlB0cjxUaHJlYWQ+IHRocmVhZCA6IHRocmVhZHMpCisgICAgICAgIHRocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICBjcmFzaExvY2subG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCmluZGV4IGE0ZTIxZjlmYTNjZDQ3
MjFlYTI2NzVlMDZlNGQ1MzBjNWJhOTViMzUuLmU5YjFmNWMyZjBiYzI3YjAyOTMxMGM1NTgxNTIw
YjFiNTUyMjU5NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dXBlclNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBl
clNhbXBsZXIuY3BwCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgaW5pdGlhbGl6ZVN1cGVyU2FtcGxl
cigpCiAgICAgaWYgKCFPcHRpb25zOjp1c2VTdXBlclNhbXBsZXIoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY3JlYXRlVGhyZWFkKAorICAgIFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAiSlND
IFN1cGVyIFNhbXBsZXIiLAogICAgICAgICBbXSAoKSB7CiAgICAgICAgICAgICBjb25zdCBpbnQg
c2xlZXBRdWFudHVtID0gMTA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwCmluZGV4IGNlZjk5MGNiNDgzM2E2YmI5NDcxYmQwOGE1MDRlNTVmYjQ3ZGY0NTguLmFkMGVj
YzY5YTc3ZDE3MmNmNGJjMWVmYWM5M2RmOTMwMjdjMDA5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3MgV29ya2xp
c3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKICAgICAgICAgICAgIGRh
dGFMb2cobV93b3JrbGlzdCwgIjogVGhyZWFkIHN0YXJ0ZWRcbiIpOwogICAgICAgICAKICAgICAg
ICAgaWYgKG1fcmVsYXRpdmVQcmlvcml0eSkKLSAgICAgICAgICAgIGNoYW5nZVRocmVhZFByaW9y
aXR5KGN1cnJlbnRUaHJlYWQoKSwgbV9yZWxhdGl2ZVByaW9yaXR5KTsKKyAgICAgICAgICAgIFRo
cmVhZDo6Y3VycmVudCgpLmNoYW5nZVByaW9yaXR5KG1fcmVsYXRpdmVQcmlvcml0eSk7CiAgICAg
ICAgIAogICAgICAgICBtX2NvbXBpbGF0aW9uU2NvcGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uU2NvcGU+KCk7CiAgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPExvbmdMaXZlZFN0YXRlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCmluZGV4IDc4OGE2YzM2MjM2OWM1OGRhZDI5YTYw
YTM4NzEwNDRlNDY0ZWQzMDUuLjJiODI0ZWNmZGU1ODkzYjJjNmI3MDZmNDcwMmVjZDIyOTVkMjM1
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNz
ZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgY2xhc3MgQXN5bmNocm9ub3VzRGlzYXNzZW1i
bGVyIHsKIHB1YmxpYzoKICAgICBBc3luY2hyb25vdXNEaXNhc3NlbWJsZXIoKQogICAgIHsKLSAg
ICAgICAgY3JlYXRlVGhyZWFkKCJBc3luY2hyb25vdXMgRGlzYXNzZW1ibGVyIiwgWyZdICgpIHsg
cnVuKCk7IH0pOworICAgICAgICBUaHJlYWQ6OmNyZWF0ZSgiQXN5bmNocm9ub3VzIERpc2Fzc2Vt
YmxlciIsIFsmXSAoKSB7IHJ1bigpOyB9KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbnF1ZXVl
KHN0ZDo6dW5pcXVlX3B0cjxEaXNhc3NlbWJseVRhc2s+IHRhc2spCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCmluZGV4IDNhZWUzMDEwNGY1MjkxYTI4NzY0YTVjZGVlNWFhOGYwY2E3MmFk
MzEuLjcyMjNiMjBjOWRmYmExMDQzMDk4YTc4NTc0YmEyOGE2OTRjMDQ1YmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBIZWFwOjpsYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpCiAgICAgICAgICAgICBtX3Nob3VsZFN0b3BDb2xsZWN0aW5nQ29u
dGludW91c2x5ID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29sbGVjdENvbnRpbnVvdXNseUNvbmRp
dGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgfQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbihtX2NvbGxlY3RDb250aW51b3VzbHlUaHJlYWQpOworICAgICAgICBtX2NvbGxlY3RDb250
aW51b3VzbHlUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogICAgIAogICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQpAQCAtMjY4MSw3ICsyNjgxLDcgQEAgdm9pZCBIZWFwOjpub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKQogICAgIG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKICAgICAK
ICAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKSB7Ci0gICAgICAgIG1fY29s
bGVjdENvbnRpbnVvdXNseVRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgbV9jb2xsZWN0
Q29udGludW91c2x5VGhyZWFkID0gV1RGOjpUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJK
U0MgREVCVUcgQ29udGludW91cyBHQyIsCiAgICAgICAgICAgICBbdGhpc10gKCkgewogICAgICAg
ICAgICAgICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCBkMDY1NzAxNmJlZWY5YTg5ZDA2ZGYy
Nzk3MTdlNzcwYjE2NGE0NzE0Li5kNjc4MzdhZmVmMTMwMWY5NjcyZjYwZWEyOWM0M2ZjODU5N2Rl
YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC00OSw2ICs0OSw3IEBACiAjaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjY2LDcgKzY2Nyw3IEBAIGNsYXNzIEhlYXAg
ewogICAgIExvY2sgbV9jb2xsZWN0Q29udGludW91c2x5TG9jazsKICAgICBDb25kaXRpb24gbV9j
b2xsZWN0Q29udGludW91c2x5Q29uZGl0aW9uOwogICAgIGJvb2wgbV9zaG91bGRTdG9wQ29sbGVj
dGluZ0NvbnRpbnVvdXNseSB7IGZhbHNlIH07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2NvbGxl
Y3RDb250aW51b3VzbHlUaHJlYWQgeyAwIH07CisgICAgUmVmUHRyPFdURjo6VGhyZWFkPiBtX2Nv
bGxlY3RDb250aW51b3VzbHlUaHJlYWQgeyBudWxscHRyIH07CiAgICAgCiAgICAgTW9ub3Rvbmlj
VGltZSBtX2xhc3RHQ1N0YXJ0VGltZTsKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEdDRW5kVGlt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIu
Y3BwCmluZGV4IGI4NWI3NjQ4ZTJmNWQxOWZhMjJkNzYzZjdiY2RlZjhmNDRjNDJjODguLjkxYjhl
YWE3N2IyZGVlMGUwMmJjNDhhZGQxMjZiNWU3YjMxNGVhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApAQCAtMzYsOTIgKzM2LDEw
IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCi0jaWYgT1MoREFSV0lOKQotCi0jaW5jbHVkZSA8bWFjaC9tYWNoX2luaXQu
aD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgotI2luY2x1ZGUgPG1hY2gvdGFzay5oPgot
I2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+Ci0K
LSNlbGlmIE9TKFdJTkRPV1MpCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8bWFs
bG9jLmg+Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1
ZGUgPHVuaXN0ZC5oPgotCi0jaWYgT1MoU09MQVJJUykKLSNpbmNsdWRlIDx0aHJlYWQuaD4KLSNl
bHNlCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFKFBUSFJFQURfTlBf
SCkKLSNpbmNsdWRlIDxwdGhyZWFkX25wLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykg
JiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8v
IFdlIHVzZSBTSUdVU1IyIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBtYWNoaW5lIHRocmVhZHMgaW4g
SmF2YVNjcmlwdENvcmUuCi1zdGF0aWMgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
PSBTSUdVU1IyOwotc3RhdGljIFN0YXRpY0xvY2sgZ2xvYmFsU2lnbmFsTG9jazsKLXRocmVhZF9s
b2NhbCBzdGF0aWMgc3RkOjphdG9taWM8SlNDOjpNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YSo+
IHRocmVhZExvY2FsQ3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsKLQotc3RhdGljIHZvaWQgcHRo
cmVhZFNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWNv
bnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBmcm9t
IHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIEpTQzo6TWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGEqIHRocmVhZERhdGEgPSB0aHJlYWRMb2NhbEN1cnJlbnRUaHJlYWQubG9hZCgpOwot
Ci0gICAgaWYgKHRocmVhZERhdGEtPnN1c3BlbmRlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0
aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVzdW1lIHNpZ3N1c3BlbmQuCi0gICAgICAg
IC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0c2VsZiBzaG91bGQgbm90IHByb2Nlc3Mu
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFdoZW4gc2lnbmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5
c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxhdGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUg
cmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlvbiBhbHdheXMgcHJlY2VkZXMuCi0gICAg
ICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBwZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3Jl
KHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVk
LgotICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1
Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHVjb250ZXh0X3QqIHVzZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVj
b250ZXh0KTsKLSNpZiBDUFUoUFBDKQotICAgIHRocmVhZERhdGEtPnN1c3BlbmRlZE1hY2hpbmVD
b250ZXh0ID0gKnVzZXJDb250ZXh0LT51Y19tY29udGV4dC51Y19yZWdzOwotI2Vsc2UKLSAgICB0
aHJlYWREYXRhLT5zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9IHVzZXJDb250ZXh0LT51Y19tY29u
dGV4dDsKLSNlbmRpZgotCi0gICAgLy8gQWxsb3cgc3VzcGVuZCBjYWxsZXIgdG8gc2VlIHRoYXQg
dGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkLgotICAgIC8vIHNlbV9wb3N0IGlzIGFzeW5jLXNpZ25h
bC1zYWZlIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnJvbSBhIHNp
Z25hbCBoYW5kbGVyLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVi
cy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDMKLSAg
ICAvLwotICAgIC8vIEFuZCBzZW1fcG9zdCBlbWl0cyBtZW1vcnkgYmFycmllciB0aGF0IGVuc3Vy
ZXMgdGhhdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dCBpcyBjb3JyZWN0bHkgc2F2ZWQuCi0gICAg
Ly8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRl
ZnMvVjFfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNl
bWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotCi0gICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhy
ZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9ja2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25m
aWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNhX21hc2spLgotICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5n
IHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVm
ZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1
cnNpdmVseS4KLSAgICBzaWdzZXRfdCBibG9ja2VkU2lnbmFsU2V0OwotICAgIHNpZ2ZpbGxzZXQo
JmJsb2NrZWRTaWduYWxTZXQpOwotICAgIHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2ln
VGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7
Ci0KLSAgICAvLyBBbGxvdyByZXN1bWUgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlz
IHJlc3VtZWQuCi0gICAgc2VtX3Bvc3QoJnRocmVhZERhdGEtPnNlbWFwaG9yZUZvclN1c3BlbmRS
ZXN1bWUpOwotfQotI2VuZGlmIC8vIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFP
UyhEQVJXSU4pCi0KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotdXNpbmcgVGhyZWFkID0gTWFjaGluZVRocmVhZHM6OlRocmVhZDsKLQogY2xhc3Mg
QWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyOwogc3RhdGljIEFjdGl2ZU1hY2hpbmVUaHJlYWRz
TWFuYWdlciYgYWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyKCk7CiAKQEAgLTE5NCw0MSArMTEy
LDEzIEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogICAgIHRocmVhZFNwZWNp
ZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcyk7CiAKICAgICBM
b2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgp
OwotICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKLSAgICAg
ICAgVGhyZWFkKiBuZXh0ID0gdC0+bmV4dDsKKyAgICBmb3IgKE1hY2hpbmVUaHJlYWQqIHQgPSBt
X3JlZ2lzdGVyZWRUaHJlYWRzOyB0OykgeworICAgICAgICBNYWNoaW5lVGhyZWFkKiBuZXh0ID0g
dC0+bmV4dDsKICAgICAgICAgZGVsZXRlIHQ7CiAgICAgICAgIHQgPSBuZXh0OwogICAgIH0KIH0K
IAotc3RhdGljIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhKiB0aHJlYWREYXRhKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkU3BlY2lmaWM8TWFjaGluZVRocmVhZHM6OlRo
cmVhZERhdGEsIENhbkJlR0NUaHJlYWQ6OlRydWU+PiB0aHJlYWREYXRhOwotICAgIHJldHVybiB0
aHJlYWREYXRhLmdldCgpOwotfQotCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpUaHJlYWQoVGhy
ZWFkRGF0YSogdGhyZWFkRGF0YSkKLSAgICA6IGRhdGEodGhyZWFkRGF0YSkKLXsKLSAgICBBU1NF
UlQodGhyZWFkRGF0YSk7Ci19Ci0KLVRocmVhZCogTWFjaGluZVRocmVhZHM6OlRocmVhZDo6Y3Jl
YXRlRm9yQ3VycmVudFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIG5ldyBUaHJlYWQodGhyZWFkRGF0
YSgpKTsKLX0KLQotYm9vbCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpvcGVyYXRvcj09KGNvbnN0
IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3QKLXsKLSNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJ
TkRPV1MpCi0gICAgcmV0dXJuIGRhdGEtPnBsYXRmb3JtVGhyZWFkID09IG90aGVyOwotI2VsaWYg
VVNFKFBUSFJFQURTKQotICAgIHJldHVybiAhIXB0aHJlYWRfZXF1YWwoZGF0YS0+cGxhdGZvcm1U
aHJlYWQsIG90aGVyKTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBjb21wYXJlIHRocmVh
ZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KIHZvaWQgTWFjaGluZVRocmVhZHM6OmFk
ZEN1cnJlbnRUaHJlYWQoKQogewogICAgIGlmICh0aHJlYWRTcGVjaWZpY0dldChtX3RocmVhZFNw
ZWNpZmljRm9yTWFjaGluZVRocmVhZHMpKSB7CkBAIC0yMzksNyArMTI5LDcgQEAgdm9pZCBNYWNo
aW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwor
ICAgIE1hY2hpbmVUaHJlYWQqIHRocmVhZCA9IG5ldyBNYWNoaW5lVGhyZWFkKCk7CiAgICAgdGhy
ZWFkU3BlY2lmaWNTZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzLCB0aGlzKTsK
IAogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwpAQCAtMjQ4
LDEyICsxMzgsMTIgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRkQ3VycmVudFRocmVhZCgpCiAg
ICAgbV9yZWdpc3RlcmVkVGhyZWFkcyA9IHRocmVhZDsKIH0KIAotVGhyZWFkKiBNYWNoaW5lVGhy
ZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKQorYXV0byBNYWNoaW5lVGhyZWFk
czo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKSAtPiBNYWNoaW5lVGhyZWFkKgogewog
ICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwotICAgIFBsYXRm
b3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkID0gY3VycmVudFBsYXRmb3JtVGhyZWFkKCk7Ci0gICAg
Zm9yIChUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFk
ID0gdGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqdGhyZWFkID09IHBsYXRmb3JtVGhyZWFk
KQorICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFkKCk7CisgICAgZm9yIChN
YWNoaW5lVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVh
ZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpID09IGlk
KQogICAgICAgICAgICAgcmV0dXJuIHRocmVhZDsKICAgICB9CiAKQEAgLTI4MywyMiArMTczLDIx
IEBAIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgTWFjaGluZVRocmVhZHM6OnJlbW92ZVRocmVh
ZCh2b2lkKiBwKQogICAgICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICAgICAgbWFjaGlu
ZVRocmVhZHMtPnJlbW92ZVRocmVhZElmRm91bmQoY3VycmVudFBsYXRmb3JtVGhyZWFkKCkpOwor
ICAgICAgICBtYWNoaW5lVGhyZWFkcy0+cmVtb3ZlVGhyZWFkSWZGb3VuZChjdXJyZW50VGhyZWFk
KCkpOwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgUGxhdGZvcm1UaHJlYWQ+Ci12b2lk
IE1hY2hpbmVUaHJlYWRzOjpyZW1vdmVUaHJlYWRJZkZvdW5kKFBsYXRmb3JtVGhyZWFkIHBsYXRm
b3JtVGhyZWFkKQordm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChUaHJl
YWRJZGVudGlmaWVyIGlkKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJl
YWRzTXV0ZXgpOwotICAgIFRocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7Ci0gICAgaWYg
KCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAgTWFjaGluZVRocmVhZCogdCA9IG1fcmVnaXN0
ZXJlZFRocmVhZHM7CisgICAgaWYgKHQtPnRocmVhZElEKCkgPT0gaWQpIHsKICAgICAgICAgbV9y
ZWdpc3RlcmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7CiAgICAgICAgIGRl
bGV0ZSB0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRocmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7CisgICAgICAgIE1hY2hpbmVUaHJlYWQqIGxhc3QgPSBtX3JlZ2lzdGVyZWRUaHJl
YWRzOwogICAgICAgICBmb3IgKHQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5uZXh0OyB0OyB0ID0g
dC0+bmV4dCkgewotICAgICAgICAgICAgaWYgKCp0ID09IHBsYXRmb3JtVGhyZWFkKSB7CisgICAg
ICAgICAgICBpZiAodC0+dGhyZWFkSUQoKSA9PSBpZCkgewogICAgICAgICAgICAgICAgIGxhc3Qt
Pm5leHQgPSB0LT5uZXh0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMzIwLDIwNiArMjA5LDM0IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJy
ZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290CiAgICAgY29uc2Vy
dmF0aXZlUm9vdHMuYWRkKGN1cnJlbnRUaHJlYWRTdGF0ZS5zdGFja1RvcCwgY3VycmVudFRocmVh
ZFN0YXRlLnN0YWNrT3JpZ2luLCBqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCi1N
YWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6VGhyZWFkRGF0YSgpCitNYWNoaW5lVGhyZWFkczo6
TWFjaGluZVRocmVhZDo6TWFjaGluZVRocmVhZCgpCisgICAgOiBuZXh0KG51bGxwdHIpCisgICAg
LCBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIGF1dG8gc3RhY2tCb3Vu
ZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBwbGF0Zm9ybVRocmVhZCA9IGN1cnJl
bnRQbGF0Zm9ybVRocmVhZCgpOwotICAgIHN0YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigp
OwotICAgIHN0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQot
ICAgIEFTU0VSVChwbGF0Zm9ybVRocmVhZCA9PSBHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAg
Ym9vbCBpc1N1Y2Nlc3NmdWwgPQotICAgICAgICBEdXBsaWNhdGVIYW5kbGUoR2V0Q3VycmVudFBy
b2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLAotICAgICAg
ICAgICAgJnBsYXRmb3JtVGhyZWFkSGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUND
RVNTKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpc1N1Y2Nlc3NmdWwpOwotI2VsaWYgVVNFKFBUSFJF
QURTKSAmJiAhT1MoREFSV0lOKQotICAgIHRocmVhZExvY2FsQ3VycmVudFRocmVhZC5zdG9yZSh0
aGlzKTsKLQotICAgIC8vIFNpZ25hbCBoYW5kbGVycyBhcmUgcHJvY2VzcyBnbG9iYWwgY29uZmln
dXJhdGlvbi4KLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVNpZ25hbEhhbmRs
ZXI7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVNpZ25hbEhhbmRsZXIsIFtdIHsKLSAg
ICAgICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRo
ZSBoYW5kbGVyLgotICAgICAgICAvLyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIHdpbGwgYmUgYWxs
b3dlZCBpbiB0aGUgaGFuZGxlciBieSBzaWdzdXNwZW5kLgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICAgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAg
ICAgc2lnYWRkc2V0KCZhY3Rpb24uc2FfbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0K
LSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHB0aHJlYWRTaWduYWxIYW5kbGVyU3VzcGVu
ZFJlc3VtZTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lO
Rk87Ci0gICAgICAgIHNpZ2FjdGlvbihTaWdUaHJlYWRTdXNwZW5kUmVzdW1lLCAmYWN0aW9uLCAw
KTsKLSAgICB9KTsKLQotICAgIHNpZ3NldF90IG1hc2s7Ci0gICAgc2lnZW1wdHlzZXQoJm1hc2sp
OwotICAgIHNpZ2FkZHNldCgmbWFzaywgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Ci0gICAgcHRo
cmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmbWFzaywgMCk7Ci0KLSAgICBzZW1faW5pdCgmc2Vt
YXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFibGUgaW4gdGhpcyBwcm9jZXNz
LiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBob3JlLiAqLyAwKTsKLSNlbmRp
ZgorICAgIG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7CisgICAgbV9zdGFja0Vu
ZCA9IHN0YWNrQm91bmRzLmVuZCgpOwogfQogCi1NYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6
flRocmVhZERhdGEoKQorc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpnZXRS
ZWdpc3RlcnMoTWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCiB7Ci0jaWYgT1Mo
V0lORE9XUykKLSAgICBDbG9zZUhhbmRsZShwbGF0Zm9ybVRocmVhZEhhbmRsZSk7Ci0jZWxpZiBV
U0UoUFRIUkVBRFMpICYmICFPUyhEQVJXSU4pCi0gICAgc2VtX2Rlc3Ryb3koJnNlbWFwaG9yZUZv
clN1c3BlbmRSZXN1bWUpOwotI2VuZGlmCi19Ci0KLWJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVh
ZERhdGE6OnN1c3BlbmQoKQotewotI2lmIE9TKERBUldJTikKLSAgICBrZXJuX3JldHVybl90IHJl
c3VsdCA9IHRocmVhZF9zdXNwZW5kKHBsYXRmb3JtVGhyZWFkKTsKLSAgICByZXR1cm4gcmVzdWx0
ID09IEtFUk5fU1VDQ0VTUzsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgYm9vbCB0aHJlYWRJc1N1
c3BlbmRlZCA9IChTdXNwZW5kVGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKSAhPSAoRFdPUkQp
LTEpOwotICAgIEFTU0VSVCh0aHJlYWRJc1N1c3BlbmRlZCk7Ci0gICAgcmV0dXJuIHRocmVhZElz
U3VzcGVuZGVkOwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
Y3VycmVudFBsYXRmb3JtVGhyZWFkKCkgIT0gcGxhdGZvcm1UaHJlYWQsICJDdXJyZW50bHkgd2Ug
ZG9uJ3Qgc3VwcG9ydCBzdXNwZW5kIHRoZSBjdXJyZW50IHRocmVhZCBpdHNlbGYuIik7Ci0gICAg
ewotICAgICAgICAvLyBEdXJpbmcgc3VzcGVuZCwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5v
dCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhlciB0aHJlYWRzLgotICAgICAgICAvLyBXZSB1c2Ug
Z2xvYmFsIGxvY2sgaW5zdGVhZCBvZiBwZXIgdGhyZWFkIGxvY2suCi0gICAgICAgIC8vIENvbnNp
ZGVyIHRoZSBmb2xsb3dpbmcgY2FzZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KLSAgICAg
ICAgLy8gQW5kIEEgYXR0ZW1wdCB0byBzdXNwZW5kIEIgYW5kIEIgYXR0ZW1wdCB0byBzdXNwZW5k
IEEuCi0gICAgICAgIC8vIEEgYW5kIEIgc2VuZCBzaWduYWxzLiBBbmQgbGF0ZXIsIHNpZ25hbHMg
YXJlIGRlbGl2ZXJlZCB0byBBIGFuZCBCLgotICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGJvdGgg
d2lsbCBiZSBzdXNwZW5kZWQuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhnbG9iYWxTaWduYWxM
b2NrKTsKLSAgICAgICAgaWYgKCFzdXNwZW5kQ291bnQpIHsKLSAgICAgICAgICAgIC8vIElkZWFs
bHksIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHB0aHJlYWRfc2lncXVldWUuIEl0IGFsbG93cyB1cyB0
byBwYXNzIHRoZSBhcmd1bWVudCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAv
LyBCdXQgaXQgY2FuIGJlIHVzZWQgaW4gYSBmZXcgcGxhdGZvcm1zLCBsaWtlIExpbnV4LgotICAg
ICAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCogc3RvcmVkIGluIHRoZSB0aHJlYWQg
bG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWduYWwgaGFuZGxlci4KLSAgICAgICAg
ICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNpZ1RocmVhZFN1c3BlbmRSZXN1
bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSAgICAgICAgICAgIC8vIFJl
bGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1
dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgotICAgICAgICAgICAg
c3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAg
ICB9Ci0gICAgICAgICsrc3VzcGVuZENvdW50OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSNl
bHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBzdXNwZW5kIHRocmVhZHMgb24gdGhpcyBwbGF0Zm9y
bQotI2VuZGlmCisgICAgV1RGOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lzdGVycy5y
ZWdzOworICAgIHJldHVybiBtX3RocmVhZC0+Z2V0UmVnaXN0ZXJzKHJlZ3MpOwogfQogCi12b2lk
IE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpyZXN1bWUoKQotewotI2lmIE9TKERBUldJTikK
LSAgICB0aHJlYWRfcmVzdW1lKHBsYXRmb3JtVGhyZWFkKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0g
ICAgUmVzdW1lVGhyZWFkKHBsYXRmb3JtVGhyZWFkSGFuZGxlKTsKLSNlbGlmIFVTRShQVEhSRUFE
UykKLSAgICB7Ci0gICAgICAgIC8vIER1cmluZyByZXN1bWUsIHN1c3BlbmQgb3IgcmVzdW1lIHNo
b3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4KLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrKGdsb2JhbFNpZ25hbExvY2spOwotICAgICAgICBpZiAoc3VzcGVuZENvdW50
ID09IDEpIHsKLSAgICAgICAgICAgIC8vIFdoZW4gYWxsb3dpbmcgU2lnVGhyZWFkU3VzcGVuZFJl
c3VtZSBpbnRlcnJ1cHQgaW4gdGhlIHNpZ25hbCBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQgYW5kIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgaXMgYWN0dWFsbHkgaXNzdWVkLAotICAgICAgICAgICAgLy8g
dGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZiB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWluLgotICAg
ICAgICAgICAgLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkaXN0aW5ndWlzaCB0aGUgaGFu
ZGxlciBpbnZvY2F0aW9uIGZvciBzdXNwZW5kIGFuZCByZXN1bWUuCi0gICAgICAgICAgICAvLyAx
LiBVc2UgZGlmZmVyZW50IHNpZ25hbCBudW1iZXJzLiBBbmQgY2hlY2sgdGhlIHNpZ25hbCBudW1i
ZXIgaW4gdGhlIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyAyLiBVc2Ugc29tZSBhcmd1bWVudHMg
dG8gZGlzdGluZ3Vpc2ggc3VzcGVuZCBhbmQgcmVzdW1lIGluIHRoZSBoYW5kbGVyLiBJZiBwdGhy
ZWFkX3NpZ3F1ZXVlIGNhbiBiZSB1c2VkLCB3ZSBjYW4gdGFrZSB0aGlzLgotICAgICAgICAgICAg
Ly8gMy4gVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpdGggYXRvbWljIHZhcmlhYmxlcyBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBJbiB0aGlzIGltcGxlbWVudGFpdG9u
LCB3ZSB0YWtlICgzKS4gc3VzcGVuZGVkIGZsYWcgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBpdC4K
LSAgICAgICAgICAgIGlmIChwdGhyZWFkX2tpbGwocGxhdGZvcm1UaHJlYWQsIFNpZ1RocmVhZFN1
c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIHNlbV93YWl0KCZzZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKLSAgICAgICAgICAgIC8v
IFJlbGVhc2UgYmFycmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4
ZWN1dGVkIGFmdGVyIGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgotICAgICAgICAg
ICAgc3VzcGVuZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAg
ICAgICAgfQotICAgICAgICAtLXN1c3BlbmRDb3VudDsKLSAgICB9Ci0jZWxzZQotI2Vycm9yIE5l
ZWQgYSB3YXkgdG8gcmVzdW1lIHRocmVhZHMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0K
LXNpemVfdCBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Z2V0UmVnaXN0ZXJzKFRocmVhZERh
dGE6OlJlZ2lzdGVycyYgcmVnaXN0ZXJzKQotewotICAgIFRocmVhZERhdGE6OlJlZ2lzdGVyczo6
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MgPSByZWdpc3RlcnMucmVnczsKLSNpZiBPUyhEQVJXSU4p
Ci0jaWYgQ1BVKFg4NikKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gc2l6ZW9mKHJlZ3MpL3Np
emVvZihpbnQpOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVB
RF9TVEFURTsKLSNlbGlmIENQVShYODZfNjQpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHg4
Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9y
ID0geDg2X1RIUkVBRF9TVEFURTY0OwotI2VsaWYgQ1BVKFBQQykgCi0gICAgdW5zaWduZWQgdXNl
cl9jb3VudCA9IFBQQ19USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU7Ci0jZWxpZiBDUFUoUFBDNjQpCi0gICAgdW5z
aWduZWQgdXNlcl9jb3VudCA9IFBQQ19USFJFQURfU1RBVEU2NF9DT1VOVDsKLSAgICB0aHJlYWRf
c3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTY0OwotI2VsaWYgQ1BVKEFS
TSkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKLSAg
ICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKLSNlbGlm
IENQVShBUk02NCkKLSAgICB1bnNpZ25lZCB1c2VyX2NvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0
X0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NU
QVRFNjQ7Ci0jZWxzZQotI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCi0jZW5kaWYKLQotICAg
IGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX2dldF9zdGF0ZShwbGF0Zm9ybVRocmVhZCwg
Zmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ3MsICZ1c2VyX2NvdW50KTsKLSAgICBpZiAocmVz
dWx0ICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRo
cmVhZF9nZXRfc3RhdGUgcmV0dXJuZWQgYW4gZXJyb3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0
aGUgcmVzdWx0IG9mIHJ1bm5pbmcgaW5zaWRlIFJvc2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0
ZWQuIiwgcmVzdWx0KTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVzZXJf
Y291bnQgKiBzaXplb2YodWludHB0cl90KTsKLS8vIGVuZCBPUyhEQVJXSU4pCi0KLSNlbGlmIE9T
KFdJTkRPV1MpCi0gICAgcmVncy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05U
RVhUX0NPTlRST0w7Ci0gICAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9ybVRocmVhZEhhbmRsZSwg
JnJlZ3MpOwotICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7Ci0jZWxpZiAoKE9TKEZSRUVCU0Qp
IHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJVCkpCi0gICAgcmVncyA9IHN1c3Bl
bmRlZE1hY2hpbmVDb250ZXh0OwotICAgIHJldHVybiBzaXplb2YoUmVnaXN0ZXJzOjpQbGF0Zm9y
bVJlZ2lzdGVycyk7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgcHRocmVhZF9hdHRyX2luaXQo
JnJlZ3MuYXR0cmlidXRlKTsKLSNpZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQot
I2lmICFPUyhPUEVOQlNEKQotICAgIC8vIGUuZy4gb24gRnJlZUJTRCA1LjQsIG5ldW5kb3JmQGtk
ZS5vcmcKLSAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHBsYXRmb3JtVGhyZWFkLCAmcmVncy5hdHRy
aWJ1dGUpOwotI2VuZGlmCi0jZWxzZQotICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5v
bi1wb3J0YWJsZTsgb3RoZXIgUE9TSVggc3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0
ZXJuYXRpdmVzCi0gICAgcHRocmVhZF9nZXRhdHRyX25wKHBsYXRmb3JtVGhyZWFkLCAmcmVncy5h
dHRyaWJ1dGUpOwotI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3
YXkgdG8gZ2V0IHRocmVhZCByZWdpc3RlcnMgb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0K
LXZvaWQqIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWREYXRhOjpSZWdpc3RlcnM6OnN0YWNrUG9pbnRl
cigpIGNvbnN0Cit2b2lkKiBNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJz
OjpzdGFja1BvaW50ZXIoKSBjb25zdAogewogI2lmIE9TKERBUldJTikgfHwgT1MoV0lORE9XUykg
fHwgKChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmIEVOQUJMRShKSVQpKQog
ICAgIHJldHVybiBNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ3MpOwogI2VsaWYgVVNF
KFBUSFJFQURTKQotICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7Ci0gICAgc2l6ZV90IHN0YWNrU2l6
ZSA9IDA7Ci0jaWYgT1MoT1BFTkJTRCkKLSAgICBzdGFja190IHNzOwotICAgIGludCByYyA9IHB0
aHJlYWRfc3RhY2tzZWdfbnAocHRocmVhZF9zZWxmKCksICZzcyk7Ci0gICAgc3RhY2tCYXNlID0g
KHZvaWQqKSgoc2l6ZV90KSBzcy5zc19zcCAtIHNzLnNzX3NpemUpOwotICAgIHN0YWNrU2l6ZSA9
IHNzLnNzX3NpemU7Ci0jZWxzZQotICAgIGludCByYyA9IHB0aHJlYWRfYXR0cl9nZXRzdGFjaygm
cmVncy5hdHRyaWJ1dGUsICZzdGFja0Jhc2UsICZzdGFja1NpemUpOwotI2VuZGlmCi0gICAgKHZv
aWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21laG93PyBTZWVtcyBmYXRh
bC4KLSAgICBBU1NFUlQoc3RhY2tCYXNlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+
KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7CisgICAgcmV0dXJuIHJlZ3Muc3RhY2tQb2ludGVyOwog
I2Vsc2UKICNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aGUgc3RhY2sgcG9pbnRlciBmb3IgYW5v
dGhlciB0aHJlYWQgb24gdGhpcyBwbGF0Zm9ybQogI2VuZGlmCiB9CiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0
ZXJzOjpmcmFtZVBvaW50ZXIoKSBjb25zdAordm9pZCogTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVU
aHJlYWQ6OlJlZ2lzdGVyczo6ZnJhbWVQb2ludGVyKCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4p
IHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNEKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAg
ICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVncyk7CkBAIC01MjgsNyAr
MjQ1LDcgQEAgdm9pZCogTWFjaGluZVRocmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6ZnJh
bWVQb2ludGVyKCkgY29uc3QKICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkRGF0YTo6UmVnaXN0ZXJzOjppbnN0cnVjdGlvblBvaW50ZXIoKSBjb25zdAordm9pZCogTWFj
aGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVy
KCkgY29uc3QKIHsKICNpZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpIHx8IChPUyhGUkVFQlNE
KSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAgICAgcmV0dXJuIE1hY2hpbmVDb250ZXh0OjppbnN0
cnVjdGlvblBvaW50ZXIocmVncyk7CkBAIC01MzcsNyArMjU0LDcgQEAgdm9pZCogTWFjaGluZVRo
cmVhZHM6OlRocmVhZERhdGE6OlJlZ2lzdGVyczo6aW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3QK
ICNlbmRpZgogfQogCi12b2lkKiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJz
OjpsbGludFBDKCkgY29uc3QKK3ZvaWQqIE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpS
ZWdpc3RlcnM6OmxsaW50UEMoKSBjb25zdAogewogICAgIC8vIExMSW50IHVzZXMgcmVnVDQgYXMg
UEMuCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKSB8fCAoT1MoRlJFRUJTRCkgfHwgZGVm
aW5lZChfX0dMSUJDX18pKQpAQCAtNTQ4LDE2ICsyNjUsNiBAQCB2b2lkKiBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpsbGludFBDKCkgY29uc3QKIH0KICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLXZvaWQgTWFjaGluZVRocmVhZHM6OlRocmVhZERh
dGE6OmZyZWVSZWdpc3RlcnMoVGhyZWFkRGF0YTo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCi17Ci0g
ICAgVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOjpQbGF0Zm9ybVJlZ2lzdGVycyYgcmVncyA9IHJlZ2lz
dGVycy5yZWdzOwotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKFdJTkRPV1MpICYmICFPUyhEQVJX
SU4pICYmICEoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgRU5BQkxFKEpJ
VCkpCi0gICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJnJlZ3MuYXR0cmlidXRlKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHJlZ3MpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG9z
UmVkWm9uZUFkanVzdG1lbnQoKQogewogICAgIGludCByZWRab25lQWRqdXN0bWVudCA9IDA7CkBA
IC01NzMsMTcgKzI4MCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50
KCkKICAgICByZXR1cm4gcmVkWm9uZUFkanVzdG1lbnQ7CiB9CiAKLXN0ZDo6cGFpcjx2b2lkKiwg
c2l6ZV90PiBNYWNoaW5lVGhyZWFkczo6VGhyZWFkRGF0YTo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0
YWNrVG9wKQorc3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5l
VGhyZWFkOjpjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4g
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tCYXNlKTsKKyAgICBjaGFyKiBiZWdp
biA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrQmFzZSk7CiAgICAgY2hhciog
ZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9m
KHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrVG9wKSkpOwogICAgIEFT
U0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5kV2l0aFJlZFpvbmUgPSBlbmQgKyBv
c1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpv
bmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKTsKIAot
ICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKQotICAgICAgICBlbmRXaXRoUmVkWm9u
ZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0VuZCk7CisgICAgaWYgKGVuZFdp
dGhSZWRab25lIDwgbV9zdGFja0VuZCkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVy
cHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4s
IGVuZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdp
dGhSZWRab25lIC0gYmVnaW4pOwpAQCAtNjE2LDkgKzMyMyw5IEBAIHN0YXRpYyB2b2lkIGNvcHlN
ZW1vcnkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBzaXplKQogLy8gc2lnbmlm
aWNhbnQgcGVyZm9ybWFuY2UgbG9zcyBhcyB0cnlDb3B5T3RoZXJUaHJlYWRTdGFjayBpcyBvbmx5
IGNhbGxlZCBhcyBwYXJ0IG9mIGFuIE8oaGVhcHNpemUpCiAvLyBvcGVyYXRpb24uIEFzIHRoZSBo
ZWFwIGlzIGdlbmVyYWxseSBtdWNoIGxhcmdlciB0aGFuIHRoZSBzdGFjayB0aGUgcGVyZm9ybWFu
Y2UgaGl0IGlzIG1pbmltYWwuCiAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDYyOTcKLXZvaWQgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrKFRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6
ZV90KiBzaXplKQordm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2so
TWFjaGluZVRocmVhZCogdGhyZWFkLCB2b2lkKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6
ZV90KiBzaXplKQogewotICAgIFRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICBNYWNo
aW5lVGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwogICAgIHNpemVfdCByZWdpc3RlcnNTaXpl
ID0gdGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKICAgICBzdGQ6OnBhaXI8dm9pZCos
IHNpemVfdD4gc3RhY2sgPSB0aHJlYWQtPmNhcHR1cmVTdGFjayhyZWdpc3RlcnMuc3RhY2tQb2lu
dGVyKCkpOwogCkBAIC02MzEsOCArMzM4LDYgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29w
eU90aGVyVGhyZWFkU3RhY2soVGhyZWFkKiB0aHJlYWQsIHZvaWQqIGJ1ZmZlciwgc2l6ZV8KICAg
ICBpZiAoY2FuQ29weSkKICAgICAgICAgY29weU1lbW9yeShzdGF0aWNfY2FzdDxjaGFyKj4oYnVm
ZmVyKSArICpzaXplLCBzdGFjay5maXJzdCwgc3RhY2suc2Vjb25kKTsKICAgICAqc2l6ZSArPSBz
dGFjay5zZWNvbmQ7Ci0KLSAgICB0aHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKIH0K
IAogYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkU3RhY2tzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCogc2l6
ZSkKQEAgLTY0NCwzNiArMzQ5LDM0IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhl
clRocmVhZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAKICAgICAq
c2l6ZSA9IDA7CiAKLSAgICBQbGF0Zm9ybVRocmVhZCBwbGF0Zm9ybVRocmVhZCA9IGN1cnJlbnRQ
bGF0Zm9ybVRocmVhZCgpOworICAgIFRocmVhZElkZW50aWZpZXIgaWQgPSBjdXJyZW50VGhyZWFk
KCk7CiAgICAgaW50IG51bWJlck9mVGhyZWFkcyA9IDA7IC8vIFVzaW5nIDAgdG8gZGVub3RlIHRo
YXQgd2UgaGF2ZW4ndCBjb3VudGVkIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB5ZXQuCiAgICAgaW50
IGluZGV4ID0gMTsKLSAgICBUaHJlYWQqIHRocmVhZHNUb0JlRGVsZXRlZCA9IG51bGxwdHI7Cisg
ICAgTWFjaGluZVRocmVhZCogdGhyZWFkc1RvQmVEZWxldGVkID0gbnVsbHB0cjsKIAotICAgIFRo
cmVhZCogcHJldmlvdXNUaHJlYWQgPSBudWxscHRyOwotICAgIGZvciAoVGhyZWFkKiB0aHJlYWQg
PSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IGluZGV4KyspIHsKLSAgICAgICAgaWYgKCp0
aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRo
cmVhZC0+c3VzcGVuZCgpOworICAgIE1hY2hpbmVUaHJlYWQqIHByZXZpb3VzVGhyZWFkID0gbnVs
bHB0cjsKKyAgICBmb3IgKE1hY2hpbmVUaHJlYWQqIHRocmVhZCA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHM7IHRocmVhZDsgaW5kZXgrKykgeworICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9
IGlkKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC0+c3VzcGVuZCgpOwogI2lm
IE9TKERBUldJTikKLSAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgaWYg
KCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBpZiAoIW51bWJlck9mVGhyZWFkcykgewotICAg
ICAgICAgICAgICAgICAgICBmb3IgKFRocmVhZCogY291bnRlZFRocmVhZCA9IG1fcmVnaXN0ZXJl
ZFRocmVhZHM7IGNvdW50ZWRUaHJlYWQ7IGNvdW50ZWRUaHJlYWQgPSBjb3VudGVkVGhyZWFkLT5u
ZXh0KQorICAgICAgICAgICAgICAgICAgICBmb3IgKE1hY2hpbmVUaHJlYWQqIGNvdW50ZWRUaHJl
YWQgPSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyBjb3VudGVkVGhyZWFkOyBjb3VudGVkVGhyZWFkID0g
Y291bnRlZFRocmVhZC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mVGhy
ZWFkcysrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyBSZS1kbyB0aGUgc3VzcGVuc2lvbiB0byBnZXQgdGhlIGFjdHVhbCBmYWlsdXJlIHJl
c3VsdCBmb3IgbG9nZ2luZy4KLSAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IGVycm9yID0g
dGhyZWFkX3N1c3BlbmQodGhyZWFkLT5wbGF0Zm9ybVRocmVhZCgpKTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQuZXJyb3IoKSAhPSBLRVJOX1NVQ0NFU1MpOwogCiAgICAgICAgICAgICAgICAgV1RG
UmVwb3J0RXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLAotICAg
ICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNvbGxlY3Rpb24gZW5jb3VudGVy
ZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFkIFslZC8lZDogJXBdIHBsYXRm
b3JtVGhyZWFkICVwLiIsCi0gICAgICAgICAgICAgICAgICAgIGVycm9yLCBpbmRleCwgbnVtYmVy
T2ZUaHJlYWRzLCB0aHJlYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZC0+cGxhdGZv
cm1UaHJlYWQoKSkpOworICAgICAgICAgICAgICAgICAgICAiSmF2YVNjcmlwdCBnYXJiYWdlIGNv
bGxlY3Rpb24gZW5jb3VudGVyZWQgYW4gaW52YWxpZCB0aHJlYWQgKGVyciAweCV4KTogVGhyZWFk
IFslZC8lZDogJXBdIGlkICV1LiIsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcigp
LCBpbmRleCwgbnVtYmVyT2ZUaHJlYWRzLCB0aHJlYWQsIHRocmVhZC0+dGhyZWFkSUQoKSk7CiAK
ICAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIGludmFsaWQgdGhyZWFkIG9uIHRoZSB0aHJlYWRz
VG9CZURlbGV0ZWQgbGlzdC4KICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IGRlbGV0
ZSBpdCBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBzdXNwZW5kZWQgb3RoZXIKICAgICAgICAgICAgICAg
ICAvLyB0aHJlYWRzLCBhbmQgdGhleSBtYXkgc3RpbGwgYmUgaG9sZGluZyB0aGUgQyBoZWFwIGxv
Y2sgd2hpY2gKICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIGZvciBkZWxldGluZyB0aGUgaW52
YWxpZCB0aHJlYWQuIEhlbmNlLCB3ZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgLy8gZGVmZXIg
dGhlIGRlbGV0aW9uIHRpbGwgYWZ0ZXIgd2UgaGF2ZSByZXN1bWVkIGFsbCB0aHJlYWRzLgotICAg
ICAgICAgICAgICAgIFRocmVhZCogbmV4dFRocmVhZCA9IHRocmVhZC0+bmV4dDsKKyAgICAgICAg
ICAgICAgICBNYWNoaW5lVGhyZWFkKiBuZXh0VGhyZWFkID0gdGhyZWFkLT5uZXh0OwogICAgICAg
ICAgICAgICAgIHRocmVhZC0+bmV4dCA9IHRocmVhZHNUb0JlRGVsZXRlZDsKICAgICAgICAgICAg
ICAgICB0aHJlYWRzVG9CZURlbGV0ZWQgPSB0aHJlYWQ7CiAKQEAgLTY4NywyNSArMzkwLDI1IEBA
IGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFN0YWNrcyhjb25zdCBBYnN0
cmFjdExvY2tlciYsIHZvaWQqIGJ1ZmZlCiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KG51bWJlck9mVGhyZWFkcyk7CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0ocHJldmlvdXNUaHJl
YWQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIH0K
ICAgICAgICAgcHJldmlvdXNUaHJlYWQgPSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IHRocmVh
ZC0+bmV4dDsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0
aHJlYWQgIT0gcGxhdGZvcm1UaHJlYWQpCisgICAgZm9yIChNYWNoaW5lVGhyZWFkKiB0aHJlYWQg
PSBtX3JlZ2lzdGVyZWRUaHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewor
ICAgICAgICBpZiAodGhyZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdHJ5Q29w
eU90aGVyVGhyZWFkU3RhY2sodGhyZWFkLCBidWZmZXIsIGNhcGFjaXR5LCBzaXplKTsKICAgICB9
CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgaWYgKCp0aHJlYWQgIT0gcGxhdGZv
cm1UaHJlYWQpCisgICAgZm9yIChNYWNoaW5lVGhyZWFkKiB0aHJlYWQgPSBtX3JlZ2lzdGVyZWRU
aHJlYWRzOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgeworICAgICAgICBpZiAodGhy
ZWFkLT50aHJlYWRJRCgpICE9IGlkKQogICAgICAgICAgICAgdGhyZWFkLT5yZXN1bWUoKTsKICAg
ICB9CiAKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gdGhyZWFkc1RvQmVEZWxldGVkOyB0aHJl
YWQ7ICkgewotICAgICAgICBUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CisgICAg
Zm9yIChNYWNoaW5lVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRzVG9CZURlbGV0ZWQ7IHRocmVhZDsg
KSB7CisgICAgICAgIE1hY2hpbmVUaHJlYWQqIG5leHRUaHJlYWQgPSB0aHJlYWQtPm5leHQ7CiAg
ICAgICAgIGRlbGV0ZSB0aHJlYWQ7CiAgICAgICAgIHRocmVhZCA9IG5leHRUaHJlYWQ7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApp
bmRleCBkMTk2ZmM5ZTVmNGQ3OTA3NWJkNjE4MjQyY2Q4N2Y3OTk0NDg3ZjIyLi4yOGQ3ZDI5NGE3
NTE3YmUyMTIzMWY4YWUxYmYyOTIyYWRiMjA3Yjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtMjIsMjUgKzIyLDEyIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1UaHJlYWQuaCIKICNpbmNsdWRlICJSZWdpc3RlclN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVk
TGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKLSNpZiBVU0UoUFRI
UkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNlbWFwaG9y
ZS5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotLy8gVXNpbmcgc2lnbmFsLmggZGlkbid0IG1ha2Ug
bWNvbnRleHRfdCBhbmQgdWNvbnRleHRfdCBhdmFpbGFibGUgb24gRnJlZUJTRC4KLS8vIFRoaXMg
YnVnIGhhcyBiZWVuIGZpeGVkIGluIEZyZWVCU0QgMTEuMC1DVVJSRU5ULCBzbyB0aGlzIHdvcmth
cm91bmQgY2FuIGJlCi0vLyByZW1vdmVkIGFmdGVyIEZyZWVCU0QgMTAueCBnb2VzIEVPTC4KLS8v
IGh0dHBzOi8vYnVncy5mcmVlYnNkLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDc5
Ci0jaWYgT1MoRlJFRUJTRCkKLSNpbmNsdWRlIDx1Y29udGV4dC5oPgotI2VuZGlmCi0jZW5kaWYK
LQogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9ja1NldDsKQEAgLTY0LDEzICs1MSwx
MCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFkZEN1cnJlbnRUaHJlYWQoKTsgLy8gT25seSBuZWVkcyB0byBiZSBjYWxsZWQgYnkgY2xpZW50
cyB0aGF0IGNhbiB1c2UgdGhlIHNhbWUgaGVhcCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCiAKLSAg
ICBjbGFzcyBUaHJlYWREYXRhIHsKKyAgICBjbGFzcyBNYWNoaW5lVGhyZWFkIHsKICAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBUaHJlYWREYXRh
KCk7Ci0gICAgICAgIH5UaHJlYWREYXRhKCk7Ci0KLSAgICAgICAgc3RhdGljIFRocmVhZERhdGEq
IGNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgTWFjaGluZVRocmVhZCgpOwogCiAg
ICAgICAgIHN0cnVjdCBSZWdpc3RlcnMgewogICAgICAgICAgICAgdm9pZCogc3RhY2tQb2ludGVy
KCkgY29uc3Q7CkBAIC03OSw4NCArNjMsNDAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAg
ICAgICAgICAgdm9pZCogaW5zdHJ1Y3Rpb25Qb2ludGVyKCkgY29uc3Q7CiAgICAgICAgICAgICB2
b2lkKiBsbGludFBDKCkgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQotICAgICAgICAgICAgCi0jaWYgT1MoREFSV0lOKSB8fCBPUyhXSU5ET1dTKQotICAgICAgICAg
ICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBNYWNoaW5lQ29udGV4dDo6UGxhdGZvcm1SZWdp
c3RlcnM7Ci0jZWxpZiAoT1MoRlJFRUJTRCkgfHwgZGVmaW5lZChfX0dMSUJDX18pKSAmJiBFTkFC
TEUoSklUKQotICAgICAgICAgICAgdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBtY29udGV4dF90
OwotI2VsaWYgVVNFKFBUSFJFQURTKQotICAgICAgICAgICAgc3RydWN0IFBsYXRmb3JtUmVnaXN0
ZXJzIHsKLSAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGU7Ci0gICAgICAg
ICAgICB9OwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgdGhyZWFkIHJlZ2lzdGVyIHN0cnVjdCBmb3Ig
dGhpcyBwbGF0Zm9ybQotI2VuZGlmCi0KLSAgICAgICAgICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJl
Z3M7CisgICAgICAgICAgICBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzIHJlZ3M7CiAgICAgICAgIH07
CiAKLSAgICAgICAgYm9vbCBzdXNwZW5kKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lKCk7Ci0gICAg
ICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJik7Ci0gICAgICAgIHZvaWQgZnJlZVJl
Z2lzdGVycyhSZWdpc3RlcnMmKTsKKyAgICAgICAgRXhwZWN0ZWQ8dm9pZCwgVGhyZWFkOjpQbGF0
Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpIHsgcmV0dXJuIG1fdGhyZWFkLT5zdXNwZW5kKCk7
IH0KKyAgICAgICAgdm9pZCByZXN1bWUoKSB7IG1fdGhyZWFkLT5yZXN1bWUoKTsgfQorICAgICAg
ICBzaXplX3QgZ2V0UmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncyk7CiAgICAgICAgIHN0ZDo6cGFp
cjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApOwogCi0gICAgICAg
IFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFkOwotICAgICAgICB2b2lkKiBzdGFja0Jhc2U7
Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIEhBTkRM
RSBwbGF0Zm9ybVRocmVhZEhhbmRsZTsKLSNlbGlmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJ
TikKLSAgICAgICAgc2VtX3Qgc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZTsKLSAgICAgICAgbWNv
bnRleHRfdCBzdXNwZW5kZWRNYWNoaW5lQ29udGV4dDsKLSAgICAgICAgaW50IHN1c3BlbmRDb3Vu
dCB7IDAgfTsKLSAgICAgICAgc3RkOjphdG9taWM8Ym9vbD4gc3VzcGVuZGVkIHsgZmFsc2UgfTsK
LSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFzcyBUaHJlYWQgewotICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICAgICAgVGhyZWFkKFRocmVhZERhdGEqKTsKLQotICAgIHB1Ymxp
YzoKLSAgICAgICAgdXNpbmcgUmVnaXN0ZXJzID0gVGhyZWFkRGF0YTo6UmVnaXN0ZXJzOwotCi0g
ICAgICAgIHN0YXRpYyBUaHJlYWQqIGNyZWF0ZUZvckN1cnJlbnRUaHJlYWQoKTsKLQotICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1UaHJlYWQmIG90aGVyKSBjb25zdDsKLSAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLQotICAgICAgICBib29sIHN1c3BlbmQoKSB7
IHJldHVybiBkYXRhLT5zdXNwZW5kKCk7IH0KLSAgICAgICAgdm9pZCByZXN1bWUoKSB7IGRhdGEt
PnJlc3VtZSgpOyB9Ci0gICAgICAgIHNpemVfdCBnZXRSZWdpc3RlcnMoUmVnaXN0ZXJzJiByZWdz
KSB7IHJldHVybiBkYXRhLT5nZXRSZWdpc3RlcnMocmVncyk7IH0KLSAgICAgICAgdm9pZCBmcmVl
UmVnaXN0ZXJzKFJlZ2lzdGVycyYgcmVncykgeyBkYXRhLT5mcmVlUmVnaXN0ZXJzKHJlZ3MpOyB9
Ci0gICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3Rh
Y2tUb3ApIHsgcmV0dXJuIGRhdGEtPmNhcHR1cmVTdGFjayhzdGFja1RvcCk7IH0KLQotICAgICAg
ICBjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQoKSB7IHJldHVybiBkYXRhLT5w
bGF0Zm9ybVRocmVhZDsgfQotICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVy
biBkYXRhLT5zdGFja0Jhc2U7IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJl
dHVybiBkYXRhLT5zdGFja0VuZDsgfQorICAgICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZC0+aWQoKTsgfQorICAgICAgICB2b2lkKiBz
dGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrQmFzZTsgfQorICAgICAgICB2b2lkKiBz
dGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tFbmQ7IH0KIAotICAgICAgICBUaHJlYWQq
IG5leHQ7Ci0gICAgICAgIFRocmVhZERhdGEqIGRhdGE7CisgICAgICAgIE1hY2hpbmVUaHJlYWQq
IG5leHQ7CisgICAgICAgIFJlZjxXVEY6OlRocmVhZD4gbV90aHJlYWQ7CisgICAgICAgIHZvaWQq
IG1fc3RhY2tCYXNlOworICAgICAgICB2b2lkKiBtX3N0YWNrRW5kOwogICAgIH07CiAKICAgICBM
b2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OyB9Ci0gICAg
VGhyZWFkKiB0aHJlYWRzTGlzdEhlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IEFT
U0VSVChtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXguaXNMb2NrZWQoKSk7IHJldHVybiBtX3JlZ2lz
dGVyZWRUaHJlYWRzOyB9Ci0gICAgVGhyZWFkKiBtYWNoaW5lVGhyZWFkRm9yQ3VycmVudFRocmVh
ZCgpOworICAgIE1hY2hpbmVUaHJlYWQqIHRocmVhZHNMaXN0SGVhZChjb25zdCBBYnN0cmFjdExv
Y2tlciYpIGNvbnN0IHsgQVNTRVJUKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleC5pc0xvY2tlZCgp
KTsgcmV0dXJuIG1fcmVnaXN0ZXJlZFRocmVhZHM7IH0KKyAgICBNYWNoaW5lVGhyZWFkKiBtYWNo
aW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZ2F0aGVy
RnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYs
IENvZGVCbG9ja1NldCYsIEN1cnJlbnRUaHJlYWRTdGF0ZSYpOwogCi0gICAgdm9pZCB0cnlDb3B5
T3RoZXJUaHJlYWRTdGFjayhUaHJlYWQqLCB2b2lkKiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qq
KTsKKyAgICB2b2lkIHRyeUNvcHlPdGhlclRocmVhZFN0YWNrKE1hY2hpbmVUaHJlYWQqLCB2b2lk
Kiwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3QqKTsKICAgICBib29sIHRyeUNvcHlPdGhlclRocmVh
ZFN0YWNrcyhjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqLCBzaXplX3QgY2FwYWNpdHksIHNp
emVfdCopOwogCiAgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgcmVtb3ZlVGhy
ZWFkKHZvaWQqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBsYXRmb3JtVGhyZWFkPgotICAg
IHZvaWQgcmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCk7CisgICAgdm9pZCByZW1v
dmVUaHJlYWRJZkZvdW5kKFRocmVhZElkZW50aWZpZXIpOwogCiAgICAgTG9jayBtX3JlZ2lzdGVy
ZWRUaHJlYWRzTXV0ZXg7Ci0gICAgVGhyZWFkKiBtX3JlZ2lzdGVyZWRUaHJlYWRzOworICAgIE1h
Y2hpbmVUaHJlYWQqIG1fcmVnaXN0ZXJlZFRocmVhZHM7CiAgICAgV1RGOjpUaHJlYWRTcGVjaWZp
Y0tleSBtX3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRocmVhZHM7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAppbmRleCAyMDgwY2Q5MzQ1ODMzZDJkMjMyYjhhOWNkNmYz
ZGJmZWJlMDVjYjIzLi5lMGFiZjI5OGJmYmUyZWVlYzM0MjViNjYwOWNlNzIxMzNjNDFjZGQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgQXRv
bWljPElDU3RhdHMqPiBJQ1N0YXRzOjpzX2luc3RhbmNlOwogCiBJQ1N0YXRzOjpJQ1N0YXRzKCkK
IHsKLSAgICBtX3RocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAgICBtX3RocmVhZCA9IFRocmVhZDo6
Y3JlYXRlKAogICAgICAgICAiSlNDIElDU3RhdHMiLAogICAgICAgICBbdGhpc10gKCkgewogICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKQEAgLTg0LDcgKzg0LDcgQEAgSUNT
dGF0czo6fklDU3RhdHMoKQogICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKICAgICB9
CiAgICAgCi0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWQpOworICAgIG1fdGhy
ZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwogfQogCiB2b2lkIElDU3RhdHM6OmFkZChjb25zdCBJ
Q0V2ZW50JiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNT
dGF0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKaW5kZXggZTc1Y2Zk
ZjRkNGQ5ZDdkY2JmMWEzMWE5ODI5NDE5MmU1NWI5Y2ZiMC4uZWI3ZTFlOTJjZTk3ZGQxZDk1MDg5
NzI3Yzg0YTljNWVjN2Y1N2M3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JQ1N0YXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmgKQEAg
LTE3OSw3ICsxNzksNyBAQCBjbGFzcyBJQ1N0YXRzIHsKIHByaXZhdGU6CiAKICAgICBTcGVjdHJ1
bTxJQ0V2ZW50LCB1aW50NjRfdD4gbV9zcGVjdHJ1bTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1f
dGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIExvY2sgbV9sb2NrOwog
ICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICBib29sIG1fc2hvdWxkU3RvcCB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDkwOTUwYjk4NTk3ZmYzOThkNDIxM2RkZjkwOTA3
YmQzYzE3ZDI3YjkuLjE4OWU3OTViNjcwMmNjYmZhZTU0NDkxZGE0ZDM5NzAxMmFiZWJiM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0yNTQ0LDcgKzI1NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgQ29uZGl0aW9uIGRpZFN0YXJ0Q29uZGl0aW9uOwogICAgIGJvb2wgZGlkU3RhcnQgPSBmYWxz
ZTsKICAgICAKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAg
ICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgIkpTQyBB
Z2VudCIsCiAgICAgICAgIFtzb3VyY2VDb2RlLCAmZGlkU3RhcnRMb2NrLCAmZGlkU3RhcnRDb25k
aXRpb24sICZkaWRTdGFydF0gKCkgewogICAgICAgICAgICAgQ29tbWFuZExpbmUgY29tbWFuZExp
bmUoMCwgbnVsbHB0cik7CkBAIC0yNTcxLDcgKzI1NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydChFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9KTsKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkKTsKKyAgICB0aHJlYWQtPmRldGFjaCgp
OwogICAgIAogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhkaWRTdGFydExv
Y2spOwpAQCAtMzMxMSw3ICszMzExLDcgQEAgc3RhdGljIHZvaWQgc3RhcnRUaW1lb3V0VGhyZWFk
SWZOZWVkZWQoKQogICAgICAgICAgICAgZGF0YUxvZygiV0FSTklORzogdGltZW91dCBzdHJpbmcg
aXMgbWFsZm9ybWVkLCBnb3QgIiwgdGltZW91dFN0cmluZywKICAgICAgICAgICAgICAgICAiIGJ1
dCBleHBlY3RlZCBhIG51bWJlci4gTm90IHVzaW5nIGEgdGltZW91dC5cbiIpOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNyZWF0ZVRocmVhZCh0aW1lb3V0VGhyZWFkTWFpbiwgMCwgImpz
YyBUaW1lb3V0IFRocmVhZCIpOworICAgICAgICAgICAgVGhyZWFkOjpjcmVhdGUodGltZW91dFRo
cmVhZE1haW4sIDAsICJqc2MgVGltZW91dCBUaHJlYWQiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IDAxYjFmZTEyN2U4YjczMWZiNTNi
N2MyY2RiOTllZTE5ZGQ1YWRhNjguLjYzMjJlNzMzMjI5MjExNGYwZTI1NGE4ZTFlZjEzZGE1YzQx
OTUxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMTA5
LDcgKzEwOSw3IEBAIHZvaWQgSlNMb2NrOjpsb2NrKGludHB0cl90IGxvY2tDb3VudCkKICAgICAg
ICAgbV9sb2NrLmxvY2soKTsKICAgICB9CiAKLSAgICBtX293bmVyVGhyZWFkID0gY3VycmVudFRo
cmVhZCgpOworICAgIG1fb3duZXJUaHJlYWQgPSAmVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX2hhc093bmVyVGhyZWFkID0gdHJ1ZTsKICAgICBB
U1NFUlQoIW1fbG9ja0NvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgK
aW5kZXggMGMzNTg0N2U0MjNlNjRiYzcwNTAzZDVlMWQ4NWQ0ODA1MDlkYmU3NC4uMWFjYTRiOWE3
YmI0ZGNhZjA0ZGYxMjE3MTA5NzIwZWM4ZTJkNjhmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmgKQEAgLTkyLDEzICs5MiwxMyBAQCBjbGFzcyBKU0xvY2sgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNMb2NrPiB7CiAKICAgICBWTSogdm0oKSB7IHJldHVybiBt
X3ZtOyB9CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFRocmVhZElkZW50aWZpZXI+IG93bmVyVGhyZWFk
KCkgY29uc3QKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZlB0cjxUaHJlYWQ+PiBvd25lclRocmVhZCgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9oYXNPd25lclRocmVhZCkKICAgICAgICAgICAg
IHJldHVybiBtX293bmVyVGhyZWFkOwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KLSAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgeyByZXR1cm4gbV9oYXNP
d25lclRocmVhZCAmJiBtX293bmVyVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsgfQorICAgIGJv
b2wgY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB7IHJldHVybiBtX2hhc093bmVyVGhyZWFk
ICYmIG1fb3duZXJUaHJlYWQtPmlkKCkgPT0gY3VycmVudFRocmVhZCgpOyB9CiAKICAgICB2b2lk
IHdpbGxEZXN0cm95Vk0oVk0qKTsKIApAQCAtMTM1LDcgKzEzNSw3IEBAIGNsYXNzIEpTTG9jayA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0xvY2s+IHsKICAgICAvLyBkaWZmZXJlbnQg
dGhyZWFkLCBhbmQgYW4gb3B0aW9uYWwgaXMgdnVsbmVyYWJsZSB0byByYWNlcy4KICAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTA0MiNjNgogICAg
IGJvb2wgbV9oYXNPd25lclRocmVhZCB7IGZhbHNlIH07Ci0gICAgVGhyZWFkSWRlbnRpZmllciBt
X293bmVyVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fb3duZXJUaHJlYWQ7CiAgICAgaW50
cHRyX3QgbV9sb2NrQ291bnQ7CiAgICAgdW5zaWduZWQgbV9sb2NrRHJvcERlcHRoOwogICAgIGJv
b2wgbV9zaG91bGRSZWxlYXNlSGVhcEFjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1BsYXRmb3JtVGhyZWFkLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9QbGF0Zm9ybVRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
NDE5N2U3M2M4NDEyYTgwZjM2MTQwYzdhZDg2ZWM3NjRmYWMyOTM3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1BsYXRmb3JtVGhyZWFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBPUyhEQVJXSU4pIHx8IE9TKFVOSVgpCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlm
Ci0KLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhXSU5ET1dTKSAmJiAhT1MoREFSV0lOKQotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8bWFj
aC90aHJlYWRfYWN0Lmg+Ci0jZWxpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4K
LSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIE9TKERBUldJTikKLXR5cGVkZWYgbWFj
aF9wb3J0X3QgUGxhdGZvcm1UaHJlYWQ7Ci0jZWxpZiBPUyhXSU5ET1dTKQotdHlwZWRlZiBEV09S
RCBQbGF0Zm9ybVRocmVhZDsKLSNlbGlmIFVTRShQVEhSRUFEUykKLXR5cGVkZWYgcHRocmVhZF90
IFBsYXRmb3JtVGhyZWFkOwotI2VuZGlmIC8vIE9TKERBUldJTikKLSAgICAKLWlubGluZSBQbGF0
Zm9ybVRocmVhZCBjdXJyZW50UGxhdGZvcm1UaHJlYWQoKQotewotI2lmIE9TKERBUldJTikKLSAg
ICByZXR1cm4gcHRocmVhZF9tYWNoX3RocmVhZF9ucChwdGhyZWFkX3NlbGYoKSk7Ci0jZWxpZiBP
UyhXSU5ET1dTKQotICAgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKLSNlbGlmIFVTRShQ
VEhSRUFEUykKLSAgICByZXR1cm4gcHRocmVhZF9zZWxmKCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuY3BwCmluZGV4IDdkMzdhNjc0YWJhMDk0NzIzMTg0OTNiMzNiYzg5ZmUzZmFk
OThhOWQuLmE4YjgxMTExYzA1YzE2OTY1ZTk4MzNhODQ1NmYyOTlhMDZjODc3MDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCkBA
IC0xNjcsNyArMTY3LDcgQEAgY2xhc3MgRnJhbWVXYWxrZXIgewogICAgIGJvb2wgaXNWYWxpZEZy
YW1lUG9pbnRlcih2b2lkKiBleGVjKQogICAgIHsKICAgICAgICAgdWludDhfdCogZnBDYXN0ID0g
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPihleGVjKTsKLSAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFk
czo6VGhyZWFkKiB0aHJlYWQgPSBtX3ZtLmhlYXAubWFjaGluZVRocmVhZHMoKS50aHJlYWRzTGlz
dEhlYWQobV9tYWNoaW5lVGhyZWFkc0xvY2tlcik7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5u
ZXh0KSB7CisgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQqIHRocmVh
ZCA9IG1fdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChtX21hY2hpbmVU
aHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAgICAgICAg
ICAgIHVpbnQ4X3QqIHN0YWNrQmFzZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPnN0
YWNrQmFzZSgpKTsKICAgICAgICAgICAgIHVpbnQ4X3QqIHN0YWNrTGltaXQgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4odGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YWNrQmFzZSk7CkBAIC0yNzksNyArMjc5LDYgQEAgU2FtcGxpbmdQcm9maWxlcjo6U2Ft
cGxpbmdQcm9maWxlcihWTSYgdm0sIFJlZlB0cjxTdG9wd2F0Y2g+JiYgc3RvcHdhdGNoKQogICAg
ICwgbV93ZWFrUmFuZG9tKCkKICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkK
ICAgICAsIG1fdGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyhPcHRpb25z
OjpzYW1wbGVJbnRlcnZhbCgpKSkKLSAgICAsIG1fdGhyZWFkSWRlbnRpZmllcigwKQogICAgICwg
bV9qc2NFeGVjdXRpb25UaHJlYWQobnVsbHB0cikKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCiAg
ICAgLCBtX2lzU2h1dERvd24oZmFsc2UpCkBAIC0zMDAsMTEgKzI5OSwxMSBAQCB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IEFic3RyYWN0TG9ja2Vy
JikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwogCi0gICAgaWYgKG1fdGhyZWFk
SWRlbnRpZmllcikKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBwcm9maWxlciA9IHRoaXM7Ci0gICAgbV90aHJlYWRJZGVu
dGlmaWVyID0gY3JlYXRlVGhyZWFkKCJqc2Muc2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIiwgW3By
b2ZpbGVyXSB7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXBy
b2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0gewogICAgICAgICBwcm9maWxlci0+dGltZXJMb29w
KCk7CiAgICAgfSk7CiB9CkBAIC0zNDQsNyArMzQzLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
Ojp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b24KICAgICAgICAgTG9ja0hvbGRlciBjb2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVC
bG9ja1NldCgpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9j
YXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkpOwog
Ci0gICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5k
KCk7CisgICAgICAgIGF1dG8gZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNw
ZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CiAgICAgICAgICAgICAvLyBXaGlsZSB0
aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdlIGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxv
YyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCiAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0
aGUgbWFsbG9jIGxvY2suCkBAIC0zNTQsMTMgKzM1MywxMiBAQCB2b2lkIFNhbXBsaW5nUHJvZmls
ZXI6OnRha2VTYW1wbGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbgogICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKICAgICAgICAg
ICAgIHZvaWQqIGxsaW50UEM7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWFjaGlu
ZVRocmVhZHM6OlRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBN
YWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzIHJlZ2lzdGVyczsKICAgICAg
ICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+Z2V0UmVnaXN0ZXJzKHJlZ2lzdGVycyk7
CiAgICAgICAgICAgICAgICAgbWFjaGluZUZyYW1lID0gcmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigp
OwogICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PEV4ZWNTdGF0ZSo+KG1h
Y2hpbmVGcmFtZSk7CiAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gcmVnaXN0ZXJzLmluc3Ry
dWN0aW9uUG9pbnRlcigpOwogICAgICAgICAgICAgICAgIGxsaW50UEMgPSByZWdpc3RlcnMubGxp
bnRQQygpOwotICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVnaXN0
ZXJzKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBGSVhNRTogTGV0
cyBoYXZlIGEgd2F5IG9mIGRldGVjdGluZyB3aGVuIHdlJ3JlIHBhcnNpbmcgY29kZS4KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaApp
bmRleCBiNDRhM2JhNDdmOWU2NzY4YWQ0MzdiYjE4ZTBhOGFiYzc5NWJkNmNmLi43OGI5YmViMjk2
Zjc0ZTc5YzZlZGEwZDQ5ZGVjNzRkNDdjYmY0OGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCkBAIC0xOTUsOCArMTk1LDggQEAgY2xh
c3MgU2FtcGxpbmdQcm9maWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1wbGlu
Z1Byb2ZpbGVyPiB7CiAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBtX3RpbWluZ0ludGVy
dmFsOwogICAgIGRvdWJsZSBtX2xhc3RUaW1lOwogICAgIExvY2sgbV9sb2NrOwotICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyOwotICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJl
YWQqIG1fanNjRXhlY3V0aW9uVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwor
ICAgIE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsK
ICAgICBib29sIG1faXNQYXVzZWQ7CiAgICAgYm9vbCBtX2lzU2h1dERvd247CiAgICAgYm9vbCBt
X25lZWRzUmVwb3J0QXRFeGl0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CmluZGV4IDk5YTI2ZmNhMWMyMWYzZDA0NDA0NzNiNDQyZTg5ZGM5YTQ5NWY0NmUuLmU5N2MzMTg1
ZmM2ZjJjNjI4NGFlNzFiZWI5MDVjMDJlMzQ5YTc0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaApAQCAtNjU5LDcgKzY1OSw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGxvZ0V2ZW50KENvZGVCbG9jayosIGNvbnN0
IGNoYXIqIHN1bW1hcnksIGNvbnN0IEZ1bmMmIGZ1bmMpOwogCi0gICAgc3RkOjpvcHRpb25hbDxU
aHJlYWRJZGVudGlmaWVyPiBvd25lclRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBpTG9jay0+
b3duZXJUaHJlYWQoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8UmVmUHRyPFRocmVhZD4+IG93bmVy
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hcGlMb2NrLT5vd25lclRocmVhZCgpOyB9CiAKICAg
ICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCA1Mjc2M2Y4NTNkNDYzYjcyZjMzZTQ2NGI3
YjVhNTlkMDExOTM4ZjY5Li4xMTYzZmZiOWViMmU3YTIwMjJhNjAzZDA3ODdlNTNmZTI1M2MyZGNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtMTEwLDcg
KzExMCw3IEBAIHN0YXRpYyBFeHBlY3RlZDxzdGQ6OnBhaXI8Vk0qLCBTdGFja0JvdW5kcz4sIFZN
VHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFjCiAgICAgICAgICAgICByZXR1cm4gVk1J
bnNwZWN0b3I6OkZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBUcnkgbmV4dCBWTS4KICAgICAg
ICAgfQogCi0gICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6OlRocmVhZCogdGhyZWFkID0gbWFj
aGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6
TWFjaGluZVRocmVhZCogdGhyZWFkID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1h
Y2hpbmVUaHJlYWRzTG9ja2VyKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZC0+c3RhY2tCYXNlKCkpOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodGhyZWFkLT5zdGFja0VuZCgpKTsKICAgICAgICAgICAgIGlmIChz
dGFja1BvaW50ZXIgPD0gdGhyZWFkLT5zdGFja0Jhc2UoKSAmJiBzdGFja1BvaW50ZXIgPj0gdGhy
ZWFkLT5zdGFja0VuZCgpKSB7CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBWTVRyYXBzOjpTaWdu
YWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0gKm1fdm07CiAgICAgICAgICAg
ICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOwogICAgICAgICAg
ICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzaWduYWxUaHJl
YWQob3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLCBTSUdVU1IxKTsKKyAgICAgICAgICAgICAg
ICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChTSUdVU1IxKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDkzLDcgKzQ5Myw3IEBAIHZvaWQg
Vk1UcmFwczo6ZmlyZVRyYXAoVk1UcmFwczo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKICAgICAgICAg
Ly8gZmlyZVRyYXAoKSBkb2VzIG5vdCBibG9jay4KICAgICAgICAgUmVmUHRyPFNpZ25hbFNlbmRl
cj4gc2VuZGVyID0gYWRvcHRSZWYobmV3IFNpZ25hbFNlbmRlcih2bSgpLCBldmVudFR5cGUpKTsK
ICAgICAgICAgYWRkU2lnbmFsU2VuZGVyKHNlbmRlci5nZXQoKSk7Ci0gICAgICAgIGNyZWF0ZVRo
cmVhZCgianNjLnZtdHJhcHMuc2lnbmFsbGluZy50aHJlYWQiLCBbc2VuZGVyXSB7CisgICAgICAg
IFRocmVhZDo6Y3JlYXRlKCJqc2Mudm10cmFwcy5zaWduYWxsaW5nLnRocmVhZCIsIFtzZW5kZXJd
IHsKICAgICAgICAgICAgIHNlbmRlci0+c2VuZCgpOwogICAgICAgICB9KTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3Yzc3NGQ5N2RkNDE4NzJh
MjBmMzk5Yzk2YTM1OTFkN2E0Y2FlMTQ5Li44YmNmZWJjNDcwMTQyYzE4M2VkNTE1MmJiZDBmMGZi
NDBhNmNmMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTMyNyw4ICszMjcsNyBAQAogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3
MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovOyB9OwogCQlBOEE0NzQ0NjE1
MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5n
LmggKi87IH07CiAJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbklu
dm9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4QTQ3MzJGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCAq
LzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuY3BwICovOyB9OwotCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRp
ZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDczMzExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaCAqLzsgfTsKKwkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhv
bGRlclB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5j
cHAgKi87IH07CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJCUE4QTQ3NDRCMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLzsg
fTsKIAkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzM1MTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi87IH07CkBAIC0zNzQsNiAr
MzczLDkgQEAKIAkJREU1QTA5RkMxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkIx
QkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovOyB9OwogCQlFMTU1NTZGNTE4
QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4
RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgKi87IH07CiAJCUUxNTU1NkY2MThBMEND
MTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGNDE4QTBDQzE4MDA2RjQ4RkIgLyog
Q3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oICovOyB9OworCQlFMzIwMEFCNzFFOUE1MzZEMDAzQjU5
RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzMjAwQUI0MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lz
dGVycy5oICovOyB9OworCQlFMzIwMEFCODFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjAw
QUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovOyB9OworCQlFMzIwMEFC
OTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyogVGhy
ZWFkSG9sZGVyLmggKi87IH07CiAJCUU0M0E0Njk1MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBNDY5
MDFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5oICovOyB9OwogCQlFNDNBNDY5NjFFMjI4Qjkx
MDAyNzZCMDUgLyogRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQzQTQ2OTExRTIyOEI5MTAwMjc2QjA1IC8qIEVuY29kZXIuaCAqLzsgfTsK
IAkJRTQzQTQ2OTcxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTQ2OTIxRTIyOEI5MTAwMjc2QjA1
IC8qIERlY29kZXIuY3BwICovOyB9OwpAQCAtNzMxLDggKzczMyw3IEBACiAJCUE4QTQ3MzJEMTUx
QTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QThBNDczMkUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQThBNDczMkYxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRGdW5jdGlvbkludm9jYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMzAxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJl
YWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZEhvbGRl
clB0aHJlYWRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUaHJlYWRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmdQcmltaXRpdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzcsNiArNzc4LDkgQEAKIAkJREU1QTA5RkIxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21tb25DcnlwdG9TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTE1NTU2RjMxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvZ3JhcGhpY1V0aWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNTU1NkY0MThBMENDMTgw
MDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAv
KiBUaHJlYWRIb2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGhyZWFkSG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyMDBBQjYx
RTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUaHJlYWRIb2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQzQTQ2OTAxRTIyOEI5MTAwMjc2QjA1IC8qIERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDNBNDY5MTFFMjI4QjkxMDAyNzZCMDUgLyogRW5jb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFbmNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTEwMCw2ICsxMTA0LDcgQEAKIAkJCQkwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXNzUmVm
UHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8s
CisJCQkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8s
CiAJCQkJRENFRTIxRkUxQ0VBNzU1MTAwMEMyMzk2IC8qIFBsYXRmb3JtVXNlclByZWZlcnJlZExh
bmd1YWdlcy5oICovLAogCQkJCURDRUUyMUZGMUNFQTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXNNYWMubW0gKi8sCiAJCQkJMEZGODYwOTQxQkNDQkQ3NDAwNDUx
MjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8sCkBAIC0xMTY3LDggKzExNzIsOSBAQAogCQkJ
CTU1OTdGODJDMUQ5NEI5OTcwMDY2QkMyMSAvKiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmggKi8s
CiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLywKIAkJ
CQlBOEE0NzMyRjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgg
Ki8sCi0JCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuY3BwICovLAotCQkJCUE4QTQ3MzMxMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJ
ZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggKi8sCisJCQkJRTMyMDBBQjUxRTlBNTM2RDAwM0I1OUQy
IC8qIFRocmVhZEhvbGRlci5jcHAgKi8sCisJCQkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8q
IFRocmVhZEhvbGRlci5oICovLAorCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZy5oICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmlt
aXRpdmVzLmggKi8sCkBAIC0xNTU2LDYgKzE1NjIsNyBAQAogCQkJCUE4QTQ3NDBDMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODc2REJEODE1MTgx
NkU1MDBEQURCOTUgLyogUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjAyMUNF
QTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUzMjAwQUI5MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29t
cGFyaXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzNjMxNjVEQkE3MzAwNUFEMzg3IC8q
IFByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0NDg4MzE2RkU5RkUxMDA4NDRC
RTkgLyogUHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLywKQEAgLTE2MjIsNyArMTYyOSw2IEBACiAJ
CQkJMUNDREIxNEYxRTU2Njg5ODAwNkM3M0MwIC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBvc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQ0OTE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRT
YWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjQ4LDYgKzE2NTQsNyBAQAogCQkJ
CUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNjZCMjkzMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUUzMjAwQUI3MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBp
biBIZWFkZXJzICovLAogCQkJCTFGQTQ3QzhCMTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhy
ZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29y
ZExvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMTgzMCw2ICsxODM3LDcgQEAKIAkJCQlBNzQ4NzQ1
MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRTMyMDBBQjgxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3Rh
Y2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2
MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xODQ3LDcgKzE4NTUs
NyBAQAogCQkJCTcwQTk5M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM3RjFEMzA3OERBMDBGNUZBMTYgLyogVGV4dEJyZWFr
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOTYxRDMwODAwQTAwRjVGQTE2
IC8qIFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkSG9sZGVyUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Db25k
aXRpb25TcGVlZFRlc3QuY3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVk
VGVzdC5jcHAKaW5kZXggY2IxZDEwMWU4NTY1MjllOGFhZWE2YWJmNjBlYzM4ZWEwYjhkZGU3Mi4u
NGMzYmQ1NGUzOTI4NzVjNjU1NzY2MjcyMGRiOGMwYjk5YWJjM2I3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKKysrIGIvU291cmNlL1dU
Ri9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5jcHAKQEAgLTc5LDE0ICs3OSwxNCBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgQ29uZGl0aW9uVHlwZSBlbXB0eUNvbmRpdGlvbjsKICAgICBDb25k
aXRpb25UeXBlIGZ1bGxDb25kaXRpb247CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4g
Y29uc3VtZXJUaHJlYWRzOwotICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBwcm9kdWNlclRo
cmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBjb25zdW1lclRocmVhZHM7CisgICAg
VmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBwcm9kdWNlclRocmVhZHM7CiAKICAgICBWZWN0b3I8dW5z
aWduZWQ+IHJlY2VpdmVkOwogICAgIExvY2tUeXBlIHJlY2VpdmVkTG9jazsKICAgICAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1Db25zdW1lcnM7IGktLTspIHsKLSAgICAgICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICBSZWZQdHI8
VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAgICAgICJDb25zdW1lciB0
aHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7
CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbXB0eUNvbmRpdGlvbiwgbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRD
b250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUu
c2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBw
cmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1
ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc2hvdWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgpKQpAQCAtMTE0LDExICsxMTQs
MTEgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhy
ZWFkSWRlbnRpZmllcik7CisgICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkKTsK
ICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAor
ICAgICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKICAgICAgICAg
ICAgICJQcm9kdWNlciBUaHJlYWQiLAogICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXNQZXJQcm9kdWNlcjsgKytp
KSB7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bGxDb25kaXRpb24sIGxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91
bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVl
dWUuc2l6ZSgpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBwcm9kdWN0aW9u
IHByZWRpY2F0ZSB3aXRoIHNob3VsZENvbnRpbnVlID0gIiwgc2hvdWxkQ29udGludWUsICIsIHF1
ZXVlLnNpemUoKSA9PSAiLCBxdWV1ZS5zaXplKCksICJcbiIpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLnNpemUoKSA8IG1heFF1ZXVlU2l6ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG11c3RO
b3RpZnkgPSBxdWV1ZS5pc0VtcHR5KCk7CkBAIC0xMzgsMTEgKzEzOCwxMSBAQCB2b2lkIHJ1blRl
c3QoCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShlbXB0eUNvbmRpdGlvbiwgbXVzdE5vdGlm
eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgIHByb2R1Y2Vy
VGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgIHByb2R1Y2VyVGhyZWFk
cy5hcHBlbmQodGhyZWFkKTsKICAgICB9CiAKLSAgICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKLSAgICAgICAgd2FpdEZvclRocmVhZENv
bXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9yIChSZWZQdHI8VGhyZWFkPiYgdGhy
ZWFkIDogcHJvZHVjZXJUaHJlYWRzKQorICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9u
KCk7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrVHlwZT4gbG9ja2VyKGxv
Y2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3Qu
Y3BwIGIvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCmluZGV4IGYw
ODMyMWMwZjY4ODM2NTM1ZDgzY2I2YmM3NTExODQ4YmI1MmQ5NGYuLjY4Y2U4NGM0OGEzZmQ0Yzhm
ODM1YmEwOWFhNjFhNTA3MjM3Njc5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvYmVuY2htYXJr
cy9Mb2NrRmFpcm5lc3NUZXN0LmNwcAorKysgYi9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja0Zh
aXJuZXNzVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IEJlbmNobWFyayB7CiAgICAg
ewogICAgICAgICBMb2NrVHlwZSBsb2NrOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWdu
ZWRbXT4gY291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZFtdPihudW1UaHJlYWRzKTsK
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0
ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRzKTsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlZlB0cjxUaHJlYWQ+W10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlZlB0cjxUaHJlYWQ+W10+KG51bVRocmVhZHMpOwogICAgIAogICAgICAgICB2b2xhdGls
ZSBib29sIGtlZXBHb2luZyA9IHRydWU7CiAgICAgCkBAIC03MCw3ICs3MCw3IEBAIHN0cnVjdCBC
ZW5jaG1hcmsgewogICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVt
VGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRl
eF0gPSAwOwotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQo
CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRlKAogICAg
ICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKICAgICAgICAgICAgICAgICBbJiwgdGhy
ZWFkSW5kZXhdICgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaWNyb3NlY29uZHNJbkNy
aXRpY2FsU2VjdGlvbikgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0cnVjdCBCZW5jaG1hcmsgewog
ICAgIAogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVh
ZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgICAgICB0aHJl
YWRzW3RocmVhZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKICAgICB9CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAgYi9Tb3VyY2Uv
V1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKaW5kZXggNTQ1ZDJlMGIwNDg4ZjMzODk0
YTU5Njg4ZmQ5MWIwZDNhMzg3Y2NhMi4uODJkMzlmODdjNmM3MDZjMTljZTRmMjk0YzliNjFiMmFi
YjhhNTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcApAQCAtNzcs
NyArNzcsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxXaXRoUGFkZGluZzxMb2NrVHlwZT5bXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPFdp
dGhQYWRkaW5nPExvY2tUeXBlPltdPihudW1UaHJlYWRHcm91cHMpOwogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2l0aFBhZGRpbmc8ZG91YmxlPltdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8
V2l0aFBhZGRpbmc8ZG91YmxlPltdPihudW1UaHJlYWRHcm91cHMpOwotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxU
aHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZWZwdHI8VGhyZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJl
YWRzUGVyR3JvdXApOwogCiAgICAgICAgIHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsK
IApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAgICAgIHdvcmRz
W3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlID0gMDsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAg
ICAgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3Jv
dXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgdGhyZWFk
c1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0g
VGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwK
ICAgICAgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzLCAm
a2VlcEdvaW5nLCAmbnVtSXRlcmF0aW9uc0xvY2ssICZudW1JdGVyYXRpb25zXSAoKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxXb3JkID0gMDsKQEAgLTEyMSw3ICsxMjEs
NyBAQCBzdHJ1Y3QgQmVuY2htYXJrIHsKICAgICAgICAga2VlcEdvaW5nID0gZmFsc2U7CiAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBu
dW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQotICAgICAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgICAgICAgICAgdGhyZWFk
c1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0aW9uKCk7CiAKICAgICAgICAgZG91YmxlIGFm
dGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwIGIvU291cmNlL1dURi93dGYvQXV0b21h
dGljVGhyZWFkLmNwcAppbmRleCAzODdjNmUyNWQ3MDYyOWE4M2FhNjFjZDZhNmE4NzQ5ZWEwN2M3
ZjAwLi40MTBiZmI1NzQ0MjVhNTdjNWJkZmJkMGU3OWZiOTE5YjE3ZGFkMjg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIEF1dG9tYXRpY1Ro
cmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIAogICAgIG1faGFzVW5kZXJs
eWluZ1RocmVhZCA9IHRydWU7CiAgICAgCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBj
cmVhdGVUaHJlYWQoCisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
CiAgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCiAgICAgICAgIFs9XSAoKSB7CiAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIEF1dG9tYXRpY1Ro
cmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51ZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworICAgIHRocmVhZC0+ZGV0
YWNoKCk7CiB9CiAKIHZvaWQgQXV0b21hdGljVGhyZWFkOjp0aHJlYWREaWRTdGFydCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CmluZGV4IGEzNDE5MTE5Y2E3MWVkZGY5NTUzY2IzMGE3NmEyYTg1NWZlYmEy
YzcuLjFiYWUzYmI5MGIzNzEyMGE1MWM0ODk5ZDk4N2Q4YTM0MTI1NDBkNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CkBAIC05NSw2ICs5NSw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIFBhcmtpbmdM
b3QuaAogICAgIFBhc3NSZWZQdHIuaAogICAgIFBsYXRmb3JtLmgKKyAgICBQbGF0Zm9ybVJlZ2lz
dGVycy5oCiAgICAgUHJpbnRTdHJlYW0uaAogICAgIFByb2Nlc3NJRC5oCiAgICAgUkFNU2l6ZS5o
CkBAIC0xMjgsNyArMTI5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU3RyaW5nRXh0cmFzLmgK
ICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCi0gICAgVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCisgICAgVGhyZWFkSG9sZGVyLmNwcAogICAgIFRocmVh
ZFNhZmVSZWZDb3VudGVkLmgKICAgICBUaHJlYWRTcGVjaWZpYy5oCiAgICAgVGhyZWFkaW5nLmgK
QEAgLTMyOSwxNiArMzMwLDE0IEBAIGxpc3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKIGlmIChXSU4z
MikKICAgICBsaXN0KEFQUEVORCBXVEZfU09VUkNFUwogICAgICAgICBPU0FsbG9jYXRvcldpbi5j
cHAKKyAgICAgICAgVGhyZWFkSG9sZGVyV2luLmNwcAogICAgICAgICBUaHJlYWRTcGVjaWZpY1dp
bi5jcHAKICAgICAgICAgVGhyZWFkaW5nV2luLmNwcAogICAgICkKIGVsc2UgKCkKLSAgICBsaXN0
KEFQUEVORCBXVEZfSEVBREVSUwotICAgICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmgKLSAgICApCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgT1NBbGxvY2F0
b3JQb3NpeC5jcHAKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAKKyAg
ICAgICAgVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwCiAgICAgICAgIFRocmVhZGluZ1B0aHJlYWRz
LmNwcAogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhy
ZWFkLmggYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggMjVkOGY3NjZkY2ZiODc5
YTFkNzY4M2NlNTUwOGRkOGQ3ZjFkNzdhZi4uMGU3OGU4ZTUxYWJlOGQ5NTU0NzJjNzlkZDM0Njky
ZjE1NDZkYjFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL01haW5UaHJlYWQuaApAQCAtMzQsMTMgKzM0LDEyIEBACiAjaW5jbHVk
ZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IAogY2xhc3MgUHJpbnRTdHJlYW07CiAKLXR5cGVkZWYgdWludDMyX3QgVGhyZWFkSWRlbnRpZmll
cjsKLQogLy8gTXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9y
eVByZXNzdXJlSGFuZGxlci5oCmluZGV4IGRmZGRmMGE5NTU1MmRiM2UyYWVjZmVmNGVjMTZlZmI1
YzZlNmM3YmQuLjQxMjhmNWNkNzFhN2RiMmY0ZmQ3MDMyOTUzZjBjM2YxZjUwMGQxMzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oCkBAIC0xNzMsNyArMTczLDcgQEAgY2xh
c3MgTWVtb3J5UHJlc3N1cmVIYW5kbGVyIHsKICNpZiBVU0UoR0xJQikKICAgICAgICAgR1JlZlB0
cjxHU291cmNlPiBtX3NvdXJjZTsKICNlbHNlCi0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJRDsKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAjZW5kaWYKICAgICB9
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmlj
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCmluZGV4IDQwMjNm
NDNlNmYyMGEzOGUxMDNlN2M5YTJlNGYwZjdlMDYxMDU3MTQuLmNjZTExMDZkNDY3YjcyMDgzYzFl
ZGIyMTNhZDU5YzQ0MDMxN2E0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVs
Sm9ic0dlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9ic0dlbmVyaWMu
Y3BwCkBAIC05MywxNCArOTMsMTQgQEAgYm9vbCBQYXJhbGxlbEVudmlyb25tZW50OjpUaHJlYWRQ
cml2YXRlOjp0cnlMb2NrRm9yKFBhcmFsbGVsRW52aXJvbm1lbnQqIHBhcmVudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbV90aHJlYWRJRCkKLSAgICAgICAgbV90
aHJlYWRJRCA9IGNyZWF0ZVRocmVhZCgmUGFyYWxsZWxFbnZpcm9ubWVudDo6VGhyZWFkUHJpdmF0
ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2VyIik7CisgICAgaWYgKCFtX3Ro
cmVhZCkKKyAgICAgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgmUGFyYWxsZWxFbnZpcm9u
bWVudDo6VGhyZWFkUHJpdmF0ZTo6d29ya2VyVGhyZWFkLCB0aGlzLCAiUGFyYWxsZWwgd29ya2Vy
Iik7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1f
cGFyZW50ID0gcGFyZW50OwogCiAgICAgbV9tdXRleC51bmxvY2soKTsKLSAgICByZXR1cm4gbV90
aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgUGFyYWxsZWxFbnZpcm9u
bWVudDo6VGhyZWFkUHJpdmF0ZTo6ZXhlY3V0ZShUaHJlYWRGdW5jdGlvbiB0aHJlYWRGdW5jdGlv
biwgdm9pZCogcGFyYW1ldGVycykKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFBhcmFsbGVsRW52
aXJvbm1lbnQ6OlRocmVhZFByaXZhdGU6OndvcmtlclRocmVhZCh2b2lkKiB0aHJlYWREYXRhKQog
ICAgIFRocmVhZFByaXZhdGUqIHNoYXJlZFRocmVhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFk
UHJpdmF0ZSo+KHRocmVhZERhdGEpOwogICAgIExvY2tIb2xkZXIgbG9jayhzaGFyZWRUaHJlYWQt
Pm1fbXV0ZXgpOwogCi0gICAgd2hpbGUgKHNoYXJlZFRocmVhZC0+bV90aHJlYWRJRCkgeworICAg
IHdoaWxlIChzaGFyZWRUaHJlYWQtPm1fdGhyZWFkKSB7CiAgICAgICAgIGlmIChzaGFyZWRUaHJl
YWQtPm1fcnVubmluZykgewogICAgICAgICAgICAgKCpzaGFyZWRUaHJlYWQtPm1fdGhyZWFkRnVu
Y3Rpb24pKHNoYXJlZFRocmVhZC0+bV9wYXJhbWV0ZXJzKTsKICAgICAgICAgICAgIHNoYXJlZFRo
cmVhZC0+bV9ydW5uaW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEpvYnNHZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEpvYnNHZW5lcmljLmgK
aW5kZXggNDU4NDA3YzRjYjRhM2Y5OTVjOTBjNTU1NjI3YzFjYmQyMmI0MWI1Yy4uYTIwY2FiNjFl
ZTc5Y2VhYmQ1NGU2Mjc3Y2ViNTdkZjY4ZTY2YTkwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGFyYWxsZWxKb2JzR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSm9i
c0dlbmVyaWMuaApAQCAtNTMsMTMgKzUzLDYgQEAgY2xhc3MgUGFyYWxsZWxFbnZpcm9ubWVudCB7
CiAKICAgICBjbGFzcyBUaHJlYWRQcml2YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8VGhyZWFkUHJp
dmF0ZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgVGhyZWFkUHJpdmF0ZSgpCi0gICAgICAgICAg
ICA6IG1fdGhyZWFkSUQoMCkKLSAgICAgICAgICAgICwgbV9ydW5uaW5nKGZhbHNlKQotICAgICAg
ICAgICAgLCBtX3BhcmVudCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICBib29s
IHRyeUxvY2tGb3IoUGFyYWxsZWxFbnZpcm9ubWVudCopOwogCiAgICAgICAgIHZvaWQgZXhlY3V0
ZShUaHJlYWRGdW5jdGlvbiwgdm9pZCopOwpAQCAtNzQsOSArNjcsOSBAQCBjbGFzcyBQYXJhbGxl
bEVudmlyb25tZW50IHsKICAgICAgICAgc3RhdGljIHZvaWQgd29ya2VyVGhyZWFkKHZvaWQqKTsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKLSAg
ICAgICAgYm9vbCBtX3J1bm5pbmc7Ci0gICAgICAgIFBhcmFsbGVsRW52aXJvbm1lbnQqIG1fcGFy
ZW50OworICAgICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKKyAgICAgICAgYm9vbCBtX3J1
bm5pbmcgeyBmYWxzZSB9OworICAgICAgICBQYXJhbGxlbEVudmlyb25tZW50KiBtX3BhcmVudCB7
IG51bGxwdHIgfTsKIAogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAgICAgICAgQ29u
ZGl0aW9uIG1fdGhyZWFkQ29uZGl0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFy
a2luZ0xvdC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAppbmRleCBlNmM2Nzhi
ZWZjMGYxOTBhMjIzZTlhZGRiMmNjNTgxMGI1NmUxYzE0Li5jYzFhMjFiOWVhNWNjY2M2ZjFhY2U0
Yzk3NDk4OTliYmRhNWQ3ZTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcApAQCAtNTIsNyArNTIsNyBA
QCBzdHJ1Y3QgVGhyZWFkRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRE
YXRhPiB7CiAgICAgVGhyZWFkRGF0YSgpOwogICAgIH5UaHJlYWREYXRhKCk7CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkOwog
ICAgIAogICAgIE11dGV4IHBhcmtpbmdMb2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBwYXJraW5n
Q29uZGl0aW9uOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1
bnNpZ25lZCBudW1UaHJlYWRzKQogfQogCiBUaHJlYWREYXRhOjpUaHJlYWREYXRhKCkKLSAgICA6
IHRocmVhZElkZW50aWZpZXIoY3VycmVudFRocmVhZCgpKQorICAgIDogdGhyZWFkKFRocmVhZDo6
Y3VycmVudCgpKQogewogICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOwogICAgIGZvciAo
OzspIHsKQEAgLTc5Myw3ICs3OTMsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5nTG90Ojp1
bnBhcmtBbGwoY29uc3Qgdm9pZCogYWRkcmVzcykKICAgICB1bnBhcmtDb3VudChhZGRyZXNzLCBV
SU5UX01BWCk7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2hJbXBs
KGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4m
IGNhbGxiYWNrKQorTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29u
c3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkJiwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCiB7
CiAgICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsK
IApAQCAtODAzLDcgKzgwMyw3IEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OmZvckVh
Y2hJbXBsKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFRocmVhZElkZW50aWZpCiAgICAgICAgIGlm
ICghYnVja2V0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoVGhyZWFkRGF0
YSogY3VycmVudFRocmVhZERhdGEgPSBidWNrZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERh
dGE7IGN1cnJlbnRUaHJlYWREYXRhID0gY3VycmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQot
ICAgICAgICAgICAgY2FsbGJhY2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIs
IGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJl
bnRUaHJlYWREYXRhLT50aHJlYWQuZ2V0KCksIGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNzKTsK
ICAgICB9CiAgICAgCiAgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmggYi9Tb3VyY2UvV1RGL3d0Zi9QYXJr
aW5nTG90LmgKaW5kZXggN2Q1ZmIxN2VmYTAyYWI3NmIxMjhlYWY1OTk4MTM4MDEwMGJhYmQ5Ni4u
YjZkODgzMGQxOWM3YjdmZDRjYzZhY2FlMzYyYWVhM2I5NDNhOWQ1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3Qu
aApAQCAtMTU4LDcgKzE1OCw3IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CiAgICAgc3RhdGljIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQog
ICAgIHsKLSAgICAgICAgZm9yRWFjaEltcGwoc2NvcGVkTGFtYmRhUmVmPHZvaWQoVGhyZWFkSWRl
bnRpZmllciwgY29uc3Qgdm9pZCopPihmdW5jKSk7CisgICAgICAgIGZvckVhY2hJbXBsKHNjb3Bl
ZExhbWJkYVJlZjx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4oZnVuYykpOwogICAgIH0KIAog
cHJpdmF0ZToKQEAgLTE3MSw3ICsxNzEsNyBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qg
dm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+
JiBjYWxsYmFjayk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFj
aEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9p
ZCopPiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoSW1wbChj
b25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+Jik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVn
aXN0ZXJzLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNjZGFkZjk3NDNlMmVjY2NiODQ4NDNiMTRhZmVhNzNmZDhhNjcxN2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09P
R0xFLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBPUyhEQVJXSU4p
CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZWxpZiBPUyhXSU5ET1dTKQorI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8dWNvbnRleHQuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV1RGIHsKKworI2lmIE9TKERBUldJTikKKworI2lmIENQVShYODYpCit0eXBlZGVm
IGkzODZfdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoWDg2XzY0
KQordHlwZWRlZiB4ODZfdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKKyNlbGlm
IENQVShQUEMpCit0eXBlZGVmIHBwY190aHJlYWRfc3RhdGVfdCBQbGF0Zm9ybVJlZ2lzdGVyczsK
KyNlbGlmIENQVShQUEM2NCkKK3R5cGVkZWYgcHBjX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1S
ZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNKQordHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlX3QgUGxh
dGZvcm1SZWdpc3RlcnM7CisjZWxpZiBDUFUoQVJNNjQpCit0eXBlZGVmIGFybV90aHJlYWRfc3Rh
dGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVj
dHVyZQorI2VuZGlmCisKKyNlbGlmIE9TKFdJTkRPV1MpCisKK3VzaW5nIFBsYXRmb3JtUmVnaXN0
ZXJzID0gQ09OVEVYVDsKKworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19f
KSkgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkg
fHwgQ1BVKE1JUFMpKQorCit1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IG1jb250ZXh0X3Q7CisK
KyNlbHNlCisKK3N0cnVjdCBQbGF0Zm9ybVJlZ2lzdGVycyB7CisgICAgdm9pZCogc3RhY2tQb2lu
dGVyOworfTsKKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaAppbmRleCBmZTE2
MzBjOTczNWI1ZmY1MzUzY2IyYzU1OGUzMTA1ODEyNDc4N2Q4Li4yNzdlNjc1ZGIzYzU1NWQ1ZTRj
NmNlMDQ5NDY4ODc0ZDM2NzY5NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaApAQCAtNDIsNyArNDIsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHIgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzUmVmUHRyID0gdHJ1ZTsKIAotICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKCkgOiBtX3B0cihu
dWxscHRyKSB7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0ZXhwciBSZWZQdHIoKSA6IG1fcHRy
KG51bGxwdHIpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKFQqIHB0cikgOiBtX3B0cihw
dHIpIHsgcmVmSWZOb3ROdWxsKHB0cik7IH0KICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cihjb25z
dCBSZWZQdHImIG8pIDogbV9wdHIoby5tX3B0cikgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmVmUHRyKGNvbnN0IFJlZlB0cjxVPiYgbykgOiBtX3B0
cihvLmdldCgpKSB7IHJlZklmTm90TnVsbChtX3B0cik7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGIvU291cmNlL1dURi93dGYvVGhyZWFk
RnVuY3Rpb25JbnZvY2F0aW9uLmgKaW5kZXggOTQzZmQ2ZDc5ZDA5NDQyNTUwM2FjODk3MzFiMGEw
NmE2YWM0MGZmZC4uY2IyNzVmNzAxMmNmZTU2NjFlNDllMGI0ZmYwZDljNjIxYjBlNDk5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgKQEAgLTI5LDYgKzI5LDgg
QEAKICNpZm5kZWYgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uX2gKICNkZWZpbmUgVGhyZWFkRnVu
Y3Rpb25JbnZvY2F0aW9uX2gKIAorI2luY2x1ZGUgIlRocmVhZGluZy5oIgorCiBuYW1lc3BhY2Ug
V1RGIHsKIAogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsK
QEAgLTM2LDEzICszOCwxNSBAQCB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCog
YXJndW1lbnQpOwogc3RydWN0IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbiB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
KFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBkYXRhKQorICAgIFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbihUaHJlYWRGdW5jdGlvbiBmdW5jdGlvbiwgUmVmUHRyPFRocmVhZD4mJiB0aHJl
YWQsIHZvaWQqIGRhdGEpCiAgICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwg
dGhyZWFkKFdURk1vdmUodGhyZWFkKSkKICAgICAgICAgLCBkYXRhKGRhdGEpCiAgICAgewogICAg
IH0KIAogICAgIFRocmVhZEZ1bmN0aW9uIGZ1bmN0aW9uOworICAgIFJlZlB0cjxUaHJlYWQ+IHRo
cmVhZDsKICAgICB2b2lkKiBkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
VGhyZWFkSG9sZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2I5ODEzY2Y3YzQ5MTJlMjYzMmQwMDRlNjZhYzMwODdjMWE0MTc1MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZEhvbGRlci5o
IgorCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitUaHJlYWRT
cGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5
OworCitUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQoreworICAgIG1fdGhyZWFkLT5kaWRF
eGl0KCk7Cit9CisKK3ZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKFRocmVhZCYgdGhyZWFk
KQoreworICAgIGlmICghY3VycmVudCgpKSB7CisgICAgICAgIC8vIElkZWFsbHkgd2UnZCBoYXZl
IHRoaXMgYXMgYSByZWxlYXNlIGFzc2VydCBldmVyeXdoZXJlLCBidXQgdGhhdCB3b3VsZCBodXJ0
IHBlcmZvcm1hbmNlLgorICAgICAgICAvLyBIYXZpbmcgdGhpcyByZWxlYXNlIGFzc2VydCBoZXJl
IG1lYW5zIHRoYXQgd2Ugd2lsbCBjYXRjaCAiZGlkbid0IGNhbGwKKyAgICAgICAgLy8gV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKCkgc29vbiBlbm91Z2giIGJ1Z3MgaW4gcmVsZWFzZSBtb2RlLgor
ICAgICAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICAg
ICAgdGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIG5ldyBUaHJlYWRIb2xkZXIodGhyZWFkKSk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZEhvbGRlci5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjg0MDI0MjFiNjYzNmE1MWFjZmVhYzQ1MmIzODQ2NzMwMWUyZDM2MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSG9sZHMgVGhyZWFk
IGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4gVGhlIGRlc3RydWN0b3Igb2YgdGhpcyBo
b2xkZXIgcmVsaWFibHkgZGVzdHJveSBUaHJlYWQuCisvLyBGb3IgcHRocmVhZCwgaXQgZW1wbG95
cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3Zl
IFRocmVhZC4KKy8vIEZvciBXaW5kb3dzLCB3ZSB1c2UgdGhyZWFkX2xvY2FsIHRvIGRlZmVyIHRo
cmVhZCBob2xkZXIgZGVzdHJ1Y3Rpb24uIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZp
YworLy8gdHlwZXMgZG9uJ3QgdXNlIG11bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCitjbGFzcyBU
aHJlYWRIb2xkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEhvbGRlcik7Citw
dWJsaWM6CisgICAgflRocmVhZEhvbGRlcigpOworCisgICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6
YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9sZS4KKyAgICAvLyBUaGlzIG1ldGhvZCBtdXN0
IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgpIGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUu
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKKworICAgIC8vIENyZWF0ZXMgYW5k
IHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkSG9sZGVyIGludG8gdGhyZWFkLXNwZWNpZmljIHN0
b3JhZ2UuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUaHJlYWQmKTsKKworICAgIC8vIFJl
dHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgor
ICAgIHN0YXRpYyBUaHJlYWRIb2xkZXIqIGN1cnJlbnQoKTsKKworICAgIFRocmVhZCYgdGhyZWFk
KCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRIb2xk
ZXIoVGhyZWFkJiB0aHJlYWQpCisgICAgICAgIDogbV90aHJlYWQodGhyZWFkKQorICAgICAgICAs
IG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBUaGlzIHRo
cmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNhbGxlZCAyIHRpbWVzIHdoZW4gdGhyZWFkIHRl
cm1pbmF0ZXM6CisgICAgLy8gLSBmaXJzdCwgd2hlbiBhbGwgdGhlIG90aGVyIHRocmVhZC1zcGVj
aWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBpdCBzaW1wbHkgcmVtZW1iZXJzIGl0IHdhcyAn
ZGVzdHJveWVkIG9uY2UnCisgICAgLy8gYW5kICgxKSByZS1zZXRzIGl0c2VsZiBpbnRvIHRoZSB0
aHJlYWQtc3BlY2lmaWMgc2xvdCBvciAoMikgY29uc3RydWN0cyB0aHJlYWQgbG9jYWwgdmFsdWUg
dG8gY2FsbCBpdCBhZ2FpbiBsYXRlci4KKyAgICAvLyAtIHNlY29uZCwgYWZ0ZXIgYWxsIHRocmVh
ZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGludm9rZWQsIGl0IGdldHMgY2FsbGVkIGFnYWlu
IC0gdGhpcyB0aW1lLCB3ZSByZW1vdmUgdGhlCisgICAgLy8gVGhyZWFkIGZyb20gdGhlIHRocmVh
ZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KKyAgICBzdGF0aWMgdm9pZCBUSFJFQURfU1BF
Q0lGSUNfQ0FMTCBkZXN0cnVjdCh2b2lkKiBkYXRhKTsKKworICAgIFJlZjxUaHJlYWQ+IG1fdGhy
ZWFkOworICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7CisgICAgc3RhdGljIFRocmVhZFNwZWNp
ZmljS2V5IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY4MTVhYmI2ZjRlZWZjNTIzZWRiOTc5
MzViOWUyNzU1ZTg2NGVmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlclB0aHJlYWRzLmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlh
bGl6ZU9uY2UoKQoreworICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1
Y3QpOworfQorCitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAg
QVNTRVJUKG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHRocmVhZFNwZWNpZmljR2V0KG1fa2V5KSk7Cit9CisK
K3ZvaWQgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQoreworICAgIFRocmVhZEhv
bGRlciogdGhyZWFkSWRlbnRpZmllckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihk
YXRhKTsKKyAgICBBU1NFUlQodGhyZWFkSWRlbnRpZmllckRhdGEpOworCisgICAgaWYgKHRocmVh
ZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICBkZWxldGUgdGhy
ZWFkSWRlbnRpZmllckRhdGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aHJlYWRJ
ZGVudGlmaWVyRGF0YS0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworICAgIC8vIFJlLXNldHRp
bmcgdGhlIHZhbHVlIGZvciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3QoKSBjYWxsIGFmdGVy
IGFsbCBvdGhlciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQuCisgICAg
dGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIHRocmVhZElkZW50aWZpZXJEYXRhKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJX
aW4uY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MjQzNGExYzIyZjFlODgwOTAzZDhhNmQ0MWZjYmE1NTIwYTZlOWM5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmNwcApAQCAtMCwwICsxLDEyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCisKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUgSW52YWxpZFRo
cmVhZEhvbGRlciAoKFRocmVhZEhvbGRlciopKDB4YmJhZGJlZWYpKQorCitzdGF0aWMgc3RkOjpt
dXRleCYgdGhyZWFkTWFwTXV0ZXgoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6
Om11dGV4PiBtdXRleDsKKyAgICByZXR1cm4gbXV0ZXguZ2V0KCk7Cit9CisKK3N0YXRpYyBIYXNo
TWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVhZEhvbGRlcio+JiB0aHJlYWRNYXAoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFRocmVhZEhv
bGRlcio+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKwordm9pZCBUaHJlYWRIb2xk
ZXI6OmluaXRpYWxpemVPbmNlKCkKK3sKKyAgICB0aHJlYWRNYXBNdXRleCgpOworICAgIHRocmVh
ZE1hcCgpOworICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOwor
fQorCitUaHJlYWRIb2xkZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCit7CisgICAgQVNTRVJU
KG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgVGhyZWFkSG9sZGVyKiBo
b2xkZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPih0aHJlYWRTcGVjaWZpY0dldChtX2tl
eSkpOworICAgIGlmIChob2xkZXIpIHsKKyAgICAgICAgQVNTRVJUKGhvbGRlciAhPSBJbnZhbGlk
VGhyZWFkSG9sZGVyKTsKKyAgICAgICAgcmV0dXJuIGhvbGRlcjsKKyAgICB9CisKKyAgICAvLyBB
ZnRlciBGTFMgaXMgZGVzdHJveWVkLCB0aGlzIG1hcCBvZmZlcnMgdGhlIHZhbHVlIHVudGlsIHRo
ZSBzZWNvbmQgdGhyZWFkIGV4aXQgY2FsbGJhY2sgaXMgY2FsbGVkLgorICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgIHJldHVybiB0
aHJlYWRNYXAoKS5nZXQoY3VycmVudFRocmVhZCgpKTsKK30KKwordm9pZCBUaHJlYWRIb2xkZXI6
OmRlc3RydWN0KHZvaWQqIGRhdGEpCit7CisgICAgaWYgKGRhdGEgPT0gSW52YWxpZFRocmVhZEhv
bGRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGhyZWFkSG9sZGVyKiBob2xkZXIgPSBzdGF0
aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihkYXRhKTsKKyAgICBBU1NFUlQoaG9sZGVyKTsKKworICAg
IC8vIERlbGF5IHRoZSBkZWFsbG9jYXRpb24gb2YgVGhyZWFkSG9sZGVyIG1vcmUuCisgICAgLy8g
SXQgZGVmZXJzIFRocmVhZEhvbGRlciBkZWFsbG9jYXRpb24gYWZ0ZXIgdGhlIG90aGVyIFRocmVh
ZFNwZWNpZmljIHZhbHVlcyBhcmUgZGVhbGxvY2F0ZWQuCisgICAgc3RhdGljIHRocmVhZF9sb2Nh
bCBjbGFzcyBUaHJlYWRFeGl0Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGhyZWFk
RXhpdENhbGxiYWNrKFRocmVhZEhvbGRlciogaG9sZGVyKQorICAgICAgICAgICAgOiBtX2hvbGRl
cihob2xkZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5UaHJlYWRFeGl0Q2Fs
bGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KG1f
aG9sZGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFkSG9sZGVy
KiBtX2hvbGRlcjsKKyAgICB9IGNhbGxiYWNrKGhvbGRlcik7CisKKyAgICBpZiAoaG9sZGVyLT5t
X2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhob2xkZXItPm1fdGhyZWFkLT5pZCgpKSk7CisgICAg
ICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaG9sZGVyLT5tX3RocmVhZC0+aWQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlIGhvbGRlcjsKKworICAgICAgICAvLyBGaWxsIHRoZSBGTFMg
d2l0aCB0aGUgbm9uLW51bGxwdHIgdmFsdWUuIFdoaWxlIEZMUyBkZXN0cnVjdG9yIHdvbid0IGJl
IGNhbGxlZCBmb3IgdGhhdCwKKyAgICAgICAgLy8gbm9uLW51bGxwdHIgdmFsdWUgdGVsbHMgdXMg
dGhhdCB3ZSBhbHJlYWR5IGRlc3RydWN0ZWQgVGhyZWFkSG9sZGVyLiBUaGlzIGFsbG93cyB1cyB0
bworICAgICAgICAvLyBkZXRlY3QgaW5jb3JyZWN0IHVzZSBvZiBUaHJlYWQ6OmN1cnJlbnQoKSBh
ZnRlciB0aGlzIHBvaW50IGJlY2F1c2UgaXQgd2lsbCBjcmFzaC4KKyAgICAgICAgdGhyZWFkU3Bl
Y2lmaWNTZXQobV9rZXksIEludmFsaWRUaHJlYWRIb2xkZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICAgICAgdGhyZWFkTWFwKCkuYWRkKGhvbGRlci0+bV90
aHJlYWQtPmlkKCksIGhvbGRlcik7CisgICAgfQorICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5
LCBJbnZhbGlkVGhyZWFkSG9sZGVyKTsKKyAgICBob2xkZXItPm1faXNEZXN0cm95ZWRPbmNlID0g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwYmViZmU5M2JhNWM3MGE5YjRmNGI1ZjI2NTcyMWRkMTY5YmZmMTQzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElk
ZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShQVEhSRUFEUykKLQotI2luY2x1ZGUg
IlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKLQotI2luY2x1ZGUgIlRocmVhZGluZy5o
IgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJFQURfS0VZU19NQVggaXMgbm90IGRlZmluZWQgaW4g
YmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmluZSBpdCBoZXJlLgotI2RlZmlu
ZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNlbHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXB0aHJlYWRfa2V5X3QgVGhyZWFkSWRlbnRpZmllckRh
dGE6Om1fa2V5ID0gUFRIUkVBRF9LRVlTX01BWDsKLQotdm9pZCB0aHJlYWREaWRFeGl0KFRocmVh
ZElkZW50aWZpZXIpOwotCi1UaHJlYWRJZGVudGlmaWVyRGF0YTo6flRocmVhZElkZW50aWZpZXJE
YXRhKCkKLXsKLSAgICB0aHJlYWREaWRFeGl0KG1faWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgVGhy
ZWFkSWRlbnRpZmllckRhdGE6OmluaXRpYWxpemVPbmNlKCkKLXsKLSAgICBpbnQgZXJyb3IgPSBw
dGhyZWFkX2tleV9jcmVhdGUoJm1fa2V5LCBkZXN0cnVjdCk7Ci0gICAgaWYgKGVycm9yKQotICAg
ICAgICBDUkFTSCgpOwotfQotCi1UaHJlYWRJZGVudGlmaWVyIFRocmVhZElkZW50aWZpZXJEYXRh
OjppZGVudGlmaWVyKCkKLXsKLSAgICBBU1NFUlQobV9rZXkgIT0gUFRIUkVBRF9LRVlTX01BWCk7
Ci0gICAgVGhyZWFkSWRlbnRpZmllckRhdGEqIHRocmVhZElkZW50aWZpZXJEYXRhID0gc3RhdGlj
X2Nhc3Q8VGhyZWFkSWRlbnRpZmllckRhdGEqPihwdGhyZWFkX2dldHNwZWNpZmljKG1fa2V5KSk7
Ci0KLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllckRhdGEgPyB0aHJlYWRJZGVudGlmaWVyRGF0
YS0+bV9pZGVudGlmaWVyIDogMDsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5p
dGlhbGl6ZShUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllcigp
KTsKLSAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZl
cnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVydCBwZXJmb3JtYW5lLgotICAgIC8vIEhhdmluZyB0
aGlzIHJlbGVhc2UgYXNzZXJ0IGhlcmUgbWVhbnMgdGhhdCB3ZSB3aWxsIGNhdGNoICJkaWRuJ3Qg
Y2FsbAotICAgIC8vIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdz
IGluIHJlbGVhc2UgbW9kZS4KLSAgICBSRUxFQVNFX0FTU0VSVChtX2tleSAhPSBQVEhSRUFEX0tF
WVNfTUFYKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fa2V5LCBuZXcgVGhyZWFkSWRlbnRp
ZmllckRhdGEoaWQpKTsKLX0KLQotdm9pZCBUaHJlYWRJZGVudGlmaWVyRGF0YTo6ZGVzdHJ1Y3Qo
dm9pZCogZGF0YSkKLXsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YSogdGhyZWFkSWRlbnRpZmll
ckRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlmaWVyRGF0YSo+KGRhdGEpOwotICAgIEFT
U0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci0KLSAgICBpZiAodGhyZWFkSWRlbnRpZmllckRh
dGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAgICAgIGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVy
RGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRocmVhZElkZW50aWZpZXJEYXRh
LT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUg
Zm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRo
cmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KLSAgICBwdGhyZWFkX3NldHNw
ZWNpZmljKG1fa2V5LCB0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotCi0jZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
NDM0OWEwY2RkYWFlYzg2MGJjYmU0YmMwYTcyNWJkMjc1ZTcyZWJkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHNfaAotI2RlZmluZSBUaHJlYWRJZGVudGlmaWVy
RGF0YVB0aHJlYWRzX2gKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNl
IFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZElkZW50aWZpZXIgaW4gdGhlIHRocmVhZC1zcGVjaWZp
YyBzdG9yYWdlIGFuZCBlbXBsb3lzIHB0aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlv
biB0byByZWxpYWJseSByZW1vdmUKLS8vIFRocmVhZElkZW50aWZpZXIgZnJvbSB0aHJlYWRNYXAu
IEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYyB0eXBlcyBkb24ndCB1c2UgbXVsdGlw
bGUtcGFzcyBkZXN0cnVjdGlvbi4KLWNsYXNzIFRocmVhZElkZW50aWZpZXJEYXRhIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRJZGVudGlmaWVyRGF0YSk7Ci1wdWJsaWM6Ci0gICAg
flRocmVhZElkZW50aWZpZXJEYXRhKCk7Ci0KLSAgICAvLyBPbmUgdGltZSBpbml0aWFsaXphdGlv
biBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgotICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUg
Y2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25jZSgpOwotCi0gICAgLy8gQ3JlYXRlcyBhbmQgcHV0
cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRJZGVudGlmaWVyRGF0YSBpbnRvIHRocmVhZC1zcGVjaWZp
YyBzdG9yYWdlLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkSWRlbnRpZmllciBp
ZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVybnMgMCBpZiB0aHJlYWQtc3BlY2lmaWMgc3RvcmFn
ZSB3YXMgbm90IGluaXRpYWxpemVkLgotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50
aWZpZXIoKTsKLQotcHJpdmF0ZToKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YShUaHJlYWRJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0g
ICAgICAgICwgbV9pc0Rlc3Ryb3llZE9uY2UoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIC8v
IFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0
aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhy
ZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMg
aXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAgICAvLyBhbmQgcmUtc2V0cyBpdHNlbGYgaW50byB0
aGUgdGhyZWFkLXNwZWNpZmljIHNsb3QgdG8gbWFrZSBQdGhyZWFkcyB0byBjYWxsIGl0IGFnYWlu
IGxhdGVyLgotICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3Ry
dWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdl
IHJlbW92ZSB0aGUKLSAgICAvLyBUaHJlYWRJZGVudGlmaWVyIGZyb20gdGhlIHRocmVhZE1hcCwg
Y29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lkKiBk
YXRhKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwotICAgIGJvb2wgbV9p
c0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGljIHB0aHJlYWRfa2V5X3QgbV9rZXk7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHNfaAotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmggYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCmluZGV4IGYwOTA0ZmNmNjI0NDllMmQzYmFj
NzAzZDJkYTc0NjAwYmI3ZTM5NDguLjFmOTgzNjNlOTM0MTM0YzQxNDMzMzZjOGI4MmY4YWZjNDM4
MTVlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWMuaApAQCAtNDgsNiArNDgsMTQgQEAKIAogI2lm
IFVTRShQVEhSRUFEUykKICNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpZiBPUyhIVVJEKQorLy8g
UFRIUkVBRF9LRVlTX01BWCBpcyBub3QgZGVmaW5lZCBpbiBiaW9uaWMgbm9yIGluIEh1cmQsIHNv
IGV4cGxpY2l0bHkgZGVmaW5lIGl0IGhlcmUuCisjZGVmaW5lIFBUSFJFQURfS0VZU19NQVggMTAy
NAorI2Vsc2UKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCiAjZWxpZiBPUyhXSU5ET1dT
KQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgpAQCAtMTA5LDYgKzExNyw4IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIENhbkJlR0NUaHJlYWQgY2FuQmVHQ1RocmVhZCA9IENhbkJlR0NUaHJl
YWQ6OkZhbHNlPiBjbGFzcyBUCiAKIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBUaHJlYWRTcGVjaWZp
Y0tleTsKIAorc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBUaHJlYWRTcGVjaWZpY0tleSBJbnZhbGlk
VGhyZWFkU3BlY2lmaWNLZXkgPSBQVEhSRUFEX0tFWVNfTUFYOworCiBpbmxpbmUgdm9pZCB0aHJl
YWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVjaWZpY0tleSoga2V5LCB2b2lkICgqZGVzdHJ1
Y3Rvcikodm9pZCAqKSkKIHsKICAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoa2V5
LCBkZXN0cnVjdG9yKTsKQEAgLTE3MSw2ICsxODEsOCBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgRFdP
UkQqIGZsc0tleXMoKTsKIAogdHlwZWRlZiBEV09SRCBUaHJlYWRTcGVjaWZpY0tleTsKIAorc3Rh
dGljIGNvbnN0IGNvbnN0ZXhwciBUaHJlYWRTcGVjaWZpY0tleSBJbnZhbGlkVGhyZWFkU3BlY2lm
aWNLZXkgPSBGTFNfT1VUX09GX0lOREVYRVM7CisKIGlubGluZSB2b2lkIHRocmVhZFNwZWNpZmlj
S2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKFRIUkVBRF9TUEVDSUZJQ19D
QUxMICpkZXN0cnVjdG9yKSh2b2lkICopKQogewogICAgIERXT1JEIGZsc0tleSA9IEZsc0FsbG9j
KGRlc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXggYzFkYzM1MDE5MDNhYjc2YjM3MDQ2
ZDkzMzNmOTMyYTNlZjBjNmM2ZS4uYmM0ZjgzMTA5N2FjMzVkNzZmNDRmNjQ1NGY4ZmI1YTUyNmU4
ODI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC0yNiw5ICsyNiwxNSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRocmVhZGluZy5oIgogCisjaW5jbHVkZSAiZHRvYS5oIgorI2lu
Y2x1ZGUgImR0b2EvY2FjaGVkLXBvd2Vycy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNs
dWRlIDxjbWF0aD4KICNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5o
PgorI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXJTZWVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZEhvbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVmlldy5oPgogCiAjaWYgSEFWRShRT1NfQ0xBU1NFUykKQEAgLTQ1LDcgKzUx
LDcgQEAgc3RydWN0IE5ld1RocmVhZENvbnRleHQgewogICAgIE11dGV4IGNyZWF0aW9uTXV0ZXg7
CiB9OwogCi1jb25zdCBjaGFyKiBub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVh
ZE5hbWUpCitjb25zdCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hh
ciogdGhyZWFkTmFtZSkKIHsKICNpZiBIQVZFKFBUSFJFQURfU0VUTkFNRV9OUCkKICAgICByZXR1
cm4gdGhyZWFkTmFtZTsKQEAgLTgyLDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQ
b2ludCh2b2lkKiBjb250ZXh0RGF0YSkKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRl
eHQtPmNyZWF0aW9uTXV0ZXgpOwogICAgIH0KIAotICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFk
SW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CisgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRo
cmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUpOwogCiAgICAgYXV0byBlbnRyeVBvaW50ID0gV1RG
TW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKIApAQCAtOTIsMjQgKzk4LDI0IEBAIHN0YXRpYyB2
b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiAgICAgZW50cnlQb2ludCgp
OwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludCkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6
Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50
KQogewogICAgIE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4
dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIHsgfSB9OwogCiAgICAgLy8gUHJldmVudCB0
aGUgdGhyZWFkIGJvZHkgZnJvbSBleGVjdXRpbmcgdW50aWwgd2UndmUgZXN0YWJsaXNoZWQgdGhl
IHRocmVhZCBpZGVudGlmaWVyLgogICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVh
dGlvbk11dGV4KTsKIAotICAgIHJldHVybiBjcmVhdGVUaHJlYWRJbnRlcm5hbCh0aHJlYWRFbnRy
eVBvaW50LCBjb250ZXh0LCBuYW1lKTsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGVJbnRlcm5h
bCh0aHJlYWRFbnRyeVBvaW50LCBjb250ZXh0LCBuYW1lKTsKIH0KIAotVGhyZWFkSWRlbnRpZmll
ciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29u
c3QgY2hhciogbmFtZSkKK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKFRocmVhZEZ1bmN0
aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZVRocmVhZChuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0geworICAgIHJldHVybiBU
aHJlYWQ6OmNyZWF0ZShuYW1lLCBbZW50cnlQb2ludCwgZGF0YV0gewogICAgICAgICBlbnRyeVBv
aW50KGRhdGEpOwogICAgIH0pOwogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRl
cmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKK3ZvaWQgVGhyZWFkOjpzZXRDdXJyZW50VGhy
ZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkpCiB7CiAjaWYgSEFWRShR
T1NfQ0xBU1NFUykKICAgICBBU1NFUlQocmVsYXRpdmVQcmlvcml0eSA8PSAwKTsKQEAgLTEyMCw3
ICsxMjYsNyBAQCB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVs
YXRpdmVQcmlvcml0eSkKICNlbmRpZgogfQogCi12b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJ
bml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkpCit2b2lkIFRocmVhZDo6c2V0Q3VycmVudFRo
cmVhZElzVXNlckluaXRpYXRlZChpbnQgcmVsYXRpdmVQcmlvcml0eSkKIHsKICNpZiBIQVZFKFFP
U19DTEFTU0VTKQogICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwpAQCAtMTM0LDEz
ICsxNDAsMTMgQEAgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxh
dGl2ZVByaW9yaXR5KQogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiBzdGF0aWMgcW9zX2NsYXNzX3Qg
Z2xvYmFsTWF4UU9TY2xhc3MgeyBRT1NfQ0xBU1NfVU5TUEVDSUZJRUQgfTsKIAotdm9pZCBzZXRH
bG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKK3ZvaWQgVGhyZWFkOjpzZXRH
bG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCBtYXhDbGFzcykKIHsKICAgICBibWFsbG9jOjph
cGk6OnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG1heENsYXNzKTsKICAgICBnbG9iYWxNYXhR
T1NjbGFzcyA9IG1heENsYXNzOwogfQogCi1xb3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFv
c19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCitxb3NfY2xhc3NfdCBUaHJlYWQ6OmFkanVzdGVkUU9T
Q2xhc3MocW9zX2NsYXNzX3Qgb3JpZ2luYWxDbGFzcykKIHsKICAgICBpZiAoZ2xvYmFsTWF4UU9T
Y2xhc3MgIT0gUU9TX0NMQVNTX1VOU1BFQ0lGSUVEKQogICAgICAgICByZXR1cm4gc3RkOjptaW4o
b3JpZ2luYWxDbGFzcywgZ2xvYmFsTWF4UU9TY2xhc3MpOwpAQCAtMTQ4LDQgKzE1NCwyNSBAQCBx
b3NfY2xhc3NfdCBhZGp1c3RlZFFPU0NsYXNzKHFvc19jbGFzc190IG9yaWdpbmFsQ2xhc3MpCiB9
CiAjZW5kaWYKIAordm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9pZCk7Cit9CisKK3ZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCit7
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworICAgICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9u
Ojppbml0aWFsaXplKCk7CisgICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZU9uY2UoKTsK
KyAgICAgICAgLy8gU3RyaW5nSW1wbDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0
YXRpYyBzdHJpbmcgaW4gYSB0aHJlYWRzYWZlIGZhc2hpb24sCisgICAgICAgIC8vIHNvIGVuc3Vy
ZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhlcmUuCisgICAgICAgIFN0cmluZ0ltcGw6
OmVtcHR5KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKKyAg
ICAgICAgd3RmVGhyZWFkRGF0YSgpOworICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICAg
ICAgVGhyZWFkOjppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKTsKKyAgICB9KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDZiNTU4YjNlMWQ1MTdlODEwYzVl
YThmNmIyY2E0NDA1YWNmMDEyZDIuLmU4ZGY5NDQyMDJiYjNmYmExZjM1ODhiNWZhZWE5MzJhOTVm
YzZkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXgu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFr
dGl4LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDc1ICsz
NiwxNzYgQEAKIC8vIE5vdGhpbmcgaW4gdGhpcyBoZWFkZXIgZGVwZW5kcyBvbiBBc3NlcnRpb25z
LCBBdG9taWNzLCBMb2NrZXIsIE5vbmNvcHlhYmxlLCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgb3Ig
VGhyZWFkaW5nUHJpbWl0aXZlcy4KIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
bXV0ZXg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
ICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAorI2lmIFVT
RShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNs
dWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAotdHlwZWRlZiB1aW50
MzJfdCBUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQzMl90
OwogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIAotLy8g
VGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMg
c2FmZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRv
IHRoaXMgcnVsZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5
IAotLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCi1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7CitjbGFzcyBUaHJl
YWRIb2xkZXI7CitjbGFzcyBQcmludFN0cmVhbTsKKworY2xhc3MgVGhyZWFkIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4geworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBU
aHJlYWRIb2xkZXI7CiAKLS8vIFJldHVybnMgMCBpZiB0aHJlYWQgY3JlYXRpb24gZmFpbGVkLgot
Ly8gVGhlIHRocmVhZCBuYW1lIG11c3QgYmUgYSBsaXRlcmFsIHNpbmNlIG9uIHNvbWUgcGxhdGZv
cm1zIGl0J3MgcGFzc2VkIGluIHRvIHRoZSB0aHJlYWQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhy
ZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogdGhyZWFkTmFtZSwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgflRocmVhZCgpOwogCi0v
LyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVzcG9uc2l2ZW5lc3Mu
Ci0vLyByZWxhdGl2ZVByaW9yaXR5IGlzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFstMTUsIDBdIHdo
ZXJlIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgbG93ZXIgcHJpb3JpdHkuCi1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0
aXZlUHJpb3JpdHkgPSAwKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldEN1cnJlbnRUaHJl
YWRJc1VzZXJJbml0aWF0ZWQoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKyAgICAvLyBSZXR1
cm5zIG51bGxwdHIgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4KKyAgICAvLyBUaGUgdGhyZWFk
IG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBwbGF0Zm9ybXMgaXQncyBwYXNz
ZWQgaW4gdG8gdGhlIHRocmVhZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0
cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBjaGFyKiB0aHJlYWROYW1lLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3Jl
YXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqIG5h
bWUpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFk
KCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjaGFuZ2VUaHJlYWRQcmlvcml0eShUaHJlYWRJ
ZGVudGlmaWVyLCBpbnQpOwotV1RGX0VYUE9SVF9QUklWQVRFIGludCB3YWl0Rm9yVGhyZWFkQ29t
cGxldGlvbihUaHJlYWRJZGVudGlmaWVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRldGFj
aFRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3Qu
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKIAotLy8g
RGVwcmVjYXRlZCBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIHRocmVhZCBjcmVhdGlvbi4KLVdURl9F
WFBPUlRfUFJJVkFURSBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZChUaHJlYWRGdW5jdGlv
biwgdm9pZCosIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpOworICAgIC8vIFJldHVybnMgVGhyZWFk
SWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9ubHkgY2FyZXMg
YWJvdXQgaWRlbnRpdHkKKyAgICAvLyBvZiB0aHJlYWRzLiBBdCB0aGF0IHRpbWUsIHVzZXJzIHNo
b3VsZCBrbm93IHRoYXQgaG9sZGluZyB0aGlzIFRocmVhZElkZW50aWZpZXIgZG9lcyBub3QgZW5z
dXJlCisgICAgLy8gdGhhdCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGlzIGFsaXZlLiBXaGlsZSBU
aHJlYWQ6OmN1cnJlbnQoKSBpcyBub3Qgc2FmZSBpZiBpdCBpcyBjYWxsZWQKKyAgICAvLyBmcm9t
IHRoZSBkZXN0cnVjdG9yIG9mIHRoZSBvdGhlciBUTFMgZGF0YSwgY3VycmVudElEKCkgYWx3YXlz
IHJldHVybnMgbWVhbmluZ2Z1bCB0aHJlYWQgSUQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRJRCgpOwogCi0vLyBJbnRlcm5hbCBwbGF0Zm9y
bS1zcGVjaWZpYyBjcmVhdGVUaHJlYWQgaW1wbGVtZW50YXRpb24uCi1UaHJlYWRJZGVudGlmaWVy
IGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uLCB2b2lkKiwgY29uc3QgY2hhciog
dGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgY2hhbmdlUHJpb3JpdHko
aW50KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IHdhaXRGb3JDb21wbGV0aW9uKCk7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGV0YWNoKCk7CiAKLS8vIENhbGxlZCBpbiB0aGUg
dGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLS8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3
aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4K
LXZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWRO
YW1lKTsKKyNpZiBPUyhEQVJXSU4pCisgICAgdXNpbmcgUGxhdGZvcm1TdXNwZW5kRXJyb3IgPSBr
ZXJuX3JldHVybl90OworI2VsaWYgVVNFKFBUSFJFQURTKQorICAgIHVzaW5nIFBsYXRmb3JtU3Vz
cGVuZEVycm9yID0gaW50OworI2VsaWYgT1MoV0lORE9XUykKKyAgICB1c2luZyBQbGF0Zm9ybVN1
c3BlbmRFcnJvciA9IERXT1JEOworI2VuZGlmCiAKLWNvbnN0IGNoYXIqIG5vcm1hbGl6ZVRocmVh
ZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4
cGVjdGVkPHZvaWQsIFBsYXRmb3JtU3VzcGVuZEVycm9yPiBzdXNwZW5kKCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVzdW1lKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmKTsKIAogI2lmIFVTRShQVEhSRUFEUykK
LWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIsIGludCBzaWduYWxOdW1iZXIpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKTsKICNl
bmRpZgogCisgICAgLy8gTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgcmVxdWlyaW5nIFVJIHJl
c3BvbnNpdmVuZXNzLgorICAgIC8vIHJlbGF0aXZlUHJpb3JpdHkgaXMgYSB2YWx1ZSBpbiB0aGUg
cmFuZ2UgWy0xNSwgMF0gd2hlcmUgYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBsb3dlciBwcmlv
cml0eS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVh
ZElzVXNlckludGVyYWN0aXZlKGludCByZWxhdGl2ZVByaW9yaXR5ID0gMCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRUaHJlYWRJc1VzZXJJbml0aWF0ZWQo
aW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKKwogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi1XVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgcW9zX2NsYXNzX3QgYWRqdXN0ZWRRT1NDbGFzcyhxb3NfY2xhc3Nf
dCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEdsb2JhbE1heFFPU0Ns
YXNzKHFvc19jbGFzc190KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHFvc19jbGFz
c190IGFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3QpOwogI2VuZGlmCiAKLX0gLy8gbmFtZXNw
YWNlIFdURgorICAgIC8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlv
bi4KKyAgICAvLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11
c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAotdXNp
bmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwotdXNpbmcgV1RGOjpjcmVhdGVUaHJlYWQ7Ci11c2lu
ZyBXVEY6OmN1cnJlbnRUaHJlYWQ7Ci11c2luZyBXVEY6OmNoYW5nZVRocmVhZFByaW9yaXR5Owot
dXNpbmcgV1RGOjpkZXRhY2hUaHJlYWQ7Ci11c2luZyBXVEY6OndhaXRGb3JUaHJlYWRDb21wbGV0
aW9uOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRocmVhZCYgdGhyZWFkKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlkKCkgPT0gdGhyZWFkLmlkKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFRocmVhZCYgdGhyZWFkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlkKCkg
IT0gdGhyZWFkLmlkKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBsYXRm
b3JtVGhyZWFkaW5nKCk7CisKK3ByaXZhdGU6CisgICAgVGhyZWFkKCk7CisKKyAgICAvLyBJbnRl
cm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0ZSBpbXBsZW1lbnRhdGlvbi4KKyAg
ICBzdGF0aWMgUmVmUHRyPFRocmVhZD4gY3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24sIHZv
aWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKIAogI2lmIFVTRShQVEhSRUFEUykKLXVzaW5n
IFdURjo6c2lnbmFsVGhyZWFkOworICAgIHZvaWQgZXN0YWJsaXNoKHB0aHJlYWRfdCk7CisjZWxz
ZQorICAgIHZvaWQgZXN0YWJsaXNoKEhBTkRMRSwgVGhyZWFkSWRlbnRpZmllcik7CiAjZW5kaWYK
IAotI2lmIEhBVkUoUU9TX0NMQVNTRVMpCi11c2luZyBXVEY6OnNldEdsb2JhbE1heFFPU0NsYXNz
OwotdXNpbmcgV1RGOjphZGp1c3RlZFFPU0NsYXNzOworI2lmIFVTRShQVEhSRUFEUykgJiYgIU9T
KERBUldJTikKKyAgICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQs
IHNpZ2luZm9fdCosIHZvaWQqIHVjb250ZXh0KTsKKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIG5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisKKyAg
ICBlbnVtIEpvaW5hYmxlU3RhdGUgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3Rh
dGUuIFRoZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KKyAgICAgICAgSm9pbmFibGUsCisKKyAg
ICAgICAgLy8gU29tZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMg
dGhyZWFkIGZpbmFsbHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBj
YW4gYmUgYQorICAgICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVh
ZCBleGl0cyAod2hpY2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1h
aW5kZXIgb2Ygd2FpdE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pCisgICAgICAgIC8vIGFuZCB3
aGVuIHRocmVhZERpZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFr
ZSBjaGFyZ2UgYW5kIGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncworICAgICAg
ICAvLyBub2JvZHkgZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNl
IHdhaXRPblRocmVhZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgorICAgICAgICBK
b2luZWQsCisKKyAgICAgICAgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2Fu
IG5vIGxvbmdlciBiZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0
YWtlIGNhcmUgb2YgY2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgorICAgICAgICBEZXRhY2hlZCwK
KyAgICB9OworCisgICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9q
b2luYWJsZVN0YXRlOyB9CisgICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJs
ZVN0YXRlID0gRGV0YWNoZWQ7IH0KKyAgICB2b2lkIGRpZEV4aXQoKTsKKyAgICB2b2lkIGRpZEpv
aW4oKSB7IG1fam9pbmFibGVTdGF0ZSA9IEpvaW5lZDsgfQorICAgIGJvb2wgaGFzRXhpdGVkKCkg
eyByZXR1cm4gbV9kaWRFeGl0OyB9CisKKyAgICAvLyBXb3JkTG9jayAmIExvY2sgcmVseSBvbiBU
aHJlYWRTcGVjaWZpYy4gQnV0IFRocmVhZCBvYmplY3QgY2FuIGJlIGRlc3Ryb3llZCBldmVuIGFm
dGVyIFRocmVhZFNwZWNpZmljIHRoaW5ncyBhcmUgZGVzdHJveWVkLgorICAgIHN0ZDo6bXV0ZXgg
bV9tdXRleDsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1faWQgeyAwIH07CisgICAgSm9pbmFibGVT
dGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJsZSB9OworICAgIGJvb2wgbV9kaWRFeGl0IHsg
ZmFsc2UgfTsKKyNpZiBVU0UoUFRIUkVBRFMpCisgICAgcHRocmVhZF90IG1faGFuZGxlOworI2lm
IE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOworI2Vsc2UKKyAg
ICBzZW1fdCBtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWU7CisgICAgbWNvbnRleHRfdCBtX3N1
c3BlbmRlZE1hY2hpbmVDb250ZXh0OworICAgIHVuc2lnbmVkIG1fc3VzcGVuZENvdW50IHsgMCB9
OworICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKKyNlbmRpZgor
I2VsaWYgT1MoV0lORE9XUykKKyAgICBIQU5ETEUgbV9oYW5kbGU7CisjZWxzZQorI2Vycm9yIFVu
a25vd24gU3lzdGVtCiAjZW5kaWYKK307CisKKy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxs
ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuIEl0IGlzIHNhZmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5
LgorLy8gRGFyd2luIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IGl0IGlzIE9LIHRvIGNh
bGwgaXQgZnJvbSBhbnkgdGhyZWFkLCB0aGUgb25seQorLy8gcmVxdWlyZW1lbnQgaXMgdGhhdCB0
aGUgY2FsbHMgYXJlIG5vdCByZWVudHJhbnQuCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0
aWFsaXplVGhyZWFkaW5nKCk7CisKK2lubGluZSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJl
YWQoKQoreworICAgIHJldHVybiBUaHJlYWQ6OmN1cnJlbnRJRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaHJlYWRJZGVudGlmaWVyOwordXNpbmcgV1RGOjpUaHJl
YWQ7Cit1c2luZyBXVEY6OmN1cnJlbnRUaHJlYWQ7CiAKICNlbmRpZiAvLyBUaHJlYWRpbmdfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IGY1Y2VlM2MxNzc4MmY2NmFmOWIw
NGNjN2Q1NmNhMWRhNWE2OTJkMGYuLjM5YjRmNjQ2MTllNThiZjBkN2JmY2ZkNzEwY2QzNGM2NTVl
NmM3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAgLTEsNyArMSw4IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhh
eWdvb2RAcmVha3RpeC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2Qg
PGpoYXlnb29kQHJlYWt0aXguY29tPgogICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsMTQ5ICszNCwxNTEgQEAKIAogI2lmIFVTRShQVEhSRUFE
UykKIAotI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKLSNp
bmNsdWRlICJkdG9hLmgiCi0jaW5jbHVkZSAiZHRvYS9jYWNoZWQtcG93ZXJzLmgiCi0jaW5jbHVk
ZSAiSGFzaE1hcC5oIgotI2luY2x1ZGUgIlJhbmRvbU51bWJlclNlZWQuaCIKLSNpbmNsdWRlICJT
dGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKLSNp
bmNsdWRlICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCi0jaW5jbHVkZSAiVGhyZWFk
U3BlY2lmaWMuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvV1RGVGhy
ZWFkRGF0YS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiAhQ09NUElMRVIoTVNWQykKLSNp
bmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzY2hlZC5oPgotI2luY2x1ZGUgPHN5cy90aW1l
Lmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KIAogI2lmIE9TKExJTlVYKQogI2luY2x1ZGUg
PHN5cy9wcmN0bC5oPgogI2VuZGlmCiAKLSNpZiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPHNpZ25h
bC5oPgorI2lmICFDT01QSUxFUihNU1ZDKQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUg
PHNjaGVkLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi1uYW1lc3BhY2UgV1RG
IHsKKyNpZiAhT1MoREFSV0lOKSAmJiBPUyhVTklYKQogCi1jbGFzcyBQdGhyZWFkU3RhdGUgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gSm9pbmFibGVT
dGF0ZSB7Ci0gICAgICAgIEpvaW5hYmxlLCAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUuIFRo
ZSB0aHJlYWQgY2FuIGJlIGpvaW5lZCBvbi4KLQotICAgICAgICBKb2luZWQsIC8vIFNvbWVib2R5
IHdhaXRlZCBvbiB0aGlzIHRocmVhZCB0byBleGl0IGFuZCB0aGlzIHRocmVhZCBmaW5hbGx5IGV4
aXRlZC4gVGhpcyBzdGF0ZSBpcyBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJlIGEgCi0gICAgICAg
ICAgICAgICAgLy8gcGVyaW9kIG9mIHRpbWUgYmV0d2VlbiB3aGVuIHRoZSB0aHJlYWQgZXhpdHMg
KHdoaWNoIGNhdXNlcyBwdGhyZWFkX2pvaW4gdG8gcmV0dXJuIGFuZCB0aGUgcmVtYWluZGVyIG9m
IHdhaXRPblRocmVhZENvbXBsZXRpb24gdG8gcnVuKSAKLSAgICAgICAgICAgICAgICAvLyBhbmQg
d2hlbiB0aHJlYWREaWRFeGl0IGlzIGNhbGxlZC4gV2UgbmVlZCB0aHJlYWREaWRFeGl0IHRvIHRh
a2UgY2hhcmdlIGFuZCBkZWxldGUgdGhlIHRocmVhZCBkYXRhIHNpbmNlIHRoZXJlJ3MgCi0gICAg
ICAgICAgICAgICAgLy8gbm9ib2R5IGVsc2UgdG8gcGljayB1cCB0aGUgc2xhY2sgaW4gdGhpcyBj
YXNlIChzaW5jZSB3YWl0T25UaHJlYWRDb21wbGV0aW9uIGhhcyBhbHJlYWR5IHJldHVybmVkKS4K
LQotICAgICAgICBEZXRhY2hlZCAvLyBUaGUgdGhyZWFkIGhhcyBiZWVuIGRldGFjaGVkIGFuZCBj
YW4gbm8gbG9uZ2VyIGJlIGpvaW5lZCBvbi4gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBtdXN0
IHRha2UgY2FyZSBvZiBjbGVhbmluZyB1cCBhZnRlciBpdHNlbGYuCi0gICAgfTsKLQotICAgIC8v
IEN1cnJlbnRseSBhbGwgdGhyZWFkcyBjcmVhdGVkIGJ5IFdURiBzdGFydCBvdXQgYXMgam9pbmFi
bGUuIAotICAgIFB0aHJlYWRTdGF0ZShwdGhyZWFkX3QgaGFuZGxlKQotICAgICAgICA6IG1fam9p
bmFibGVTdGF0ZShKb2luYWJsZSkKLSAgICAgICAgLCBtX2RpZEV4aXQoZmFsc2UpCi0gICAgICAg
ICwgbV9wdGhyZWFkSGFuZGxlKGhhbmRsZSkKLSAgICB7Ci0gICAgfQorI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSAgICBKb2luYWJsZVN0YXRlIGpvaW5hYmxl
U3RhdGUoKSB7IHJldHVybiBtX2pvaW5hYmxlU3RhdGU7IH0KLSAgICBwdGhyZWFkX3QgcHRocmVh
ZEhhbmRsZSgpIHsgcmV0dXJuIG1fcHRocmVhZEhhbmRsZTsgfQotICAgIHZvaWQgZGlkQmVjb21l
RGV0YWNoZWQoKSB7IG1fam9pbmFibGVTdGF0ZSA9IERldGFjaGVkOyB9Ci0gICAgdm9pZCBkaWRF
eGl0KCkgeyBtX2RpZEV4aXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBkaWRKb2luKCkgeyBtX2pvaW5h
YmxlU3RhdGUgPSBKb2luZWQ7IH0KLSAgICBib29sIGhhc0V4aXRlZCgpIHsgcmV0dXJuIG1fZGlk
RXhpdDsgfQorI2lmIE9TKFNPTEFSSVMpCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjZWxzZQorI2lu
Y2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgogCi1wcml2YXRlOgotICAgIEpvaW5hYmxlU3RhdGUg
bV9qb2luYWJsZVN0YXRlOwotICAgIGJvb2wgbV9kaWRFeGl0OwotICAgIHB0aHJlYWRfdCBtX3B0
aHJlYWRIYW5kbGU7Ci19OworI2lmIEhBVkUoUFRIUkVBRF9OUF9IKQorI2luY2x1ZGUgPHB0aHJl
YWRfbnAuaD4KKyNlbmRpZgogCi10eXBlZGVmIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgc3Rk
Ojp1bmlxdWVfcHRyPFB0aHJlYWRTdGF0ZT4+IFRocmVhZE1hcDsKKyNlbmRpZgogCi12b2lkIHVu
c2FmZVRocmVhZFdhc0RldGFjaGVkKFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWREaWRF
eGl0KFRocmVhZElkZW50aWZpZXIpOwotdm9pZCB0aHJlYWRXYXNKb2luZWQoVGhyZWFkSWRlbnRp
Zmllcik7CituYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgp
CitUaHJlYWQ6OlRocmVhZCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE11dGV4PiBt
dXRleDsKLSAgICByZXR1cm4gbXV0ZXg7CisjaWYgIU9TKERBUldJTikKKyAgICBzZW1faW5pdCgm
bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAvKiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHBy
b2Nlc3MuICovIDAsIC8qIEluaXRpYWwgdmFsdWUgZm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwor
I2VuZGlmCiB9CiAKLXZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCitUaHJlYWQ6On5UaHJlYWQo
KQogewotICAgIHN0YXRpYyBib29sIGlzSW5pdGlhbGl6ZWQ7Ci0KLSAgICBpZiAoaXNJbml0aWFs
aXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAg
ICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7Ci0gICAgLy8gU3RyaW5nSW1w
bDo6ZW1wdHkoKSBkb2VzIG5vdCBjb25zdHJ1Y3QgaXRzIHN0YXRpYyBzdHJpbmcgaW4gYSB0aHJl
YWRzYWZlIGZhc2hpb24sCi0gICAgLy8gc28gZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVk
IGZyb20gaGVyZS4KLSAgICBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIHRocmVhZE1hcE11dGV4
KCk7Ci0gICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgIFRocmVhZElk
ZW50aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgpOwotICAgIHd0ZlRocmVhZERhdGEoKTsKLSAg
ICBpbml0aWFsaXplRGF0ZXMoKTsKKyNpZiAhT1MoREFSV0lOKQorICAgIHNlbV9kZXN0cm95KCZt
X3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOworI2VuZGlmCiB9CiAKLXN0YXRpYyBUaHJlYWRN
YXAmIHRocmVhZE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZE1hcD4g
bWFwOwotICAgIHJldHVybiBtYXA7Ci19CisjaWYgIU9TKERBUldJTikKIAotc3RhdGljIFRocmVh
ZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShjb25zdCBwdGhyZWFkX3QmIHB0
aHJlYWRIYW5kbGUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkp
OworLy8gV2UgdXNlIFNJR1VTUjIgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFk
cyBpbiBKYXZhU2NyaXB0Q29yZS4KK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgaW50IFNpZ1RocmVh
ZFN1c3BlbmRSZXN1bWUgPSBTSUdVU1IyOworc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZCo+IHRh
cmdldFRocmVhZCB7IG51bGxwdHIgfTsKK3N0YXRpYyBTdGF0aWNXb3JkTG9jayBnbG9iYWxTdXNw
ZW5kTG9jazsKIAotICAgIFRocmVhZE1hcDo6aXRlcmF0b3IgaSA9IHRocmVhZE1hcCgpLmJlZ2lu
KCk7Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5kKCk7ICsraSkgewotICAgICAgICBp
ZiAocHRocmVhZF9lcXVhbChpLT52YWx1ZS0+cHRocmVhZEhhbmRsZSgpLCBwdGhyZWFkSGFuZGxl
KSAmJiAhaS0+dmFsdWUtPmhhc0V4aXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGktPmtleTsK
K3ZvaWQgVGhyZWFkOjpzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCos
IHZvaWQqIHVjb250ZXh0KQoreworICAgIC8vIFRvdWNoaW5nIHRocmVhZCBsb2NhbCBhdG9taWMg
dHlwZXMgZnJvbSBzaWduYWwgaGFuZGxlcnMgaXMgYWxsb3dlZC4KKyAgICBUaHJlYWQqIHRocmVh
ZCA9IHRhcmdldFRocmVhZC5sb2FkKCk7CisKKyAgICBpZiAodGhyZWFkLT5tX3N1c3BlbmRlZC5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc2ln
bmFsIGhhbmRsZXIgaW52b2NhdGlvbiB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVz
dW1lIHNpZ3N1c3BlbmQuCisgICAgICAgIC8vIFNvIHRoaXMgaGFuZGxlciBpbnZvY2F0aW9uIGl0
c2VsZiBzaG91bGQgbm90IHByb2Nlc3MuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gc2ln
bmFsIGNvbWVzLCBmaXJzdCwgdGhlIHN5c3RlbSBjYWxscyBzaWduYWwgaGFuZGxlci4gQW5kIGxh
dGVyLCBzaWdzdXNwZW5kIHdpbGwgYmUgcmVzdW1lZC4gU2lnbmFsIGhhbmRsZXIgaW52b2NhdGlv
biBhbHdheXMgcHJlY2VkZXMuCisgICAgICAgIC8vIFNvLCB0aGUgcHJvYmxlbSBuZXZlciBoYXBw
ZW5zIHRoYXQgc3VzcGVuZGVkLnN0b3JlKHRydWUsIC4uLikgd2lsbCBiZSBleGVjdXRlZCBiZWZv
cmUgdGhlIGhhbmRsZXIgaXMgY2FsbGVkLgorICAgICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3Jv
dXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zaWdzdXNwZW5kLmh0bWwKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHVjb250ZXh0X3QqIHVz
ZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KTsKKyNpZiBDUFUo
UFBDKQorICAgIHRocmVhZC0+bV9zdXNwZW5kZWRNYWNoaW5lQ29udGV4dCA9ICp1c2VyQ29udGV4
dC0+dWNfbWNvbnRleHQudWNfcmVnczsKKyNlbHNlCisgICAgdGhyZWFkLT5tX3N1c3BlbmRlZE1h
Y2hpbmVDb250ZXh0ID0gdXNlckNvbnRleHQtPnVjX21jb250ZXh0OworI2VuZGlmCisKKyAgICAv
LyBBbGxvdyBzdXNwZW5kIGNhbGxlciB0byBzZWUgdGhhdCB0aGlzIHRocmVhZCBpcyBzdXNwZW5k
ZWQuCisgICAgLy8gc2VtX3Bvc3QgaXMgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb24uIEl0IG1l
YW5zIHRoYXQgd2UgY2FuIGNhbGwgdGhpcyBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuCisgICAgLy8g
aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMv
eHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMworICAgIC8vCisgICAgLy8gQW5kIHNlbV9w
b3N0IGVtaXRzIG1lbW9yeSBiYXJyaWVyIHRoYXQgZW5zdXJlcyB0aGF0IHN1c3BlbmRlZE1hY2hp
bmVDb250ZXh0IGlzIGNvcnJlY3RseSBzYXZlZC4KKyAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3Jv
dXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9WMV9jaGFwMDQuaHRtbCN0YWdf
MDRfMTEKKyAgICBzZW1fcG9zdCgmdGhyZWFkLT5tX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUp
OworCisgICAgLy8gUmVhY2hpbmcgaGVyZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBibG9j
a2VkIGluIHRoaXMgaGFuZGxlciAodGhpcyBpcyBjb25maWd1cmVkIGJ5IHNpZ2FjdGlvbidzIHNh
X21hc2spLgorICAgIC8vIFNvIGJlZm9yZSBjYWxsaW5nIHNpZ3N1c3BlbmQsIFNpZ1RocmVhZFN1
c3BlbmRSZXN1bWUgdG8gdGhpcyB0aHJlYWQgaXMgZGVmZXJyZWQuIFRoaXMgZW5zdXJlcyB0aGF0
IHRoZSBoYW5kbGVyIGlzIG5vdCBleGVjdXRlZCByZWN1cnNpdmVseS4KKyAgICBzaWdzZXRfdCBi
bG9ja2VkU2lnbmFsU2V0OworICAgIHNpZ2ZpbGxzZXQoJmJsb2NrZWRTaWduYWxTZXQpOworICAg
IHNpZ2RlbHNldCgmYmxvY2tlZFNpZ25hbFNldCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSk7Cisg
ICAgc2lnc3VzcGVuZCgmYmxvY2tlZFNpZ25hbFNldCk7CisKKyAgICAvLyBBbGxvdyByZXN1bWUg
Y2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHJlc3VtZWQuCisgICAgc2VtX3Bvc3Qo
JnRocmVhZC0+bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKIH0KIAotc3RhdGljIFRocmVh
ZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclB0aHJlYWRIYW5kbGUoY29uc3QgcHRo
cmVhZF90JiBwdGhyZWFkSGFuZGxlKQorI2VuZGlmIC8vICFPUyhEQVJXSU4pCisKK3ZvaWQgVGhy
ZWFkOjppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKQogewotICAgIEFTU0VSVCghaWRlbnRp
ZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkSGFuZGxlKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50
aWZpZXJDb3VudCA9IDE7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZpZXJDb3VudCwgc3Rk
OjptYWtlX3VuaXF1ZTxQdGhyZWFkU3RhdGU+KHB0aHJlYWRIYW5kbGUpKTsKLSAgICByZXR1cm4g
aWRlbnRpZmllckNvdW50Kys7CisjaWYgIU9TKERBUldJTikKKyAgICAvLyBTaWduYWwgaGFuZGxl
cnMgYXJlIHByb2Nlc3MgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uCisgICAgLy8gSW50ZW50aW9uYWxs
eSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGluIHRoZSBoYW5kbGVyLgorICAgIC8vIFNp
Z1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBhbGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNp
Z3N1c3BlbmQuCisgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgc2lnZW1wdHlzZXQo
JmFjdGlvbi5zYV9tYXNrKTsKKyAgICBzaWdhZGRzZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lKTsKKworICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSAmc2lnbmFsSGFu
ZGxlclN1c3BlbmRSZXN1bWU7CisgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNB
X1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24s
IDApOworI2VuZGlmCiB9CiAKLXN0YXRpYyBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZUZvcklkZW50
aWZpZXJXaXRoTG9ja0FscmVhZHlIZWxkKFRocmVhZElkZW50aWZpZXIgaWQpCitzdGF0aWMgdm9p
ZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQogewotICAgIHJl
dHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpLT5wdGhyZWFkSGFuZGxlKCk7CisjaWYgIU9TKERBUldJ
TikKKyAgICBzaWdzZXRfdCBtYXNrOworICAgIHNpZ2VtcHR5c2V0KCZtYXNrKTsKKyAgICBzaWdh
ZGRzZXQoJm1hc2ssIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpOworICAgIHB0aHJlYWRfc2lnbWFz
ayhTSUdfVU5CTE9DSywgJm1hc2ssIDApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkKiB3dGZU
aHJlYWRFbnRyeVBvaW50KHZvaWQqIHBhcmFtKQogewotICAgIC8vIEJhbGFuY2VkIGJ5IC5sZWFr
UHRyKCkgaW4gY3JlYXRlVGhyZWFkSW50ZXJuYWwuCisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQ
dHIoKSBpbiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgogICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0
ZDo6dW5pcXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CisKKyAgICBUaHJlYWRIb2xkZXI6OmluaXRp
YWxpemUoKmludm9jYXRpb24tPnRocmVhZCk7CisgICAgaW52b2NhdGlvbi0+dGhyZWFkID0gbnVs
bHB0cjsKKwogICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQor
UmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGVJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRy
eVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKIHsKLSAgICBhdXRvIGludm9jYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwg
ZGF0YSk7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgp
KTsKKyAgICBhdXRvIGludm9jYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9u
SW52b2NhdGlvbj4oZW50cnlQb2ludCwgdGhyZWFkLmdldCgpLCBkYXRhKTsKICAgICBwdGhyZWFk
X3QgdGhyZWFkSGFuZGxlOwogICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CiAgICAgcHRocmVhZF9h
dHRyX2luaXQoJmF0dHIpOwpAQCAtMTg2LDE3ICsxODksMTggQEAgVGhyZWFkSWRlbnRpZmllciBj
cmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRh
LCBjb24KICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7CiAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBv
aW50ICVwIHdpdGggZGF0YSAlcCIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGludm9jYXRpb24uZ2V0
KCkpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgLy8gQmFsYW5jZWQgYnkgc3RkOjp1bmlxdWVfcHRyIGNvbnN0cnVjdG9yIGluIHd0ZlRo
cmVhZEVudHJ5UG9pbnQuCiAgICAgVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uKiBsZWFrZWRJbnZv
Y2F0aW9uID0gaW52b2NhdGlvbi5yZWxlYXNlKCk7CiAgICAgVU5VU0VEX1BBUkFNKGxlYWtlZElu
dm9jYXRpb24pOwogCi0gICAgcmV0dXJuIGVzdGFibGlzaElkZW50aWZpZXJGb3JQdGhyZWFkSGFu
ZGxlKHRocmVhZEhhbmRsZSk7CisgICAgdGhyZWFkLT5lc3RhYmxpc2godGhyZWFkSGFuZGxlKTsK
KyAgICByZXR1cm4gdGhyZWFkOwogfQogCi12b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3Vy
cmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiB7CiAjaWYgSEFWRShQ
VEhSRUFEX1NFVE5BTUVfTlApCiAgICAgcHRocmVhZF9zZXRuYW1lX25wKG5vcm1hbGl6ZVRocmVh
ZE5hbWUodGhyZWFkTmFtZSkpOwpAQCAtMjA1LDEyMyArMjA5LDIzNCBAQCB2b2lkIGluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHRocmVhZE5hbWUpOwogI2VuZGlmCi0KLSAgICBUaHJlYWRJZGVudGlm
aWVyIGlkID0gaWRlbnRpZmllckJ5UHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAg
QVNTRVJUKGlkKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZShpZCk7Cisg
ICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9Ci0gICAg
Ci12b2lkIGNoYW5nZVRocmVhZFByaW9yaXR5KFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGlu
dCBkZWx0YSkKLXsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZTsKLSAgICBBU1NFUlQodGhy
ZWFkSUQpOwogCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7Ci0gICAgICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cldpdGhMb2NrQWxyZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhh
bmRsZSk7Ci0gICAgfQordm9pZCBUaHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKIAogICAg
IGludCBwb2xpY3k7CiAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogCi0gICAgaWYgKHB0
aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkSGFuZGxlLCAmcG9saWN5LCAmcGFyYW0pKQorICAg
IGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOwogCi0g
ICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRIYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsK
KyAgICBwdGhyZWFkX3NldHNjaGVkcGFyYW0obV9oYW5kbGUsIHBvbGljeSwgJnBhcmFtKTsKIH0K
IAotaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQp
CitpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiB7Ci0gICAgcHRocmVhZF90IHB0aHJl
YWRIYW5kbGU7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQorICAgIHB0aHJlYWRfdCBoYW5kbGU7
CiAgICAgewotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGxvY2sgYWNyb3NzIHRoZSBjYWxs
IHRvIGpvaW4sIHNpbmNlIHRoYXQgY2FuIGJsb2NrIG91ciB0aHJlYWQgYW5kIGNhdXNlIGRlYWRs
b2NrLgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
ICAgIHB0aHJlYWRIYW5kbGUgPSBwdGhyZWFkSGFuZGxlRm9ySWRlbnRpZmllcldpdGhMb2NrQWxy
ZWFkeUhlbGQodGhyZWFkSUQpOwotICAgICAgICBBU1NFUlQocHRocmVhZEhhbmRsZSk7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgICAg
ICBoYW5kbGUgPSBtX2hhbmRsZTsKICAgICB9CiAKLSAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJl
YWRfam9pbihwdGhyZWFkSGFuZGxlLCAwKTsKKyAgICBpbnQgam9pblJlc3VsdCA9IHB0aHJlYWRf
am9pbihoYW5kbGUsIDApOwogCiAgICAgaWYgKGpvaW5SZXN1bHQgPT0gRURFQURMSykKLSAgICAg
ICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9j
a2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOworICAgICAgICBMT0dfRVJST1IoIlRocmVh
ZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJlIGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQi
LCBtX2lkKTsKICAgICBlbHNlIGlmIChqb2luUmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIlRo
cmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJsZSB0byBiZSBqb2luZWQuXG4iLCB0aHJlYWRJRCk7
CisgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJl
IGpvaW5lZC5cbiIsIG1faWQpOwogCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11
dGV4KCkpOwotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFk
SUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgQVNTRVJUKHN0YXRlLT5qb2luYWJsZVN0YXRl
KCkgPT0gUHRocmVhZFN0YXRlOjpKb2luYWJsZSk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6
Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGpvaW5hYmxlU3RhdGUoKSA9PSBK
b2luYWJsZSk7CiAKLSAgICAvLyBUaGUgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgc28gY2xl
YW4gdXAgYWZ0ZXIgaXQuCi0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAgICAgICAgdGhy
ZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLSAgICAvLyBUaGUgdGhyZWFkIGhhc24ndCBleGl0
ZWQgeWV0LCBzbyBkb24ndCBjbGVhbiBhbnl0aGluZyB1cC4gSnVzdCBzaWduYWwgdGhhdCB3ZSd2
ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdCBzbyB0aGF0IGl0IHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRz
ZWxmLgotICAgIGVsc2UKLSAgICAgICAgc3RhdGUtPmRpZEpvaW4oKTsKKyAgICAvLyBJZiB0aGUg
dGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwgdGhlbiBkbyBub3RoaW5nLiBJZiB0aGUgdGhyZWFk
IGhhc24ndCBleGl0ZWQgeWV0LCB0aGVuIGp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBq
b2luZWQgb24gaXQuCisgICAgLy8gSW4gYm90aCBjYXNlcywgVGhyZWFkSG9sZGVyOjpkZXN0cnVj
dCgpIHdpbGwgdGFrZSBjYXJlIG9mIGRlc3Ryb3lpbmcgVGhyZWFkLgorICAgIGlmICghaGFzRXhp
dGVkKCkpCisgICAgICAgIGRpZEpvaW4oKTsKIAogICAgIHJldHVybiBqb2luUmVzdWx0OwogfQog
Ci12b2lkIGRldGFjaFRocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQordm9pZCBUaHJl
YWQ6OmRldGFjaCgpCiB7Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBwdGhyZWFkX3QgcHRocmVhZEhhbmRsZSA9
IHB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7
Ci0gICAgQVNTRVJUKHB0aHJlYWRIYW5kbGUpOwotCi0gICAgaW50IGRldGFjaFJlc3VsdCA9IHB0
aHJlYWRfZGV0YWNoKHB0aHJlYWRIYW5kbGUpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGludCBkZXRhY2hSZXN1bHQgPSBwdGhyZWFkX2Rl
dGFjaChtX2hhbmRsZSk7CiAgICAgaWYgKGRldGFjaFJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9S
KCJUaHJlYWRJZGVudGlmaWVyICV1IHdhcyB1bmFibGUgdG8gYmUgZGV0YWNoZWRcbiIsIHRocmVh
ZElEKTsKLQotICAgIFB0aHJlYWRTdGF0ZSogc3RhdGUgPSB0aHJlYWRNYXAoKS5nZXQodGhyZWFk
SUQpOwotICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLT5oYXNFeGl0ZWQoKSkKLSAg
ICAgICAgdGhyZWFkTWFwKCkucmVtb3ZlKHRocmVhZElEKTsKLSAgICBlbHNlCi0gICAgICAgIHRo
cmVhZE1hcCgpLmdldCh0aHJlYWRJRCktPmRpZEJlY29tZURldGFjaGVkKCk7CisgICAgICAgIExP
R19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgdW5hYmxlIHRvIGJlIGRldGFjaGVkXG4i
LCBtX2lkKTsKKworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRpZEJlY29tZURldGFj
aGVkKCk7CiB9CiAKLXZvaWQgdGhyZWFkRGlkRXhpdChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
KQorVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0
aHJlYWRNYXBNdXRleCgpKTsKLSAgICBQdGhyZWFkU3RhdGUqIHN0YXRlID0gdGhyZWFkTWFwKCku
Z2V0KHRocmVhZElEKTsKLSAgICBBU1NFUlQoc3RhdGUpOwotICAgIAotICAgIHN0YXRlLT5kaWRF
eGl0KCk7CisgICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7
CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKIAotICAgIGlm
IChzdGF0ZS0+am9pbmFibGVTdGF0ZSgpICE9IFB0aHJlYWRTdGF0ZTo6Sm9pbmFibGUpCi0gICAg
ICAgIHRocmVhZE1hcCgpLnJlbW92ZSh0aHJlYWRJRCk7CisgICAgLy8gTm90IGEgV1RGLWNyZWF0
ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCisgICAg
UmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICB0aHJl
YWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYoKSk7CisgICAgVGhyZWFkSG9sZGVyOjppbml0aWFs
aXplKCp0aHJlYWQpOworICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCgpOworICAgIHJldHVybiAqdGhyZWFkOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJl
bnRUaHJlYWQoKQorVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiB7Ci0gICAg
VGhyZWFkSWRlbnRpZmllciBpZCA9IFRocmVhZElkZW50aWZpZXJEYXRhOjppZGVudGlmaWVyKCk7
Ci0gICAgaWYgKGlkKQotICAgICAgICByZXR1cm4gaWQ7CisgICAgcmV0dXJuIGN1cnJlbnQoKS5p
ZCgpOworfQogCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlm
aWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgaWQgPSBlc3RhYmxpc2hJZGVudGlmaWVy
Rm9yUHRocmVhZEhhbmRsZShwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSWRlbnRpZmllckRh
dGE6OmluaXRpYWxpemUoaWQpOwotICAgIHJldHVybiBpZDsKK2Jvb2wgVGhyZWFkOjpzaWduYWwo
aW50IHNpZ25hbE51bWJlcikKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNp
Z25hbE51bWJlcik7CisgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nl
c3MuCiB9CiAKLWJvb2wgc2lnbmFsVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIGlu
dCBzaWduYWxOdW1iZXIpCithdXRvIFRocmVhZDo6c3VzcGVuZCgpIC0+IEV4cGVjdGVkPHZvaWQs
IFBsYXRmb3JtU3VzcGVuZEVycm9yPgogewotICAgIHB0aHJlYWRfdCBwdGhyZWFkSGFuZGxlOwot
ICAgIEFTU0VSVCh0aHJlYWRJRCk7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGlk
KCkgIT0gY3VycmVudFRocmVhZCgpLCAiV2UgZG8gbm90IHN1cHBvcnQgc3VzcGVuZGluZyB0aGUg
Y3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRl
eD4gbG9ja2VyKG1fbXV0ZXgpOworI2lmIE9TKERBUldJTikKKyAgICBrZXJuX3JldHVybl90IHJl
c3VsdCA9IHRocmVhZF9zdXNwZW5kKG1fcGxhdGZvcm1UaHJlYWQpOworICAgIGlmIChyZXN1bHQg
IT0gS0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdWx0KTsK
KyAgICByZXR1cm4geyB9OworI2Vsc2UKICAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICAgICAgcHRocmVhZEhhbmRsZSA9IHB0aHJlYWRIYW5k
bGVGb3JJZGVudGlmaWVyV2l0aExvY2tBbHJlYWR5SGVsZCh0aHJlYWRJRCk7Ci0gICAgICAgIEFT
U0VSVChwdGhyZWFkSGFuZGxlKTsKKyAgICAgICAgLy8gRHVyaW5nIHN1c3BlbmQsIHN1c3BlbmQg
b3IgcmVzdW1lIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgZnJvbSB0aGUgb3RoZXIgdGhyZWFkcy4K
KyAgICAgICAgLy8gV2UgdXNlIGdsb2JhbCBsb2NrIGluc3RlYWQgb2YgcGVyIHRocmVhZCBsb2Nr
LgorICAgICAgICAvLyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhc2UsIHRoZXJlIGFyZSB0aHJl
YWRzIEEgYW5kIEIuCisgICAgICAgIC8vIEFuZCBBIGF0dGVtcHQgdG8gc3VzcGVuZCBCIGFuZCBC
IGF0dGVtcHQgdG8gc3VzcGVuZCBBLgorICAgICAgICAvLyBBIGFuZCBCIHNlbmQgc2lnbmFscy4g
QW5kIGxhdGVyLCBzaWduYWxzIGFyZSBkZWxpdmVyZWQgdG8gQSBhbmQgQi4KKyAgICAgICAgLy8g
SW4gdGhhdCBjYXNlLCBib3RoIHdpbGwgYmUgc3VzcGVuZGVkLgorICAgICAgICBXb3JkTG9ja0hv
bGRlciBsb2NrZXIoZ2xvYmFsU3VzcGVuZExvY2spOworICAgICAgICBpZiAoIW1fc3VzcGVuZENv
dW50KSB7CisgICAgICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBsaWtlIHRvIHVzZSBwdGhy
ZWFkX3NpZ3F1ZXVlLiBJdCBhbGxvd3MgdXMgdG8gcGFzcyB0aGUgYXJndW1lbnQgdG8gdGhlIHNp
Z25hbCBoYW5kbGVyLgorICAgICAgICAgICAgLy8gQnV0IGl0IGNhbiBiZSB1c2VkIGluIGEgZmV3
IHBsYXRmb3JtcywgbGlrZSBMaW51eC4KKyAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIHVzZSBU
aHJlYWQqIHN0b3JlZCBpbiB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdG8gcGFzcyBpdCB0byB0
aGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7
CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJl
YWRTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHJlc3VsdCk7CisgICAgICAgICAgICBzZW1fd2FpdCgm
bV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgYmFy
cmllciBlbnN1cmVzIHRoYXQgdGhpcyBvcGVyYXRpb24gaXMgYWx3YXlzIGV4ZWN1dGVkIGFmdGVy
IGFsbCB0aGUgYWJvdmUgcHJvY2Vzc2luZyBpcyBkb25lLgorICAgICAgICAgICAgbV9zdXNwZW5k
ZWQuc3RvcmUodHJ1ZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgICAgIH0KKyAg
ICAgICAgKyttX3N1c3BlbmRDb3VudDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisjZW5k
aWYKK30KKwordm9pZCBUaHJlYWQ6OnJlc3VtZSgpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisjaWYgT1MoREFSV0lOKQorICAgIHRocmVhZF9y
ZXN1bWUobV9wbGF0Zm9ybVRocmVhZCk7CisjZWxzZQorICAgIHsKKyAgICAgICAgLy8gRHVyaW5n
IHJlc3VtZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRo
ZSBvdGhlciB0aHJlYWRzLgorICAgICAgICBXb3JkTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU3Vz
cGVuZExvY2spOworICAgICAgICBpZiAobV9zdXNwZW5kQ291bnQgPT0gMSkgeworICAgICAgICAg
ICAgLy8gV2hlbiBhbGxvd2luZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIgYnkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3Vt
ZSBpcyBhY3R1YWxseSBpc3N1ZWQsCisgICAgICAgICAgICAvLyB0aGUgc2lnbmFsIGhhbmRsZXIg
aXRzZWxmIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4uCisgICAgICAgICAgICAvLyBUaGVyZSBh
cmUgc2V2ZXJhbCB3YXlzIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYW5kbGVyIGludm9jYXRpb24gZm9y
IHN1c3BlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2ln
bmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2lnbmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4K
KyAgICAgICAgICAgIC8vIDIuIFVzZSBzb21lIGFyZ3VtZW50cyB0byBkaXN0aW5ndWlzaCBzdXNw
ZW5kIGFuZCByZXN1bWUgaW4gdGhlIGhhbmRsZXIuIElmIHB0aHJlYWRfc2lncXVldWUgY2FuIGJl
IHVzZWQsIHdlIGNhbiB0YWtlIHRoaXMuCisgICAgICAgICAgICAvLyAzLiBVc2UgdGhyZWFkIGxv
Y2FsIHN0b3JhZ2Ugd2l0aCBhdG9taWMgdmFyaWFibGVzIGluIHRoZSBzaWduYWwgaGFuZGxlci4K
KyAgICAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdlIHRha2UgKDMpLiBzdXNw
ZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgorICAgICAgICAgICAgdGFyZ2V0
VGhyZWFkLnN0b3JlKHRoaXMpOworICAgICAgICAgICAgaWYgKHB0aHJlYWRfa2lsbChtX2hhbmRs
ZSwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSkgPT0gRVNSQ0gpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgc2VtX3dhaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7
CisgICAgICAgICAgICAvLyBSZWxlYXNlIGJhcnJpZXIgZW5zdXJlcyB0aGF0IHRoaXMgb3BlcmF0
aW9uIGlzIGFsd2F5cyBleGVjdXRlZCBhZnRlciBhbGwgdGhlIGFib3ZlIHByb2Nlc3NpbmcgaXMg
ZG9uZS4KKyAgICAgICAgICAgIG1fc3VzcGVuZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKKyAgICAgICAgfQorICAgICAgICAtLW1fc3VzcGVuZENvdW50OworICAg
IH0KKyNlbmRpZgorfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVycykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcihtX211dGV4KTsKKyNpZiBPUyhEQVJXSU4pCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShY
ODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5U
OworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7
CisjZWxpZiBDUFUoUFBDKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IFBQQ19USFJFQURfU1RB
VEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURf
U1RBVEU7CisjZWxpZiBDUFUoUFBDNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gUFBDX1RI
UkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQ
UENfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3Vu
dCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhy
ZWFkX2dldF9zdGF0ZShtX3BsYXRmb3JtVGhyZWFkLCBmbGF2b3IsICh0aHJlYWRfc3RhdGVfdCkm
cmVnaXN0ZXJzLCAmdXNlckNvdW50KTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykg
eworICAgICAgICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BS
RVRUWV9GVU5DVElPTiwgIkphdmFTY3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZhaWxlZCBiZWNh
dXNlIHRocmVhZF9nZXRfc3RhdGUgcmV0dXJuZWQgYW4gZXJyb3IgKCVkKS4gVGhpcyBpcyBwcm9i
YWJseSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgaW5zaWRlIFJvc2V0dGEsIHdoaWNoIGlzIG5vdCBz
dXBwb3J0ZWQuIiwgcmVzdWx0KTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgcmV0dXJu
IHVzZXJDb3VudCAqIHNpemVvZih1aW50cHRyX3QpOworI2VsaWYgKE9TKEZSRUVCU0QpIHx8IGRl
ZmluZWQoX19HTElCQ19fKSkgJiYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0p
IHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKQorICAgIHJlZ2lzdGVycyA9IG1fc3VzcGVuZGVk
TWFjaGluZUNvbnRleHQ7CisgICAgcmV0dXJuIHNpemVvZihQbGF0Zm9ybVJlZ2lzdGVycyk7Cisj
ZWxpZiBPUyhPUEVOQlNEKQorICAgIC8vIGh0dHA6Ly9tYW4ub3BlbmJzZC5vcmcvcHRocmVhZF9z
dGFja3NlZ19ucC4zCisgICAgc3RhY2tfdCBzczsKKyAgICBpbnQgcmMgPSBwdGhyZWFkX3N0YWNr
c2VnX25wKG1faGFuZGxlLCAmc3MpOworICAgIHJlZ2lzdGVycy5zdGFja1BvaW50ZXIgPSBzcy5z
c19zcDsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRl
OworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGUpOworI2lmIEhBVkUoUFRIUkVBRF9O
UF9IKSB8fCBPUyhORVRCU0QpCisgICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZA
a2RlLm9yZworICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAobV9oYW5kbGUsICZhdHRyaWJ1dGUpOwor
I2Vsc2UKKyAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVy
IFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUgZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcworICAgIHB0
aHJlYWRfZ2V0YXR0cl9ucChtX2hhbmRsZSwgJmF0dHJpYnV0ZSk7CisjZW5kaWYKKworICAgIHZv
aWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7CisgICAgaW50IHJj
ID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZhdHRyaWJ1dGUsICZzdGFja0Jhc2UsICZzdGFja1Np
emUpOworICAgIEFTU0VSVF9VTlVTRUQocmMsICFyYyk7CisgICAgQVNTRVJUKHN0YWNrQmFzZSk7
CisgICAgcmVnaXN0ZXJzLnN0YWNrUG9pbnRlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jh
c2UpICsgc3RhY2tTaXplOworCisgICAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHJpYnV0ZSk7
CisKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIFRocmVhZDo6ZGlkRXhpdCgpCit7
CisgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7CisgICAg
bV9kaWRFeGl0ID0gdHJ1ZTsKK30KKwordm9pZCBUaHJlYWQ6OmVzdGFibGlzaChwdGhyZWFkX3Qg
aGFuZGxlKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0
ZXgpOworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIGlmICghbV9pZCkgeworICAgICAgICBz
dGF0aWMgc3RkOjphdG9taWM8VGhyZWFkSWRlbnRpZmllcj4gcHJvdmlkZXIgeyAwIH07CisgICAg
ICAgIG1faWQgPSArK3Byb3ZpZGVyOworI2lmIE9TKERBUldJTikKKyAgICAgICAgbV9wbGF0Zm9y
bVRocmVhZCA9IHB0aHJlYWRfbWFjaF90aHJlYWRfbnAoaGFuZGxlKTsKKyNlbmRpZgogICAgIH0K
LSAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwocHRocmVhZEhhbmRsZSwgc2lnbmFsTnVtYmVy
KTsKLSAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3VjY2Vzcy4KIH0KIAog
TXV0ZXg6Ok11dGV4KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IDU0YjQzZWZlZjM1Y2Q2
NjMyYTcwMDgxNTA3YTViMzc5OWRlZmI2ZmIuLjc4ZjE3MGE2OGU5N2JmYjcxOTUwZWQ3MWEzOWJm
ZTM4Y2EwMWIxNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtODgsMjAgKzg4LDE0IEBA
CiAKICNpZiBPUyhXSU5ET1dTKQogCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKLSNpbmNsdWRlICJk
dG9hLmgiCi0jaW5jbHVkZSAiZHRvYS9jYWNoZWQtcG93ZXJzLmgiCi0KLSNpbmNsdWRlICJNYWlu
VGhyZWFkLmgiCi0jaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCiAjaW5jbHVk
ZSA8cHJvY2Vzcy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyU2VlZC5oPgotI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIuaD4KIAogI2lmIEhBVkUoRVJSTk9f
SCkKICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMTA5LDYgKzEwMywxOCBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAorVGhyZWFkOjpUaHJlYWQoKQoreworfQorCitUaHJlYWQ6On5UaHJlYWQoKQorewor
ICAgIC8vIEl0IGlzIE9LIGJlY2F1c2UgRkxTQWxsb2MncyBjYWxsYmFjayB3aWxsIGJlIGNhbGxl
ZCBldmVuIGJlZm9yZSB0aGVyZSBhcmUgc29tZSBvcGVuIGhhbmRsZXMuCisgICAgLy8gVGhpcyBl
YXNpbHkgZW5zdXJlcyB0aGF0IGFsbCB0aGUgdGhyZWFkIHJlc291cmNlcyBhcmUgYXV0b21hdGlj
YWxseSBjbG9zZWQuCisgICAgaWYgKG1faGFuZGxlKQorICAgICAgICBDbG9zZUhhbmRsZShtX2hh
bmRsZSk7Cit9CisKIC8vIE1TX1ZDX0VYQ0VQVElPTiwgVEhSRUFETkFNRV9JTkZPLCBhbmQgc2V0
VGhyZWFkTmFtZUludGVybmFsIGFsbCBjb21lIGZyb20gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5j
b20vZW4tdXMvbGlicmFyeS94Y2Iyejhocy5hc3B4Pi4KIHN0YXRpYyBjb25zdCBEV09SRCBNU19W
Q19FWENFUFRJT04gPSAweDQwNkQxMzg4OwogCkBAIC0xMjEsNyArMTI3LDcgQEAgdHlwZWRlZiBz
dHJ1Y3QgdGFnVEhSRUFETkFNRV9JTkZPIHsKIH0gVEhSRUFETkFNRV9JTkZPOwogI3ByYWdtYSBw
YWNrKHBvcCkKIAotdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNo
YXIqIHN6VGhyZWFkTmFtZSkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZElu
dGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKIHsKICNpZiBDT01QSUxFUihNSU5HVykK
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRocmVhZCBuYW1lIHNldHRpbmcgd2l0aCBNaW5nVy4K
QEAgLTEyOSw3ICsxMzUsNyBAQCB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwo
Y29uc3QgY2hhciogc3pUaHJlYWROYW1lKQogI2Vsc2UKICAgICBUSFJFQUROQU1FX0lORk8gaW5m
bzsKICAgICBpbmZvLmR3VHlwZSA9IDB4MTAwMDsKLSAgICBpbmZvLnN6TmFtZSA9IG5vcm1hbGl6
ZVRocmVhZE5hbWUoc3pUaHJlYWROYW1lKTsKKyAgICBpbmZvLnN6TmFtZSA9IFRocmVhZDo6bm9y
bWFsaXplVGhyZWFkTmFtZShzelRocmVhZE5hbWUpOwogICAgIGluZm8uZHdUaHJlYWRJRCA9IEdl
dEN1cnJlbnRUaHJlYWRJZCgpOwogICAgIGluZm8uZHdGbGFncyA9IDA7CiAKQEAgLTE0MCw3MCAr
MTQ2LDI4IEBAIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFy
KiBzelRocmVhZE5hbWUpCiAjZW5kaWYKIH0KIAotc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRl
eCgpCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCkKIHsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0K
LQotdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpc0luaXRp
YWxpemVkOwotICAgIAotICAgIGlmIChpc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OmluaXRpYWxpemUoKTsKLSAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0
cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAvLyBz
byBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBoZXJlLgotICAgIFN0cmluZ0lt
cGw6OmVtcHR5KCk7Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICBpbml0aWFsaXplUmFuZG9t
TnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgd3RmVGhyZWFkRGF0YSgpOwotICAgIGluaXRpYWxpemVE
YXRlcygpOwogfQogCi1zdGF0aWMgSGFzaE1hcDxEV09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkK
K3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBwYXJh
bSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxEV09SRCwgSEFORExFPj4g
bWFwOwotICAgIHJldHVybiBtYXA7Ci19CisgICAgLy8gQmFsYW5jZWQgYnkgLmxlYWtQdHIoKSBp
biBUaHJlYWQ6OmNyZWF0ZUludGVybmFsLgorICAgIGF1dG8gaW52b2NhdGlvbiA9IHN0ZDo6dW5p
cXVlX3B0cjxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24+KHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAKLXN0YXRpYyB2b2lkIHN0b3JlVGhyZWFkSGFuZGxl
QnlJZGVudGlmaWVyKERXT1JEIHRocmVhZElELCBIQU5ETEUgdGhyZWFkSGFuZGxlKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQoIXRocmVh
ZE1hcCgpLmNvbnRhaW5zKHRocmVhZElEKSk7Ci0gICAgdGhyZWFkTWFwKCkuYWRkKHRocmVhZElE
LCB0aHJlYWRIYW5kbGUpOwotfQotCi1zdGF0aWMgSEFORExFIHRocmVhZEhhbmRsZUZvcklkZW50
aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhy
ZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19CisgICAg
VGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCppbnZvY2F0aW9uLT50aHJlYWQpOworICAgIGludm9j
YXRpb24tPnRocmVhZCA9IG51bGxwdHI7CiAKLXN0YXRpYyB2b2lkIGNsZWFyVGhyZWFkSGFuZGxl
Rm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11dGV4TG9ja2VyIGxv
Y2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMo
aWQpKTsKLSAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaWQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQg
X19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5UG9pbnQodm9pZCogcGFyYW0pCi17Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2NhdGlvbihzdGF0aWNfY2Fz
dDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwogICAgIGludm9jYXRpb24tPmZ1
bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKLVRocmVhZElk
ZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwg
dm9pZCogZGF0YSwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkKK1JlZlB0cjxUaHJlYWQ+IFRocmVh
ZDo6Y3JlYXRlSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQb2ludCwgdm9pZCogZGF0YSwg
Y29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9w
dFJlZigqbmV3IFRocmVhZCgpKTsKICAgICB1bnNpZ25lZCB0aHJlYWRJZGVudGlmaWVyID0gMDsK
ICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gMDsKLSAgICBhdXRvIGludm9jYXRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4oZW50cnlQb2ludCwg
ZGF0YSk7CisgICAgYXV0byBpbnZvY2F0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRGdW5j
dGlvbkludm9jYXRpb24+KGVudHJ5UG9pbnQsIHRocmVhZC5wdHIoKSwgZGF0YSk7CiAgICAgSEFO
RExFIHRocmVhZEhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihfYmVnaW50aHJlYWRl
eCgwLCAwLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBpbnZvY2F0aW9uLmdldCgpLCAwLCAmdGhyZWFk
SWRlbnRpZmllcikpOwogICAgIGlmICghdGhyZWFkSGFuZGxlKSB7CiAjaWYgIUhBVkUoRVJSTk9f
SCkKQEAgLTIxOSw1NSArMTgzLDExNyBAQCBUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZElu
dGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbgogICAgIFVO
VVNFRF9QQVJBTShsZWFrZWRJbnZvY2F0aW9uKTsKIAogICAgIHRocmVhZElEID0gc3RhdGljX2Nh
c3Q8VGhyZWFkSWRlbnRpZmllcj4odGhyZWFkSWRlbnRpZmllcik7Ci0gICAgc3RvcmVUaHJlYWRI
YW5kbGVCeUlkZW50aWZpZXIodGhyZWFkSWRlbnRpZmllciwgdGhyZWFkSGFuZGxlKTsKIAotICAg
IHJldHVybiB0aHJlYWRJRDsKKyAgICB0aHJlYWQtPmVzdGFibGlzaCh0aHJlYWRIYW5kbGUsIHRo
cmVhZElkZW50aWZpZXIpOworICAgIHJldHVybiB0aHJlYWQ7CiB9CiAKLXZvaWQgY2hhbmdlVGhy
ZWFkUHJpb3JpdHkoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwgaW50IGRlbHRhKQordm9pZCBU
aHJlYWQ6OmNoYW5nZVByaW9yaXR5KGludCBkZWx0YSkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQp
OwotCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIo
dGhyZWFkSUQpOwotICAgIGlmICghdGhyZWFkSGFuZGxlKQotICAgICAgICBMT0dfRVJST1IoIlRo
cmVhZElkZW50aWZpZXIgJXUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFk
IiwgdGhyZWFkSUQpOwotCi0gICAgU2V0VGhyZWFkUHJpb3JpdHkodGhyZWFkSGFuZGxlLCBUSFJF
QURfUFJJT1JJVFlfTk9STUFMICsgZGVsdGEpOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIFNldFRocmVhZFByaW9yaXR5KG1faGFuZGxlLCBU
SFJFQURfUFJJT1JJVFlfTk9STUFMICsgZGVsdGEpOwogfQogCi1pbnQgd2FpdEZvclRocmVhZENv
bXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKK2ludCBUaHJlYWQ6OndhaXRGb3JD
b21wbGV0aW9uKCkKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOwotICAgIAotICAgIEhBTkRMRSB0
aHJlYWRIYW5kbGUgPSB0aHJlYWRIYW5kbGVGb3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBp
ZiAoIXRocmVhZEhhbmRsZSkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVyICV1
IGRpZCBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmUgdGhyZWFkIHdoZW4gdHJ5aW5nIHRvIHF1
aXQiLCB0aHJlYWRJRCk7Ci0gCi0gICAgRFdPUkQgam9pblJlc3VsdCA9IFdhaXRGb3JTaW5nbGVP
YmplY3QodGhyZWFkSGFuZGxlLCBJTkZJTklURSk7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICB7
CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBoYW5kbGUgPSBtX2hhbmRsZTsKKyAgICB9CisKKyAgICBEV09SRCBqb2luUmVzdWx0
ID0gV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIElORklOSVRFKTsKICAgICBpZiAoam9pblJl
c3VsdCA9PSBXQUlUX0ZBSUxFRCkKLSAgICAgICAgTE9HX0VSUk9SKCJUaHJlYWRJZGVudGlmaWVy
ICV1IHdhcyBmb3VuZCB0byBiZSBkZWFkbG9ja2VkIHRyeWluZyB0byBxdWl0IiwgdGhyZWFkSUQp
OworICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIGZvdW5kIHRvIGJl
IGRlYWRsb2NrZWQgdHJ5aW5nIHRvIHF1aXQiLCBtX2lkKTsKKworICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIEFTU0VSVChqb2luYWJsZVN0YXRl
KCkgPT0gSm9pbmFibGUpOwogCi0gICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKLSAgICBj
bGVhclRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIC8vIFRoZSB0aHJl
YWQgaGFzIGFscmVhZHkgZXhpdGVkLCBkbyBub3RoaW5nLgorICAgIC8vIFRoZSB0aHJlYWQgaGFz
bid0IGV4aXRlZCB5ZXQsIHNvIGRvbid0IGNsZWFuIGFueXRoaW5nIHVwLiBKdXN0IHNpZ25hbCB0
aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0IHNvIHRoYXQgaXQgd2lsbCBjbGVhbiB1cCBh
ZnRlciBpdHNlbGYuCisgICAgaWYgKCFoYXNFeGl0ZWQoKSkKKyAgICAgICAgZGlkSm9pbigpOwog
CiAgICAgcmV0dXJuIGpvaW5SZXN1bHQ7CiB9CiAKLXZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQpCit2b2lkIFRocmVhZDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBXZSBm
b2xsb3cgdGhlIHB0aHJlYWQgc2VtYW50aWNzOiBldmVuIGFmdGVyIHRoZSBkZXRhY2ggaXMgY2Fs
bGVkLAorICAgIC8vIHdlIGNhbiBzdGlsbCBwZXJmb3JtIHZhcmlvdXMgb3BlcmF0aW9ucyBvbnRv
IHRoZSB0aHJlYWQuIEZvciBleGFtcGxlLAorICAgIC8vIHdlIGNhbiBkbyBwdGhyZWFkX2tpbGwg
Zm9yIHRoZSBkZXRhY2hlZCB0aHJlYWQuIFRoZSBwcm9ibGVtIGluIFdpbmRvd3MKKyAgICAvLyBp
cyB0aGF0IGNsb3NpbmcgSEFORExFIGxvc2VzIHRoZSB3YXkgdG8gZG8gc3VjaCBvcGVyYXRpb25z
LgorICAgIC8vIFRvIGRvIHNvLCB3ZSBkbyBub3RoaW5nIGhlcmUgaW4gV2luZG93cy4gT3JpZ2lu
YWwgZGV0YWNoJ3MgcHVycG9zZSwKKyAgICAvLyByZWxlYXNpbmcgdGhyZWFkIHJlc291cmNlIHdo
ZW4gdGhlIHRocmVhZCBleGl0cywgd2lsbCBiZSBhY2hpZXZlZCBieQorICAgIC8vIEZsc0NhbGxi
YWNrIGF1dG9tYXRpY2FsbHkuIEZsc0NhbGxiYWNrIHdpbGwgY2FsbCBDbG9zZUhhbmRsZSB0byBj
bGVhbiB1cAorICAgIC8vIHJlc291cmNlLiBTbyBpbiB0aGlzIGZ1bmN0aW9uLCB3ZSBqdXN0IG1h
cmsgdGhlIHRocmVhZCBhcyBkZXRhY2hlZCB0bworICAgIC8vIGF2b2lkIGNhbGxpbmcgd2FpdEZv
ckNvbXBsZXRpb24gZm9yIHRoaXMgdGhyZWFkLgorICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGlmICghaGFzRXhpdGVkKCkpCisgICAgICAgIGRp
ZEJlY29tZURldGFjaGVkKCk7Cit9CisKK2F1dG8gVGhyZWFkOjpzdXNwZW5kKCkgLT4gRXhwZWN0
ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lU
SF9NRVNTQUdFKGlkKCkgIT0gY3VycmVudFRocmVhZCgpLCAiV2UgZG8gbm90IHN1cHBvcnQgc3Vz
cGVuZGluZyB0aGUgY3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOworICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIERXT1JEIHJlc3VsdCA9IFN1c3Bl
bmRUaHJlYWQobV9oYW5kbGUpOworICAgIGlmIChyZXN1bHQgIT0gKERXT1JEKS0xKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bHQpOworfQorCisv
LyBEdXJpbmcgcmVzdW1lLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVk
IGZyb20gdGhlIG90aGVyIHRocmVhZHMuCit2b2lkIFRocmVhZDo6cmVzdW1lKCkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBSZXN1bWVU
aHJlYWQobV9oYW5kbGUpOworfQorCitzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKIHsKLSAgICBBU1NFUlQodGhyZWFkSUQpOworICAgIHN0
ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIHJlZ2lzdGVy
cy5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0lOVEVHRVIgfCBDT05URVhUX0NPTlRST0w7CisgICAg
R2V0VGhyZWFkQ29udGV4dChtX2hhbmRsZSwgJnJlZ2lzdGVycyk7CisgICAgcmV0dXJuIHNpemVv
ZihDT05URVhUKTsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQoreworICAgIFRocmVh
ZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQor
ICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisKKyAgICAvLyBOb3QgYSBXVEYtY3JlYXRl
ZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KKyAgICBS
ZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKKworICAgIEhBTkRM
RSBoYW5kbGU7CisgICAgYm9vbCBpc1N1Y2Nlc3NmdWwgPSBEdXBsaWNhdGVIYW5kbGUoR2V0Q3Vy
cmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFRocmVhZCgpLCBHZXRDdXJyZW50UHJvY2VzcygpLCAm
aGFuZGxlLCAwLCBGQUxTRSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChpc1N1Y2Nlc3NmdWwpOwogCi0gICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhh
bmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotICAgIGlmICh0aHJlYWRIYW5kbGUpCi0gICAg
ICAgIENsb3NlSGFuZGxlKHRocmVhZEhhbmRsZSk7Ci0gICAgY2xlYXJUaHJlYWRIYW5kbGVGb3JJ
ZGVudGlmaWVyKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPmVzdGFibGlzaChoYW5kbGUsIGN1cnJl
bnRJRCgpKTsKKyAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUodGhyZWFkLmdldCgpKTsKKyAg
ICByZXR1cm4gdGhyZWFkLmdldCgpOwogfQogCi1UaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJl
YWQoKQorVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiB7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRocmVhZElkZW50aWZpZXI+KEdldEN1cnJlbnRUaHJlYWRJZCgpKTsKIH0K
IAordm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIG1fZGlkRXhpdCA9IHRydWU7Cit9CisKK3ZvaWQg
VGhyZWFkOjplc3RhYmxpc2goSEFORExFIGhhbmRsZSwgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsK
KyAgICBtX2hhbmRsZSA9IGhhbmRsZTsKKyAgICBtX2lkID0gdGhyZWFkSUQ7Cit9CisKIE11dGV4
OjpNdXRleCgpCiB7CiAgICAgbV9tdXRleC5tX3JlY3Vyc2lvbkNvdW50ID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuY3BwCmluZGV4IGIyYTBhNzlmNGFiNWFhYzI4OWIxNjlmOTJiYmMxYTgwNTg1MmNhMzIuLjk3
MzBmY2YwZjA5MjFmZGVkOTBmODlmMTI5MGU3NzQ5MGI1Mzk3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNw
cApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6Y29uY3VycmVudEFwcGx5KHNpemVf
dCBpdGVyYXRpb25zLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpegogCiAgICAgICAgICAg
ICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0aHJlYWRDb3VudCk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgewotICAgICAg
ICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoY3JlYXRlVGhyZWFkKFN0cmluZzo6Zm9ybWF0KCJU
aHJlYWRQb29sIFdvcmtlciAldSIsIGkpLnV0ZjgoKS5kYXRhKCksIFt0aGlzXSB7CisgICAgICAg
ICAgICAgICAgbV93b3JrZXJzLmFwcGVuZChUaHJlYWQ6OmNyZWF0ZShTdHJpbmc6OmZvcm1hdCgi
VGhyZWFkUG9vbCBXb3JrZXIgJXUiLCBpKS51dGY4KCkuZGF0YSgpLCBbdGhpc10gewogICAgICAg
ICAgICAgICAgICAgICB0aHJlYWRCb2R5KCk7CiAgICAgICAgICAgICAgICAgfSkpOwogICAgICAg
ICAgICAgfQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgV29ya1F1ZXVlOjpjb25jdXJyZW50QXBw
bHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoc2l6CiAgICAg
ICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbjsKICAgICAgICAgRGVxdWU8Y29uc3Qgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPio+IG1fcXVldWU7CiAKLSAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IG1fd29ya2VyczsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBtX3dvcmtlcnM7
CiAgICAgfTsKIAogICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8VGhyZWFkUG9vbD4gdGhy
ZWFkUG9vbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNl
L1dURi93dGYvV29ya1F1ZXVlLmgKaW5kZXggYTQ3ZjIxZTIwZDMxYmM4YmY3MzE4ZjQxYjk1N2Fi
MzY2YzE5MTUwMy4uNzYzNDVjMDY5MzE2NGY2OGNhNGIxYzY2NDQ4NGEyNzNjYzZlOGJlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBjbGFzcyBXb3JrUXVldWUgZmluYWwgOiBw
dWJsaWMgRnVuY3Rpb25EaXNwYXRjaGVyIHsKIAogICAgIEhBTkRMRSBtX3RpbWVyUXVldWU7CiAj
ZWxpZiBVU0UoR0xJQl9FVkVOVF9MT09QKSB8fCBVU0UoR0VORVJJQ19FVkVOVF9MT09QKQotICAg
IFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVldWVUaHJlYWQ7CisgICAgUmVmUHRyPFRocmVhZD4g
bV93b3JrUXVldWVUaHJlYWQ7CiAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
TXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAg
UnVuTG9vcCogbV9ydW5Mb29wOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvV29y
a1F1ZXVlQ29jb2EuY3BwIGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3Bw
CmluZGV4IDFhNzIxOWFkMjU5ZWQ3NTk3MmE1YTQ1OGM1YzQ4NDk3YTM4OGU0ZDMuLjU5ZWUxZjg1
YjQzNWNlMWE3MmY1MDUwZjRkZjYyZWZjZmJiYzgyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9X
b3JrUXVldWVDb2NvYS5jcHAKQEAgLTQ5LDE1ICs0OSwxNSBAQCBzdGF0aWMgZGlzcGF0Y2hfcW9z
X2NsYXNzX3QgZGlzcGF0Y2hRT1NDbGFzcyhXb3JrUXVldWU6OlFPUyBxb3MpCiB7CiAgICAgc3dp
dGNoIChxb3MpIHsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmU6Ci0g
ICAgICAgIHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZF
KTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNF
Ul9JTlRFUkFDVElWRSk7CiAgICAgY2FzZSBXb3JrUXVldWU6OlFPUzo6VXNlckluaXRpYXRlZDoK
LSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVE
KTsKKyAgICAgICAgcmV0dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNF
Ul9JTklUSUFURUQpOwogICAgIGNhc2UgV29ya1F1ZXVlOjpRT1M6OkRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19ERUZBVUxUKTsKKyAgICAgICAgcmV0
dXJuIFRocmVhZDo6YWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfREVGQVVMVCk7CiAgICAgY2Fz
ZSBXb3JrUXVldWU6OlFPUzo6VXRpbGl0eToKLSAgICAgICAgcmV0dXJuIGFkanVzdGVkUU9TQ2xh
c3MoUU9TX0NMQVNTX1VUSUxJVFkpOworICAgICAgICByZXR1cm4gVGhyZWFkOjphZGp1c3RlZFFP
U0NsYXNzKFFPU19DTEFTU19VVElMSVRZKTsKICAgICBjYXNlIFdvcmtRdWV1ZTo6UU9TOjpCYWNr
Z3JvdW5kOgotICAgICAgICByZXR1cm4gYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfQkFDS0dS
T1VORCk7CisgICAgICAgIHJldHVybiBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNT
X0JBQ0tHUk9VTkQpOwogICAgIH0KIH0KICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9X
b3JrUXVldWVHZW5lcmljLmNwcAppbmRleCA5MzRhMzhjYmJlNjRiYmZmYWViNGQzN2RmMWI4ZDk5
NTJiODg1MzQ0Li5kYTg3NWQxZmEwNGNlZjUyNGIwZGMxODZiMzlhNDYyZDY4MDQ0NjMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFt
ZSwgVHlwZSwgUU9TKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxv
b3BDb25kaXRpb25NdXRleCk7Ci0gICAgbV93b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVUaHJlYWQo
bmFtZSwgW3RoaXNdIHsKKyAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKG5h
bWUsIFt0aGlzXSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
aW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleCk7CiAgICAgICAgICAgICBtX3J1bkxvb3Ag
PSAmUnVuTG9vcDo6Y3VycmVudCgpOwpAQCAtNTEsOCArNTEsOCBAQCB2b2lkIFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAgICBpZiAobV9ydW5Mb29wKQogICAgICAgICBtX3J1bkxv
b3AtPnN0b3AoKTsKICAgICBpZiAobV93b3JrUXVldWVUaHJlYWQpIHsKLSAgICAgICAgZGV0YWNo
VGhyZWFkKG1fd29ya1F1ZXVlVGhyZWFkKTsKLSAgICAgICAgbV93b3JrUXVldWVUaHJlYWQgPSAw
OworICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZC0+ZGV0YWNoKCk7CisgICAgICAgIG1fd29ya1F1
ZXVlVGhyZWFkID0gbnVsbHB0cjsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcAppbmRleCBiMjk0MTk0NDRlNzQy
NzM2YTY3ZGMwYzFhYTg1MWRlYzNhZTU4N2U0Li5mZmQ0MDA4NTViODI5M2E4YjVhM2MzYWViMjNh
Yjc3YWFmNWE3ZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9saW51eC9NZW1vcnlQcmVz
c3VyZUhhbmRsZXJMaW51eC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvbGludXgvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyTGludXguY3BwCkBAIC0xMTksNyArMTE5LDEwIEBAIE1lbW9yeVByZXNzdXJl
SGFuZGxlcjo6RXZlbnRGRFBvbGxlcjo6RXZlbnRGRFBvbGxlcihpbnQgZmQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoCiAgICAgfSwgdGhpcywgbnVsbHB0cik7CiAgICAgZ19zb3VyY2VfYXR0YWNoKG1f
c291cmNlLmdldCgpLCBudWxscHRyKTsKICNlbHNlCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRo
cmVhZCgiV1RGOiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIiLCBbdGhpc10geyByZWFkQW5kTm90aWZ5
KCk7IH0KKyAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJXVEY6IE1lbW9yeVByZXNzdXJl
SGFuZGxlciIsCisgICAgICAgIFt0aGlzXSB7CisgICAgICAgICAgICByZWFkQW5kTm90aWZ5KCk7
CisgICAgICAgIH0pOwogI2VuZGlmCiB9CiAKQEAgLTEyOSw3ICsxMzIsNyBAQCBNZW1vcnlQcmVz
c3VyZUhhbmRsZXI6OkV2ZW50RkRQb2xsZXI6On5FdmVudEZEUG9sbGVyKCkKICNpZiBVU0UoR0xJ
QikKICAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsKICNlbHNlCi0gICAgZGV0
YWNoVGhyZWFkKG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKICNlbmRpZgog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKaW5kZXggZjMyNGU4YjYxZGQ0MWZh
MDU2MDg2M2I2YzU4MTkxMGY4NjdkMzZlYi4uYTY0NzNkMDdiNjdlYWNjODZiZTdhNGViNjk3NDk4
OTNlYzYxNDk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL01haW5UaHJlYWRXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcApAQCAtNjQsNyAr
NjQsNyBAQCB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQogICAgICAgICBDV19V
U0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIDAsIDApOwog
ICAgIHRocmVhZGluZ0ZpcmVkTWVzc2FnZSA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZVcoTCJjb20u
YXBwbGUuV2ViS2l0Lk1haW5UaHJlYWRGaXJlZCIpOwogCi0gICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRJbnRlcm5hbCgiTWFpbiBUaHJlYWQiKTsKKyAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJy
ZW50VGhyZWFkSW50ZXJuYWwoIk1haW4gVGhyZWFkIik7CiB9CiAKIHZvaWQgc2NoZWR1bGVEaXNw
YXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IDg3NDc2NDM4Y2FlNjVh
NjM4N2Q5MDFhNzUyODgxNWVjOTU0N2YyMzIuLjljZDNkYjRkMWJjMTRhMzYxNzMyMWFiMDA1YTAx
OTYyMDUyNzgyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC01Niw3ICs1Niw3IEBAIElEQlNlcnZlcjo6SURC
U2VydmVyKElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikK
ICAgICA6IG1fYmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCiB7
CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25Mb2NrKTsK
LSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRF
bnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKKyAgICBtX3RocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4
ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAogSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVI
YW5kbGVyJiBmaWxlSGFuZGxlcikKQEAgLTY2LDcgKzY2LDcgQEAgSURCU2VydmVyOjpJREJTZXJ2
ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZVRl
bXBvcmEKICAgICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIs
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKIAogICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIobV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9jayk7Ci0gICAgbV90aHJlYWRJRCA9
IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRl
eGVkRGF0YWJhc2UgU2VydmVyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJREJT
ZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVy
Iik7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpyZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlv
blRvQ2xpZW50JiBjb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDI1NmNkNTA3ZTZlNmQ3ZjY1NmVlY2Uw
YzExOTg5NDhmZDkyM2RhMWQuLjkzNGExZDE3NDUyOTA4NDI4YTNhZTZlMGVkN2U1MTBhOWE5Y2E2
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxJREJTZXJ2ZXI+IHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SURC
Q29ubmVjdGlvblRvQ2xpZW50Pj4gbV9jb25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0
YWJhc2VJZGVudGlmaWVyLCBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRh
dGFiYXNlTWFwOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAg
IFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkIHsgbnVsbHB0ciB9OwogICAgIExvY2sgbV9kYXRhYmFz
ZVRocmVhZENyZWF0aW9uTG9jazsKICAgICBMb2NrIG1fbWFpblRocmVhZFJlcGx5TG9jazsKICAg
ICBib29sIG1fbWFpblRocmVhZFJlcGx5U2NoZWR1bGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKaW5k
ZXggMjkyZjA1YjhjZDUwNmUyMjlhZTZiOGJkODYyOWMwOTU0ZDE4NDU5Yi4uN2NmN2FmOGZlYTJl
MWU2N2Q1MjM3Yzg3MWEwMTViM2M0OTAwYTI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKQEAgLTM5LDcgKzM5LDcg
QEAgQXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKCkKIHsKICAgICAvLyBTdGFy
dCB3b3JrZXIgdGhyZWFkLgogICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0
ZXgpOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQXN5bmNBdWRpb0RlY29kZXI6OnRo
cmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVjb2RlciIpOworICAgIG1fdGhyZWFkID0gVGhyZWFk
OjpjcmVhdGUoQXN5bmNBdWRpb0RlY29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVj
b2RlciIpOwogfQogCiBBc3luY0F1ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKQEAg
LTQ3LDggKzQ3LDggQEAgQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCiAg
ICAgbV9xdWV1ZS5raWxsKCk7CiAgICAgCiAgICAgLy8gU3RvcCB0aHJlYWQuCi0gICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IDA7CisgICAg
bV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgbV90aHJlYWQgPSBudWxscHRyOwog
fQogCiB2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpkZWNvZGVBc3luYyhSZWY8QXJyYXlCdWZmZXI+
JiYgYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFj
az4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmIGVycm9y
Q2FsbGJhY2spCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxv
b3AoKQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCiAgICAgewotICAgICAgICAvLyBX
YWl0IGZvciB1bnRpbCB3ZSBoYXZlIG1fdGhyZWFkSUQgZXN0YWJsaXNoZWQgYmVmb3JlIHN0YXJ0
aW5nIHRoZSBydW4gbG9vcC4KKyAgICAgICAgLy8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3Ro
cmVhZCBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIHJ1biBsb29wLgogICAgICAgICBM
b2NrSG9sZGVyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAppbmRl
eCBiYjVjNWUzMzdiNWVjZjFmOGU2MTc1M2EyOWY4ZDBmOTcxNDE1NTNkLi5mMTI1MTBkMTk3YzNk
Zjk2Y2MwNTY4NTQ2Y2JjM2ZiNDZlYWFhOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIGNs
YXNzIEFzeW5jQXVkaW9EZWNvZGVyIHsKICAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lk
KiB0aHJlYWREYXRhKTsKICAgICB2b2lkIHJ1bkxvb3AoKTsKIAotICAgIFdURjo6VGhyZWFkSWRl
bnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIExv
Y2sgbV90aHJlYWRDcmVhdGlvbk11dGV4OwogICAgIE1lc3NhZ2VRdWV1ZTxEZWNvZGluZ1Rhc2s+
IG1fcXVldWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCmluZGV4IDUwNTIzMDQx
OTdjZGVkZGU0N2ZkY2JiOTEyZWM0NzQwNTU3OTc0MjguLjM3Yjk1ODg0MDQxZGM0NWRmNTQ4Mjk0
YTJmNGQxODFjMGZhOGFlOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAgLTQx
LDcgKzQxLDYgQEAgY29uc3Qgc2l6ZV90IHJlbmRlclF1YW50dW1TaXplID0gMTI4OwogT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9D
b250ZXh0JiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQogICAgIDogQXVkaW9E
ZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVuZGVyVGFyZ2V0LT5zYW1wbGVSYXRlKCkpCiAgICAg
LCBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAgLCBtX3JlbmRlclRocmVhZCgwKQog
ICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQogewogICAgIG1fcmVuZGVyQnVzID0gQXVk
aW9CdXM6OmNyZWF0ZShyZW5kZXJUYXJnZXQtPm51bWJlck9mQ2hhbm5lbHMoKSwgcmVuZGVyUXVh
bnR1bVNpemUpOwpAQCAtNjYsOCArNjUsOCBAQCB2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6dW5pbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcmVuZGVy
VGhyZWFkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fcmVuZGVyVGhyZWFk
KTsKLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSAwOworICAgICAgICBtX3JlbmRlclRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBudWxscHRyOwog
ICAgIH0KIAogICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7CkBAIC04Myw3ICs4Miw3IEBA
IHZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZygpCiAgICAg
aWYgKCFtX3N0YXJ0ZWRSZW5kZXJpbmcpIHsKICAgICAgICAgbV9zdGFydGVkUmVuZGVyaW5nID0g
dHJ1ZTsKICAgICAgICAgcmVmKCk7IC8vIFNlZSBjb3JyZXNwb25kaW5nIGRlcmVmKCkgY2FsbCBp
biBub3RpZnlDb21wbGV0ZURpc3BhdGNoKCkuCi0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gY3Jl
YXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVudHJ5
LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOworICAgICAgICBtX3JlbmRlclRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlckVu
dHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgKaW5kZXggNzU1NjA0NjQ3MjMyYzRiYzUxM2NjOWUzOWRkNDQ1ZjM4YjYyY2Vm
NC4uNTY5MDEzOGIxNjU3MGIzZjlkMjM3ZjlkZDRhOGVhMjNkNzNmZmFhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAgICAgUmVmUHRyPEF1
ZGlvQnVzPiBtX3JlbmRlckJ1czsKICAgICAKICAgICAvLyBSZW5kZXJpbmcgdGhyZWFkLgotICAg
IHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7CisgICAgUmVmUHRyPFRo
cmVhZD4gbV9yZW5kZXJUaHJlYWQ7CiAgICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CiAgICAg
c3RhdGljIHZvaWQgb2ZmbGluZVJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwogICAgIHZv
aWQgb2ZmbGluZVJlbmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmNwcAppbmRleCA4ODY5ZjZiZjIyMzIzMmU2M2NjM2ZiNTJlMTZhZTFkYjNl
YjQxYmU2Li44YzkyZDZlNTM5NmFkZjEyZmJkZDY4ZDdhYzk3ZjllZDE5YWRjMDE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcApAQCAtNzcw
LDggKzc3MCw3IEBAIFNlY3VyaXR5T3JpZ2luRGF0YSBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4o
KQogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KQogICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4o
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotICAgIGF1dG8mIHRocmVhZCA9
IGRhdGFiYXNlVGhyZWFkKCk7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWQuZ2V0
VGhyZWFkSUQoKSkKKyAgICBpZiAoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlVGhyZWFkKCku
Z2V0VGhyZWFkSUQoKSkKICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNl
Y3VyaXR5T3JpZ2luKG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggMGRkZTVmNzI2
OGVlNjQyYzAwNDMwNWNlZmUzNmIxYzllNDRiODdkMy4uZDcwODE0ZjliNTViMjQ4ZmQ2NGUxYWZm
NDNlMzc2NzRmMTY5MmQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAKQEAgLTYwLDEyICs2MCwxMiBAQCBib29sIERh
dGFiYXNlVGhyZWFkOjpzdGFydCgpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3Jl
YXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkKKyAgICBpZiAobV90aHJlYWQpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChEYXRh
YmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNl
Iik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShEYXRhYmFzZVRocmVhZDo6ZGF0YWJh
c2VUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IERhdGFiYXNlIik7CiAKLSAgICByZXR1cm4g
bV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnJlcXVlc3RUZXJtaW5hdGlvbihEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIGNsZWFudXBT
eW5jKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkKCkKICAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdCBvZiBhbGwgcGVuZGluZyB0cmFuc2FjdGlv
bnMgb24gdGhpcyBkYXRhYmFzZSB0aHJlYWQKICAgICBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3It
PnNodXRkb3duKCk7CiAKLSAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJl
YWQgJWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJl
bnRseSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJBYm91dCB0byBkZXRhY2ggdGhyZWFkICVpIGFuZCBjbGVhciB0aGUg
cmVmIHRvIERhdGFiYXNlVGhyZWFkICVwLCB3aGljaCBjdXJyZW50bHkgaGFzICVpIHJlZihzKSIs
IG1fdGhyZWFkLT5pZCgpLCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8vIENsb3NlIHRoZSBk
YXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhhdCBp
ZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFjayBh
bmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCiAgICAgLy8gaW5jb25zaXN0ZW50
IG9yIGxvY2tlZCBzdGF0ZS4KQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFk
OjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIG9wZW5EYXRhYmFzZS0+cGVyZm9ybUNsb3NlKCk7
CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25n
ZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKLSAgICBkZXRhY2hUaHJlYWQobV90aHJl
YWRJRCk7CisgICAgbV90aHJlYWQtPmRldGFjaCgpOwogCiAgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyKiBjbGVhbnVwU3luYyA9IG1fY2xlYW51cFN5bmM7CiAKQEAgLTE0Miw3ICsxNDIsNyBA
QCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UmIGRhdGFi
YXNlKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX29wZW5EYXRhYmFzZVNldE11dGV4KTsKIAot
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX3RocmVhZC0+aWQoKSk7CiAgICAgQVNTRVJUKCFtX29wZW5EYXRh
YmFzZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5hZGQo
JmRhdGFiYXNlKTsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpy
ZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fb3BlbkRhdGFiYXNlU2V0TXV0ZXgpOwogCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX3RocmVhZElEKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhy
ZWFkLT5pZCgpKTsKICAgICBBU1NFUlQobV9xdWV1ZS5raWxsZWQoKSB8fCBtX29wZW5EYXRhYmFz
ZVNldC5jb250YWlucygmZGF0YWJhc2UpKTsKICAgICBtX29wZW5EYXRhYmFzZVNldC5yZW1vdmUo
JmRhdGFiYXNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUaHJlYWQuaAppbmRleCBlYzA0MWUzMTgxNzI0OTJlY2E2YmNlZmU4ZjFkYTI1
ZWM5MmVkMjZjLi4wZTdhMDAwYjRiNzYzZmZiN2FjNWVhMDBhYTk1ODdiMDc4ZTZhM2NkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVh
ZC5oCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAKICAgICB2b2lkIHJlY29yZERhdGFi
YXNlT3BlbihEYXRhYmFzZSYpOwogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJh
c2UmKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJl
YWRJRDsgfQorICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3Ro
cmVhZCA/IG1fdGhyZWFkLT5pZCgpIDogMDsgfQogCiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29y
ZGluYXRvci5nZXQoKTsgfQogCkBAIC02OSw3ICs2OSw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFk
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CiAgICAgdm9p
ZCBkYXRhYmFzZVRocmVhZCgpOwogCiAgICAgTG9jayBtX3RocmVhZENyZWF0aW9uTXV0ZXg7Ci0g
ICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEIHsgMCB9OworICAgIFJlZlB0cjxUaHJlYWQ+
IG1fdGhyZWFkOwogICAgIFJlZlB0cjxEYXRhYmFzZVRocmVhZD4gbV9zZWxmUmVmOwogCiAgICAg
TWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IGZlZmZkYTFmNTM1NWI2ZDYzMjgzZDFiZTI3
ZTY0NTI2OTY0ZjFkODIuLjA4YjFlMWZlOTQ3YjQzOGY2ZDIwZmU2MDYzNDcxOWJmOTY5ZmRjMDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcApAQCAtMTAx
LDE0ICsxMDEsMTQgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93SWZOb3RE
b25lUmVjZW50bHkoKQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RPbkFsdGVy
bmF0ZVRocmVhZEZvckRlYnVnZ2luZyhib29sIHdhaXRVbnRpbERvbmUpCiB7Ci0gICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChjb2xsZWN0LCAwLCAiV2ViQ29yZTog
R0NDb250cm9sbGVyIik7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoY29sbGVjdCwgMCwgIldlYkNvcmU6IEdDQ29udHJvbGxlciIpOwogCiAgICAgaWYgKHdhaXRV
bnRpbERvbmUpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOwor
ICAgICAgICB0aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworICAgIHRocmVhZC0+ZGV0YWNoKCk7
CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRp
bWVyRW5hYmxlZChib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxl
U3RyZWFtLmNwcAppbmRleCAxNjhlNGUyNzc5NWQ0MjVmNDA0ZjE3NWM5YmNiYTkzZjczNjgwNzRj
Li41NWM3Y2IwMjM5ODU5OWM5NzFlNmEzN2EwZjlhNzI0ODQ4NDJlNmJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCkBAIC03NCw3ICs3NCw3IEBAIHN0YXRp
YyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIAog
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBjcmVhdGVGaWxlVGhyZWFkT25jZTsKICAgICBzdGQ6
OmNhbGxfb25jZShjcmVhdGVGaWxlVGhyZWFkT25jZSwgW10gewotICAgICAgICBjcmVhdGVUaHJl
YWQoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKKyAgICAgICAgVGhyZWFkOjpjcmVh
dGUoIldlYkNvcmU6IEFzeW5jRmlsZVN0cmVhbSIsIFtdIHsKICAgICAgICAgICAgIGZvciAoOzsp
IHsKICAgICAgICAgICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKaW5kZXggOGRlOTRjZTVkY2E3NjcxMTYz
NjIwMmU2ZDMxZjc1MzBkOGEyOTJkMi4uMWUzNTM3NmI2ZGQ5ZWJjYjNlODMyMTRkNjI3NDhjNjZh
ZTE5MzE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lIEFTU0VSVF9OT1RfU1lOQ19USFJFQUQoKSBBU1NF
UlQoIW1fc3luY1RocmVhZFJ1bm5pbmcgfHwgIUlTX0lDT05fU1lOQ19USFJFQUQoKSkKIAogLy8g
Rm9yIG1ldGhvZHMgdGhhdCBhcmUgbWVhbnQgdG8gc3VwcG9ydCB0aGUgc3luYyB0aHJlYWQgT05M
WQotI2RlZmluZSBJU19JQ09OX1NZTkNfVEhSRUFEKCkgKG1fc3luY1RocmVhZCA9PSBjdXJyZW50
VGhyZWFkKCkpCisjZGVmaW5lIElTX0lDT05fU1lOQ19USFJFQUQoKSAobV9zeW5jVGhyZWFkLT5p
ZCgpID09IGN1cnJlbnRUaHJlYWQoKSkKICNkZWZpbmUgQVNTRVJUX0lDT05fU1lOQ19USFJFQUQo
KSBBU1NFUlQoSVNfSUNPTl9TWU5DX1RIUkVBRCgpKQogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAt
MTQxLDcgKzE0MSw3IEBAIGJvb2wgSWNvbkRhdGFiYXNlOjpvcGVuKGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIC8vIExvY2sgaGVyZSBhcyB3ZWxs
IGFzIGZpcnN0IHRoaW5nIGluIHRoZSB0aHJlYWQgc28gdGhlIHRocmVhZCBkb2Vzbid0IGFjdHVh
bGx5IGNvbW1lbmNlIHVudGlsIHRoZSBjcmVhdGVUaHJlYWQoKSBjYWxsIAogICAgIC8vIGNvbXBs
ZXRlcyBhbmQgbV9zeW5jVGhyZWFkUnVubmluZyBpcyBwcm9wZXJseSBzZXQKICAgICBtX3N5bmNM
b2NrLmxvY2soKTsKLSAgICBtX3N5bmNUaHJlYWQgPSBjcmVhdGVUaHJlYWQoSWNvbkRhdGFiYXNl
OjppY29uRGF0YWJhc2VTeW5jVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBJY29uRGF0YWJh
c2UiKTsKKyAgICBtX3N5bmNUaHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShJY29uRGF0YWJhc2U6Omlj
b25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IEljb25EYXRhYmFzZSIp
OwogICAgIG1fc3luY1RocmVhZFJ1bm5pbmcgPSBtX3N5bmNUaHJlYWQ7CiAgICAgbV9zeW5jTG9j
ay51bmxvY2soKTsKICAgICBpZiAoIW1fc3luY1RocmVhZCkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2
b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQogICAgICAgICB3YWtlU3luY1RocmVhZCgpOwogICAg
ICAgICAKICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHN5bmMgdGhyZWFkIHRvIHRlcm1pbmF0ZQot
ICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3N5bmNUaHJlYWQpOworICAgICAgICBt
X3N5bmNUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgfQogCiAgICAgbV9zeW5jVGhy
ZWFkUnVubmluZyA9IGZhbHNlOyAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlLmgKaW5kZXggMDYxYWY0YTEyNTU3NzFkZTExYTMyZjU2ODNjMGVmZGE1OTI5M2I5ZC4u
ODY0MDk1NTQ3NTMzZmQ4OTBmMDNhZmU5MmJiMDZmNjA4N2VlNzM2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKQEAgLTExOSw3ICsxMTksNyBAQCBjbGFzcyBJ
Y29uRGF0YWJhc2UgZmluYWwgOiBwdWJsaWMgSWNvbkRhdGFiYXNlQmFzZSB7CiAgICAgdm9pZCBz
eW5jVGltZXJGaXJlZCgpOwogICAgIAogICAgIFRpbWVyIG1fc3luY1RpbWVyOwotICAgIFRocmVh
ZElkZW50aWZpZXIgbV9zeW5jVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fc3luY1RocmVh
ZDsKICAgICBib29sIG1fc3luY1RocmVhZFJ1bm5pbmc7CiAgICAgCiAgICAgSGFzaFNldDxSZWZQ
dHI8RG9jdW1lbnRMb2FkZXI+PiBtX2xvYWRlcnNQZW5kaW5nRGVjaXNpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmNwcAppbmRleCA5MTIwMGMzNDVmNDU1Zjk2
ZDQ5NGJmZDJhZDcwM2YyOGM1YzYyOWQxLi5kOWI2ZjcyZmEzNmZhNzAwYzgyNmYzYzk3ZDZiYWEw
MmQ0MmU4YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc291cmNlVXNhZ2VU
aHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzb3VyY2VVc2FnZVRocmVhZC5j
cHAKQEAgLTk2LDExICs5NiwxMSBAQCB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6Om5vdGlmeU9i
c2VydmVycyhSZXNvdXJjZVVzYWdlRGF0YSYmIGRhdGEpCiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRo
cmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlmIChtX3RocmVhZElkZW50aWZp
ZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ZtID0gJmNv
bW1vblZNKCk7Ci0gICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENh
bGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogUmVzb3VyY2VVc2FnZSIpOworICAgIG1fdGhyZWFkID0g
VGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBSZXNvdXJjZVVz
YWdlIik7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZVRocmVhZDo6dGhyZWFkQ2FsbGJhY2sodm9p
ZCogcmVzb3VyY2VVc2FnZVRocmVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UmVzb3VyY2VVc2FnZVRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdl
VGhyZWFkLmgKaW5kZXggMThhMWU2NzU0M2QyMjA5YzE3OTU3NDczNjYyMmE3OGIzODRiYjhmYy4u
MzYxN2I3YWRlYzAxOTIyMjExMzA4MWFkNGIzYTg4NzU0ZjFmYTViYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNvdXJjZVVzYWdlVGhyZWFkLmgKQEAgLTYyLDcgKzYyLDcgQEAgY2xhc3MgUmVz
b3VyY2VVc2FnZVRocmVhZCB7CiAgICAgdm9pZCB0aHJlYWRCb2R5KCk7CiAgICAgdm9pZCBwbGF0
Zm9ybVRocmVhZEJvZHkoSlNDOjpWTSosIFJlc291cmNlVXNhZ2VEYXRhJik7CiAKLSAgICBUaHJl
YWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllciB7IDAgfTsKKyAgICBSZWZQdHI8VGhyZWFk
PiBtX3RocmVhZDsKICAgICBMb2NrIG1fbG9jazsKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247
CiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBSZXNvdXJjZVVz
YWdlRGF0YSYpPj4gbV9vYnNlcnZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAppbmRleCA3MzBjMGE2YmQ5M2Y0NTc4ZDFlZGJmOWFj
ZTFjZDg2NTY2ZTZjOTg4Li42NGQwNTBhNjg0OGU4MWI1NjhkZDViODY1MWU0YjlmZjBkYmI3NTUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVh
ZC5jcHAKQEAgLTM1LDE0ICszNSwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JvbGxp
bmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCgpCi0gICAgOiBtX3RocmVhZElkZW50aWZpZXIoMCkK
IHsKIH0KIAogYm9vbCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCiB7Ci0gICAg
YXV0byB0aHJlYWRJZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3Ro
cmVhZElkZW50aWZpZXI7Ci0gICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRo
cmVhZCgpID09IHRocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0g
U2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZDsKKyAgICByZXR1cm4gdGhyZWFk
ICYmIHRocmVhZC0+aWQoKSA9PSBjdXJyZW50VGhyZWFkKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5n
VGhyZWFkOjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQpAQCAtNzQsMTQg
KzczLDE0IEBAIFNjcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKQog
CiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogewotICAgIGlm
IChtX3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGluaXRpYWxpemUgdGhlIHJ1biBsb29w
LgogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6
ZVJ1bkxvb3BNdXRleCk7CiAKLSAgICAgICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2ViQ29yZTogU2Nyb2xsaW5nIik7CisgICAgICAg
IG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3Jl
OiBTY3JvbGxpbmciKTsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1f
aW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0
dXJuIG1fdGhyZWFkUnVuTG9vcDsgfSk7CkBAIC05MSw3ICs5MCw3IEBAIHZvaWQgU2Nyb2xsaW5n
VGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCgpCiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0
aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpCiB7Ci0gICAgV1RGOjpzZXRDdXJy
ZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoKTsKKyAgICBXVEY6OlRocmVhZDo6c2V0Q3VycmVu
dFRocmVhZElzVXNlckludGVyYWN0aXZlKCk7CiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVGhy
ZWFkKj4oc2Nyb2xsaW5nVGhyZWFkKS0+dGhyZWFkQm9keSgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmluZGV4IGRlMDYyZDc3YWMw
MWRmOWQyYTA5ODYwZWJlNmI4ZTlmZDNjZmY1YzAuLmQ4ODkyZjA1YmU2NDM3ZDRhYWNjMGE3NTFh
N2NhN2U5M2JlZTBkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RocmVhZC5oCkBAIC03Myw3ICs3Myw3IEBAIGNsYXNzIFNjcm9sbGluZ1RocmVhZCB7
CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2soKTsKICNlbmRpZgogCi0gICAg
VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7CisgICAgUmVmUHRyPFRocmVhZD4g
bV90aHJlYWQ7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZh
cmlhYmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11dGV4OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKaW5kZXgg
ZjcxMzMzYzVhMzdhOTk4OTY0ZjNhNzQxYzczMTUyZTk1MTQ2NmNmNi4uMDYyZTQ3YjNkODJmZGE2
YzFjOTVlZTUxM2Q5MTVmOTVlNTEwZjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3BwCkBAIC02NCw4ICs2NCw3IEBAIFBh
c3NSZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVyPiBIUlRGRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZUFu
ZExvYWRBc3luY2hyb25vdXNseUlmCiB9CiAKIEhSVEZEYXRhYmFzZUxvYWRlcjo6SFJURkRhdGFi
YXNlTG9hZGVyKGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2RhdGFiYXNlTG9hZGVyVGhyZWFk
KDApCi0gICAgLCBtX2RhdGFiYXNlU2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgIDogbV9kYXRh
YmFzZVNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogfQpAQCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQgSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkQXN5
bmNocm9ub3VzbHkoKQogICAgIAogICAgIGlmICghbV9ocnRmRGF0YWJhc2UuZ2V0KCkgJiYgIW1f
ZGF0YWJhc2VMb2FkZXJUaHJlYWQpIHsKICAgICAgICAgLy8gU3RhcnQgdGhlIGFzeW5jaHJvbm91
cyBkYXRhYmFzZSBsb2FkaW5nIHByb2Nlc3MuCi0gICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJl
YWQgPSBjcmVhdGVUaHJlYWQoZGF0YWJhc2VMb2FkZXJFbnRyeSwgdGhpcywgIkhSVEYgZGF0YWJh
c2UgbG9hZGVyIik7CisgICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQgPSBUaHJlYWQ6OmNy
ZWF0ZShkYXRhYmFzZUxvYWRlckVudHJ5LCB0aGlzLCAiSFJURiBkYXRhYmFzZSBsb2FkZXIiKTsK
ICAgICB9CiB9CiAKQEAgLTEyMSw4ICsxMjAsOCBAQCB2b2lkIEhSVEZEYXRhYmFzZUxvYWRlcjo6
d2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24oKQogICAgIAogICAgIC8vIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdHdpY2UgZm9yIHRoZSBzYW1lIHRo
cmVhZC4KICAgICBpZiAobV9kYXRhYmFzZUxvYWRlclRocmVhZCkKLSAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24obV9kYXRhYmFzZUxvYWRlclRocmVhZCk7Ci0gICAgbV9kYXRhYmFzZUxv
YWRlclRocmVhZCA9IDA7CisgICAgICAgIG1fZGF0YWJhc2VMb2FkZXJUaHJlYWQtPndhaXRGb3JD
b21wbGV0aW9uKCk7CisgICAgbV9kYXRhYmFzZUxvYWRlclRocmVhZCA9IG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKaW5kZXggYzg2OWQxMzdhMWRiMmY1MjQ5OGQwZTFi
NjVkNTg3ZTZjODE5YjM4MS4uM2FkMjUxZjIxOTkwOWY0YmM2NDU0ZDAxMzIwMWI2YTdjYTcwMjY4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmgKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgSFJURkRhdGFiYXNlTG9hZGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8SFJURkRhdGFiYXNlTG9hZGVyPiB7CiAKICAgICAvLyBIb2xkaW5nIGEg
bV90aHJlYWRMb2NrIGlzIHJlcXVpcmVkIHdoZW4gYWNjZXNzaW5nIG1fZGF0YWJhc2VMb2FkZXJU
aHJlYWQuCiAgICAgTG9jayBtX3RocmVhZExvY2s7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2Rh
dGFiYXNlTG9hZGVyVGhyZWFkOworICAgIFJlZlB0cjxUaHJlYWQ+IG1fZGF0YWJhc2VMb2FkZXJU
aHJlYWQ7CiAKICAgICBmbG9hdCBtX2RhdGFiYXNlU2FtcGxlUmF0ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAppbmRleCA5NmYz
MzA4MjgwNzlhNzlhZDY0ODIwZDA3MjFjNTljNWVhMTZmZGIxLi4yMWJlOTk2ZWYzN2U1M2RiNzAz
MTAwMTk2MjdjMGM0MGQyYjIxMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQCBSZXZlcmJDb252
b2x2ZXI6OlJldmVyYkNvbnZvbHZlcihBdWRpb0NoYW5uZWwqIGltcHVsc2VSZXNwb25zZSwgc2l6
ZV90IHJlbmRlclNsaQogICAgIC8vIFN0YXJ0IHVwIGJhY2tncm91bmQgdGhyZWFkCiAgICAgLy8g
RklYTUU6IHdvdWxkIGJlIGJldHRlciB0byB1cCB0aGUgdGhyZWFkIHByaW9yaXR5IGhlcmUuICBJ
dCBkb2Vzbid0IG5lZWQgdG8gYmUgcmVhbC10aW1lLCBidXQgaGlnaGVyIHRoYW4gdGhlIGRlZmF1
bHQuLi4KICAgICBpZiAodGhpcy0+dXNlQmFja2dyb3VuZFRocmVhZHMoKSAmJiBtX2JhY2tncm91
bmRTdGFnZXMuc2l6ZSgpID4gMCkKLSAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkID0gY3JlYXRl
VGhyZWFkKFdlYkNvcmU6OmJhY2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0aW9u
IGJhY2tncm91bmQgdGhyZWFkIik7CisgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKFdlYkNvcmU6OmJhY2tncm91bmRUaHJlYWRFbnRyeSwgdGhpcywgImNvbnZvbHV0
aW9uIGJhY2tncm91bmQgdGhyZWFkIik7CiB9CiAKIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNv
bnZvbHZlcigpCkBAIC0xNDYsNyArMTQ2LDcgQEAgUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29u
dm9sdmVyKCkKICAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxl
Lm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24obV9iYWNrZ3JvdW5kVGhyZWFkKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkLT53YWl0
Rm9yQ29tcGxldGlvbigpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAppbmRleCA2YmFlYjdjY2UyOTg5NmM5ODk2MzUxMmY0
MWI0M2EyZjEyODg1NDFjLi4wNTk2MzM2N2FlMjgzNDk0ODc5MGJhN2NjYjcyMDYwZWM1OTgxMDcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
aApAQCAtODYsNyArODYsNyBAQCBjbGFzcyBSZXZlcmJDb252b2x2ZXIgewogCiAgICAgLy8gQmFj
a2dyb3VuZCB0aHJlYWQgYW5kIHN5bmNocm9uaXphdGlvbgogICAgIGJvb2wgbV91c2VCYWNrZ3Jv
dW5kVGhyZWFkczsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fYmFja2dyb3VuZFRocmVhZDsKKyAg
ICBSZWZQdHI8VGhyZWFkPiBtX2JhY2tncm91bmRUaHJlYWQ7CiAgICAgYm9vbCBtX3dhbnRzVG9F
eGl0OwogICAgIGJvb2wgbV9tb3JlSW5wdXRCdWZmZXJlZDsKICAgICBtdXRhYmxlIExvY2sgbV9i
YWNrZ3JvdW5kVGhyZWFkTXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwCmluZGV4IDZjZDhiZDdmODFiZmYyMjI3ZmUxNGZiY2EwZmJmZDA1NWQwOWM1NzEuLjFmMjVl
OGU1NGU5ZWU4NWZhMGNjYTZhMzFiOTJlMTExZTZkZjBjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Zp
bGVSZWFkZXJHU3RyZWFtZXIuY3BwCkBAIC0zNzAsMjAgKzM3MCwyMCBAQCBQYXNzUmVmUHRyPEF1
ZGlvQnVzPiBBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29s
IG1peFRvTW9ubwogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShj
b25zdCBjaGFyKiBmaWxlUGF0aCwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCiB7
CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiByZXR1cm5WYWx1ZTsKLSAgICBhdXRvIHRocmVhZElEID0g
Y3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0aCwg
bWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0
ZSgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9ubywg
c2FtcGxlUmF0ZV0gewogICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihmaWxl
UGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CiAgICAgfSk7Ci0gICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgIHRocmVhZC0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9C
dXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIFJl
ZlB0cjxBdWRpb0J1cz4gcmV0dXJuVmFsdWU7Ci0gICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRo
cmVhZCgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZGF0YSwgZGF0YVNpemUsIG1p
eFRvTW9ubywgc2FtcGxlUmF0ZV0geworICAgIGF1dG8gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
IkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhUb01v
bm8sIHNhbXBsZVJhdGVdIHsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBBdWRpb0ZpbGVSZWFkZXIo
ZGF0YSwgZGF0YVNpemUpLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwogICAgIH0p
OwotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEKTsKKyAgICB0aHJlYWQtPndh
aXRGb3JDb21wbGV0aW9uKCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDFjNWMzMGYzNzdhNDJi
ZTAwMTc3MTY1MWU4N2Y3MDQzYTVkNjVjOTAuLjRlZWFjNzNmYTNkNDRiNzdkMThhMzQ5YjZkMGEx
YTIxNzJlOTJjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIu
Y3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGll
bnQgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBTdHJlYW0KICAgICAgICAg
dm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQg
Y2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOwogCi0gICAgICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWQgeyAwIH07CisgICAgICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhy
ZWFkOwogICAgICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25NdXRleDsKICAg
ICAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb247CiAgICAgICAgIFJ1
bkxvb3AqIG1fcnVuTG9vcCB7IG51bGxwdHIgfTsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIFJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChX
ZWJLaXRXZWJTcmMqIHNyYywKICAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKLSAgICBt
X3RocmVhZCA9IGNyZWF0ZVRocmVhZCgiUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQiLCBb
dGhpcywgcmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCldIHsKKyAgICBtX3RocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKCJSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCIsIFt0aGlzLCByZXF1ZXN0
ID0gV1RGTW92ZShyZXF1ZXN0KV0gewogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwogICAgICAgICAgICAg
bV9ydW5Mb29wID0gJlJ1bkxvb3A6OmN1cnJlbnQoKTsKQEAgLTExMTMsOCArMTExMyw4IEBAIFJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dChXZWJLaXRXZWJTcmMqIHNyYywKIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp+UmVz
b3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQoKQogewogICAgIGlmIChtX3RocmVhZCkgewotICAg
ICAgICBkZXRhY2hUaHJlYWQobV90aHJlYWQpOwotICAgICAgICBtX3RocmVhZCA9IDA7CisgICAg
ICAgIG1fdGhyZWFkLT5kZXRhY2goKTsKKyAgICAgICAgbV90aHJlYWQgPSBudWxscHRyOwogICAg
IH0KIAogICAgIGlmIChtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNw
cAppbmRleCA0NmI4OTk0YTg0MWVmNzFlYTI3OWNlNzdjYmM4ZmI0M2MyOWYwYTYyLi5mZmJmZGE5
Yjg5MzQ4MzU0OTBjOWE0MGJhMWY0ODMzNmU0NzYwYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCkBAIC03Nyw3
ICs3Nyw3IEBAIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY0xvY2s+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KTsKIAogICAgIGlmICghbG9h
ZGVyUnVuTG9vcE9iamVjdCkgewotICAgICAgICBjcmVhdGVUaHJlYWQocnVuTG9hZGVyVGhyZWFk
LCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRlciIpOworICAgICAgICBUaHJlYWQ6OmNyZWF0
ZShydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CiAKICAg
ICAgICAgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW10geyByZXR1
cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsgfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAppbmRleCA0NDA4Y2Qx
OTg3MDViYTg2Y2M4YzE5ODZmYjNlMmNhZGU3OTZkY2M2Li5mMTA1NzE1ZWQ4ZDg3OTM3M2I2MzMx
Y2IyNmUwODJjM2UxYWI4YjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtOTQsMTAgKzk0LDEwIEBAIGludCBD
dXJsRG93bmxvYWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCgpIGNvbnN0CiB2b2lk
IEN1cmxEb3dubG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQogewogICAgIGlmICgh
cnVuVGhyZWFkKCkpIHsKLSAgICAgICAgaWYgKG1fdGhyZWFkSWQpCi0gICAgICAgICAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZElkKTsKKyAgICAgICAgaWYgKG1fdGhyZWFkKQor
ICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgICAgIHNldFJ1
blRocmVhZCh0cnVlKTsKLSAgICAgICAgbV90aHJlYWRJZCA9IGNyZWF0ZVRocmVhZChkb3dubG9h
ZFRocmVhZCwgdGhpcywgImRvd25sb2FkVGhyZWFkIik7CisgICAgICAgIG1fdGhyZWFkID0gVGhy
ZWFkOjpjcmVhdGUoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOwogICAg
IH0KIH0KIApAQCAtMTA1LDkgKzEwNSw5IEBAIHZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3Rv
cFRocmVhZCgpCiB7CiAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKIAotICAgIGlmIChtX3RocmVh
ZElkKSB7Ci0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOwotICAg
ICAgICBtX3RocmVhZElkID0gMDsKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJl
YWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fdGhyZWFkID0gbnVsbHB0cjsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuaAppbmRleCAwMmNlNzMxYmQxMGE4MDE5YjdlYmUxZmFjNTJiNDVlNDA5MjU2
MjMxLi5mNmJiYzc3ZjRkM2NlMGI5Njg3ZDFkOGZjYTYwOTE1ODdjOWFlNDljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBA
IC02OSw3ICs2OSw3IEBAIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXIgewogCiAgICAgc3RhdGlj
IHZvaWQgZG93bmxvYWRUaHJlYWQodm9pZCogZGF0YSk7CiAKLSAgICBUaHJlYWRJZGVudGlmaWVy
IG1fdGhyZWFkSWQ7CisgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7CiAgICAgQ1VSTE0qIG1f
Y3VybE11bHRpSGFuZGxlOwogICAgIFZlY3RvcjxDVVJMKj4gbV9wZW5kaW5nSGFuZGxlTGlzdDsK
ICAgICBWZWN0b3I8Q1VSTCo+IG1fYWN0aXZlSGFuZGxlTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCmluZGV4IDdiZDdiMmQzNzAyZjVmOWNkNTcxMzYxZTFjYmI4NWViOTcxMWU5MmQuLmRi
MzA5MGU4OGE2NDdjODE3YzY2NjU5MTMyZTRmYTIyZmU0ZjI2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZUltcGwuaApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
IDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZSB7CiAgICAgICAgIHNpemVfdCBzaXplIHsgMCB9
OwogICAgIH07CiAKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkIHsgMCB9Owor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fd29ya2VyVGhyZWFkOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+
IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07CiAgICAgTG9jayBtX211dGV4U2VuZDsKICAgICBMb2Nr
IG1fbXV0ZXhSZWNlaXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKaW5k
ZXggMWUzNzlkMWIwMGQwOTU1ZmMyZGEwMGJlM2Y5NmY5OTJhOTFiOTQzZi4uZWNiOWY1NGI2NWEz
MzUyNGUzYTM1NmEzYmMxM2QwZTJmNmY2YWNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbEN1cmwuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpzdGFydFRocmVhZCgpCiAKICAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgpIHdpbGwgY2Fs
bCBkZXJlZigpLgogCi0gICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoIldlYlNvY2tl
dCB0aHJlYWQiLCBbdGhpc10geworICAgIG1fd29ya2VyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUo
IldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10gewogCiAgICAgICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogCkBAIC0yNDksOCArMjQ5LDggQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
OjpzdG9wVGhyZWFkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdG9wVGhyZWFkID0gdHJ1
ZTsKLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3dvcmtlclRocmVhZCk7Ci0gICAgbV93
b3JrZXJUaHJlYWQgPSAwOworICAgIG1fd29ya2VyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigp
OworICAgIG1fd29ya2VyVGhyZWFkID0gbnVsbHB0cjsKICAgICBkZXJlZigpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggN2FkNWI1NzkxM2ExNjcyZGY5
MTk2ZTllYjAxMzNlMjNlMjMyOTg1ZC4uYWY1NTM5NTJjOTE2NWE2Njg2M2ExYzUzNDAwY2MyYmM0
ZjlkMDQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAtOTks
OCArOTksNyBAQCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1cERh
dGEoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cgogfQogCiBXb3JrZXJUaHJlYWQ6Oldv
cmtlclRocmVhZChjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3Jr
ZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHksIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3
b3JrZXJSZXBvcnRpbmdQcm94eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSwgY29u
c3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiBjb250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMsIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNl
Y3VyaXR5UG9saWN5LCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luLCBNb25vdG9uaWNU
aW1lIHRpbWVPcmlnaW4sIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5KiBjb25uZWN0aW9u
UHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92aWRlciwgSlNDOjpSdW50aW1lRmxhZ3Mg
cnVudGltZUZsYWdzKQotICAgIDogbV90aHJlYWRJRCgwKQotICAgICwgbV93b3JrZXJMb2FkZXJQ
cm94eSh3b3JrZXJMb2FkZXJQcm94eSkKKyAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2Vy
TG9hZGVyUHJveHkpCiAgICAgLCBtX3dvcmtlclJlcG9ydGluZ1Byb3h5KHdvcmtlclJlcG9ydGlu
Z1Byb3h5KQogICAgICwgbV9ydW50aW1lRmxhZ3MocnVudGltZUZsYWdzKQogICAgICwgbV9zdGFy
dHVwRGF0YShzdGQ6Om1ha2VfdW5pcXVlPFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhPihzY3JpcHRV
UkwsIGlkZW50aWZpZXIsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgc3RhcnRNb2RlLCBjb250ZW50
U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRl
bnRTZWN1cml0eVBvbGljeSwgdG9wT3JpZ2luLCB0aW1lT3JpZ2luKSkKQEAgLTEzMywxNSArMTMy
LDE1IEBAIFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCgpCiAKIGJvb2wgV29ya2VyVGhyZWFk
OjpzdGFydCgpCiB7Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5z
dXJlIHRoYXQgbV90aHJlYWRJRCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRz
LgorICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1f
dGhyZWFkIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMuCiAgICAgTG9ja0hv
bGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKLSAgICBpZiAobV90aHJlYWRJRCkK
KyAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV90aHJlYWRJ
RCA9IGNyZWF0ZVRocmVhZChXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAi
V2ViQ29yZTogV29ya2VyIik7CisgICAgbV90aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZShXb3JrZXJU
aHJlYWQ6OndvcmtlclRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogV29ya2VyIik7CiAKLSAg
ICByZXR1cm4gbV90aHJlYWRJRDsKKyAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKIHZvaWQgV29y
a2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2b2lkKiB0aHJlYWQpCkBAIC0xOTMsNyArMTky
LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpCiAgICAgZ19tYWluX2NvbnRl
eHRfcG9wX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0LmdldCgpKTsKICNlbmRpZgogCi0gICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IG1fdGhyZWFkSUQ7CisgICAgUmVmUHRyPFRocmVh
ZD4gcHJvdGVjdG9yID0gbV90aHJlYWQ7CiAKICAgICBBU1NFUlQobV93b3JrZXJHbG9iYWxTY29w
ZS0+aGFzT25lUmVmKCkpOwogCkBAIC0yMDUsNyArMjA0LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6
OndvcmtlclRocmVhZCgpCiAgICAgdGhyZWFkR2xvYmFsRGF0YSgpLmRlc3Ryb3koKTsKIAogICAg
IC8vIFRoZSB0aHJlYWQgb2JqZWN0IG1heSBiZSBhbHJlYWR5IGRlc3Ryb3llZCBmcm9tIG5vdGlm
aWNhdGlvbiBub3csIGRvbid0IHRyeSB0byBhY2Nlc3MgInRoaXMiLgotICAgIGRldGFjaFRocmVh
ZCh0aHJlYWRJRCk7CisgICAgcHJvdGVjdG9yLT5kZXRhY2goKTsKIH0KIAogdm9pZCBXb3JrZXJU
aHJlYWQ6OnN0YXJ0UnVubmluZ0RlYnVnZ2VyVGFza3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyVGhyZWFkLmgKaW5kZXggMDdhZDNjZTc4NGY5MTlmNzBjNDU2ODFiOTU0YzAwOTk5NmY1NTdm
Mi4uZjgwOWVlNjY3MjdlZTEzOWRjNGYxOWQyY2I2MWIyMjY1ZTRlYTRiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIFdvcmtlclRo
cmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4gewogICAgIGJvb2wgc3RhcnQo
KTsKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBj
b25zdCB7IHJldHVybiBtX3RocmVhZElEOyB9CisgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkID8gbV90aHJlYWQtPmlkKCkgOiAwOyB9CiAgICAg
V29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQogICAgIFdvcmtl
ckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2Vy
TG9hZGVyUHJveHk7IH0KICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5n
UHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OyB9CkBAIC05OCw3
ICs5OCw3IEBAIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRo
cmVhZD4gewogICAgIHN0YXRpYyB2b2lkIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQqKTsKICAgICB2
b2lkIHdvcmtlclRocmVhZCgpOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwogICAgIFdvcmtlclJ1bkxvb3AgbV9ydW5Mb29w
OwogICAgIFdvcmtlckxvYWRlclByb3h5JiBtX3dvcmtlckxvYWRlclByb3h5OwogICAgIFdvcmtl
clJlcG9ydGluZ1Byb3h5JiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYktpdC9TdG9y
YWdlL1N0b3JhZ2VUaHJlYWQuY3BwCmluZGV4IGJiNjZmY2VhN2U1MjhiYzI3ZjYzM2EzZTUyODc4
YjUwMWVmMGUxODcuLmYzY2JlZDMxMDhiNGQxZmZhZWMyYjQwYmJlY2Y1YmM4NzYxM2Q2YjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKQEAgLTQwLDcgKzQwLDYgQEAg
c3RhdGljIEhhc2hTZXQ8U3RvcmFnZVRocmVhZCo+JiBhY3RpdmVTdG9yYWdlVGhyZWFkcygpCiB9
CiAKIFN0b3JhZ2VUaHJlYWQ6OlN0b3JhZ2VUaHJlYWQoKQotICAgIDogbV90aHJlYWRJRCgwKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiB9CkBAIC00OCwxNiArNDcsMTYgQEAgU3Rv
cmFnZVRocmVhZDo6U3RvcmFnZVRocmVhZCgpCiBTdG9yYWdlVGhyZWFkOjp+U3RvcmFnZVRocmVh
ZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fdGhyZWFk
SUQpOworICAgIEFTU0VSVCghbV90aHJlYWQpOwogfQogCiBib29sIFN0b3JhZ2VUaHJlYWQ6OnN0
YXJ0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV90aHJlYWRJ
RCkKLSAgICAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChTdG9yYWdlVGhyZWFkOjp0aHJl
YWRFbnRyeVBvaW50Q2FsbGJhY2ssIHRoaXMsICJXZWJDb3JlOiBMb2NhbFN0b3JhZ2UiKTsKKyAg
ICBpZiAoIW1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZCA9IFRocmVhZDo6Y3JlYXRlKFN0b3Jh
Z2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnRDYWxsYmFjaywgdGhpcywgIldlYkNvcmU6IExvY2Fs
U3RvcmFnZSIpOwogICAgIGFjdGl2ZVN0b3JhZ2VUaHJlYWRzKCkuYWRkKHRoaXMpOwotICAgIHJl
dHVybiBtX3RocmVhZElEOworICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAogdm9pZCBTdG9yYWdl
VGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50Q2FsbGJhY2sodm9pZCogdGhyZWFkKQpAQCAtNzgsMjUg
Kzc3LDI1IEBAIHZvaWQgU3RvcmFnZVRocmVhZDo6dGhyZWFkRW50cnlQb2ludCgpCiB2b2lkIFN0
b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKEZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkg
JiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFk
KTsKICAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uPHZvaWQgKCk+
PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0
ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWUu
a2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYm
IG1fdGhyZWFkKTsKICAgICBhY3RpdmVTdG9yYWdlVGhyZWFkcygpLnJlbW92ZSh0aGlzKTsKICAg
ICAvLyBFdmVuIGluIHdlaXJkLCBleGNlcHRpb25hbCBjYXNlcywgZG9uJ3Qgd2FpdCBvbiBhIG5v
bmV4aXN0ZW50IHRocmVhZCB0byB0ZXJtaW5hdGUuCi0gICAgaWYgKCFtX3RocmVhZElEKQorICAg
IGlmICghbV90aHJlYWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcXVldWUuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb248dm9pZCAoKT4+KFt0aGlzXSB7CiAgICAgICAgIHBlcmZv
cm1UZXJtaW5hdGUoKTsKICAgICB9KSk7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90
aHJlYWRJRCk7CisgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CiAgICAgQVNTRVJU
KG1fcXVldWUua2lsbGVkKCkpOwotICAgIG1fdGhyZWFkSUQgPSAwOworICAgIG1fdGhyZWFkID0g
bnVsbHB0cjsKIH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjpwZXJmb3JtVGVybWluYXRlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmggYi9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCmluZGV4IDk1NjRiOGFhMDZlNTI0M2UzMGU0
NjdjNWZiZmUyY2RhZGIyNDBjNTYuLjhjZjFiM2Q0YWRjNWEzMDZhNzdlYzc3YzljMzI2NjYxNjg3
YmVjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaApAQCAtNTYsNyArNTYs
NyBAQCBjbGFzcyBTdG9yYWdlVGhyZWFkIHsKICAgICAvLyBCYWNrZ3JvdW5kIHRocmVhZCBwYXJ0
IG9mIHRoZSB0ZXJtaW5hdGUgcHJvY2VkdXJlLgogICAgIHZvaWQgcGVyZm9ybVRlcm1pbmF0ZSgp
OwogCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgIFJlZlB0cjxUaHJlYWQ+
IG1fdGhyZWFkOwogICAgIE1lc3NhZ2VRdWV1ZTxGdW5jdGlvbjx2b2lkICgpPj4gbV9xdWV1ZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCAzYjg1ZjIyZmZhZTAxZTI4YWFiOTk4MTY2OThhZGFkN2EzODQzYzVmLi5iMDRh
Y2M4YzMxYzVlY2E4MmE1MTc0MTY2N2RiNzBlMDUzZjFkMmM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yMDQsNyArMjA0LDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKIHsKICAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKIAotICAgIFdURjo6c2V0Q3VycmVudFRocmVhZElzVXNl
ckluaXRpYXRlZCgpOworICAgIFdURjo6VGhyZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW5p
dGlhdGVkKCk7CiAKICAgICBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gcGFyYW1l
dGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlcjsKICAgICBtX2xvYWRUaHJv
dHRsZUxhdGVuY3kgPSBwYXJhbWV0ZXJzLmxvYWRUaHJvdHRsZUxhdGVuY3k7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5u
ZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IGVmN2JhODk5ODIwMjMyNTg5ZTczOTFmMjdmY2Qz
ZDZlMTY5ZjY4OTQuLmZhMDMwZmIzYTJhMGY4MmQ2YTI0NWJmODU2YjM2YWEyNzMyMDA3MTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUlPQ2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0xODMsNyArMTgzLDcgQEAgdm9p
ZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUs
IFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAogICAg
IFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7Ci0gICAgZGV0YWNoVGhyZWFkKGNyZWF0
ZVRocmVhZCgiSU9DaGFubmVsOjpyZWFkU3luYyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwgY29t
cGxldGlvbkhhbmRsZXJdIHsKKyAgICBUaHJlYWQ6OmNyZWF0ZSgiSU9DaGFubmVsOjpyZWFkU3lu
YyIsIFtjaGFubmVsLCBzaXplLCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKICAgICAgICAg
c2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXpl
KTsKICAgICAgICAgdWludDhfdCogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihm
YXN0TWFsbG9jKGJ1ZmZlclNpemUpKTsKICAgICAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiByZWFk
QnVmZmVyID0gYWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGJ1ZmZlckRhdGEs
IGJ1ZmZlclNpemUsIGJ1ZmZlckRhdGEsIGZhc3RGcmVlKSk7CkBAIC0yMTcsNyArMjE3LDcgQEAg
dm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jSW5UaHJlYWQoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNp
emUsIFdvcmtRdWV1ZSogcXVldWUsIHMKICAgICAgICAgICAgIERhdGEgZGF0YSA9IHsgV1RGTW92
ZShidWZmZXIpIH07CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRhLCAwKTsKICAg
ICAgICAgfSwgcXVldWUpOwotICAgIH0pKTsKKyAgICB9KS0+ZGV0YWNoKCk7CiB9CiAKIHN0cnVj
dCBXcml0ZUFzeW5jRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlv
bi5jcHAKaW5kZXggYmFmNTMwNjZiZTIwMDllMjZkYmViN2FjODg4YzQwNWUzYmRiYTZmZi4uYjM4
N2I2YjQ0NWUzN2QzZGEzZThhNzJjN2MwYmEzNWM4NjNmMjcxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcApAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgQ29u
bmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4g
bWVzc2FnZSkKIAogI2lmIEhBVkUoUU9TX0NMQVNTRVMpCiAgICAgaWYgKG1lc3NhZ2UtPmlzU3lu
Y01lc3NhZ2UoKSAmJiBtX3Nob3VsZEJvb3N0TWFpblRocmVhZE9uU3luY01lc3NhZ2UpIHsKLSAg
ICAgICAgcHRocmVhZF9vdmVycmlkZV90IG92ZXJyaWRlID0gcHRocmVhZF9vdmVycmlkZV9xb3Nf
Y2xhc3Nfc3RhcnRfbnAobV9tYWluVGhyZWFkLCBhZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19V
U0VSX0lOVEVSQUNUSVZFKSwgMCk7CisgICAgICAgIHB0aHJlYWRfb3ZlcnJpZGVfdCBvdmVycmlk
ZSA9IHB0aHJlYWRfb3ZlcnJpZGVfcW9zX2NsYXNzX3N0YXJ0X25wKG1fbWFpblRocmVhZCwgVGhy
ZWFkOjphZGp1c3RlZFFPU0NsYXNzKFFPU19DTEFTU19VU0VSX0lOVEVSQUNUSVZFKSwgMCk7CiAg
ICAgICAgIG1lc3NhZ2UtPnNldFFPU0NsYXNzT3ZlcnJpZGUob3ZlcnJpZGUpOwogICAgIH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRp
ZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRy
eVBvaW50LmgKaW5kZXggM2JiN2M2ZDQ3ZDQzYzY5NzZiMDNjZmY3NzM2NDRmNDg3ODQ5M2Q0MS4u
ZjIzZGI0M2MwMjM0ZGM3YzgxMDQ5NTNmMDRlZjg3OTUyZjliODc0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBD
U2VydmljZUVudHJ5UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2lu
dFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCkBAIC0xMDMs
NyArMTAzLDcgQEAgdm9pZCBYUENTZXJ2aWNlSW5pdGlhbGl6ZXIoT1NPYmplY3RQdHI8eHBjX2Nv
bm5lY3Rpb25fdD4gY29ubmVjdGlvbiwgeHBjX29iamVjdF8KIAogI2lmIEhBVkUoUU9TX0NMQVNT
RVMpCiAgICAgaWYgKHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuY29udGFpbnMo
QVNDSUlMaXRlcmFsKCJhbHdheXMtcnVucy1hdC1iYWNrZ3JvdW5kLXByaW9yaXR5IikpKQotICAg
ICAgICBzZXRHbG9iYWxNYXhRT1NDbGFzcyhRT1NfQ0xBU1NfVVRJTElUWSk7CisgICAgICAgIFRo
cmVhZDo6c2V0R2xvYmFsTWF4UU9TQ2xhc3MoUU9TX0NMQVNTX1VUSUxJVFkpOwogI2VuZGlmCiAK
ICAgICBYUENTZXJ2aWNlVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3Vy
ZU1vbml0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNz
dXJlTW9uaXRvci5jcHAKaW5kZXggMDYwOGFiNzJmOTkyNDhlZjI0Y2QyZDUyNDVlZTUzMzNhMDBk
OWQwZC4uNDhkMTA2OTc3NjVhOTVhOGIzNTg3MjMwZTEwMmQ4MDNhZDU4YzBhYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9u
aXRvci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBNZW1vcnlQcmVzc3VyZU1vbml0b3I6Ok1lbW9y
eVByZXNzdXJlTW9uaXRvcigpCiAgICAgaWYgKG1fZXZlbnRGRCA9PSAtMSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhy
ZWFkKCJNZW1vcnlQcmVzc3VyZU1vbml0b3IiLCBbdGhpc10geworICAgIFJlZlB0cjxUaHJlYWQ+
IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJNZW1vcnlQcmVzc3VyZU1vbml0b3IiLCBbdGhpc10g
ewogICAgICAgICBkb3VibGUgcG9sbEludGVydmFsID0gc19tYXhQb2xsaW5nSW50ZXJ2YWxJblNl
Y29uZHM7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBzbGVlcChwb2xsSW50
ZXJ2YWwpOwpAQCAtMjcxLDcgKzI3MSw3IEBAIE1lbW9yeVByZXNzdXJlTW9uaXRvcjo6TWVtb3J5
UHJlc3N1cmVNb25pdG9yKCkKICAgICAgICAgfQogICAgICAgICBjbG9zZShtX2V2ZW50RkQpOwog
ICAgIH0pOwotICAgIGRldGFjaFRocmVhZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICB0aHJlYWQt
PmRldGFjaCgpOwogfQogCiBJUEM6OkF0dGFjaG1lbnQgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpj
cmVhdGVIYW5kbGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKaW5kZXggNWI5NWM3OTQxNTNhNGJhYWIyMjc2MmE2OTQ2NjM5YTEzYWQ5YmM1MC4uY2E4ZTQ0
ZWIzYzcwNWU2MTZjZDU0OTM4MmYyNDU0YTdlNjBhMDM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBXZWJQcm9jZXNz
Ojppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFy
YW1ldGVycykKICAgICBwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdURk1vdmUocGFyYW1l
dGVycykpOwogCiAgICAgLy8gTWF0Y2ggdGhlIFFvUyBvZiB0aGUgVUlQcm9jZXNzIGFuZCB0aGUg
c2Nyb2xsaW5nIHRocmVhZCBidXQgdXNlIGEgc2xpZ2h0bHkgbG93ZXIgcHJpb3JpdHkuCi0gICAg
V1RGOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoLTEpOworICAgIFdURjo6VGhy
ZWFkOjpzZXRDdXJyZW50VGhyZWFkSXNVc2VySW50ZXJhY3RpdmUoLTEpOwogCiAgICAgbV9zdXBw
cmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1v
cnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgaWYgKCFtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5k
bGVyKSB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggN2U0NmUxYjhiMGM1MmQ0M2VkZjUxZGRhMDIwOGNkNzRkNGIwYmM1Mi4uOTZjNmE5ZTg0YjZl
ODE4ZjNmZmZiM2FjNDJmMTMxMWZhZGQ0MjVhZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA0LTEyICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJv
ZHVjZSBUaHJlYWQgY2xhc3MgYW5kIHVzZSBSZWZQdHI8VGhyZWFkPiBhbmQgYWxpZ24gV2luZG93
cyBUaHJlYWRpbmcgaW1wbGVtZW50YXRpb24gc2VtYW50aWNzIHRvIFB0aHJlYWQgb25lCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA1MDIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZWNoYW5pY2FsIGNo
YW5nZS4gVXNlIFRocmVhZDo6IEFQSXMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9KYXZh
U2NyaXB0VGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKHJ1bkphdmFTY3JpcHRUaHJlYWQpOgorICAg
ICAgICAoc3RhcnRKYXZhU2NyaXB0VGhyZWFkcyk6CisgICAgICAgIChzdG9wSmF2YVNjcmlwdFRo
cmVhZHMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToK
KyAgICAgICAgKHRlc3RUaHJlYWRJZGVudGlmaWVyTWFwKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0xvY2suY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwOgorCiAyMDE3
LTA0LTExICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxl
IG91dGRhdGVkIFdyaXRhYmxlU3RyZWFtIEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZh
U2NyaXB0VGhyZWFkaW5nLmNwcAppbmRleCBlMmY5YmFkZTZjYTdjMjY5NDg1YTRjZGNiZTYwOTlj
MzZiYTAyMTk4Li43MTBkMmE1OWRhOTI5MDE2ZTYwOGE0Y2Y3ZDk0NmZhODdmYWQ5MzJjIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmNwcApAQCAtNTEsNyAr
NTEsNyBAQCBzdGF0aWMgTG9jayYgamF2YVNjcmlwdFRocmVhZHNNdXRleCgpCiAgICAgcmV0dXJu
IHN0YXRpY011dGV4OwogfQogCi10eXBlZGVmIEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gVGhy
ZWFkU2V0OwordHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxUaHJlYWQ+PiBUaHJlYWRTZXQ7CiBzdGF0
aWMgVGhyZWFkU2V0JiBqYXZhU2NyaXB0VGhyZWFkcygpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKFRocmVhZFNldCwgc3RhdGljSmF2YVNjcmlwdFRocmVhZHMsICgpKTsK
QEAgLTEwOCwxMCArMTA4LDEwIEBAIHZvaWQgcnVuSmF2YVNjcmlwdFRocmVhZCh2b2lkKikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3Jp
cHRUaHJlYWRzTXV0ZXgoKSk7Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkID0gY3Vy
cmVudFRocmVhZCgpOwotICAgICAgICBkZXRhY2hUaHJlYWQodGhyZWFkKTsKLSAgICAgICAgamF2
YVNjcmlwdFRocmVhZHMoKS5yZW1vdmUodGhyZWFkKTsKLSAgICAgICAgamF2YVNjcmlwdFRocmVh
ZHMoKS5hZGQoY3JlYXRlVGhyZWFkKCZydW5KYXZhU2NyaXB0VGhyZWFkLCAwLCAwKSk7CisgICAg
ICAgIFRocmVhZCYgdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7CisgICAgICAgIHRocmVhZC5k
ZXRhY2goKTsKKyAgICAgICAgamF2YVNjcmlwdFRocmVhZHMoKS5yZW1vdmUoJnRocmVhZCk7Cisg
ICAgICAgIGphdmFTY3JpcHRUaHJlYWRzKCkuYWRkKFRocmVhZDo6Y3JlYXRlKCZydW5KYXZhU2Ny
aXB0VGhyZWFkLCAwLCAwKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTI4LDcgKzEy
OCw3IEBAIHZvaWQgc3RhcnRKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoamF2YVNjcmlwdFRocmVhZHNNdXRleCgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgamF2YVNjcmlwdFRocmVhZHNDb3VudDsgKytpKQotICAgICAgICBqYXZhU2NyaXB0VGhyZWFk
cygpLmFkZChjcmVhdGVUaHJlYWQoJnJ1bkphdmFTY3JpcHRUaHJlYWQsIDAsIDApKTsKKyAgICAg
ICAgamF2YVNjcmlwdFRocmVhZHMoKS5hZGQoVGhyZWFkOjpjcmVhdGUoJnJ1bkphdmFTY3JpcHRU
aHJlYWQsIDAsIDApKTsKIH0KIAogdm9pZCBzdG9wSmF2YVNjcmlwdFRocmVhZHMoKQpAQCAtMTM4
LDcgKzEzOCw3IEBAIHZvaWQgc3RvcEphdmFTY3JpcHRUaHJlYWRzKCkKICAgICAgICAgamF2YVNj
cmlwdFRocmVhZHNTaG91bGRUZXJtaW5hdGUgPSB0cnVlOwogICAgIH0KIAotICAgIFZlY3RvcjxU
aHJlYWRJZGVudGlmaWVyLCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50PiB0aHJlYWRzOworICAgIFZl
Y3RvcjxSZWZQdHI8VGhyZWFkPiwgamF2YVNjcmlwdFRocmVhZHNDb3VudD4gdGhyZWFkczsKICAg
ICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGphdmFTY3JpcHRUaHJlYWRzTXV0ZXgoKSk7
CiAgICAgICAgIGNvcHlUb1ZlY3RvcihqYXZhU2NyaXB0VGhyZWFkcygpLCB0aHJlYWRzKTsKQEAg
LTE0Niw3ICsxNDYsNyBAQCB2b2lkIHN0b3BKYXZhU2NyaXB0VGhyZWFkcygpCiAgICAgfQogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqYXZhU2NyaXB0VGhyZWFkc0NvdW50OyArK2kpCi0g
ICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbaV0pOworICAgICAgICB0aHJl
YWRzW2ldLT53YWl0Rm9yQ29tcGxldGlvbigpOwogCiAgICAgewogICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihqYXZhU2NyaXB0VGhyZWFkc011dGV4KCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IDBiNWRiZTAwZjQxMjRiN2Q4ZGVhZGQ1MTU2N2Ji
YTE3OTIzNTA4NTAuLmFmMTZkNjYzZmQwY2M5OGQ5OTI1MzY2NzE3MTJjMzcyMTQ2YmIyMDggMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTEwNzIsOCAr
MTA3Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RUaHJlYWRJZGVudGlmaWVyTWFwKCkKICAgICBwdGhy
ZWFkX2pvaW4ocHRocmVhZCwgMCk7CiAKICAgICAvLyBOb3cgY3JlYXRlIGFub3RoZXIgdGhyZWFk
IHVzaW5nIFdURi4gT24gT1NYLCBpdCB3aWxsIGhhdmUgdGhlIHNhbWUgcHRocmVhZCBoYW5kbGUK
LSAgICAvLyBidXQgc2hvdWxkIGdldCBhIGRpZmZlcmVudCBUaHJlYWRJZGVudGlmaWVyLgotICAg
IGNyZWF0ZVRocmVhZChydW5UaHJlYWQsIDAsICJEdW1wUmVuZGVyVHJlZTogdGVzdCIpOworICAg
IC8vIGJ1dCBzaG91bGQgZ2V0IGEgZGlmZmVyZW50IFJlZlB0cjxUaHJlYWQ+LgorICAgIFRocmVh
ZDo6Y3JlYXRlKHJ1blRocmVhZCwgMCwgIkR1bXBSZW5kZXJUcmVlOiB0ZXN0Iik7CiB9CiAKIHN0
YXRpYyB2b2lkIGFsbG9jYXRlR2xvYmFsQ29udHJvbGxlcnMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAKaW5kZXggODQ4NTI3MzUxZjYwNjNmYzI2MzY4Nzgw
NTZkOWMyNGRiYWJlODNkYy4uNzcyMTYzNmI3NzgwN2YxMzk1MWVhMTEyZmJkNDEzZThmYWM0NjBi
YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCkBAIC04
OSwxNCArODksMTQgQEAgdm9pZCBydW5UZXN0KAogICAgIENvbmRpdGlvbiBlbXB0eUNvbmRpdGlv
bjsKICAgICBDb25kaXRpb24gZnVsbENvbmRpdGlvbjsKIAotICAgIFZlY3RvcjxUaHJlYWRJZGVu
dGlmaWVyPiBjb25zdW1lclRocmVhZHM7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHBy
b2R1Y2VyVGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IGNvbnN1bWVyVGhyZWFk
czsKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1Y2VyVGhyZWFkczsKIAogICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gcmVjZWl2ZWQ7CiAgICAgTG9jayByZWNlaXZlZExvY2s7CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQ29uc3VtZXJzOyBpLS07KSB7Ci0gICAgICAgIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgUmVm
UHRyPFRocmVhZD4gdGhyZWFkSWRlbnRpZmllciA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAg
ICAgIkNvbnN1bWVyIHRocmVhZCIsCiAgICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAg
ICAgIGZvciAoOzspIHsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW1wdHlDb25kaXRpb24sIGxvY2tlciwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogQ2hlY2tpbmcgY29uc3VtcHRpb24gcHJl
ZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRDb250aW51ZSwgIiwgcXVldWUu
c2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogQ2hl
Y2tpbmcgY29uc3VtcHRpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91
bGRDb250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXNob3VsZENvbnRpbnVlIHx8
ICFxdWV1ZS5pc0VtcHR5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lk
IHJ1blRlc3QoCiAgICAgc2xlZXAoZGVsYXkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
UHJvZHVjZXJzOyBpLS07KSB7Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRp
ZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRlbnRp
ZmllciA9IFRocmVhZDo6Y3JlYXRlKAogICAgICAgICAgICAgIlByb2R1Y2VyIFRocmVhZCIsCiAg
ICAgICAgICAgICBbJl0gKCkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyArK2kpIHsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2
b2lkIHJ1blRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENvbmRpdGlvbiwg
bG9ja2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IENoZWNr
aW5nIHByb2R1Y3Rpb24gcHJlZGljYXRlIHdpdGggc2hvdWxkQ29udGludWUgPSAiLCBzaG91bGRD
b250aW51ZSwgIiwgcXVldWUuc2l6ZSgpID09ICIsIHF1ZXVlLnNpemUoKSwgIlxuIikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6
OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcgcHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRD
b250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUu
c2l6ZSgpLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBx
dWV1ZS5zaXplKCkgPCBtYXhRdWV1ZVNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKQEAgLTE1NSw4ICsxNTUs
OCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhyZWFk
SWRlbnRpZmllcik7CiAgICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElk
ZW50aWZpZXIgOiBwcm9kdWNlclRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIGZvciAoUmVmUHRyPFRocmVhZD4gdGhyZWFkSWRl
bnRpZmllciA6IHByb2R1Y2VyVGhyZWFkcykKKyAgICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2tlcihsb2NrKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgfQog
ICAgIGVtcHR5Q29uZGl0aW9uLm5vdGlmeUFsbCgpOwogCi0gICAgZm9yIChUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVhZHMpCi0gICAgICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIGZvciAoUmVmUHRyPFRocmVh
ZD4gdGhyZWFkSWRlbnRpZmllciA6IGNvbnN1bWVyVGhyZWFkcykKKyAgICAgICAgdGhyZWFkSWRl
bnRpZmllci0+d2FpdEZvckNvbXBsZXRpb24oKTsKIAogICAgIEVYUEVDVF9FUShudW1Qcm9kdWNl
cnMgKiBudW1NZXNzYWdlc1BlclByb2R1Y2VyLCByZWNlaXZlZC5zaXplKCkpOwogICAgIHN0ZDo6
c29ydChyZWNlaXZlZC5iZWdpbigpLCByZWNlaXZlZC5lbmQoKSk7CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwCmluZGV4IDU1NzYzMDJkNjkwZGZjYTM1OTkyOTI4YjFjODUzYzc2
MjJlNDVmYjkuLjZhNGU1MzhmNTZmNDZkMTc3YTNmNjJmMWRkZWIzYTRkMGFmMmFmMDggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCkBAIC00NiwxMyArNDYsMTMgQEAgdm9p
ZCBydW5Mb2NrVGVzdCh1bnNpZ25lZCBudW1UaHJlYWRHcm91cHMsIHVuc2lnbmVkIG51bVRocmVh
ZHNQZXJHcm91cCwgdW5zaWduZWQKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9ja1R5cGVbXT4g
bG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPExvY2tUeXBlW10+KG51bVRocmVhZEdyb3Vwcyk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8ZG91
YmxlW10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50
aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihu
dW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZWZQdHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZQdHI8VGhy
ZWFkPltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwogCiAgICAgZm9y
ICh1bnNpZ25lZCB0aHJlYWRHcm91cEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzOyB0aHJlYWRHcm91
cEluZGV4LS07KSB7CiAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdID0gMDsKIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJl
YWRJbmRleC0tOykgewotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVt
VGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAg
ICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdyb3VwICsgdGhyZWFk
SW5kZXhdID0gVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgIkxvY2sgdGVzdCB0aHJl
YWQiLAogICAgICAgICAgICAgICAgIFt0aHJlYWRHcm91cEluZGV4LCAmbG9ja3MsICZ3b3Jkcywg
bnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRpY2FsU2VjdGlvbl0gKCkgewogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JdGVyYXRpb25zOyBpLS07KSB7CkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgcnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNp
Z25lZCBudW1UaHJlYWRzUGVyR3JvdXAsIHVuc2lnbmVkCiAgICAgfQogCiAgICAgZm9yICh1bnNp
Z25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsg
dGhyZWFkSW5kZXgtLTspCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNb
dGhyZWFkSW5kZXhdKTsKKyAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21w
bGV0aW9uKCk7CiAKICAgICBkb3VibGUgZXhwZWN0ZWQgPSAwOwogICAgIGZvciAodWludDY0X3Qg
aSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihudW1JdGVyYXRpb25zKSAqIHdvcmtQZXJDcml0aWNh
bFNlY3Rpb24gKiBudW1UaHJlYWRzUGVyR3JvdXA7IGktLTspCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCmluZGV4IGM2N2UxZTA4MTVhODNhZmE5MzMzZTJh
YzlhMmJkNzhiNjdiMTY0NWIuLmJhOGRkNTZhNWIzMGEyNGVmNWZkY2UzYmQzMDFkMDZmNTRhZDRl
ODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3Qu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCkBA
IC00OCwxNiArNDgsMTUgQEAgc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1UaHJlYWRzOyBpLS07KSB7CiAgICAgICAgICAgICB0
aHJlYWRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAg
ICAgICAgVGhyZWFkOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICJQYXJraW5nIFRlc3Qg
VGhyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIEVYUEVDVF9ORSgwdSwgY3VycmVudFRocmVhZCgpKTsKLQogICAgICAgICAgICAgICAg
ICAgICAgICAgZG93bigpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgYXdh
a2UuYWRkKGN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdv
a2VuID0gY3VycmVudFRocmVhZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXdha2UuYWRk
KFRocmVhZDo6Y3VycmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4g
PSAmVGhyZWFkOjpjdXJyZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24u
bm90aWZ5X29uZSgpOwogICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgIH0KQEAgLTY1
LDE2ICs2NCwxNiBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKIAogICAgIHZvaWQgdW5wYXJr
T25lKHVuc2lnbmVkIHNpbmdsZVVucGFya0luZGV4KQogICAgIHsKLSAgICAgICAgRVhQRUNUX0VR
KDB1LCBsYXN0QXdva2VuKTsKKyAgICAgICAgRVhQRUNUX1RSVUUobnVsbHB0ciA9PSBsYXN0QXdv
a2VuKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAw
OwotICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllciwgOD4gcXVldWU7CisgICAgICAgIFZl
Y3RvcjxSZWZQdHI8VGhyZWFkPiwgOD4gcXVldWU7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVh
Y2goCi0gICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciwg
Y29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmIHRocmVhZElk
ZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKICAgICAgICAgICAgICAgICBpZiAoYWRk
cmVzcyAhPSAmc2VtYXBob3JlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgICAgICAgICBxdWV1ZS5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgICAgICAgICAg
ICAgcXVldWUuYXBwZW5kKCZ0aHJlYWRJZGVudGlmaWVyKTsKIAogICAgICAgICAgICAgICAgIG51
bVdhaXRpbmdPbkFkZHJlc3MrKzsKICAgICAgICAgICAgIH0pOwpAQCAtODcsMTIgKzg2LDEyIEBA
IHN0cnVjdCBTaW5nbGVMYXRjaFRlc3QgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CiAgICAgICAgICAgICB3aGlsZSAoYXdha2Uuc2l6ZSgp
IDwgc2luZ2xlVW5wYXJrSW5kZXggKyAxKQogICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0
KGxvY2tlcik7Ci0gICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGxhc3RBd29rZW4pOworICAgICAg
ICAgICAgRVhQRUNUX1RSVUUobnVsbHB0ciAhPSBsYXN0QXdva2VuKTsKICAgICAgICAgICAgIGlm
ICghcXVldWUuaXNFbXB0eSgpICYmIHF1ZXVlWzBdICE9IGxhc3RBd29rZW4pIHsKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJXb2tlIHVwIHdyb25nIHRocmVhZDogcXVldWUgPSAiLCBsaXN0RHVt
cChxdWV1ZSksICIsIGxhc3QgYXdva2VuID0gIiwgbGFzdEF3b2tlbiwgIlxuIik7CiAgICAgICAg
ICAgICAgICAgRVhQRUNUX0VRKHF1ZXVlWzBdLCBsYXN0QXdva2VuKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxhc3RBd29rZW4gPSAwOworICAgICAgICAgICAgbGFzdEF3b2tlbiA9IG51
bGxwdHI7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwMCw3ICs5OSw3IEBAIHN0cnVjdCBTaW5n
bGVMYXRjaFRlc3QgewogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVz
cyA9IDA7CiAgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKFRo
cmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgIFsmXSAo
VGhyZWFkJiwgY29uc3Qgdm9pZCogYWRkcmVzcykgewogICAgICAgICAgICAgICAgIGlmIChhZGRy
ZXNzICE9ICZzZW1hcGhvcmUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgICAgICAKQEAgLTExNCw3ICsxMTMsNyBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKIAog
ICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsKICAgICAgICAgUGFya2luZ0xvdDo6Zm9y
RWFjaCgKLSAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRk
cmVzcykgeworICAgICAgICAgICAgWyZdIChUaHJlYWQmLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCkBAIC0xMjksOCArMTI4LDggQEAgc3RydWN0
IFNpbmdsZUxhdGNoVGVzdCB7CiAgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2Vy
KTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVu
dGlmaWVyIDogdGhyZWFkcykKLSAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRo
cmVhZElkZW50aWZpZXIpOworICAgICAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+IHRocmVhZElkZW50
aWZpZXIgOiB0aHJlYWRzKQorICAgICAgICAgICAgdGhyZWFkSWRlbnRpZmllci0+d2FpdEZvckNv
bXBsZXRpb24oKTsKICAgICB9CiAKICAgICAvLyBTZW1hcGhvcmUgb3BlcmF0aW9ucy4KQEAgLTE3
OSw5ICsxNzgsOSBAQCBzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKICAgICBBdG9taWM8aW50PiBz
ZW1hcGhvcmU7CiAgICAgc3RkOjptdXRleCBsb2NrOwogICAgIHN0ZDo6Y29uZGl0aW9uX3Zhcmlh
YmxlIGNvbmRpdGlvbjsKLSAgICBIYXNoU2V0PFRocmVhZElkZW50aWZpZXI+IGF3YWtlOwotICAg
IFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiB0aHJlYWRzOwotICAgIFRocmVhZElkZW50aWZpZXIg
bGFzdEF3b2tlbiB7IDAgfTsKKyAgICBIYXNoU2V0PFJlZjxUaHJlYWQ+PiBhd2FrZTsKKyAgICBW
ZWN0b3I8UmVmUHRyPFRocmVhZD4+IHRocmVhZHM7CisgICAgUmVmUHRyPFRocmVhZD4gbGFzdEF3
b2tlbjsKIH07CiAKIHZvaWQgcnVuUGFya2luZ1Rlc3QodW5zaWduZWQgbnVtTGF0Y2hlcywgdW5z
aWduZWQgZGVsYXksIHVuc2lnbmVkIG51bVRocmVhZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVucGFy
a3MpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>