<?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>181559</bug_id>
          
          <creation_ts>2018-01-11 14:05:14 -0800</creation_ts>
          <short_desc>JSC GC should support TLCs (thread local caches)</short_desc>
          <delta_ts>2018-01-26 01:41:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>181543</dependson>
    
    <dependson>182110</dependson>
          <blocked>181635</blocked>
    
    <blocked>181636</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1388450</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-11 14:05:14 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388810</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-12 09:04:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/36472514&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389055</commentid>
    <comment_count>2</comment_count>
      <attachid>331267</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-12 18:45:08 -0800</bug_when>
    <thetext>Created attachment 331267
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389154</commentid>
    <comment_count>3</comment_count>
      <attachid>331293</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-13 15:44:04 -0800</bug_when>
    <thetext>Created attachment 331293
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389207</commentid>
    <comment_count>4</comment_count>
      <attachid>331308</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-14 10:05:34 -0800</bug_when>
    <thetext>Created attachment 331308
moving more stuff into LocalAllocator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389216</commentid>
    <comment_count>5</comment_count>
      <attachid>331310</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-14 14:06:14 -0800</bug_when>
    <thetext>Created attachment 331310
maybe it&apos;s written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389228</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-14 16:38:05 -0800</bug_when>
    <thetext>Attachment 331310 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1496:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1498:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1537:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:67:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:53:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 8 in 34 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>1389333</commentid>
    <comment_count>7</comment_count>
      <attachid>331344</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-15 10:36:22 -0800</bug_when>
    <thetext>Created attachment 331344
getting more things to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389353</commentid>
    <comment_count>8</comment_count>
      <attachid>331352</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-15 12:14:17 -0800</bug_when>
    <thetext>Created attachment 331352
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391228</commentid>
    <comment_count>9</comment_count>
      <attachid>331796</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-19 15:27:56 -0800</bug_when>
    <thetext>Created attachment 331796
got it to build!

wow!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391294</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-19 16:56:29 -0800</bug_when>
    <thetext>Attachment 331796 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1497:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1499:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1537:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:68:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:58:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: This machine could support 4 simulators, but is only configured for 3.
WARNING: Please see &lt;https://trac.webkit.org/wiki/IncreasingKernelLimits&gt;.
Total errors found: 8 in 62 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>1391299</commentid>
    <comment_count>11</comment_count>
      <attachid>331821</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-19 17:01:20 -0800</bug_when>
    <thetext>Created attachment 331821
TLCs can say hello!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391303</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-19 17:08:05 -0800</bug_when>
    <thetext>Attachment 331821 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1497:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1499:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1537:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:68:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:58:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: This machine could support 4 simulators, but is only configured for 3.
WARNING: Please see &lt;https://trac.webkit.org/wiki/IncreasingKernelLimits&gt;.
Total errors found: 8 in 62 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>1391414</commentid>
    <comment_count>13</comment_count>
      <attachid>331846</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-20 11:27:14 -0800</bug_when>
    <thetext>Created attachment 331846
can run significant things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391423</commentid>
    <comment_count>14</comment_count>
      <attachid>331848</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-20 14:47:50 -0800</bug_when>
    <thetext>Created attachment 331848
passes JSC tests!

Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391426</commentid>
    <comment_count>15</comment_count>
      <attachid>331850</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-20 16:43:36 -0800</bug_when>
    <thetext>Created attachment 331850
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391427</commentid>
    <comment_count>16</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-20 16:46:56 -0800</bug_when>
    <thetext>Attachment 331850 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1498:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1500:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1534:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:72:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:59:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: This machine could support 4 simulators, but is only configured for 3.
WARNING: Please see &lt;https://trac.webkit.org/wiki/IncreasingKernelLimits&gt;.
Total errors found: 8 in 66 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>1391428</commentid>
    <comment_count>17</comment_count>
      <attachid>331851</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-20 16:54:12 -0800</bug_when>
    <thetext>Created attachment 331851
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391429</commentid>
    <comment_count>18</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-20 16:56:13 -0800</bug_when>
    <thetext>Attachment 331851 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1498:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1500:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1534:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:77:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:59:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: This machine could support 4 simulators, but is only configured for 3.
WARNING: Please see &lt;https://trac.webkit.org/wiki/IncreasingKernelLimits&gt;.
Total errors found: 8 in 66 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>1391434</commentid>
    <comment_count>19</comment_count>
      <attachid>331853</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-20 17:34:27 -0800</bug_when>
    <thetext>Created attachment 331853
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391435</commentid>
    <comment_count>20</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-20 17:36:57 -0800</bug_when>
    <thetext>Attachment 331853 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1498:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1500:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1534:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:77:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:59:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: This machine could support 4 simulators, but is only configured for 3.
WARNING: Please see &lt;https://trac.webkit.org/wiki/IncreasingKernelLimits&gt;.
Total errors found: 8 in 67 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>1391793</commentid>
    <comment_count>21</comment_count>
      <attachid>331959</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-22 13:46:30 -0800</bug_when>
    <thetext>Created attachment 331959
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391797</commentid>
    <comment_count>22</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-22 13:49:29 -0800</bug_when>
    <thetext>Attachment 331959 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1498:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1500:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1534:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:77:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:59:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: This machine could support 4 simulators, but is only configured for 3.
WARNING: Please see &lt;https://trac.webkit.org/wiki/IncreasingKernelLimits&gt;.
Total errors found: 8 in 67 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>1391803</commentid>
    <comment_count>23</comment_count>
      <attachid>331961</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-22 13:54:17 -0800</bug_when>
    <thetext>Created attachment 331961
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391804</commentid>
    <comment_count>24</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-22 13:55:52 -0800</bug_when>
    <thetext>Attachment 331961 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1498:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1500:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.h:1534:  The parameter name &quot;subspace&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/ThreadLocalCache.h:77:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/VM.h:57:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/AssemblyHelpers.cpp:589:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/LocalAllocator.h:59:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/Subspace.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: This machine could support 4 simulators, but is only configured for 3.
WARNING: Please see &lt;https://trac.webkit.org/wiki/IncreasingKernelLimits&gt;.
Total errors found: 8 in 67 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>1392658</commentid>
    <comment_count>25</comment_count>
      <attachid>331961</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-24 12:00:27 -0800</bug_when>
    <thetext>Comment on attachment 331961
the patch

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

r=me with some feedback.

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        This is a big step towards object distancing by site origin. This patch implements TLCs, or
&gt; +        thread-local caches, which allow each thread to allocate from its own free lists. It also
&gt; +        means that any given thread can context-switch TLCs. This will allow us to do separate
&gt; +        allocation for separate site origins. Eventually, once we reshape how MarkedBlock looks, this
&gt; +        will allow us to have a hard distancing constraint between objects from different origins.

I think it is worth adding additional documentation on the architecture (how allocations now work, and all the invariants in the system).  For example,

    All allocations are now done via a Allocator instead of directly via the BlockDirectory.
    There is 1 ThreadLocalCache per VM: there&apos;s a 1:1 relationship between VM, heap, and the ThreadLocalCache instance.
    The ThreadLocalCache may outlive the VM and the heap, because it may be installed on threads that have used its VM.  If the VM is dead, the ThreadLocalCache will be destroyed when all threads (that had it installed on them) have died.

    relationship between Allocator and BlockDirectory.
    relationship between LocalAllocator and BlockDirectory.
    relationship between BlockDirectory and ThreadLocalCache.
    etc.

It took me a while to grok the relationships between all the actors in the system and what their roles are.  And I was only able to do so by reading the many lines of code in this patch (which took a long time).  Even now, at the end of my reviewing this patch, I&apos;m already starting to get hazy on some these relationships.  For anyone else coming to read parts of this code later and trying to understand what&apos;s what, it would be easy to be lost without a high level guide on the architecture.  It would be very helpful if one can simply read a short summary of the architecture in one place instead of having to grok thru many pages of code in disparate places and having to reverse engineer their intent.

So, can you add an architecture summary here in the ChangeLog?  Or perhaps also copy it into a comment blob in ThreadLocalCache.h/cpp where it&apos;ll be easier to find.  Thanks.

&gt; Source/JavaScriptCore/heap/LocalAllocator.cpp:195
&gt; +    // for for using TLC allocation from JIT threads.

duplicate &quot;for&quot;

&gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:43
&gt; +    m_data = allocateData();

nit: I recommend calling an ensureData() instead (see below for more discussion).

&gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:51
&gt; +ThreadLocalCache::Data* ThreadLocalCache::allocateData()

nit: I recommend changing this into a void ensureData() method, and having it destroy the old m_data if an old one exists.  That brings the groups the lifecycle of Data into ensureData() and destroyData() methods instead of having parts in ThreadLocalCache::allocatorSlow() as well.

&gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:106
&gt; +    Data* oldData = m_data;
&gt; +    m_data = allocateData();
&gt; +    destroyData(oldData);

nit: I recommend doing all this inside an ensureData() method instead.

&gt; Source/JavaScriptCore/heap/ThreadLocalCache.h:60
&gt; +    static ptrdiff_t offsetOfSize() { return OBJECT_OFFSETOF(Data, size); }
&gt; +    static ptrdiff_t offsetOfFirstAllocator() { return OBJECT_OFFSETOF(Data, allocator); }

nit: It would be more accurate to name these offsetOfDataSize() and offsetOfDataFirstAllocator().

&gt; Source/JavaScriptCore/heap/ThreadLocalCacheInlines.h:45
&gt; +    if (data)

nit: use LIKELY() around (data)?

&gt; Source/JavaScriptCore/heap/ThreadLocalCacheInlines.h:52
&gt; +    if (getImpl(vm) == m_data)

nit: use LIKELY() around condition?

&gt; Source/JavaScriptCore/heap/ThreadLocalCacheLayout.cpp:1
&gt; +/*

malm DONE

&gt; Source/JavaScriptCore/heap/ThreadLocalCacheLayout.h:63
&gt; +    size_t m_size { 0 };
&gt; +    Vector&lt;BlockDirectory*&gt; m_directories;

I was going to to comment that m_size if redundant because it can be implied / computed from m_directories.size().  Ditto for size in Snapshot.  However, after groking the entire patch, I see that m_size being in units of bytes instead of an index has a small advantage in code emitted for variable JITAllocators.  Otherwise, we can just set offset to the vector index instead of an increment of sizeof(LocalAllocator).

On a similar note, I was also going to suggest that we can reserve offset 0 to be the null allocator instead of using UINT_MAX.  That has some benefits and can simplify a lot of code, and make it more intuitive.  It would mean that offset is now defined in terms of vector index + 1, instead of just the vector index (or its bytes size equivalent).

That said, I don&apos;t think it&apos;s worth making the change for now.  We can always refactor this code later to apply that change if desired.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1493
&gt; -
&gt; +    

Please undo.

&gt; Source/JavaScriptCore/runtime/VM.cpp:390
&gt; -
&gt; +    

please undo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392661</commentid>
    <comment_count>26</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-24 12:03:09 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #25)
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheLayout.cpp:1
&gt; &gt; +/*
&gt; 
&gt; malm DONE

Ignore this.  This was a typo in one of my place markers, and hence why I neglected to remove it before finalizing the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392668</commentid>
    <comment_count>27</comment_count>
      <attachid>331961</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-24 12:37:41 -0800</bug_when>
    <thetext>Comment on attachment 331961
the patch

The SomeRegisterWithClobber ValueRep LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392821</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-24 16:04:33 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #25)
&gt; Comment on attachment 331961 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=331961&amp;action=review
&gt; 
&gt; r=me with some feedback.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:12
&gt; &gt; +        This is a big step towards object distancing by site origin. This patch implements TLCs, or
&gt; &gt; +        thread-local caches, which allow each thread to allocate from its own free lists. It also
&gt; &gt; +        means that any given thread can context-switch TLCs. This will allow us to do separate
&gt; &gt; +        allocation for separate site origins. Eventually, once we reshape how MarkedBlock looks, this
&gt; &gt; +        will allow us to have a hard distancing constraint between objects from different origins.
&gt; 
&gt; I think it is worth adding additional documentation on the architecture (how
&gt; allocations now work, and all the invariants in the system).  For example,
&gt; 
&gt;     All allocations are now done via a Allocator instead of directly via the
&gt; BlockDirectory.
&gt;     There is 1 ThreadLocalCache per VM: there&apos;s a 1:1 relationship between
&gt; VM, heap, and the ThreadLocalCache instance.
&gt;     The ThreadLocalCache may outlive the VM and the heap, because it may be
&gt; installed on threads that have used its VM.  If the VM is dead, the
&gt; ThreadLocalCache will be destroyed when all threads (that had it installed
&gt; on them) have died.
&gt; 
&gt;     relationship between Allocator and BlockDirectory.
&gt;     relationship between LocalAllocator and BlockDirectory.
&gt;     relationship between BlockDirectory and ThreadLocalCache.
&gt;     etc.
&gt; 
&gt; It took me a while to grok the relationships between all the actors in the
&gt; system and what their roles are.  And I was only able to do so by reading
&gt; the many lines of code in this patch (which took a long time).  Even now, at
&gt; the end of my reviewing this patch, I&apos;m already starting to get hazy on some
&gt; these relationships.  For anyone else coming to read parts of this code
&gt; later and trying to understand what&apos;s what, it would be easy to be lost
&gt; without a high level guide on the architecture.  It would be very helpful if
&gt; one can simply read a short summary of the architecture in one place instead
&gt; of having to grok thru many pages of code in disparate places and having to
&gt; reverse engineer their intent.
&gt; 
&gt; So, can you add an architecture summary here in the ChangeLog?  Or perhaps
&gt; also copy it into a comment blob in ThreadLocalCache.h/cpp where it&apos;ll be
&gt; easier to find.  Thanks.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/LocalAllocator.cpp:195
&gt; &gt; +    // for for using TLC allocation from JIT threads.
&gt; 
&gt; duplicate &quot;for&quot;

Fixed

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:43
&gt; &gt; +    m_data = allocateData();
&gt; 
&gt; nit: I recommend calling an ensureData() instead (see below for more
&gt; discussion).

Good idea.  I&apos;ll do that.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:51
&gt; &gt; +ThreadLocalCache::Data* ThreadLocalCache::allocateData()
&gt; 
&gt; nit: I recommend changing this into a void ensureData() method, and having
&gt; it destroy the old m_data if an old one exists.  That brings the groups the
&gt; lifecycle of Data into ensureData() and destroyData() methods instead of
&gt; having parts in ThreadLocalCache::allocatorSlow() as well.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:106
&gt; &gt; +    Data* oldData = m_data;
&gt; &gt; +    m_data = allocateData();
&gt; &gt; +    destroyData(oldData);
&gt; 
&gt; nit: I recommend doing all this inside an ensureData() method instead.

I replaced allocateData() with ensureData().  allocatorSlow() is different because it also returns an allocator (the constructor does not want that).  destroyData() is needed by both ensureData() and the destructor.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.h:60
&gt; &gt; +    static ptrdiff_t offsetOfSize() { return OBJECT_OFFSETOF(Data, size); }
&gt; &gt; +    static ptrdiff_t offsetOfFirstAllocator() { return OBJECT_OFFSETOF(Data, allocator); }
&gt; 
&gt; nit: It would be more accurate to name these offsetOfDataSize() and
&gt; offsetOfDataFirstAllocator().

I changed them to offsetOfSizeInData() and offsetOfFirstAllocatorInData().

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheInlines.h:45
&gt; &gt; +    if (data)
&gt; 
&gt; nit: use LIKELY() around (data)?

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheInlines.h:52
&gt; &gt; +    if (getImpl(vm) == m_data)
&gt; 
&gt; nit: use LIKELY() around condition?

I don&apos;t actually know if that&apos;s likely.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheLayout.cpp:1
&gt; &gt; +/*
&gt; 
&gt; malm DONE
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheLayout.h:63
&gt; &gt; +    size_t m_size { 0 };
&gt; &gt; +    Vector&lt;BlockDirectory*&gt; m_directories;
&gt; 
&gt; I was going to to comment that m_size if redundant because it can be implied
&gt; / computed from m_directories.size().  Ditto for size in Snapshot.  However,
&gt; after groking the entire patch, I see that m_size being in units of bytes
&gt; instead of an index has a small advantage in code emitted for variable
&gt; JITAllocators.  Otherwise, we can just set offset to the vector index
&gt; instead of an increment of sizeof(LocalAllocator).

Not just the JIT.  Every allocation first gets an Allocator (currently an offset) and adds it to the ThreadLocalData::Data.

If it was an index then this would be an imul because LocalAllocator is likely to have a not-power-of-2 size.

&gt; 
&gt; On a similar note, I was also going to suggest that we can reserve offset 0
&gt; to be the null allocator instead of using UINT_MAX.  That has some benefits
&gt; and can simplify a lot of code, and make it more intuitive.  It would mean
&gt; that offset is now defined in terms of vector index + 1, instead of just the
&gt; vector index (or its bytes size equivalent).

Currently we use the fact that bad allocator is UINT_MAX to skip one check: if the CompleteSubspace returns a null allocator then it is trivially out of bounds.

Again, this saves one math op.

&gt; 
&gt; That said, I don&apos;t think it&apos;s worth making the change for now.  We can
&gt; always refactor this code later to apply that change if desired.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1493
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; Please undo.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/VM.cpp:390
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; please undo.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392822</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-24 16:05:06 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #28)
&gt; (In reply to Mark Lam from comment #25)
&gt; &gt; Comment on attachment 331961 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=331961&amp;action=review
&gt; &gt; 
&gt; &gt; r=me with some feedback.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:12
&gt; &gt; &gt; +        This is a big step towards object distancing by site origin. This patch implements TLCs, or
&gt; &gt; &gt; +        thread-local caches, which allow each thread to allocate from its own free lists. It also
&gt; &gt; &gt; +        means that any given thread can context-switch TLCs. This will allow us to do separate
&gt; &gt; &gt; +        allocation for separate site origins. Eventually, once we reshape how MarkedBlock looks, this
&gt; &gt; &gt; +        will allow us to have a hard distancing constraint between objects from different origins.
&gt; &gt; 
&gt; &gt; I think it is worth adding additional documentation on the architecture (how
&gt; &gt; allocations now work, and all the invariants in the system).  For example,
&gt; &gt; 
&gt; &gt;     All allocations are now done via a Allocator instead of directly via the
&gt; &gt; BlockDirectory.
&gt; &gt;     There is 1 ThreadLocalCache per VM: there&apos;s a 1:1 relationship between
&gt; &gt; VM, heap, and the ThreadLocalCache instance.
&gt; &gt;     The ThreadLocalCache may outlive the VM and the heap, because it may be
&gt; &gt; installed on threads that have used its VM.  If the VM is dead, the
&gt; &gt; ThreadLocalCache will be destroyed when all threads (that had it installed
&gt; &gt; on them) have died.
&gt; &gt; 
&gt; &gt;     relationship between Allocator and BlockDirectory.
&gt; &gt;     relationship between LocalAllocator and BlockDirectory.
&gt; &gt;     relationship between BlockDirectory and ThreadLocalCache.
&gt; &gt;     etc.
&gt; &gt; 
&gt; &gt; It took me a while to grok the relationships between all the actors in the
&gt; &gt; system and what their roles are.  And I was only able to do so by reading
&gt; &gt; the many lines of code in this patch (which took a long time).  Even now, at
&gt; &gt; the end of my reviewing this patch, I&apos;m already starting to get hazy on some
&gt; &gt; these relationships.  For anyone else coming to read parts of this code
&gt; &gt; later and trying to understand what&apos;s what, it would be easy to be lost
&gt; &gt; without a high level guide on the architecture.  It would be very helpful if
&gt; &gt; one can simply read a short summary of the architecture in one place instead
&gt; &gt; of having to grok thru many pages of code in disparate places and having to
&gt; &gt; reverse engineer their intent.
&gt; &gt; 
&gt; &gt; So, can you add an architecture summary here in the ChangeLog?  Or perhaps
&gt; &gt; also copy it into a comment blob in ThreadLocalCache.h/cpp where it&apos;ll be
&gt; &gt; easier to find.  Thanks.
&gt; 
&gt; Fixed.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/LocalAllocator.cpp:195
&gt; &gt; &gt; +    // for for using TLC allocation from JIT threads.
&gt; &gt; 
&gt; &gt; duplicate &quot;for&quot;
&gt; 
&gt; Fixed
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:43
&gt; &gt; &gt; +    m_data = allocateData();
&gt; &gt; 
&gt; &gt; nit: I recommend calling an ensureData() instead (see below for more
&gt; &gt; discussion).
&gt; 
&gt; Good idea.  I&apos;ll do that.

Sorry, this isn&apos;t a valid change.  allocateData() must not install data.  Therefore, I think it makes sense if allocateData() also doesn&apos;t destroy data.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:51
&gt; &gt; &gt; +ThreadLocalCache::Data* ThreadLocalCache::allocateData()
&gt; &gt; 
&gt; &gt; nit: I recommend changing this into a void ensureData() method, and having
&gt; &gt; it destroy the old m_data if an old one exists.  That brings the groups the
&gt; &gt; lifecycle of Data into ensureData() and destroyData() methods instead of
&gt; &gt; having parts in ThreadLocalCache::allocatorSlow() as well.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:106
&gt; &gt; &gt; +    Data* oldData = m_data;
&gt; &gt; &gt; +    m_data = allocateData();
&gt; &gt; &gt; +    destroyData(oldData);
&gt; &gt; 
&gt; &gt; nit: I recommend doing all this inside an ensureData() method instead.
&gt; 
&gt; I replaced allocateData() with ensureData().  allocatorSlow() is different
&gt; because it also returns an allocator (the constructor does not want that). 
&gt; destroyData() is needed by both ensureData() and the destructor.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.h:60
&gt; &gt; &gt; +    static ptrdiff_t offsetOfSize() { return OBJECT_OFFSETOF(Data, size); }
&gt; &gt; &gt; +    static ptrdiff_t offsetOfFirstAllocator() { return OBJECT_OFFSETOF(Data, allocator); }
&gt; &gt; 
&gt; &gt; nit: It would be more accurate to name these offsetOfDataSize() and
&gt; &gt; offsetOfDataFirstAllocator().
&gt; 
&gt; I changed them to offsetOfSizeInData() and offsetOfFirstAllocatorInData().
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheInlines.h:45
&gt; &gt; &gt; +    if (data)
&gt; &gt; 
&gt; &gt; nit: use LIKELY() around (data)?
&gt; 
&gt; OK.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheInlines.h:52
&gt; &gt; &gt; +    if (getImpl(vm) == m_data)
&gt; &gt; 
&gt; &gt; nit: use LIKELY() around condition?
&gt; 
&gt; I don&apos;t actually know if that&apos;s likely.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheLayout.cpp:1
&gt; &gt; &gt; +/*
&gt; &gt; 
&gt; &gt; malm DONE
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCacheLayout.h:63
&gt; &gt; &gt; +    size_t m_size { 0 };
&gt; &gt; &gt; +    Vector&lt;BlockDirectory*&gt; m_directories;
&gt; &gt; 
&gt; &gt; I was going to to comment that m_size if redundant because it can be implied
&gt; &gt; / computed from m_directories.size().  Ditto for size in Snapshot.  However,
&gt; &gt; after groking the entire patch, I see that m_size being in units of bytes
&gt; &gt; instead of an index has a small advantage in code emitted for variable
&gt; &gt; JITAllocators.  Otherwise, we can just set offset to the vector index
&gt; &gt; instead of an increment of sizeof(LocalAllocator).
&gt; 
&gt; Not just the JIT.  Every allocation first gets an Allocator (currently an
&gt; offset) and adds it to the ThreadLocalData::Data.
&gt; 
&gt; If it was an index then this would be an imul because LocalAllocator is
&gt; likely to have a not-power-of-2 size.
&gt; 
&gt; &gt; 
&gt; &gt; On a similar note, I was also going to suggest that we can reserve offset 0
&gt; &gt; to be the null allocator instead of using UINT_MAX.  That has some benefits
&gt; &gt; and can simplify a lot of code, and make it more intuitive.  It would mean
&gt; &gt; that offset is now defined in terms of vector index + 1, instead of just the
&gt; &gt; vector index (or its bytes size equivalent).
&gt; 
&gt; Currently we use the fact that bad allocator is UINT_MAX to skip one check:
&gt; if the CompleteSubspace returns a null allocator then it is trivially out of
&gt; bounds.
&gt; 
&gt; Again, this saves one math op.
&gt; 
&gt; &gt; 
&gt; &gt; That said, I don&apos;t think it&apos;s worth making the change for now.  We can
&gt; &gt; always refactor this code later to apply that change if desired.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1493
&gt; &gt; &gt; -
&gt; &gt; &gt; +    
&gt; &gt; 
&gt; &gt; Please undo.
&gt; 
&gt; Fixed.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/VM.cpp:390
&gt; &gt; &gt; -
&gt; &gt; &gt; +    
&gt; &gt; 
&gt; &gt; please undo.
&gt; 
&gt; Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392911</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-24 20:22:16 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/227592/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392970</commentid>
    <comment_count>31</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2018-01-25 02:38:51 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #30)
&gt; Landed in https://trac.webkit.org/changeset/227592/webkit

FYI, it made zillion tests crash on AArch64 Linux.
cc-ing Igalians, maybe you are interested in this bug.

before: 
- 16 fails
- https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/2881

after:
- 8136 fails
- https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/2882</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393030</commentid>
    <comment_count>32</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-01-25 07:21:03 -0800</bug_when>
    <thetext>(In reply to Csaba Osztrogonác from comment #31)
&gt; FYI, it made zillion tests crash on AArch64 Linux.
&gt; cc-ing Igalians, maybe you are interested in this bug.
&gt; 
&gt; before: 
&gt; - 16 fails
&gt; -
&gt; https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/
&gt; 2881
&gt; 
&gt; after:
&gt; - 8136 fails
&gt; -
&gt; https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/
&gt; 2882

Thanks for the heads-up, we are indeed....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393053</commentid>
    <comment_count>33</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-25 08:15:20 -0800</bug_when>
    <thetext>This also made 4000 iOS JSC tests fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393068</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-25 09:17:21 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #33)
&gt; This also made 4000 iOS JSC tests fail

OK, I&apos;ll roll it out for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393071</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-25 09:17:58 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 182110</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393155</commentid>
    <comment_count>36</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-25 11:35:29 -0800</bug_when>
    <thetext>Relanded with ARM64 fix in https://trac.webkit.org/changeset/227617/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393476</commentid>
    <comment_count>37</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2018-01-26 01:41:35 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #36)
&gt; Relanded with ARM64 fix in https://trac.webkit.org/changeset/227617/webkit

It seems it didn&apos;t fix the AArch64 Linux issue.

before:
- 19 fails
- https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/2888

after:
- 8879 fails
- https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/2889</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331267</attachid>
            <date>2018-01-12 18:45:08 -0800</date>
            <delta_ts>2018-01-13 15:44:04 -0800</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22407</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBbGxvY2F0
b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcihzaXplX3Qgb2Zmc2V0KQorICAgICAgICA6IG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKFZN
JiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIAorICAg
IHNpemVfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIAorcHJpdmF0
ZToKKyAgICBzaXplX3Qgb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0
b3IuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQqIGNv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlKQoreworICAgIHJldHVybiBUaHJlYWRM
b2NhbENhY2hlOjphbGxvY2F0b3Iodm0sIG1fb2Zmc2V0KS5hbGxvY2F0ZShjb250ZXh0LCBtb2Rl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUg
IkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRlICJMb2Nh
bEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgpAQCAtNDEsNiArNDIsNyBA
QCBjbGFzcyBIZWFwOwogY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsK
IAogI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKG1hY3JvKSBcCiAgICAgbWFj
cm8obGl2ZSwgTGl2ZSkgLyogVGhlIHNldCBvZiBibG9jayBpbmRpY2VzIHRoYXQgaGF2ZSBhY3R1
YWwgYmxvY2tzLiAqL1wKQEAgLTE2NSw2ICsxNjcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsK
KyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1bWVG
cmVlTGlzdCgpOwpAQCAtMjA2LDYgKzIwOSw5IEBAIHByaXZhdGU6CiAgICAgQmxvY2tEaXJlY3Rv
cnkqIG1fbmV4dERpcmVjdG9yeSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9u
ZXh0RGlyZWN0b3J5SW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSog
bV9uZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OworICAg
IAorICAgIHNpemVfdCBtX3RsY09mZnNldDsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8TG9jYWxB
bGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxsb2NhdG9yPj4gbV9sb2NhbEFs
bG9jYXRvcnM7CiB9OwogCiBpbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkZyZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2
aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQCBzdHJ1Y3QgRnJlZUNlbGwgewogfTsKIAog
Y2xhc3MgRnJlZUxpc3QgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyZWVMaXN0KTsKLSAg
ICAKIHB1YmxpYzoKICAgICBGcmVlTGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSk7CiAgICAgfkZyZWVM
aXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxv
Y2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisKK2NsYXNzIExvY2FsQWxsb2NhdG9yIDog
cHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxsb2NhdG9yPiB7CitwdWJsaWM6Cisg
ICAgTG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqKTsKKyAgICBMb2NhbEFsbG9jYXRvcihM
b2NhbEFsbG9jYXRvciYmKTsKKyAgICB+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2b2lk
KiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisK
KyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlv
bigpOworICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZygpOworICAgIAorcHJpdmF0ZToKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
KyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CisgICAgdm9pZCog
dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCogYWxsb2NhdGVJ
bihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENv
bGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKworICAgIEJsb2NrRGlyZWN0
b3J5KiBtX2RpcmVjdG9yeTsKKyAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OworICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrOworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1f
bGFzdEFjdGl2ZUJsb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRo
cmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZlB0cjxUaHJlYWRMb2Nh
bENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworfQorCitUaHJlYWRMb2Nh
bENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkK
K3sKKyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6
flRocmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Cit9CisKK1Ro
cmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCit7
CisgICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOworICAgIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2Nh
bENhY2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAgICBEYXRhKiByZXN1bHQgPSBmYXN0
TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpICsgbGF5b3V0LnNpemUpOwor
ICAgIHJlc3VsdC0+c2l6ZSA9IGxheW91dC5zaXplOworICAgIHJlc3VsdC0+Y2FjaGUgPSB0aGlz
OworICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCAr
PSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3Vs
dCwgb2Zmc2V0KSkgKFdURk1vdmUoYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCkpKTsKKyAgICBm
b3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBsYXlvdXQuc2l6ZTsgb2Zmc2V0
ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVz
dWx0LCBvZmZzZXQpKSAobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFs
bG9jYXRvcildKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFRocmVhZExvY2FsQ2Fj
aGU6OmRlc3Ryb3lEYXRhKERhdGEqIGRhdGEpCit7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0g
MDsgb2Zmc2V0IDwgZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikp
CisgICAgICAgIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAg
ICBmYXN0RnJlZShkYXRhKTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xv
dyhWTSYgdm0sIFRocmVhZExvY2FsQ2FjaGUqIGNhY2hlKQoreworICAgIAorfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVh
ZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
VGhyZWFkTG9jYWxDYWNoZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZExvY2Fs
Q2FjaGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAg
IHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmKTsKKyAgICAKKyAg
ICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGdldChWTSYpOworICAgIAorICAgIC8v
IFRoaXMgaXMgZGVzaWduZWQgdG8gYmUgZmFzdCBlbm91Z2ggdGhhdCB5b3UgY291bGQgZXZlbiBj
YWxsIGl0IGJlZm9yZSBldmVyeSBhbGxvY2F0aW9uLCBieQorICAgIC8vIG9wdGltaXppbmcgZm9y
IHRoZSBjYXNlIHRoYXQgeW91J3JlIGp1c3QgaW5zdGFsbGluZyB0aGUgY2FjaGUgdGhhdCBpcyBh
bHJlYWR5IGluc3RhbGxlZC4gVGhpcworICAgIC8vIGFzc3VtZXMgYSByZWxhdGl2ZWx5IHNtYWxs
IG51bWJlciBvZiBjYWNoZXMgb3IgbG93IGNoYW5jZSBvZiBhY3R1YWwgY29udGV4dCBzd2l0Y2gg
Y29tYmluZWQKKyAgICAvLyB3aXRoIHBvc3NpYmx5IGhpZ2ggcmF0ZSBvZiAiSSBtYXkgaGF2ZSBj
b250ZXh0IHN3aXRjaGVkIiBzaXRlcyB0aGF0IGNhbGwgdGhpcyBvdXQgb2YgcGFyYW5vaWEuCisg
ICAgc3RhdGljIHZvaWQgaW5zdGFsbChWTSYsIFRocmVhZExvY2FsQ2FjaGUqKTsKKyAgICAKKyAg
ICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBUaHJlYWRMb2NhbENhY2hlKEhlYXAmKTsKKyAgICB+VGhyZWFk
TG9jYWxDYWNoZSgpOworICAgIAorICAgIHN0cnVjdCBEYXRhIHsKKyAgICAgICAgc2l6ZV90IHNp
emU7CisgICAgICAgIFRocmVhZExvY2FsQ2FjaGUqIGNhY2hlOworICAgICAgICBMb2NhbEFsbG9j
YXRvciBhbGxvY2F0b3JbMV07CisgICAgfTsKKworICAgIHN0YXRpYyBEYXRhKiBnZXRJbXBsKFZN
Jik7CisgICAgCisgICAgRGF0YSogYWxsb2NhdGVEYXRhKCk7CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveURhdGEoRGF0YSopOworICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKERh
dGEmIGRhdGEsIHNpemVfdCBvZmZzZXQpOworCisgICAgc3RhdGljIHZvaWQgaW5zdGFsbFNsb3co
Vk0mLCBUaHJlYWRMb2NhbENhY2hlKik7CisgICAgCisgICAgTG9jYWxBbGxvY2F0b3ImIGFsbG9j
YXRvclNsb3coc2l6ZV90IG9mZnNldCk7CisgICAgCisgICAgLy8gV2hlbiBpbnN0YWxsZWQsIHdl
IHJlZigpIHRoZSBjYWNoZS4gVW5pbnN0YWxsaW5nIGRlcmVmKClzIHRoZSBjYWNoZS4gVExTIGRl
c3RydWN0aW9uIGRlcmVmKClzCisgICAgLy8gdGhlIGNhY2hlLiBXaGVuIHRoZSBjYWNoZSBpcyBk
ZXN0cnVjdGVkLCBpdCBuZWVkcyB0byByZXR1cm4gYWxsIG9mIGl0cyBzdGF0ZSB0byB0aGUgR0Mu
IEkKKyAgICAvLyB0aGluayB0aGF0IGp1c3QgbWVhbnMgc3RvcEFsbG9jYXRpbmcoKSwgYnV0IHdp
dGggc29tZSBzZXJpb3VzbHkgaGVhdnkgY2F2ZWF0cyBoYXZpbmcgdG8gZG8KKyAgICAvLyB3aXRo
IHdoZW4gaXQncyB2YWxpZCB0byBtYWtlIHRoYXQgY2FsbC4gQWx0ZXJuYXRpdmVseSwgd2UgY291
bGQgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGUgY2FjaGUKKyAgICAvLyBpcyBlbXB0eSB3aGVuIHdl
IGRlc3RydWN0IGl0LiBUaGlzIGlzIGNvcnJlY3QgZm9yIGNhY2hlcyB0aGF0IGFyZSBrZXB0IGxp
dmUgYnkgR0Mgb2JqZWN0cyBhbmQKKyAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGltbW9ydGFsIGNh
Y2hlcy4KKyAgICBIZWFwJiBtX2hlYXA7CisgICAgRGF0YSogbV9kYXRhOworCisjaWYgSEFWRV9Q
VEhSRUFEX01BQ0hERVBfSAorICAgIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRsc0tleSA9
IFdURl9HQ19UTENfS0VZOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hl
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1RocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZt
KQoreworI2lmIEhBVkVfUFRIUkVBRF9NQUNIREVQX0gKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VGhyZWFkTG9jYWxDYWNoZTo6RGF0YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdCh0bHNL
ZXkpKTsKKyNlbHNlCisgICAgcmV0dXJuIHZtLnRocmVhZExvY2FsQ2FjaGU7CisjZW5kaWYKK30K
KworUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmdldChWTSYgdm0p
Cit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOworICAg
IGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+Y2FjaGU7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbChWTSYgdm0sIFRocmVhZExv
Y2FsQ2FjaGUqIGNhY2hlKQoreworICAgIGlmIChnZXRJbXBsKHZtKS0+Y2FjaGUgPT0gY2FjaGUp
CisgICAgICAgIHJldHVybjsKKyAgICBpbnN0YWxsU2xvdyh2bSwgY2FjaGUpOworfQorCitMb2Nh
bEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7
CisgICAgaWYgKG9mZnNldCA8IGRhdGEtPnNpemUpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3Io
KmRhdGEsIG9mZnNldCk7CisgICAgcmV0dXJuIGRhdGEtPmNhY2hlLT5hbGxvY2F0b3JTbG93KG9m
ZnNldCk7Cit9CisKK0xvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3Io
RGF0YSYgZGF0YSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxM
b2NhbEFsbG9jYXRvcio+KGJpdHdpc2VfY2FzdDxjaGFyKj4oJmRhdGEuYWxsb2NhdG9yWzBdKSAr
IG9mZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hl
TGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitU
aHJlYWRMb2NhbENhY2hlTGF5b3V0OjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKwor
VGhyZWFkTG9jYWxDYWNoZUxheW91dDo6flRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKQoreworfQor
Cit2b2lkIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0
b3J5KiBkaXJlY3RvcnkpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
ICAgIGRpcmVjdG9yeS0+bV90bGNPZmZzZXQgPSBtX3NpemU7CisgICAgbV9zaXplICs9IHNpemVv
ZihCbG9ja0RpcmVjdG9yeSk7CisgICAgbV9kaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsK
K30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6U25hcHNob3QgVGhyZWFkTG9jYWxDYWNoZUxh
eW91dDo6ZGlyZWN0b3JpZXMoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICBTbmFwc2hvdCByZXN1bHQ7CisgICAgcmVzdWx0LnNpemUgPSBtX3NpemU7CisgICAg
cmVzdWx0LmRpcmVjdG9yaWVzID0gbV9kaXJlY3RvcmllczsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEVh
Y2ggSGVhcCBoYXMgYSBUaHJlYWRMb2NhbENhY2hlTGF5b3V0IHRoYXQgaGVscHMgdXMgZmlndXJl
IG91dCBob3cgdG8gYWxsb2NhdGUgYSBUaHJlYWRMb2NhbENhY2hlCisvLyBmb3IgdGhhdCBIZWFw
LgorCitjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0IHsKK3B1YmxpYzoKKyAgICBUaHJlYWRM
b2NhbENhY2hlTGF5b3V0KCk7CisgICAgflRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKTsKKworICAg
IC8vIEJsb2NrRGlyZWN0b3J5IGNhbGxzIHRoaXMgZHVyaW5nIGNyZWF0aW9uIGFuZCB0aGlzIGZp
bGxzIGluIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXQuCisgICAgdm9pZCBhbGxvY2F0ZU9mZnNldChC
bG9ja0RpcmVjdG9yeSopOworICAgIAorICAgIHN0cnVjdCBTbmFwc2hvdCB7CisgICAgICAgIHNp
emVfdCBzaXplOworICAgICAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBkaXJlY3RvcmllczsK
KyAgICB9CisgICAgCisgICAgU25hcHNob3Qgc25hcHNob3QoKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgTG9jayBtX2xvY2s7CisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBWZWN0
b3I8QmxvY2tEaXJlY3RvcnkqPiBtX2RpcmVjdG9yaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331293</attachid>
            <date>2018-01-13 15:44:04 -0800</date>
            <delta_ts>2018-01-14 10:05:34 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29051</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBbGxvY2F0
b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcihzaXplX3Qgb2Zmc2V0KQorICAgICAgICA6IG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKFZN
JiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIAorICAg
IHNpemVfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIAorcHJpdmF0
ZToKKyAgICBzaXplX3Qgb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0
b3IuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQqIGNv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlKQoreworICAgIHJldHVybiBUaHJlYWRM
b2NhbENhY2hlOjphbGxvY2F0b3Iodm0sIG1fb2Zmc2V0KS5hbGxvY2F0ZShjb250ZXh0LCBtb2Rl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUg
IkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRlICJMb2Nh
bEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSA8d3RmL0Rh
dGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgpAQCAtNDEsNiArNDIsNyBA
QCBjbGFzcyBIZWFwOwogY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsK
IAogI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKG1hY3JvKSBcCiAgICAgbWFj
cm8obGl2ZSwgTGl2ZSkgLyogVGhlIHNldCBvZiBibG9jayBpbmRpY2VzIHRoYXQgaGF2ZSBhY3R1
YWwgYmxvY2tzLiAqL1wKQEAgLTE2Myw4ICsxNjUsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVt
cEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxs
U2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgVGhy
ZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBh
bGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwpAQCAtMjA2LDYg
KzIxMCw5IEBAIHByaXZhdGU6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9yeSB7
IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5TdWJzcGFj
ZSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OworICAgIAorICAgIHNpemVfdCBtX3RsY09m
ZnNldDsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8TG9jYWxBbGxvY2F0b3IsIEJhc2ljUmF3U2Vu
dGluZWxOb2RlPExvY2FsQWxsb2NhdG9yPj4gbV9sb2NhbEFsbG9jYXRvcnM7CiB9OwogCiBpbmxp
bmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5o
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0Rp
cmVjdG9yeUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTUgKzM2LDYgQEAgaW5saW5l
IGJvb2wgQmxvY2tEaXJlY3Rvcnk6OmlzRnJlZUxpc3RlZAogICAgIHJldHVybiBtX2ZyZWVMaXN0
LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCog
ZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCi17Ci0g
ICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFsmXSAoKSAtPiBIZWFwQ2Vs
bCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+dm0oKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRl
ZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKLSAgICAgICAgfSk7Ci19Ci0KIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBCbG9ja0RpcmVjdG9yeTo6Zm9yRWFjaEJs
b2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgbV9saXZlLmZvckVhY2hTZXRCaXQo
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJKHJldmlzaW9uIDIyNjg5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07CiAKIGNsYXNzIEZyZWVM
aXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7Ci0gICAgCiBwdWJsaWM6
CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5GcmVlTGlzdCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TG9jYWxBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0xvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQorICAgIDogbV9kaXJlY3Rv
cnkoZGlyZWN0b3J5KQoreworICAgIGRpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnMuYXBwZW5k
KHRoaXMpOworfQorCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoTG9jYWxBbGxvY2F0
b3ImJiBvdGhlcikKKyAgICA6IG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQorICAgICwg
bV9mcmVlTGlzdChXVEZNb3ZlKG90aGVyLm1fZnJlZUxpc3QpKQorICAgICwgbV9jdXJyZW50Qmxv
Y2sob3RoZXIubV9jdXJyZW50QmxvY2spCisgICAgLCBtX2xhc3RBY3RpdmVCbG9jayhvdGhlci5t
X2xhc3RBY3RpdmVCbG9jaykKK3sKKyAgICBvdGhlci5yZXNldCgpOworfQorCit2b2lkIExvY2Fs
QWxsb2NhdG9yOjpyZXNldCgpCit7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3Vy
cmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9
CisKK0xvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IoKQoreworICAgIGlmIChpc09uTGlz
dCgpKQorICAgICAgICByZW1vdmUoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2ZyZWVMaXN0LmFs
bG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2sp
OworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7Cit9CisKKworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxB
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2Nh
bEFsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0xvY2FsQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OworCitjbGFzcyBMb2NhbEFs
bG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4gewor
cHVibGljOgorICAgIExvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7CisgICAgTG9jYWxB
bGxvY2F0b3IoTG9jYWxBbGxvY2F0b3ImJik7CisgICAgfkxvY2FsQWxsb2NhdG9yKCk7CisgICAg
CisgICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUpOworCisgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOworICAgIHZvaWQgcHJlcGFyZUZv
ckFsbG9jYXRpb24oKTsKKyAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAKK3ByaXZh
dGU6CisgICAgdm9pZCByZXNldCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9j
YXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpOworICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgdm9pZCogdHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRy
eUFsbG9jYXRlQmxvY2soKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpI
YW5kbGUqKTsKKyAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFs
Q29udGV4dCopOworCisgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OworICAgIEZyZWVM
aXN0IG1fZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sg
eyBudWxscHRyIH07CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sg
eyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxv
Y2FsQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5FIHZvaWQq
IExvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIG1f
ZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAg
ICAgICAgc2FuaXRpemVTdGFja0ZvclZNKG1fZGlyZWN0b3J5LT5oZWFwKCktPnZtKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShk
ZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhy
ZWFkTG9jYWxDYWNoZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK1JlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVh
dGUoSGVhcCYgaGVhcCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2Fj
aGUoaGVhcCkpOworfQorCitUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAm
IGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKK3sKKyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEo
KTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRl
c3Ryb3lEYXRhKG1fZGF0YSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExv
Y2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCit7CisgICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEg
PyBtX2RhdGEtPnNpemUgOiAwOworICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90
IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAg
ICAKKyAgICBEYXRhKiByZXN1bHQgPSBmYXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihEYXRhLCBh
bGxvY2F0b3IpICsgbGF5b3V0LnNpemUpOworICAgIHJlc3VsdC0+c2l6ZSA9IGxheW91dC5zaXpl
OworICAgIHJlc3VsdC0+Y2FjaGUgPSB0aGlzOworICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7
IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQorICAg
ICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgKFdURk1vdmUoYWxsb2NhdG9y
KCptX2RhdGEsIG9mZnNldCkpKTsKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBv
ZmZzZXQgPCBsYXlvdXQuc2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisg
ICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSAobGF5b3V0LmRpcmVjdG9y
aWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lEYXRhKERhdGEqIGRhdGEpCit7
CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZGF0YS0+c2l6ZTsgb2Zmc2V0
ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIGFsbG9jYXRvcigqZGF0YSwgb2Zm
c2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBmYXN0RnJlZShkYXRhKTsKK30KKwordm9pZCBU
aHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0sIFRocmVhZExvY2FsQ2FjaGUqIGNh
Y2hlKQoreworI2lmIEhBVkVfUFRIUkVBRF9NQUNIREVQX0gKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2VGbGFnLAor
ICAgICAgICBbXSAoKSB7CisgICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwg
ZGVzdHJ1Y3Rvcik7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgCisgICAgY2FjaGUtPnJlZigp
OworICAgIAorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSk7
CisgICAgb2xkQ2FjaGUtPmRlcmVmKCk7CisgICAgCisgICAgaW5zdGFsbERhdGEodm0sIGNhY2hl
LT5tX2RhdGEpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxEYXRhKFZNJiB2
bSwgRGF0YSogZGF0YSkKK3sKKyNpZiBIQVZFX1BUSFJFQURfTUFDSERFUF9ICisgICAgVU5VU0VE
X1BBUkFNKHZtKTsKKyAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QodGxzS2V5LCBkYXRh
KTsKKyNlbHNlCisgICAgdm0udGhyZWFkTG9jYWxDYWNoZSA9IGRhdGE7CisjZW5kaWYKK30KKwor
TG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvclNsb3coVk0mIHZtLCBz
aXplX3Qgb2Zmc2V0KQoreworICAgIERhdGEqIG9sZERhdGEgPSBtX2RhdGE7CisgICAgbV9kYXRh
ID0gYWxsb2NhdGVEYXRhKCk7CisgICAgZGVzdHJveURhdGEob2xkRGF0YSk7CisgICAgaW5zdGFs
bERhdGEodm0sIG1fZGF0YSk7CisgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0IDwgbV9kYXRhLT5z
aXplKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCk7Cit9CisKK3ZvaWQg
VGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcih2b2lkKiBhcmcpCit7CisgICAgaWYgKCFhcmcp
CisgICAgICAgIHJldHVybjsKKyAgICBEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KGFy
Zyk7CisgICAgZGF0YS0+Y2FjaGUtPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2Fs
Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGhy
ZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRMb2NhbENh
Y2hlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkTG9jYWxDYWNoZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAgIAorICAgIHN0YXRpYyBSZWZQ
dHI8VGhyZWFkTG9jYWxDYWNoZT4gZ2V0KFZNJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBkZXNp
Z25lZCB0byBiZSBmYXN0IGVub3VnaCB0aGF0IHlvdSBjb3VsZCBldmVuIGNhbGwgaXQgYmVmb3Jl
IGV2ZXJ5IGFsbG9jYXRpb24sIGJ5CisgICAgLy8gb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhh
dCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlzIGFscmVhZHkgaW5zdGFs
bGVkLiBUaGlzCisgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVyIG9mIGNh
Y2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRjaCBjb21iaW5lZAorICAg
IC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZlIGNvbnRleHQgc3dpdGNo
ZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4KKyAgICBzdGF0aWMgdm9p
ZCBpbnN0YWxsKFZNJiwgVGhyZWFkTG9jYWxDYWNoZSopOworICAgIAorICAgIHN0YXRpYyBMb2Nh
bEFsbG9jYXRvciYgYWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCk7CisgICAgCitwcml2YXRl
OgorICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYpOworICAgIH5UaHJlYWRMb2NhbENhY2hlKCk7
CisgICAgCisgICAgc3RydWN0IERhdGEgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAg
VGhyZWFkTG9jYWxDYWNoZSogY2FjaGU7CisgICAgICAgIExvY2FsQWxsb2NhdG9yIGFsbG9jYXRv
clsxXTsKKyAgICB9OworCisgICAgc3RhdGljIERhdGEqIGdldEltcGwoVk0mKTsKKyAgICAKKyAg
ICBEYXRhKiBhbGxvY2F0ZURhdGEoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95RGF0YShEYXRh
Kik7CisgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYgZGF0YSwgc2l6
ZV90IG9mZnNldCk7CisKKyAgICBzdGF0aWMgdm9pZCBpbnN0YWxsU2xvdyhWTSYsIFRocmVhZExv
Y2FsQ2FjaGUqKTsKKyAgICBzdGF0aWMgdm9pZCBpbnN0YWxsRGF0YShWTSYsIERhdGEqKTsKKyAg
ICAKKyAgICBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yU2xvdyhWTSYsIHNpemVfdCBvZmZzZXQp
OworICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0b3Iodm9pZCopOworICAgIAorICAgIC8v
IFdoZW4gaW5zdGFsbGVkLCB3ZSByZWYoKSB0aGUgY2FjaGUuIFVuaW5zdGFsbGluZyBkZXJlZigp
cyB0aGUgY2FjaGUuIFRMUyBkZXN0cnVjdGlvbiBkZXJlZigpcworICAgIC8vIHRoZSBjYWNoZS4g
V2hlbiB0aGUgY2FjaGUgaXMgZGVzdHJ1Y3RlZCwgaXQgbmVlZHMgdG8gcmV0dXJuIGFsbCBvZiBp
dHMgc3RhdGUgdG8gdGhlIEdDLiBJCisgICAgLy8gdGhpbmsgdGhhdCBqdXN0IG1lYW5zIHN0b3BB
bGxvY2F0aW5nKCksIGJ1dCB3aXRoIHNvbWUgc2VyaW91c2x5IGhlYXZ5IGNhdmVhdHMgaGF2aW5n
IHRvIGRvCisgICAgLy8gd2l0aCB3aGVuIGl0J3MgdmFsaWQgdG8gbWFrZSB0aGF0IGNhbGwuIEFs
dGVybmF0aXZlbHksIHdlIGNvdWxkIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlIGNhY2hlCisgICAg
Ly8gaXMgZW1wdHkgd2hlbiB3ZSBkZXN0cnVjdCBpdC4gVGhpcyBpcyBjb3JyZWN0IGZvciBjYWNo
ZXMgdGhhdCBhcmUga2VwdCBsaXZlIGJ5IEdDIG9iamVjdHMgYW5kCisgICAgLy8gaXQncyBjb3Jy
ZWN0IGZvciBpbW1vcnRhbCBjYWNoZXMuCisgICAgSGVhcCYgbV9oZWFwOworICAgIERhdGEqIG1f
ZGF0YTsKKworI2lmIEhBVkVfUFRIUkVBRF9NQUNIREVQX0gKKyAgICBzdGF0aWMgY29uc3QgcHRo
cmVhZF9rZXlfdCB0bHNLZXkgPSBXVEZfR0NfVExDX0tFWTsKKyNlbmRpZgorfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENh
Y2hlOjpnZXRJbXBsKFZNJiB2bSkKK3sKKyNpZiBIQVZFX1BUSFJFQURfTUFDSERFUF9ICisgICAg
VU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YSo+KF9wdGhyZWFk
X2dldHNwZWNpZmljX2RpcmVjdCh0bHNLZXkpKTsKKyNlbHNlCisgICAgcmV0dXJuIHZtLnRocmVh
ZExvY2FsQ2FjaGU7CisjZW5kaWYKK30KKworUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVh
ZExvY2FsQ2FjaGU6OmdldChWTSYgdm0pCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSog
ZGF0YSA9IGdldEltcGwodm0pOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+
Y2FjaGU7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6
aW5zdGFsbChWTSYgdm0sIFRocmVhZExvY2FsQ2FjaGUqIGNhY2hlKQoreworICAgIGlmIChnZXRJ
bXBsKHZtKS0+Y2FjaGUgPT0gY2FjaGUpCisgICAgICAgIHJldHVybjsKKyAgICBpbnN0YWxsU2xv
dyh2bSwgY2FjaGUpOworfQorCitMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxs
b2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpE
YXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKExJS0VMWShvZmZzZXQgPCBkYXRhLT5z
aXplKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KTsKKyAgICByZXR1
cm4gZGF0YS0+Y2FjaGUtPmFsbG9jYXRvclNsb3cob2Zmc2V0KTsKK30KKworTG9jYWxBbGxvY2F0
b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0
KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PExvY2FsQWxsb2NhdG9yKj4oYml0d2lzZV9j
YXN0PGNoYXIqPigmZGF0YS5hbGxvY2F0b3JbMF0pICsgb2Zmc2V0KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVM
YXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQoKQoreworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+
VGhyZWFkTG9jYWxDYWNoZUxheW91dCgpCit7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZUxh
eW91dDo6YWxsb2NhdGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgZGlyZWN0b3J5LT5tX3RsY09mZnNl
dCA9IG1fc2l6ZTsKKyAgICBtX3NpemUgKz0gc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KTsKKyAgICBt
X2RpcmVjdG9yaWVzLmFwcGVuZChkaXJlY3RvcnkpOworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5
b3V0OjpTbmFwc2hvdCBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3RvcmllcygpCit7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFNuYXBzaG90IHJlc3VsdDsK
KyAgICByZXN1bHQuc2l6ZSA9IG1fc2l6ZTsKKyAgICByZXN1bHQuZGlyZWN0b3JpZXMgPSBtX2Rp
cmVjdG9yaWVzOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxD
YWNoZUxheW91dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCituYW1lc3BhY2UgSlNDIHsKKworLy8gRWFjaCBIZWFwIGhhcyBhIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQgdGhhdCBoZWxwcyB1cyBmaWd1cmUgb3V0IGhvdyB0byBhbGxvY2F0ZSBhIFRo
cmVhZExvY2FsQ2FjaGUKKy8vIGZvciB0aGF0IEhlYXAuCisKK2NsYXNzIFRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQgeworcHVibGljOgorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKTsKKyAgICB+
VGhyZWFkTG9jYWxDYWNoZUxheW91dCgpOworCisgICAgLy8gQmxvY2tEaXJlY3RvcnkgY2FsbHMg
dGhpcyBkdXJpbmcgY3JlYXRpb24gYW5kIHRoaXMgZmlsbHMgaW4gQmxvY2tEaXJlY3Rvcnk6Om9m
ZnNldC4KKyAgICB2b2lkIGFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5Kik7CisgICAgCisg
ICAgc3RydWN0IFNuYXBzaG90IHsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIFZlY3Rv
cjxCbG9ja0RpcmVjdG9yeSo+IGRpcmVjdG9yaWVzOworICAgIH0KKyAgICAKKyAgICBTbmFwc2hv
dCBzbmFwc2hvdCgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBMb2NrIG1fbG9jazsKKyAg
ICBzaXplX3QgbV9zaXplIHsgMCB9OworICAgIFZlY3RvcjxCbG9ja0RpcmVjdG9yeSo+IG1fZGly
ZWN0b3JpZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331308</attachid>
            <date>2018-01-14 10:05:34 -0800</date>
            <delta_ts>2018-01-14 14:06:14 -0800</delta_ts>
            <desc>moving more stuff into LocalAllocator</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43122</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBbGxvY2F0
b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcihzaXplX3Qgb2Zmc2V0KQorICAgICAgICA6IG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKFZN
JiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIGNvbnN0OworICAg
IAorICAgIHNpemVfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBzaXplX3Qgb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJB
bGxvY2F0b3IuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRl
eHQqIGNvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlKSBjb25zdAoreworICAgIHJl
dHVybiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3Iodm0sIG1fb2Zmc2V0KS5hbGxvY2F0ZShj
b250ZXh0LCBtb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlzaW9uIDIyNjg5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsMTUgKzgxLDYgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tE
aXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAot
dm9pZCBCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKLXsKLSAgICBpZiAobV9j
dXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3Qo
KTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBu
dWxscHRyOwotfQotCiB2b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVXaXRob3V0Q29s
bGVjdGluZygpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwpAQCAtMTI3LDYgKzExOCwxNiBAQCB2b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2Nh
dGVXaXRob3V0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK01hcmtlZEJsb2NrOjpIYW5kbGUq
IEJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCkKK3sKKyAgICBtX2FsbG9j
YXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJp
dChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOworICAgIGlmIChtX2FsbG9jYXRpb25DdXJzb3Ig
Pj0gbV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBz
ZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRp
b25DdXJzb3IsIGZhbHNlKTsKKyAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29y
XTsKK30KKwogdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2spCiB7CiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jayk7
CkBAIC0xODIsNDQgKzE4Myw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBCbG9ja0RpcmVjdG9yeTo6
ZG9UZXMKICAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKIH0KIAotdm9pZCogQmxvY2tEaXJl
Y3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NFUlQobV9oZWFwLT52bSgp
LT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBkb1Rlc3RDb2xsZWN0aW9u
c0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQoIW1hcmtlZFNwYWNlKCku
aXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdp
bmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAgICBB
bGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAgICBtX2hlYXAtPmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICAvLyBHb29m
eSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBkaXJl
Y3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAvLyBoYXBwZW5zIHdoZW4g
cnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhlIEdD
J3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCi0gICAg
ICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKLSAgICAK
LSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0gICAg
Ci0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2NrKCk7
Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOwot
ICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBzaXpl
X3QgYmxvY2tIZWFkZXJTaXplKCkKIHsKICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7CkBAIC0zMTMs
MjQgKzI3NiwxOSBAQCB2b2lkIEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZygpCiB7CiAg
ICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IEJsb2Nr
RGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZyFcbiIpOwotICAgIEFTU0VSVCghbV9sYXN0QWN0aXZl
QmxvY2spOwotICAgIGlmICghbV9jdXJyZW50QmxvY2spIHsKLSAgICAgICAgQVNTRVJUKG1fZnJl
ZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKLSAgICBt
X2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJsb2NrOwotICAgIG1fY3VycmVudEJsb2NrID0g
MDsKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAgbV9sb2NhbEFsbG9hdG9ycy5mb3JFYWNo
KAorICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAg
IGFsbG9jYXRvci0+c3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxv
Y2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotICAgIG1fZnJl
ZUxpc3QuY2xlYXIoKTsKLQorICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAg
IFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9y
LT5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgICAgICB9KTsKKyAgICAKICAgICBtX2FsbG9j
YXRpb25DdXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1fdW5zd2VwdEN1
cnNvciA9IDA7CkBAIC0zNTQsMTIgKzMxMiwxMCBAQCB2b2lkIEJsb2NrRGlyZWN0b3J5OjpsYXN0
Q2hhbmNlVG9GaW5hbGl6CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmco
KQogewotICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1f
Y3VycmVudEJsb2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sg
PSBudWxscHRyOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAo
TG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5yZXN1
bWVBbGxvY2F0aW5nKCk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpi
ZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKICNpbmNsdWRl
ICJDZWxsQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9j
YWxBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQyLDcg
QEAgY2xhc3MgSGVhcDsKIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7
CiAKICNkZWZpbmUgRk9SX0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1h
Y3JvKGxpdmUsIExpdmUpIC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0
dWFsIGJsb2Nrcy4gKi9cCkBAIC05Nyw3ICs5OSw2IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0g
TmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpL
aW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0g
ICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KIAogICAgIGJvb2wgaXNG
cmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OwpAQCAtMTYzLDggKzE2NCwx
MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFG
aWxlKCkpOwogICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJs
b2NrOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OworICAgIAorICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKICAgICAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENv
bnN1bWVGcmVlTGlzdCgpOwpAQCAtMTc0LDggKzE3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCog
YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgQUxXQVlTX0lOTElORSB2b2lk
IGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKICAgICAKLSAg
ICBGcmVlTGlzdCBtX2ZyZWVMaXN0OwotICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFu
ZGxlKj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGljZXM7
CiAKQEAgLTE5MywxMCArMTk2LDYgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNv
ciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUg
Zm9yIGVtcHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBz
aXplX3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sg
dGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAg
TWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogbV9sYXN0QWN0aXZlQmxvY2s7Ci0KLSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25l
ZCBtX2NlbGxTaXplOwogICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBG
SVhNRTogQWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2
LDYgKzIwNSwxMCBAQCBwcml2YXRlOgogICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3Rv
cnkgeyBudWxscHRyIH07CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9yeUluU3Vi
c3BhY2UgeyBudWxscHRyIH07CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9yeUlu
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBMb2NrIG1fbG9j
YWxBbGxvY2F0b3JzTG9jazsKKyAgICBzaXplX3QgbV90bGNPZmZzZXQ7CisgICAgU2VudGluZWxM
aW5rZWRMaXN0PExvY2FsQWxsb2NhdG9yLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9j
YXRvcj4+IG1fbG9jYWxBbGxvY2F0b3JzOwogfTsKIAogaW5saW5lIHB0cmRpZmZfdCBCbG9ja0Rp
cmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiw2IEBAIGlubGluZSBib29sIEJsb2NrRGlyZWN0b3J5
Ojppc0ZyZWVMaXN0ZWQKICAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBCbG9ja0Rp
cmVjdG9yeTo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIHJldHVybiBtX2ZyZWVMaXN0
LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIHNh
bml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKSk7Ci0gICAgICAgIH0pOwotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQogewogICAgIG1fbGl2ZS5mb3JFYWNoU2V0Qml0KApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw2IEBA
IHN0cnVjdCBGcmVlQ2VsbCB7CiB9OwogCiBjbGFzcyBGcmVlTGlzdCB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRnJlZUxpc3QpOwotICAgIAogcHVibGljOgogICAgIEZyZWVMaXN0KHVuc2ln
bmVkIGNlbGxTaXplKTsKICAgICB+RnJlZUxpc3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKEJsb2Nr
RGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCit7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhkaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzTG9j
ayk7CisgICAgZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9ycy5hcHBlbmQodGhpcyk7Cit9CisK
K0xvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYmIG90aGVyKQor
ICAgIDogbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCisgICAgLCBtX2ZyZWVMaXN0KFdU
Rk1vdmUob3RoZXIubV9mcmVlTGlzdCkpCisgICAgLCBtX2N1cnJlbnRCbG9jayhvdGhlci5tX2N1
cnJlbnRCbG9jaykKKyAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKG90aGVyLm1fbGFzdEFjdGl2ZUJs
b2NrKQoreworICAgIG90aGVyLnJlc2V0KCk7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnJl
c2V0KCkKK3sKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBu
dWxscHRyOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKK30KKworTG9jYWxBbGxv
Y2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCit7CisgICAgaWYgKGlzT25MaXN0KCkpIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNM
b2NrKTsKKyAgICAgICAgcmVtb3ZlKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUKG1fZnJl
ZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJl
bnRCbG9jayk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdEFjdGl2ZUJsb2NrKTsKK30KKwor
dm9pZCBMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQoreworICAgIEFTU0VSVCghbV9s
YXN0QWN0aXZlQmxvY2spOworICAgIGlmICghbV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgQVNT
RVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0
KTsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJsb2NrOworICAgIG1fY3VycmVu
dEJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgTG9j
YWxBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRpbmcoKQoreworICAgIGlmICghbV9sYXN0QWN0aXZl
QmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVB
bGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9sYXN0QWN0aXZl
QmxvY2s7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOworfQorCit2b2lkIExvY2Fs
QWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCit7CisgICAgcmVzZXQoKTsKK30KKwor
dm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQorewor
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICBIZWFw
JiBoZWFwID0gKm1fZGlyZWN0b3J5LT5tX2hlYXA7CisgICAgQVNTRVJUKGhlYXAudm0oKS0+Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5l
ZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJUKCFtYXJrZWRTcGFjZSgpLmlzSXRl
cmF0aW5nKCkpOworICAgIGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUo
KSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxsb2NhdGlu
Z1Njb3BlIGhlbHBpbmdIZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNlc3NhcnlP
ckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVyIGNhc2U6
IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhhcyBhIGN1
cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0
IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlv
bi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1cm4gYWxs
b2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogcmVz
dWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlmIChMSUtF
TFkocmVzdWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxvY2soKTsK
KyAgICBpZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFsbG9jYXRl
SW4oYmxvY2spOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1f
Y3VycmVudEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0
KCk7CisgICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0g
bnVsbHB0cjsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENv
bGxlY3RpbmcoKQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2Vk
IGZvciByZWFsIG11bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0
bworICAgIC8vIGNvbWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRo
YXQgcHJvdG9jb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAvLworICAg
IC8vIC0gVGhlIGJhc2ljIGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRyeWluZyB0
byBkbyBhbiBhbGxvY2F0aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNhbWUgYml0
dmVjdG9yLiBUaGF0IHByb2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBsZWFzdC4K
KyAgICAvLworICAgIC8vIC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxvY2F0b3Ig
dHJpZ2dlcmluZyBhIHN0ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkKKyAgICAv
LyAgIHZpYSBhIHNlYXJjaCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxpc3QuIFdo
byBrbm93cyB3aGF0IGxvY2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25lIHdheSB0
byBtYWtlIHRoaXMgd29yayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sgdGhhdCBw
cm90ZWN0cyBhbGwgbXV0YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBhdGhzLiBU
aGF0IHdvdWxkIHByb2JhYmx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0IHdvdWxk
IGNlcnRhaW5seSBiZQorICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24gZnJvbSBK
SVQgdGhyZWFkcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgxNjM1CisgICAgCisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOworICAgIAorICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFTU0VSVCht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9j
a0ZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKSkKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRpb25zOjpz
dGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmICh0cmFkZURl
c3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPm1fc3Vic3BhY2UtPmZpbmRF
bXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+
YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5hbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBibG9jay0+
c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0
aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3Ro
ZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNl
IHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAg
ICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJs
b2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAgICBtX2RpcmVjdG9yeS0+YWRk
QmxvY2soYmxvY2spOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9j
YXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2Fs
QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OworCitjbGFzcyBMb2NhbEFsbG9jYXRv
ciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworcHVibGlj
OgorICAgIExvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7CisgICAgTG9jYWxBbGxvY2F0
b3IoTG9jYWxBbGxvY2F0b3ImJik7CisgICAgfkxvY2FsQWxsb2NhdG9yKCk7CisgICAgCisgICAg
dm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
OworCisgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOworICAgIHZvaWQgcHJlcGFyZUZvckFsbG9j
YXRpb24oKTsKKyAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgdm9pZCByZXNldCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOworICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgdm9pZCogdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9j
YXRlQmxvY2soKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUq
KTsKKyAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4
dCopOworCisgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OworICAgIEZyZWVMaXN0IG1f
ZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBudWxs
cHRyIH07CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBudWxs
cHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxvY2FsQWxs
b2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5FIHZvaWQqIExvY2Fs
QWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIG1fZnJlZUxp
c3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAg
c2FuaXRpemVTdGFja0ZvclZNKG1fZGlyZWN0b3J5LT5oZWFwKCktPnZtKCkpOworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJh
bENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK1JlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVh
cCYgaGVhcCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVh
cCkpOworfQorCitUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXAp
CisgICAgOiBtX2hlYXAoaGVhcCkKK3sKKyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30K
KworVGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lE
YXRhKG1fZGF0YSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2Fj
aGU6OmFsbG9jYXRlRGF0YSgpCit7CisgICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2Rh
dGEtPnNpemUgOiAwOworICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91
dCA9IG1faGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAg
ICBEYXRhKiByZXN1bHQgPSBmYXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0
b3IpICsgbGF5b3V0LnNpemUpOworICAgIHJlc3VsdC0+c2l6ZSA9IGxheW91dC5zaXplOworICAg
IHJlc3VsdC0+Y2FjaGUgPSB0aGlzOworICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNl
dCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQorICAgICAgICBu
ZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgKFdURk1vdmUoYWxsb2NhdG9yKCptX2Rh
dGEsIG9mZnNldCkpKTsKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQg
PCBsYXlvdXQuc2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAg
IG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSAobGF5b3V0LmRpcmVjdG9yaWVzW29m
ZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lEYXRhKERhdGEqIGRhdGEpCit7CisgICAg
Zm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNp
emVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+
TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBmYXN0RnJlZShkYXRhKTsKK30KKwordm9pZCBUaHJlYWRM
b2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0pCit7CisjaWYgSEFWRV9QVEhSRUFEX01BQ0hE
RVBfSAorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxf
b25jZSgKKyAgICAgICAgb25jZUZsYWcsCisgICAgICAgIFtdICgpIHsKKyAgICAgICAgICAgIHB0
aHJlYWRfa2V5X2luaXRfbnAodGxzS2V5LCBkZXN0cnVjdG9yKTsKKyAgICAgICAgfSk7CisjZW5k
aWYKKyAgICAKKyAgICByZWYoKTsKKyAgICAKKyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4g
b2xkQ2FjaGUgPSBnZXQodm0pOworICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIAorICAgIGlu
c3RhbGxEYXRhKHZtLCBtX2RhdGEpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3Rh
bGxEYXRhKFZNJiB2bSwgRGF0YSogZGF0YSkKK3sKKyNpZiBIQVZFX1BUSFJFQURfTUFDSERFUF9I
CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3Qo
dGxzS2V5LCBkYXRhKTsKKyNlbHNlCisgICAgdm0udGhyZWFkTG9jYWxDYWNoZSA9IGRhdGE7Cisj
ZW5kaWYKK30KKworTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvclNs
b3coVk0mIHZtLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIERhdGEqIG9sZERhdGEgPSBtX2RhdGE7
CisgICAgbV9kYXRhID0gYWxsb2NhdGVEYXRhKCk7CisgICAgZGVzdHJveURhdGEob2xkRGF0YSk7
CisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7CisgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0
IDwgbV9kYXRhLT5zaXplKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCk7
Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcih2b2lkKiBhcmcpCit7Cisg
ICAgaWYgKCFhcmcpCisgICAgICAgIHJldHVybjsKKyAgICBEYXRhKiBkYXRhID0gc3RhdGljX2Nh
c3Q8RGF0YSo+KGFyZyk7CisgICAgZGF0YS0+Y2FjaGUtPmRlcmVmKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2Nh
bENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFk
TG9jYWxDYWNoZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxU
aHJlYWRMb2NhbENhY2hlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkTG9jYWxD
YWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAgIAorICAg
IHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gZ2V0KFZNJik7CisgICAgCisgICAgLy8g
VGhpcyBpcyBkZXNpZ25lZCB0byBiZSBmYXN0IGVub3VnaCB0aGF0IHlvdSBjb3VsZCBldmVuIGNh
bGwgaXQgYmVmb3JlIGV2ZXJ5IGFsbG9jYXRpb24sIGJ5CisgICAgLy8gb3B0aW1pemluZyBmb3Ig
dGhlIGNhc2UgdGhhdCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlzIGFs
cmVhZHkgaW5zdGFsbGVkLiBUaGlzCisgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21hbGwg
bnVtYmVyIG9mIGNhY2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRjaCBj
b21iaW5lZAorICAgIC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZlIGNv
bnRleHQgc3dpdGNoZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4KKyAg
ICB2b2lkIGluc3RhbGwoVk0mKTsKKyAgICAKKyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFs
bG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOworICAgIAorcHJpdmF0ZToKKyAgICBUaHJlYWRM
b2NhbENhY2hlKEhlYXAmKTsKKyAgICB+VGhyZWFkTG9jYWxDYWNoZSgpOworICAgIAorICAgIHN0
cnVjdCBEYXRhIHsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIFRocmVhZExvY2FsQ2Fj
aGUqIGNhY2hlOworICAgICAgICBMb2NhbEFsbG9jYXRvciBhbGxvY2F0b3JbMV07CisgICAgfTsK
KworICAgIHN0YXRpYyBEYXRhKiBnZXRJbXBsKFZNJik7CisgICAgCisgICAgRGF0YSogYWxsb2Nh
dGVEYXRhKCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveURhdGEoRGF0YSopOworICAgIHN0YXRp
YyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKERhdGEmIGRhdGEsIHNpemVfdCBvZmZzZXQpOwor
CisgICAgdm9pZCBpbnN0YWxsU2xvdyhWTSYpOworICAgIHN0YXRpYyB2b2lkIGluc3RhbGxEYXRh
KFZNJiwgRGF0YSopOworICAgIAorICAgIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3JTbG93KFZN
Jiwgc2l6ZV90IG9mZnNldCk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Rvcih2b2lk
Kik7CisgICAgCisgICAgLy8gV2hlbiBpbnN0YWxsZWQsIHdlIHJlZigpIHRoZSBjYWNoZS4gVW5p
bnN0YWxsaW5nIGRlcmVmKClzIHRoZSBjYWNoZS4gVExTIGRlc3RydWN0aW9uIGRlcmVmKClzCisg
ICAgLy8gdGhlIGNhY2hlLiBXaGVuIHRoZSBjYWNoZSBpcyBkZXN0cnVjdGVkLCBpdCBuZWVkcyB0
byByZXR1cm4gYWxsIG9mIGl0cyBzdGF0ZSB0byB0aGUgR0MuIEkKKyAgICAvLyB0aGluayB0aGF0
IGp1c3QgbWVhbnMgc3RvcEFsbG9jYXRpbmcoKSwgYnV0IHdpdGggc29tZSBzZXJpb3VzbHkgaGVh
dnkgY2F2ZWF0cyBoYXZpbmcgdG8gZG8KKyAgICAvLyB3aXRoIHdoZW4gaXQncyB2YWxpZCB0byBt
YWtlIHRoYXQgY2FsbC4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgUkVMRUFTRV9BU1NFUlQgdGhh
dCB0aGUgY2FjaGUKKyAgICAvLyBpcyBlbXB0eSB3aGVuIHdlIGRlc3RydWN0IGl0LiBUaGlzIGlz
IGNvcnJlY3QgZm9yIGNhY2hlcyB0aGF0IGFyZSBrZXB0IGxpdmUgYnkgR0Mgb2JqZWN0cyBhbmQK
KyAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGltbW9ydGFsIGNhY2hlcy4KKyAgICBIZWFwJiBtX2hl
YXA7CisgICAgRGF0YSogbV9kYXRhOworCisjaWYgSEFWRV9QVEhSRUFEX01BQ0hERVBfSAorICAg
IHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRsc0tleSA9IFdURl9HQ19UTENfS0VZOworI2Vu
ZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRocmVh
ZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1RocmVhZExvY2FsQ2FjaGU6OkRh
dGEqIFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZtKQoreworI2lmIEhBVkVfUFRIUkVB
RF9NQUNIREVQX0gKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxEYXRhKj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSkpOworI2Vsc2UKKyAg
ICByZXR1cm4gdm0udGhyZWFkTG9jYWxDYWNoZTsKKyNlbmRpZgorfQorCitSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gVGhyZWFkTG9jYWxDYWNoZTo6Z2V0KFZNJiB2bSkKK3sKKyAgICBUaHJlYWRM
b2NhbENhY2hlOjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKGRhdGEpCisgICAg
ICAgIHJldHVybiBkYXRhLT5jYWNoZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBU
aHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSkKK3sKKyAgICBpZiAoZ2V0SW1wbCh2bSkt
PmNhY2hlID09IHRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICBpbnN0YWxsU2xvdyh2bSk7Cit9
CisKK0xvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoVk0mIHZtLCBz
aXplX3Qgb2Zmc2V0KQoreworICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJ
bXBsKHZtKTsKKyAgICBpZiAoTElLRUxZKG9mZnNldCA8IGRhdGEtPnNpemUpKQorICAgICAgICBy
ZXR1cm4gYWxsb2NhdG9yKCpkYXRhLCBvZmZzZXQpOworICAgIHJldHVybiBkYXRhLT5jYWNoZS0+
YWxsb2NhdG9yU2xvdyhvZmZzZXQpOworfQorCitMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9jYWxD
YWNoZTo6YWxsb2NhdG9yKERhdGEmIGRhdGEsIHNpemVfdCBvZmZzZXQpCit7CisgICAgcmV0dXJu
ICpiaXR3aXNlX2Nhc3Q8TG9jYWxBbGxvY2F0b3IqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZkYXRh
LmFsbG9jYXRvclswXSkgKyBvZmZzZXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6VGhyZWFkTG9jYWxDYWNoZUxh
eW91dCgpCit7Cit9CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6On5UaHJlYWRMb2NhbENhY2hl
TGF5b3V0KCkKK3sKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjphbGxvY2F0ZU9m
ZnNldChCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fdGxjT2Zmc2V0ID0gbV9zaXplOworICAg
IG1fc2l6ZSArPSBzaXplb2YoQmxvY2tEaXJlY3RvcnkpOworICAgIG1fZGlyZWN0b3JpZXMuYXBw
ZW5kKGRpcmVjdG9yeSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmRpcmVjdG9yaWVzKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgU25hcHNob3QgcmVzdWx0OworICAgIHJlc3VsdC5zaXpl
ID0gbV9zaXplOworICAgIHJlc3VsdC5kaXJlY3RvcmllcyA9IG1fZGlyZWN0b3JpZXM7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBFYWNoIEhlYXAgaGFzIGEgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB0aGF0
IGhlbHBzIHVzIGZpZ3VyZSBvdXQgaG93IHRvIGFsbG9jYXRlIGEgVGhyZWFkTG9jYWxDYWNoZQor
Ly8gZm9yIHRoYXQgSGVhcC4KKworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB7CitwdWJs
aWM6CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dCgpOworICAgIH5UaHJlYWRMb2NhbENhY2hl
TGF5b3V0KCk7CisKKyAgICAvLyBCbG9ja0RpcmVjdG9yeSBjYWxscyB0aGlzIGR1cmluZyBjcmVh
dGlvbiBhbmQgdGhpcyBmaWxscyBpbiBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0LgorICAgIHZvaWQg
YWxsb2NhdGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqKTsKKyAgICAKKyAgICBzdHJ1Y3QgU25hcHNo
b3QgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgVmVjdG9yPEJsb2NrRGlyZWN0b3J5
Kj4gZGlyZWN0b3JpZXM7CisgICAgfQorICAgIAorICAgIFNuYXBzaG90IHNuYXBzaG90KCkgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOworICAgIHNpemVfdCBtX3NpemUg
eyAwIH07CisgICAgVmVjdG9yPEJsb2NrRGlyZWN0b3J5Kj4gbV9kaXJlY3RvcmllczsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0Miw3ICszNDIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBl
bnF1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNH
bG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkK
K0pTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gdGhyZWFkTG9jYWxDYWNoZSwgY29uc3QgR2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV92bSh2bSkKICAgICAsIG1fbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVk
KSkpCkBAIC0zNjAsNiArMzYwLDcgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZN
JiB2bSwgUwogICAgICwgbV90ZW1wbGF0ZVJlZ2lzdHJ5KHZtKQogICAgICwgbV9ydW50aW1lRmxh
Z3MoKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RU
YWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUpCisgICAgLCBtX3RocmVhZExvY2FsQ2FjaGUoV1RGTW92ZSh0aHJlYWRMb2NhbENhY2hlKSkK
IHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAg
cHVibGljOgogICAgIGNvbnN0IFJ1bnRpbWVGbGFncyYgcnVudGltZUZsYWdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydW50aW1lRmxhZ3M7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQg
SlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4s
IGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCkBAIC04OTMsNiArODkzLDggQEAgcHVi
bGljOgogICAgIEpTV3JhcHBlck1hcCogd3JhcHBlck1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3Jh
cHBlck1hcC5nZXQoKTsgfQogICAgIHZvaWQgc2V0V3JhcHBlck1hcChKU1dyYXBwZXJNYXAqIG1h
cCkgeyBtX3dyYXBwZXJNYXAgPSBtYXA7IH0KICNlbmRpZgorICAgIAorICAgIFRocmVhZExvY2Fs
Q2FjaGUmIHRocmVhZExvY2FsQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZExvY2FsQ2Fj
aGUuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8g
ewpAQCAtOTMwLDYgKzkzMiw4IEBAIHByaXZhdGU6CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
ICAgICBSZXRhaW5QdHI8SlNXcmFwcGVyTWFwPiBtX3dyYXBwZXJNYXA7CiAjZW5kaWYKKyAgICAK
KyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gbV90aHJlYWRMb2NhbENhY2hlOwogfTsKIAog
SlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2JqZWN0KEpTVmFsdWUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsNyArMTQ1LDcgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKIAogICAgIG1fdm0t
PnNldExhc3RTdGFja1RvcCh0aHJlYWQuc2F2ZWRMYXN0U3RhY2tUb3AoKSk7CiAgICAgQVNTRVJU
KHRocmVhZC5zdGFjaygpLmNvbnRhaW5zKG1fdm0tPmxhc3RTdGFja1RvcCgpKSk7Ci0KKyAgICAK
ICAgICBtX3ZtLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3VycmVudFRocmVh
ZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjY4OTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCiAj
aW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKKyNpbmNsdWRl
ICJUaHJlYWRMb2NhbENhY2hlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRl
ICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBA
IC02NTYsNiArNjU3LDkgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lv
bkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CiAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0
cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVjdHM7CisgICAgCisgICAgVGhyZWFkTG9jYWxD
YWNoZTo6RGF0YSogdGhyZWFkTG9jYWxDYWNoZURhdGE7CisgICAgUmVmUHRyPFRocmVhZExvY2Fs
Q2FjaGU+IGRlZmF1bHRUaHJlYWRMb2NhbENhY2hlOwogCiAgICAgTG9jYWxUaW1lT2Zmc2V0Q2Fj
aGUgbG9jYWxUaW1lT2Zmc2V0Q2FjaGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNRW50cnlTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQwLDYgKzQwLDcgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0ds
bwogICAgIDogbV92bSh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsK
KyAgICBnbG9iYWxPYmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS0+aW5zdGFsbCh2bSk7CiAgICAg
QVNTRVJUKCFEaXNhbGxvd1ZNUmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsK
ICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgp
KTsKICAgICBpZiAoIXZtLmVudHJ5U2NvcGUpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331310</attachid>
            <date>2018-01-14 14:06:14 -0800</date>
            <delta_ts>2018-01-15 10:36:22 -0800</delta_ts>
            <desc>maybe it&apos;s written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>94961</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI3Nyw2ICsxMjc3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgYXJnID0gdG1w
KHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6IHsKKyAgICAgICAgICAgICAgICBU
bXAgZHN0VG1wID0gbV9jb2RlLm5ld1RtcCh2YWx1ZS52YWx1ZSgpLT5yZXN1bHRCYW5rKCkpOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUudmFsdWUoKS0+
dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUudmFsdWUoKSksIGRzdFRtcCk7CisgICAgICAgICAgICAg
ICAgYXJnID0gZHN0VG1wOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgc3RhY2ttYXAtPmVhcmx5Q2xv
YmJlcmVkKCkuY2xlYXIodmFsdWUucmVwKCkucmVnKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24gMjI2ODkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6
YWRtaXRzU3RhY2soSW5zdAogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50Ogog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdp
c3RlcjoKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZh
bHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDkgQEAgdm9pZCBTdGFj
a21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
Q29uc3RhbnQ6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENs
b2JiZXI6CisgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlRGVmOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAg
ICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMjgsNiArMTMxLDEwIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1w
bCgKICAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gcmVjb3ZlciB0aGUgc3RhY2ttYXAgdmFsdWUu
IFNvLCBmb3JjZSBMYXRlQ29sZFVzZSB0byBwcmVzZXJ2ZSB0aGUKICAgICAgICAgICAgIC8vIG9y
aWdpbmFsIHN0YWNrbWFwIHZhbHVlIGFjcm9zcyB0aGUgU3BlY2lhbCBvcGVyYXRpb24uCiAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIG9wdGlvbmFsRGVmQXJnV2lkdGgg
JiYgKm9wdGlvbmFsRGVmQXJnV2lkdGggPCBjaGlsZC52YWx1ZSgpLT5yZXN1bHRXaWR0aCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gVGhlIHJvbGUgY2FuIG9ubHkgYmUgc29tZSBraW5kIG9mIGRl
ZiBpZiB3ZSBkaWQgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIsIHdoaWNoIGlzCisgICAgICAgICAg
ICAgICAgLy8gb25seSBhbGxvd2VkIGZvciBwYXRjaHBvaW50cy4gUGF0Y2hwb2ludHMgZG9uJ3Qg
dXNlIHRoZSBkZWZBcmdXaWR0aCBmZWF0dXJlLgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFBcmc6OmlzQW55RGVmKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgIHJvbGUg
PSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUzLDYgKzUzLDExIEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVy
KFYKICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdp
c3RlcikpOwogfQogCit2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZFNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1
ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKSk7Cit9CisKIHZvaWQgU3RhY2tt
YXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgY29uc3QgQ29uc3Ry
YWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAgICBjaGlsZChpbmRleCkgPSBjb25z
dHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw3ICs5OSw4IEBA
IHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21ldGhpbmcgeW91IG1pZ2h0
IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25zdHJhaW5lZAog
ICAgIC8vIHRvIFNvbWVSZWdpc3Rlci4KICAgICB2b2lkIGFwcGVuZFNvbWVSZWdpc3RlcihWYWx1
ZSopOwotCisgICAgdm9pZCBhcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihWYWx1ZSopOwor
ICAgIAogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMoKSBjb25zdCB7IHJldHVybiBt
X3JlcHM7IH0KIAogICAgIC8vIFN0YWNrbWFwcyBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGF0IHRo
ZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIgc29tZSByZWdpc3RlcnMuIENsb2JiZXJpbmcgYSByZWdp
c3RlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzIsMjEgKzQzMiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBWb2lkKQogICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5yZXN1bHRD
b25zdHJhaW50ID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkpOwotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5hczxQ
YXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQua2luZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0Fy
Z3VtZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURShmYWxzZSwgKCJB
dCAiLCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcENvbnN0cmFpbnQodmFsdWUsIENv
bnN0cmFpbmVkVmFsdWUodmFsdWUsIHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3Vs
dENvbnN0cmFpbnQpLCBDb25zdHJhaW50Um9sZTo6RGVmKTsKLSAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIENoZWNrQWRkOgpAQCAtNTcxLDE2ICs1NTgsMjQgQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIHN3aXRjaCAodmFsdWUucmVwKCkua2luZCgpKSB7CiAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkNv
bGRBbnk6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xkQW55OgogICAgICAgICBjYXNl
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNv
bGRBbnk6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgICAgICAgICBWQUxJ
REFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIs
IHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICBWQUxJREFURShyb2xlID09IENvbnN0
cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CisgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLCAoIkF0ICIsICpjb250
ZXh0KSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUVh
cmx5UmVnaXN0ZXI6CiAgICAgICAgICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xl
OjpEZWYsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OkxhdGVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICh2YWx1ZS5yZXAoKS5raW5kKCkgPT0g
VmFsdWVSZXA6OkxhdGVSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBWQUxJREFURShyb2xlID09
IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CiAg
ICAgICAgICAgICBpZiAodmFsdWUucmVwKCkucmVnKCkuaXNHUFIoKSkKICAgICAgICAgICAgICAg
ICBWQUxJREFURShpc0ludCh2YWx1ZS52YWx1ZSgpLT50eXBlKCkpLCAoIkF0ICIsICpjb250ZXh0
LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAs
NyBAQCB2b2lkIFZhbHVlUmVwOjphZGRVc2VkUmVnaXN0ZXJzVG8oUmVnaXN0CiAgICAgY2FzZSBD
b2xkQW55OgogICAgIGNhc2UgTGF0ZUNvbGRBbnk6CiAgICAgY2FzZSBTb21lUmVnaXN0ZXI6Cisg
ICAgY2FzZSBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVFYXJseVJlZ2lz
dGVyOgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybjsKQEAgLTcxLDYgKzcyLDcg
QEAgdm9pZCBWYWx1ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjbwogICAgIGNhc2UgQ29s
ZEFueToKICAgICBjYXNlIExhdGVDb2xkQW55OgogICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAg
IGNhc2UgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBTb21lRWFybHlSZWdpc3Rl
cjoKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGF0ZVJlZ2lzdGVyOgpAQCAtMTc1LDYgKzE3
Nyw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWwKICAgICBjYXNl
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVy
Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRo
Q2xvYmJlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciIpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6CiAg
ICAgICAgIG91dC5wcmludCgiU29tZUVhcmx5UmVnaXN0ZXIiKTsKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAyMjY4OTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNjUsNiArNjUsMTAgQEAgcHVibGljOgogICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXBy
ZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIu
IEl0IGNvdWxkIGJlIGEKICAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNsYWltcyB0byBj
bG9iYmVyIQogICAgICAgICBTb21lUmVnaXN0ZXIsCisgICAgICAgIAorICAgICAgICAvLyBBcyBh
biBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNv
bWUgcmVnaXN0ZXIgYnV0IHRoYXQgdGhpcworICAgICAgICAvLyByZWdpc3RlciBpcyB0aGVuIGNv
YmJlcmVkIHdpdGggZ2FyYmFnZS4gVGhpcyBvbmx5IHdvcmtzIGZvciBwYXRjaHBvaW50cy4KKyAg
ICAgICAgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIsCiAKICAgICAgICAgLy8gQXMgYW4gaW5wdXQg
cmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJl
Z2lzdGVyLCBidXQgaW1wbGllcwogICAgICAgICAvLyB0aGF0IHRoZSBkZWYgaGFwcGVucyBiZWZv
cmUgYW55IG9mIHRoZSBlZmZlY3RzIG9mIHRoZSBzdGFja21hcC4gVGhpcyBpcyBvbmx5IHZhbGlk
IGZvcgpAQCAtMTA3LDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZVJlcChLaW5kIGtpbmQp
CiAgICAgICAgIDogbV9raW5kKGtpbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoa2luZCA9PSBX
YXJtQW55IHx8IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVDb2xkQW55IHx8IGtpbmQg
PT0gU29tZVJlZ2lzdGVyIHx8IGtpbmQgPT0gU29tZUVhcmx5UmVnaXN0ZXIpOworICAgICAgICBB
U1NFUlQoa2luZCA9PSBXYXJtQW55IHx8IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09IExhdGVD
b2xkQW55IHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyIHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyV2l0
aENsb2JiZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgc3Rh
dGljIFZhbHVlUmVwIHJlZyhSZWcgcmVnKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNjg5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAo
bWFjcm8pIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAotICAgIG1hY3Jv
KENvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6
Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEJsb2NrRGlyZWN0b3J5Kikp
IFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21w
bGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihBbGxv
Y2F0b3IpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFj
cm8oSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3Jv
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVu
dHMsIDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI2ODkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODMzLDEwICs1ODMzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShz
bG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0g
c3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChz
aXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5n
Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KGFsbG9jYXRvciksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CisgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHZtKCkuc3RyaW5n
U3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9y
ZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQpAQCAtOTg2MSw3
ICs5ODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3Ig
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVh
bChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwor
ICAgICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNG
aW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAg
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleGluZ0hlYWRl
clNpemUgPSAwOwpAQCAtOTkyMCw3ICs5OTIwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
ICAgIExWYWx1ZSBtYXNrID0gY29tcHV0ZUJ1dHRlcmZseUluZGV4aW5nTWFzayh2ZWN0b3JMZW5n
dGgpOwogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9i
amVjdCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY2VsbEFsbG9jYXRv
ciksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2VsbEFsbG9jYXRvci5vZmZzZXQoKSks
IHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CiAKICAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RP
YmplY3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZs
eSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOwpAQCAtMTA4OTIsOCArMTA4OTIs
OCBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVz
ID0gc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7Ci0gICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENl
bGwobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xvd1BhdGgpOworICAgICAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVh
cENlbGwobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzbG93UGF0aCk7CiAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAg
ICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwpAQCAtMTE5MjUsMTYgKzExOTI1LDE4IEBAIHByaXZhdGU6CiAKICAgICBM
VmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBu
dWxscHRyOwotICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJbnRQdHIoKSkKLSAgICAgICAgICAg
IGFjdHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRv
ci0+YXNJbnRQdHIoKSk7CisgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3I7CisgICAg
ICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0
b3IgPSBBbGxvY2F0b3IoYWxsb2NhdG9yLT5hc0ludDMyKCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBl
aXRoZXIgd2Uga25vdyB0aGF0IHRoZSBhbGxvY2F0b3IgaXMgbnVsbCBvciB3ZSBkb24ndCBrbm93
IHdoYXQgdGhlCiAgICAgICAgICAgICAvLyBhbGxvY2F0b3IgaXMuIEluIGVpdGhlciBjYXNlLCB3
ZSBuZWVkIHRoZSBudWxsIGNoZWNrLgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaGF2ZUFsbG9j
YXRvciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZlQWxsb2NhdG9yKTsKLSAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChhbGxvY2F0b3IsIHVzdWFsbHkoaGF2ZUFsbG9jYXRvciksIHJhcmVs
eShzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAg
IG1fb3V0Lm5vdEVxdWFsKGFsbG9jYXRvciwgbV9vdXQuY29uc3RJbnQzMihBbGxvY2F0b3IoKS5v
ZmZzZXQoKSkpLAorICAgICAgICAgICAgICAgIHVzdWFsbHkoaGF2ZUFsbG9jYXRvciksIHJhcmVs
eShzbG93UGF0aCkpOwogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaGF2ZUFsbG9jYXRvciwg
bGFzdE5leHQpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTE5NDQsNyArMTE5NDYsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9
IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMudGVybWluYWwgPSB0cnVlOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXIoYWxsb2NhdG9yKTsKKyAgICAgICAgaWYgKGFjdHVhbEFsbG9jYXRvcikKKyAgICAgICAg
ICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihhbGxv
Y2F0b3IpOwogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKICAg
ICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjsKICAgICAgICAgCkBAIC0xMTk1NSw2ICsxMTk2MCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGp1bXBUb1Nsb3dQYXRoOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEdQUlJl
ZyBhbGxvY2F0b3JHUFI7CisgICAgICAgICAgICAgICAgaWYgKGFjdHVhbEFsbG9jYXRvcikKKyAg
ICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckdQUiA9IHBh
cmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSB1
c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRpb24gcGF0aCBiZWNhdXNlIHdoZW5l
dmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRpb24gcGF0aHMsIHdl
IGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1hY2hpbmUgY29kZSBsZXZlbC4gV2Ug
a25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hhdCBpbnN0cnVjdGlvbiBzZXF1ZW5j
ZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBjb21waWxlcgpAQCAtMTE5NjIsNyAr
MTE5NzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEFzc2VtYmx5SGVscGVyczo6
ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBvcHRpbWl6ZWQgcGF0aCBpcyBzaGFy
ZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGNvbXBpbGVyIHRpZXJzLgogICAg
ICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcigKLSAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIHBhcmFtc1sx
XS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1z
WzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgcGFyYW1zLmdwU2NyYXRj
aCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xvd1BhdGgpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9TdWNjZXNzOwpA
QCAtMTIwNTQsOCArMTIwNjUsOCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVj
dCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBMVmFsdWUg
YnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAg
ICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFz
c1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KG1f
b3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBpbmRleGlu
Z01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNl
Rm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICByZXR1cm4gYWxsb2NhdGVP
YmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KQEAgLTEyMDc0
LDE2ICsxMjA4NSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29tcGxldGVTdWJzcGFjZSog
YWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFjZSo+KHN1YnNwYWNl
LT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXplID0gc2l6ZS0+YXNJ
bnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFjdHVh
bEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFjdHVh
bFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAg
IEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAgICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUo
Y29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNsb3dQYXRoKTsKICAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0dWFsQWxsb2NhdG9yKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVhbEFsbG9jYXRvcik7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJr
ZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIxMDIsNyArMTIxMTMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cigKKyAgICAgICAgcmV0dXJuIG1f
b3V0LmxvYWQzMigKICAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAg
ICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAg
ICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRy
T25lKSkpOwpAQCAtMTIxMTcsOCArMTIxMjgsNyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxv
Y2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAgICAgICAgIExWYWx1ZSBzaXplLCBSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTFZhbHVlIGJ1dHRlcmZseUlu
ZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBMVmFsdWUg
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKLSAgICAgICAgICAgICpzdWJzcGFjZUZvcjxD
bGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0
b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXpl
LCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJmbHlJbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAg
ICB9CiAKQEAgLTEyMTI2LDE1ICsxMjEzNiwxNCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxv
Y2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAgICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGFs
bG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCi0gICAgICAgICAgICAqc3Vic3BhY2VGb3I8Q2xh
c3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwg
c2xvd1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0
dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChS
ZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQo
KS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3Ig
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVh
bChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwor
ICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
dm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMg
Y2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBv
biB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxNDYsNyArMTIxNTUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93
UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
YWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBtX291dC5pbnQzMlplcm8s
IHNsb3dQYXRoKSk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZz
ZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgbV9vdXQuaW50MzJaZXJvLCBzbG93
UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBB
bGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAgIAorICAgIEFsbG9j
YXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQWxsb2NhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIu
b2Zmc2V0KCk7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWxsb2NhdG9yJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQWxsb2NhdG9yKCk7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgbV9vZmZzZXQgeyBVSU5UX01BWCB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxv
Y2F0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiB2bSwg
R0NEZWZlcnJhbENvbnRleHQqIGNvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlKSBj
b25zdAoreworICAgIHJldHVybiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3Iodm0sIG1fb2Zm
c2V0KS5hbGxvY2F0ZShjb250ZXh0LCBtb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJ
KHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGly
ZWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsNiBAQCBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvCiAKIEJsb2NrRGlyZWN0b3J5OjpCbG9ja0RpcmVj
dG9yeShIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCiAgICAgOiBtX2ZyZWVMaXN0KGNlbGxT
aXplKQotICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDAp
CiAgICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCiAgICAg
LCBtX2hlYXAoaGVhcCkKIHsKQEAgLTgxLDE0MyArNzksMTQgQEAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogQmxvY2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29y
XTsKIH0KIAotdm9pZCBCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKK01hcmtl
ZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCkK
IHsKLSAgICBpZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRD
b25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0gICAgbV9j
dXJyZW50QmxvY2sgPSBudWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZygpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAotICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOwot
ICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0
Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7Ci0g
ICAgICAgIGlmIChtX2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1w
dHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKLQotICAg
ICAgICBpZiAodm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihtX2Jsb2Nrc1ttX2FsbG9jYXRp
b25DdXJzb3JdKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAg
IGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCi0gICAg
ICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsK
LSAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFjZS0+Zmlu
ZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2Nr
LT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9zdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxw
dHIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNs
ZWFycyBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCi0g
ICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxv
Y2sgbWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5Ci0gICAgICAgICAgICAvLyBh
bmQgZW1wdHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3Zl
RnJvbURpcmVjdG9yeSgpOwotICAgICAgICAgICAgYWRkQmxvY2soYmxvY2spOwotICAgICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBudWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbihN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxv
Y2F0ZUluKGJsb2NrKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFi
bG9jay0+aXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlz
dCk7Ci0gICAgCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVs
eSBmdWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0Ci0gICAgLy8g
dGhhdCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMu
Ci0gICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKLSAgICAgICAgQVNT
RVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5v
TmV3bHlBbGxvY2F0ZWQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkp
OwotICAgICAgICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwot
ICAgICAgICBBU1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIGJsb2NrKSk7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXRO
b3RFbXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAg
ICBpZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0g
ICAgCi0gICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgW10g
KCkgLT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSk7Ci0gICAgc2V0SXNF
ZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUpOwotICAgIG1hcmtl
ZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmRvVGVzdENv
bGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsK
LSAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKLSAgICBp
ZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgp
KSB7Ci0gICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAgICAgICAgICAgICAgIGRl
ZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVs
bCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49IE9wdGlv
bnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBhbGxvY2F0aW9uQ291bnQg
PSAwOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwotICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOwotICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKLQot
ICAgIEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKLSAgICBtX2hlYXAtPmRp
ZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwotICAgIAotICAgIGRpZENvbnN1
bWVGcmVlTGlzdCgpOwotICAgIAotICAgIEFsbG9jYXRpbmdTY29wZSBoZWxwaW5nSGVhcCgqbV9o
ZWFwKTsKLQotICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENv
bnRleHQpOwogICAgIAotICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEg
Y2FsbGJhY2sgYW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMg
b25seQotICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5q
ZWN0IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElL
RUxZKG1fY3VycmVudEJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOwotICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRl
V2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICAKLSAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jayA9IHRyeUFsbG9jYXRlQmxvY2soKTsKLSAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlm
IChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBhZGRCbG9jayhibG9jayk7Ci0gICAgcmVz
dWx0ID0gYWxsb2NhdGVJbihibG9jayk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNz
YXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKKyAgICByZXR1cm4gbV9ibG9ja3NbbV9h
bGxvY2F0aW9uQ3Vyc29yXTsKIH0KIAogc3RhdGljIHNpemVfdCBibG9ja0hlYWRlclNpemUoKQpA
QCAtMzEzLDI0ICsxODIsMTkgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmco
KQogewogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAi
OiBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAgICBBU1NFUlQoIW1fbGFz
dEFjdGl2ZUJsb2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VS
VChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7
Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJlbnRC
bG9jayA9IDA7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fbG9jYWxBbGxvYXRvcnMu
Zm9yRWFjaCgKKyAgICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICBhbGxvY2F0b3ItPnN0b3BBbGxvY2F0aW5nKCk7CisgICAgICAgIH0pOwogfQogCiB2
b2lkIEJsb2NrRGlyZWN0b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiB7Ci0gICAgbV9sYXN0
QWN0aXZlQmxvY2sgPSBudWxscHRyOwotICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKLSAg
ICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0KKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAor
ICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFs
bG9jYXRvci0+cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgfSk7CisgICAgCiAgICAg
bV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKICAgICBtX2VtcHR5Q3Vyc29yID0gMDsKICAgICBtX3Vu
c3dlcHRDdXJzb3IgPSAwOwpAQCAtMzU0LDEyICsyMTgsMTAgQEAgdm9pZCBCbG9ja0RpcmVjdG9y
eTo6bGFzdENoYW5jZVRvRmluYWxpegogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpyZXN1bWVBbGxv
Y2F0aW5nKCkKIHsKLSAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsK
LSAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwotICAgIG1fbGFzdEFjdGl2
ZUJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAg
ICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRv
ci0+cmVzdW1lQWxsb2NhdGluZygpOworICAgICAgICB9KTsKIH0KIAogdm9pZCBCbG9ja0RpcmVj
dG9yeTo6YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rpb24oKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCiAj
aW5jbHVkZSAiQ2VsbEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgorI2luY2x1
ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CkBAIC00MSw2
ICs0Miw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3Bh
Y2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hl
TGF5b3V0OwogCiAjZGVmaW5lIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9SWV9CSVQobWFjcm8pIFwK
ICAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUgc2V0IG9mIGJsb2NrIGluZGljZXMgdGhhdCBo
YXZlIGFjdHVhbCBibG9ja3MuICovXApAQCAtNzYsOSArNzgsNiBAQCBjbGFzcyBCbG9ja0RpcmVj
dG9yeSB7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogcHVibGlj
OgotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlzdCgpOwotICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwotCiAgICAgQmxvY2tEaXJlY3RvcnkoSGVhcCos
IHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgdm9pZCBzZXRTdWJzcGFjZShTdWJzcGFjZSopOwogICAg
IHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKQEAgLTk3LDcgKzk2LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5k
ZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRl
c3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAg
ICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMu
Y2VsbEtpbmQ7IH0KLSAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSk7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQog
CiAgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CkBA
IC0xNTcsMjQgKzE1NSwyMCBAQCBwdWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFjZSgp
IGNvbnN0OwogICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gQWxsb2NhdG9yKG1fdGxjT2Zmc2V0KTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRh
RmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9y
OwogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRC
bG9jazsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKLSAgICB2b2lkIGRpZENv
bnN1bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rpbmco
KTsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgdm9p
ZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCogYWxsb2Nh
dGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVz
dENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICBNYXJrZWRCbG9j
azo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CiAgICAgCi0gICAgRnJlZUxpc3Qg
bV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7
CiAgICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKICAgICBW
ZWN0b3I8dW5zaWduZWQ+IG1fZnJlZUJsb2NrSW5kaWNlczsKQEAgLTE5MywxMCArMTg3LDYgQEAg
cHJpdmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRo
ZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVtcHR5IGFsbG9jYXRpb24gKGFs
bG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXplX3QgbV91bnN3ZXB0Q3Vyc29yIHsg
MCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3Ig
aW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9j
dXJyZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2s7
Ci0KLSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIENlbGxB
dHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHNob3Vs
ZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2LDE2ICsxOTYsMTAgQEAgcHJpdmF0ZToK
ICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5IHsgbnVsbHB0ciB9OwogICAgIEJs
b2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlIHsgbnVsbHB0ciB9OwogICAg
IEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3Ig
eyBudWxscHRyIH07CisgICAgCisgICAgTG9jayBtX2xvY2FsQWxsb2NhdG9yc0xvY2s7CisgICAg
c2l6ZV90IG1fdGxjT2Zmc2V0OworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMb2NhbEFsbG9jYXRv
ciwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+PiBtX2xvY2FsQWxsb2NhdG9y
czsKIH07CiAKLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxp
c3QoKQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQmxvY2tEaXJlY3RvcnksIG1fZnJl
ZUxpc3QpOwotfQotCi1pbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNl
bGxTaXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEJsb2NrRGlyZWN0b3J5LCBt
X2NlbGxTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkocmV2aXNpb24g
MjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiw2IEBAIGlubGluZSBib29sIEJsb2Nr
RGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWQKICAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhi
aXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
KiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIHJldHVybiBt
X2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsKLSAgICAg
ICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRl
eHQsIGZhaWx1cmVNb2RlKSk7Ci0gICAgICAgIH0pOwotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmZvckVhY2hCbG9jayhjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogewogICAgIG1fbGl2ZS5mb3JFYWNoU2V0Qml0KApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3Bh
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwzNSArMzgsMzMgQEAgQ29tcGxldGVTdWJzcGFj
ZTo6Q29tcGxldGVTdWJzcGFjZShDU3RyaQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKIHsK
ICAgICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKLSAg
ICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7CiB9CiAKIENvbXBsZXRl
U3Vic3BhY2U6On5Db21wbGV0ZVN1YnNwYWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIENv
bXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZSBtb2RlKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qg
c2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemUsIG1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxv
Y2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6
YWxsb2NhdGUoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVy
biBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7
CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0
LCBmYWlsdXJlTW9kZSk7CiB9CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9u
VmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFj
ZTo6YWxsb2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
IHsKICAgICB2b2lkICpyZXN1bHQ7Ci0gICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3Ig
PSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJh
bENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpKQorICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFs
Q29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2Nh
dGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgICAgICByZXN1
bHQgPSBhbGxvY2F0ZVNsb3codm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNw
YWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4
ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVD
bGFzcyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKQEAgLTgy
LDcgKzgwLDcgQEAgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAg
IC8vIHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUg
dGhpcyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQg
d2lsbCBoYXZlIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlM
b2NrKCkpOwotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JG
b3JTaXplU3RlcFtpbmRleF0pCisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9j
YXRvckZvclNpemVTdGVwW2luZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAg
IGlmIChmYWxzZSkKQEAgLTk4LDcgKzk2LDcgQEAgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYQogICAgICAgICBpZiAoTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6
ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdID0gZGlyZWN0b3J5OworICAgICAgICBtX2Fs
bG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeS0+YWxsb2NhdG9yKCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWluZGV4LS0pCiAgICAgICAgICAgICBicmVhazsKQEAgLTExMCwx
NyArMTA4LDE3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAg
ICByZXR1cm4gZGlyZWN0b3J5OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAg
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCk7Cisg
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRl
eHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUs
IEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit2b2lkKiBDb21wbGV0ZVN1YnNw
YWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5o
ZWFwKCktPnZtKCkpOworICAgIHNhbml0aXplU3RhY2tGb3JWTSgmdm0pOwogICAgIAogICAgIGlm
IChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCiAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxs
KTsKQEAgLTEzMiwxNSArMTMwLDE1IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9j
YXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAg
ICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJy
YWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJy
YWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1h
cmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0
aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0
aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246
OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlzKTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRp
b25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBtX3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUo
c2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2Fw
YWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9j
YXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vi
c3BhY2UuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTEgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJs
b2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMiLCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92
ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxs
b2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkg
b3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFs
KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAg
IHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxs
b2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9j
YXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3Bh
Y2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9CiAgICAgCkBAIC01MywxMCArNTMsMTAgQEAg
cHJpdmF0ZToKICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwog
ICAgIAogICAgIC8vIFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFs
bG9jYXRpb25zIGFuZCBhbGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93
KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAg
IHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAg
dm9pZCogYWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90
LCBHQ0RlZmVycmFsQ29udGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3Rv
cnkqLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7
CisgICAgc3RkOjphcnJheTxBbGxvY2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2Nr
RGlyZWN0b3J5Pj4gbV9kaXJlY3RvcmllczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQCBzdHJ1
Y3QgRnJlZUNlbGwgewogfTsKIAogY2xhc3MgRnJlZUxpc3QgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEZyZWVMaXN0KTsKLSAgICAKIHB1YmxpYzoKICAgICBGcmVlTGlzdCh1bnNpZ25lZCBj
ZWxsU2l6ZSk7CiAgICAgfkZyZWVMaXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDIwICs1
MCwyMCBAQCBJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3Rv
cnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1v
ZGUgbW9kZSkKK0FsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXpl
LCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2
bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAgICByZXR1cm4gYWxsb2NhdGVOb25W
aXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVybiBh
bGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUp
OwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXpl
LCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKFZN
JiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChz
aXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgdm9pZCogcmVzdWx0ID0gbV9kaXJlY3RvcnkuYWxs
b2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgdm9pZCogcmVzdWx0ID0g
bV9hbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDExIEBAIHB1
YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKLSAg
ICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkg
b3ZlcnJpZGU7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKIAotICAgIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92
ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChz
aXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2
b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9j
YXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwpA
QCAtNTUsMTUgKzU1LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9G
cmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJpZGU7CiAgICAgCiAgICAgc2l6ZV90
IG1fc2l6ZTsKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgQmxvY2tEaXJlY3Rvcnkg
bV9kaXJlY3Rvcnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8
SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7
CiB9OwogCi1pbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQoraW5saW5lIEFsbG9jYXRv
ciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7
Ci0gICAgcmV0dXJuICZtX2RpcmVjdG9yeTsKKyAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiB9CiAK
ICNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENlbGxUeXBlLCB0eXBlKSAoIklz
b2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhlYXBDZWxsVHlwZSksIHNpemVvZih0
eXBlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRv
ci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxB
bGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxB
bGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAg
OiBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCisgICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9j
ZWxsU2l6ZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpcmVjdG9yeS0+bV9sb2Nh
bEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVu
ZCh0aGlzKTsKK30KKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2Nh
dG9yJiYgb3RoZXIpCisgICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICAs
IG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKKyAgICAsIG1fZnJlZUxpc3QoV1RGTW92ZShv
dGhlci5tX2ZyZWVMaXN0KSkKKyAgICAsIG1fY3VycmVudEJsb2NrKG90aGVyLm1fY3VycmVudEJs
b2NrKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIubV9sYXN0QWN0aXZlQmxvY2spCit7
CisgICAgb3RoZXIucmVzZXQoKTsKKyAgICBpZiAob3RoZXIuaXNPbkxpc3QoKSkgeworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9yc0xv
Y2spOworICAgICAgICBvdGhlci5yZW1vdmUoKTsKKyAgICAgICAgbV9kaXJlY3RvcnktPm1fbG9j
YWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0
b3I6OnJlc2V0KCkKK3sKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAgbV9jdXJyZW50Qmxv
Y2sgPSBudWxscHRyOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKK30KKworTG9j
YWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCit7CisgICAgaWYgKGlzT25MaXN0KCkpIHsK
KyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9j
YXRvcnNMb2NrKTsKKyAgICAgICAgcmVtb3ZlKCk7CisgICAgfQorICAgIAorICAgIC8vIEFzc2Vy
dCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0IGhvbGRpbmcgb250byBhbnkgbWVtb3J5LiBUaGlz
IGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0aGUKKyAgICAvLyBmb2xsb3dpbmcgdHdvIHVzZSBj
YXNlczoKKyAgICAvLyAKKyAgICAvLyAtIEltbW9ydGFsIFRMQy4gVGhvc2UgZGVzdHJ1Y3QgYWZ0
ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVjdGluZywgc28gdGhleSBzaG91bGQgbm90IGhhdmUK
KyAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGluIHRoZW0uCisgICAgLy8KKyAgICAvLyAtIFRMQyBv
d25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBUTEMgZ2V0cyBkZXN0cm95ZWQgYWZ0ZXIgYSBHQyBm
bGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQKKyAgICAvLyAgIHRoYXQgaXQgaXMgbm90IHJlYWNo
YWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBhIGZ1bGx5IHJlc2V0
IHN0YXRlIGF0IHRoZQorICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBiZWNhdXNlIGZvciBp
dCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBoYXZlIGFsbG9jYXRl
ZAorICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVzZSBpdCdzIHN1cHBv
c2VkbHkgdW5yZWFjaGFibGUpLgorICAgIFJFTEVBU0VfQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2Nh
dGlvbldpbGxGYWlsKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdEFjdGl2ZUJsb2NrKTsKK30KKwordm9pZCBMb2NhbEFs
bG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQoreworICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxv
Y2spOworICAgIGlmICghbV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgQVNTRVJUKG1fZnJlZUxp
c3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2xh
c3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJsb2NrOworICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6
OnJlc3VtZUFsbG9jYXRpbmcoKQoreworICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1f
ZnJlZUxpc3QpOworICAgIG1fY3VycmVudEJsb2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7CisgICAg
bV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOworfQorCit2b2lkIExvY2FsQWxsb2NhdG9yOjpw
cmVwYXJlRm9yQWxsb2NhdGlvbigpCit7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCogTG9jYWxB
bGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICBIZWFwJiBoZWFwID0gKm1f
ZGlyZWN0b3J5LT5tX2hlYXA7CisgICAgQVNTRVJUKGhlYXAudm0oKS0+Y3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7CisgICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChkZWZlcnJh
bENvbnRleHQpOworCisgICAgQVNTRVJUKCFtYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOwor
ICAgIGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7CisgICAgCisg
ICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBp
bmdIZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVy
cmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxs
ZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRCbG9jay4g
VGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGlj
aCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAo
VU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJy
YWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9
IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxvY2soKTsKKyAgICBpZiAoIWJs
b2NrKSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OkFzc2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBtX2RpcmVj
dG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOwor
ICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxB
bGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVudEJsb2Nr
KQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisg
ICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKK30K
Kwordm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQor
eworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2VkIGZvciByZWFsIG11
bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0bworICAgIC8vIGNv
bWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRoYXQgcHJvdG9jb2wg
d291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAvLworICAgIC8vIC0gVGhlIGJh
c2ljIGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRyeWluZyB0byBkbyBhbiBhbGxv
Y2F0aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNhbWUgYml0dmVjdG9yLiBUaGF0
IHByb2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBsZWFzdC4KKyAgICAvLworICAg
IC8vIC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxvY2F0b3IgdHJpZ2dlcmluZyBh
IHN0ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkKKyAgICAvLyAgIHZpYSBhIHNl
YXJjaCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxpc3QuIFdobyBrbm93cyB3aGF0
IGxvY2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25lIHdheSB0byBtYWtlIHRoaXMg
d29yayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sgdGhhdCBwcm90ZWN0cyBhbGwg
bXV0YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBhdGhzLiBUaGF0IHdvdWxkIHBy
b2JhYmx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0IHdvdWxkIGNlcnRhaW5seSBi
ZQorICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24gZnJvbSBKSVQgdGhyZWFkcy4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjM1Cisg
ICAgCisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAg
IAorICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFs
bG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9ja0ZvckFsbG9jYXRp
b24oKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGlmICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5Qmxv
Y2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9j
a3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPm1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9T
dGVhbCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpID09IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0
cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xl
YXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAg
ICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9j
ayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFu
ZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVG
cm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2sp
OworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6
YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQoreworICAgIEFTU0VSVChibG9jayk7Cisg
ICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgIAorICAgIGJsb2NrLT5zd2Vl
cCgmbV9mcmVlTGlzdCk7CisgICAgCisgICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9u
IGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwg
YnV0CisgICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBp
dCBzb21ldGltZXMuCisgICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsK
KyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CisgICAgICAgIGJsb2NrLT51
bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNG
cmVlTGlzdGVkKCkpOworICAgICAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5pc0VtcHR5KE5vTG9j
a2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgQVNTRVJUKCFtX2RpcmVjdG9yeS0+aXND
YW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIG1fY3VycmVudEJsb2NrID0gYmxv
Y2s7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAg
ICAgW10gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSk7CisgICAg
bV9kaXJlY3RvcnktPnNldElzRWRlbihOb0xvY2tpbmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2Nr
LCB0cnVlKTsKKyAgICBtX2RpcmVjdG9yeS0+bWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxv
Y2sobV9jdXJyZW50QmxvY2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxB
bGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2Vl
bkdDcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlv
bkNvdW50ID0gMDsKKyAgICBpZiAoIWFsbG9jYXRpb25Db3VudCkgeworICAgICAgICBpZiAoIW1f
ZGlyZWN0b3J5LT5tX2hlYXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVy
cmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0Mg
PSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5t
X2hlYXAtPmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoKythbGxvY2F0aW9uQ291bnQgPj0gT3B0aW9uczo6c2xvd1BhdGhB
bGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2Nh
bEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTG9jYWxBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBCbG9ja0RpcmVjdG9yeTsKKworY2xhc3MgTG9jYWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNS
YXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShMb2NhbEFsbG9jYXRvcik7CisgICAgCitwdWJsaWM6CisgICAgTG9jYWxBbGxvY2F0b3IoQmxv
Y2tEaXJlY3RvcnkqKTsKKyAgICBMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYmKTsKKyAg
ICB+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisKKyAgICB2b2lkIHN0b3BBbGxvY2F0
aW5nKCk7CisgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgIHZvaWQgcmVzdW1l
QWxsb2NhdGluZygpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlz
dCgpOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOworCitwcml2YXRl
OgorICAgIHZvaWQgcmVzZXQoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0
ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1
cmVNb2RlKTsKKyAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFs
bG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKTsKKyAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5k
bGUqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChH
Q0RlZmVycmFsQ29udGV4dCopOworCisgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5Owor
ICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7CisgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBNYXJr
ZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3RpdmVCbG9jayB7IG51bGxwdHIgfTsKK307CisKK2lu
bGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQoreworICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9jYWxBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQor
CitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkKK3sK
KyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvY2FsQWxsb2NhdG9yLCBtX2NlbGxTaXplKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB2b2lkKiBMb2NhbEFsbG9jYXRv
cjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9j
YXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIHNhbml0aXpl
U3RhY2tGb3JWTShtX2RpcmVjdG9yeS0+aGVhcCgpLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0
LCBmYWlsdXJlTW9kZSkpOworICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2ODkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgi
CiAjaW5jbHVkZSAiQWxsb2NhdG9yRm9yTW9kZS5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC01Niw4ICs1Nyw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOwogICAgIHZv
aWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOwogCi0gICAgdmlydHVhbCBCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKFZNJiwg
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgPSAwOwog
ICAgIAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
aHJlYWRMb2NhbENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitSZWZQdHI8VGhyZWFkTG9j
YWxDYWNoZT4gVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKEhlYXAmIGhlYXApCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRMb2NhbENhY2hlKGhlYXApKTsKK30KKworVGhyZWFkTG9j
YWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNoZShIZWFwJiBoZWFwKQorICAgIDogbV9oZWFwKGhlYXAp
Cit7CisgICAgbV9kYXRhID0gYWxsb2NhdGVEYXRhKCk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGU6
On5UaHJlYWRMb2NhbENhY2hlKCkKK3sKKyAgICBkZXN0cm95RGF0YShtX2RhdGEpOworfQorCitU
aHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEoKQor
eworICAgIHNpemVfdCBvbGRTaXplID0gbV9kYXRhID8gbV9kYXRhLT5zaXplIDogMDsKKyAgICBU
aHJlYWRMb2NhbENhY2hlTGF5b3V0OjpTbmFwc2hvdCBsYXlvdXQgPSBtX2hlYXAudGhyZWFkTG9j
YWxDYWNoZUxheW91dCgpLnNuYXBzaG90KCk7CisgICAgCisgICAgRGF0YSogcmVzdWx0ID0gZmFz
dE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2NhdG9yKSArIGxheW91dC5zaXplKTsK
KyAgICByZXN1bHQtPnNpemUgPSBsYXlvdXQuc2l6ZTsKKyAgICByZXN1bHQtPmNhY2hlID0gdGhp
czsKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQg
Kz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1
bHQsIG9mZnNldCkpIChXVEZNb3ZlKGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CisgICAg
Zm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNl
dCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJl
c3VsdCwgb2Zmc2V0KSkgKGxheW91dC5kaXJlY3Rvcmllc1tvZmZzZXQgLyBzaXplb2YoTG9jYWxB
bGxvY2F0b3IpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBUaHJlYWRMb2NhbENh
Y2hlOjpkZXN0cm95RGF0YShEYXRhKiBkYXRhKQoreworICAgIGZvciAoc2l6ZV90IG9mZnNldCA9
IDA7IG9mZnNldCA8IGRhdGEtPnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3Ip
KQorICAgICAgICBhbGxvY2F0b3IoKmRhdGEsIG9mZnNldCkufkxvY2FsQWxsb2NhdG9yKCk7Cisg
ICAgZmFzdEZyZWUoZGF0YSk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbFNs
b3coVk0mIHZtKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlRmxh
ZywKKyAgICAgICAgW10gKCkgeworICAgICAgICAgICAgcHRocmVhZF9rZXlfaW5pdF9ucCh0bHNL
ZXksIGRlc3RydWN0b3IpOworICAgICAgICB9KTsKKyNlbmRpZgorICAgIAorICAgIHJlZigpOwor
ICAgIAorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSk7Cisg
ICAgb2xkQ2FjaGUtPmRlcmVmKCk7CisgICAgCisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7
Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbERhdGEoVk0mIHZtLCBEYXRhKiBk
YXRhKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsK
KyAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QodGxzS2V5LCBkYXRhKTsKKyNlbHNlCisg
ICAgdm0udGhyZWFkTG9jYWxDYWNoZSA9IGRhdGE7CisjZW5kaWYKK30KKworTG9jYWxBbGxvY2F0
b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvclNsb3coVk0mIHZtLCBzaXplX3Qgb2Zmc2V0
KQoreworICAgIERhdGEqIG9sZERhdGEgPSBtX2RhdGE7CisgICAgbV9kYXRhID0gYWxsb2NhdGVE
YXRhKCk7CisgICAgZGVzdHJveURhdGEob2xkRGF0YSk7CisgICAgaW5zdGFsbERhdGEodm0sIG1f
ZGF0YSk7CisgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0IDwgbV9kYXRhLT5zaXplKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxD
YWNoZTo6ZGVzdHJ1Y3Rvcih2b2lkKiBhcmcpCit7CisgICAgaWYgKCFhcmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KGFyZyk7CisgICAgZGF0
YS0+Y2FjaGUtPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGhyZWFkTG9jYWxDYWNo
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRMb2NhbENhY2hlPiB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkTG9jYWxDYWNoZSk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2Nh
bENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAgIAorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9j
YWxDYWNoZT4gZ2V0KFZNJik7CisgICAgCisgICAgLy8gVGhpcyBpcyBkZXNpZ25lZCB0byBiZSBm
YXN0IGVub3VnaCB0aGF0IHlvdSBjb3VsZCBldmVuIGNhbGwgaXQgYmVmb3JlIGV2ZXJ5IGFsbG9j
YXRpb24sIGJ5CisgICAgLy8gb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhhdCB5b3UncmUganVz
dCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlzIGFscmVhZHkgaW5zdGFsbGVkLiBUaGlzCisg
ICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVyIG9mIGNhY2hlcyBvciBsb3cg
Y2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRjaCBjb21iaW5lZAorICAgIC8vIHdpdGggcG9z
c2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZlIGNvbnRleHQgc3dpdGNoZWQiIHNpdGVzIHRo
YXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4KKyAgICB2b2lkIGluc3RhbGwoVk0mKTsKKyAg
ICAKKyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZz
ZXQpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpOyB9CisgICAgCitwcml2
YXRlOgorICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYpOworICAgIH5UaHJlYWRMb2NhbENhY2hl
KCk7CisgICAgCisgICAgc3RydWN0IERhdGEgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAg
ICAgVGhyZWFkTG9jYWxDYWNoZSogY2FjaGU7CisgICAgICAgIExvY2FsQWxsb2NhdG9yIGFsbG9j
YXRvclsxXTsKKyAgICB9OworCisgICAgc3RhdGljIERhdGEqIGdldEltcGwoVk0mKTsKKyAgICAK
KyAgICBEYXRhKiBhbGxvY2F0ZURhdGEoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95RGF0YShE
YXRhKik7CisgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYgZGF0YSwg
c2l6ZV90IG9mZnNldCk7CisKKyAgICB2b2lkIGluc3RhbGxTbG93KFZNJik7CisgICAgc3RhdGlj
IHZvaWQgaW5zdGFsbERhdGEoVk0mLCBEYXRhKik7CisgICAgCisgICAgTG9jYWxBbGxvY2F0b3Im
IGFsbG9jYXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cnVjdG9yKHZvaWQqKTsKKyAgICAKKyAgICAvLyBXaGVuIGluc3RhbGxlZCwgd2UgcmVm
KCkgdGhlIGNhY2hlLiBVbmluc3RhbGxpbmcgZGVyZWYoKXMgdGhlIGNhY2hlLiBUTFMgZGVzdHJ1
Y3Rpb24gZGVyZWYoKXMKKyAgICAvLyB0aGUgY2FjaGUuIFdoZW4gdGhlIGNhY2hlIGlzIGRlc3Ry
dWN0ZWQsIGl0IG5lZWRzIHRvIHJldHVybiBhbGwgb2YgaXRzIHN0YXRlIHRvIHRoZSBHQy4gSQor
ICAgIC8vIHRoaW5rIHRoYXQganVzdCBtZWFucyBzdG9wQWxsb2NhdGluZygpLCBidXQgd2l0aCBz
b21lIHNlcmlvdXNseSBoZWF2eSBjYXZlYXRzIGhhdmluZyB0byBkbworICAgIC8vIHdpdGggd2hl
biBpdCdzIHZhbGlkIHRvIG1ha2UgdGhhdCBjYWxsLiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBS
RUxFQVNFX0FTU0VSVCB0aGF0IHRoZSBjYWNoZQorICAgIC8vIGlzIGVtcHR5IHdoZW4gd2UgZGVz
dHJ1Y3QgaXQuIFRoaXMgaXMgY29ycmVjdCBmb3IgY2FjaGVzIHRoYXQgYXJlIGtlcHQgbGl2ZSBi
eSBHQyBvYmplY3RzIGFuZAorICAgIC8vIGl0J3MgY29ycmVjdCBmb3IgaW1tb3J0YWwgY2FjaGVz
LgorICAgIEhlYXAmIG1faGVhcDsKKyAgICBEYXRhKiBtX2RhdGE7CisKKyNpZiBFTkFCTEUoRkFT
VF9UTFNfSklUKQorICAgIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRsc0tleSA9IFdURl9H
Q19UTENfS0VZOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1RocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZtKQorewor
I2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGF0YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdCh0bHNLZXkp
KTsKKyNlbHNlCisgICAgcmV0dXJuIHZtLnRocmVhZExvY2FsQ2FjaGU7CisjZW5kaWYKK30KKwor
UmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmdldChWTSYgdm0pCit7
CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOworICAgIGlm
IChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+Y2FjaGU7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbChWTSYgdm0pCit7CisgICAgaWYg
KGdldEltcGwodm0pLT5jYWNoZSA9PSB0aGlzKQorICAgICAgICByZXR1cm47CisgICAgaW5zdGFs
bFNsb3codm0pOworfQorCitMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2Nh
dG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRh
KiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKExJS0VMWShvZmZzZXQgPCBkYXRhLT5zaXpl
KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KTsKKyAgICByZXR1cm4g
ZGF0YS0+Y2FjaGUtPmFsbG9jYXRvclNsb3cob2Zmc2V0KTsKK30KKworTG9jYWxBbGxvY2F0b3Im
IFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KQor
eworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PExvY2FsQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0
PGNoYXIqPigmZGF0YS5hbGxvY2F0b3JbMF0pICsgb2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2Fj
aGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQoKQoreworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhy
ZWFkTG9jYWxDYWNoZUxheW91dCgpCit7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZUxheW91
dDo6YWxsb2NhdGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgZGlyZWN0b3J5LT5tX3RsY09mZnNldCA9
IG1fc2l6ZTsKKyAgICBtX3NpemUgKz0gc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KTsKKyAgICBtX2Rp
cmVjdG9yaWVzLmFwcGVuZChkaXJlY3RvcnkpOworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0
OjpTbmFwc2hvdCBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3RvcmllcygpCit7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIFNuYXBzaG90IHJlc3VsdDsKKyAg
ICByZXN1bHQuc2l6ZSA9IG1fc2l6ZTsKKyAgICByZXN1bHQuZGlyZWN0b3JpZXMgPSBtX2RpcmVj
dG9yaWVzOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgSlNDIHsKKworLy8gRWFjaCBIZWFwIGhhcyBhIFRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQgdGhhdCBoZWxwcyB1cyBmaWd1cmUgb3V0IGhvdyB0byBhbGxvY2F0ZSBhIFRocmVh
ZExvY2FsQ2FjaGUKKy8vIGZvciB0aGF0IEhlYXAuCisKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVM
YXlvdXQgeworcHVibGljOgorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKTsKKyAgICB+VGhy
ZWFkTG9jYWxDYWNoZUxheW91dCgpOworCisgICAgLy8gQmxvY2tEaXJlY3RvcnkgY2FsbHMgdGhp
cyBkdXJpbmcgY3JlYXRpb24gYW5kIHRoaXMgZmlsbHMgaW4gQmxvY2tEaXJlY3Rvcnk6Om9mZnNl
dC4KKyAgICB2b2lkIGFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5Kik7CisgICAgCisgICAg
c3RydWN0IFNuYXBzaG90IHsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIFZlY3RvcjxC
bG9ja0RpcmVjdG9yeSo+IGRpcmVjdG9yaWVzOworICAgIH0KKyAgICAKKyAgICBTbmFwc2hvdCBz
bmFwc2hvdCgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBMb2NrIG1fbG9jazsKKyAgICBz
aXplX3QgbV9zaXplIHsgMCB9OworICAgIFZlY3RvcjxCbG9ja0RpcmVjdG9yeSo+IG1fZGlyZWN0
b3JpZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTgyLDYgKzU4Miw5NSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRv
bVRodW5rKFZNCiB9CiAjZW5kaWYKIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0
ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpCit7CisgICAgLy8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3JpdHRlbiBzbyB0aGF0
IHdlIGNhbiBjYWxsIGl0IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKKyAgICAvLyByZWdpc3Rl
ciB1c2FnZS4KKyAgICAgICAgCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMoKSkg
eworICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgSnVtcCBwb3BQYXRoOworICAgIEp1bXAgZG9uZTsKKyAgICAKKyNp
ZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIGxvYWRGcm9tVExTUHRyKGZhc3RUTFNPZmZzZXRG
b3JLZXkoV1RGX0dDX1RMQ19LRVkpLCBzY3JhdGNoR1BSKTsKKyNlbHNlCisgICAgbG9hZFB0cigm
dm0oKS50aHJlYWRMb2NhbENhY2hlRGF0YSwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICBpZiAo
YWxsb2NhdG9yKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgVGhyZWFkTG9j
YWxDYWNoZTo6b2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigpICsgYWxsb2NhdG9yLm9mZnNldCgpKSwg
YWxsb2NhdG9yR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0
Y2hHUFIsIGFsbG9jYXRvckdQUiwgVGltZXNPbmUsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9m
Rmlyc3RBbGxvY2F0b3IoKSksIGFsbG9jYXRvckdQUik7CisKKyAgICBsb2FkMzIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3VsdEdQUik7CisgICAgcG9wUGF0aCA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOworICAgIGlmIChhbGxvY2F0b3IpCisgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAg
IG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN1YjMyKEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgIH0KKyAgICB9CisgICAgbmVnUHRyKHJlc3VsdEdQUik7CisgICAgc3RvcmUzMihz
Y3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7CisgICAgQWRkcmVz
cyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKKyAg
ICBpZiAoaXNYODYoKSkKKyAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIp
OworICAgIGVsc2UgeworICAgICAgICBsb2FkUHRyKHBheWxvYWRFbmRBZGRyLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgfQorICAgICAg
ICAKKyAgICBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICBwb3BQYXRoLmxpbmsodGhpcyk7
CisgICAgICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2Nh
dG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFk
KCkpLCByZXN1bHRHUFIpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICB4b3JQdHIoQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVl
TGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CisgICAgZWxzZSB7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICB4b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CisgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIAorICAgIC8v
IFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEg
ZnJlc2ggb2JqZWN0LCBidXQKKyAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlz
dC4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CisgICAgc3Rv
cmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsK
KyAgICAgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQ
UlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgp
Cit7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gz
MihFcXVhbCwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tMzIoLTEpKSk7CisgICAgZW1pdEFsbG9j
YXRlV2l0aE5vbk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQ
Uiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNwYWNl
JiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIHN0YXRpY19hc3Nl
cnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkp
LCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CisgICAg
CisgICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3Rl
cCk7CisgICAgCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAt
IDEpLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEpOworICAgIHVyc2hpZnQzMihUcnVzdGVk
SW1tMzIoc3RlcFNoaWZ0KSwgc2NyYXRjaEdQUjEpOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2gzMihBYm92ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VD
dXRvZmYgPj4gc3RlcFNoaWZ0KSkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdWJzcGFjZS5h
bGxvY2F0b3JGb3JTaXplU3RlcCgpIC0gMSksIHNjcmF0Y2hHUFIyKTsKKyAgICBsb2FkMzIoQmFz
ZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgVGltZXNGb3VyKSwgc2NyYXRjaEdQUjEp
OworICAgIAorICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIG51bGxwdHIsIHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1l
KiYgdG9wRW50cnlGcmFtZSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0K
KyAgICBWTSYgdm0oKSB7IHJldHVybiAqbV9jb2RlQmxvY2stPnZtKCk7IH0KICAgICBBc3NlbWJs
ZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9CiAKICAgICB2b2lk
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCkKQEAgLTE0OTIsNzkgKzE0OTMsMTkgQEAgcHVi
bGljOgogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBoZWxkIGlu
IGFsbG9jYXRvckdQUiBpcyBub24tbnVsbC4gVGhpcyBET0VTIE5PVCBtZWFuCiAgICAgLy8gdGhh
dCBhbGxvY2F0b3IgaXMgbm9uLW51bGw7IGFsbG9jYXRvciBjYW4gYmUgbnVsbCBhcyBhIHNpZ25h
bCB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUKICAgICAvLyB2YWx1ZSBvZiBhbGxvY2F0b3JH
UFIgaXMuCi0gICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcg
cmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAg
Ly8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3JpdHRlbiBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0
IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKLSAgICAgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCi0g
ICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7Ci0gICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgSnVtcCBwb3BQYXRoOwotICAgICAgICBKdW1wIGRv
bmU7Ci0gICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5p
bmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywg
cmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGFsbG9jYXRvcikKLSAgICAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNYODYoKSkgewotICAgICAgICAg
ICAgICAgIG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIz
MihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBs
b2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxT
aXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIzMihyZXN1bHRHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKLSAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRk
ciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKLSAgICAgICAgaWYgKGlzWDg2
KCkpCi0gICAgICAgICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIsIHJlc3VsdEdQUik7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5kQWRkciwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZG9uZSA9IGp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHBv
cFBhdGgubGluayh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBpZiAoaXNYODYo
KSkKLSAgICAgICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rv
cnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHhvclB0cihzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICB9Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
IG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVz
aCBvYmplY3QsIGJ1dAotICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlz
dC4KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhl
YWQoKSkpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIH0KKyAgICB2
b2lkIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIEFs
bG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BS
LCBKdW1wTGlzdCYgc2xvd1BhdGgpOwogICAgIAotICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJl
ZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi0gICAgewotICAgICAg
ICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0
UHRyKFplcm8sIGFsbG9jYXRvckdQUikpOwotICAgICAgICBlbWl0QWxsb2NhdGVXaXRoTm9uTnVs
bEFsbG9jYXRvcihyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BS
LCBzbG93UGF0aCk7Ci0gICAgfQorICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRH
UFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3Vs
dEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3Ry
dWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1Bh
dGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3VsdEdQUiwgQWxsb2Nh
dG9yIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1
cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAg
ICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2NyYXRj
aEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8o
c3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwogICAgIH0KICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5h
bWUgTWFza1R5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0
R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1
Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywg
R1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJl
ZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9y
YWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9y
LCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAg
ICBzdG9yZVB0cihzdG9yYWdlLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSk7CkBAIC0xNTc2LDEyICsxNTE3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgVk0m
IHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5
cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIxLAogICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCwgc2l6ZV90IHNpemUpCiAgICAg
ewotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NU
eXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICBpZiAoIWFsbG9jYXRvcikg
ewogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYWxsb2NhdG9yLm9mZnNldCgp
KSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIs
IGFsbG9jYXRvciwgc2NyYXRjaEdQUjEsIHN0cnVjdHVyZSwgc3RvcmFnZSwgbWFzaywgc2NyYXRj
aEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCkBAIC0xNTkzLDIwICsxNTM0LDcgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIGFsbG9jYXRpb25TaXplIGNhbiBiZSBhbGlhc2VkIHdpdGggYW55
IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJZiBpdCdzIG5vdCBhbGlhc2VkIHRoZW4gaXQKICAg
ICAvLyB3b24ndCBiZSBjbG9iYmVyZWQuCi0gICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNp
emVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcg
YWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBK
dW1wTGlzdCYgc2xvd1BhdGgpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2Vk
U3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpKSwgIk1hcmtlZFNw
YWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwotICAgICAgICAKLSAgICAg
ICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3RlcCk7
Ci0gICAgICAgIAotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6OnNpemVT
dGVwIC0gMSksIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHVyc2hpZnQz
MihUcnVzdGVkSW1tMzIoc3RlcFNoaWZ0KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1tMzIoTWFya2Vk
U3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHN1YnNwYWNlLmFsbG9jYXRvckZvclNpemVTdGVwKCkgLSAxKSwgc2NyYXRjaEdQUjIp
OwotICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHRp
bWVzUHRyKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIAotICAgICAgICBlbWl0QWxsb2NhdGUo
cmVzdWx0R1BSLCBudWxscHRyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsK
LSAgICB9CisgICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRH
UFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQ
UlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0
dXJlVHlwZT4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKFZNJiB2bSwg
R1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0
aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0
JiBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDcg
KzM0Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVucXUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1KU0dsb2JhbE9iamVj
dDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorSlNHbG9iYWxP
YmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlLCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUsIDApCiAgICAgLCBtX3ZtKHZtKQogICAgICwgbV9tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpKSkKQEAgLTM2
MCw2ICszNjAsNyBAQCBKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTCiAg
ICAgLCBtX3RlbXBsYXRlUmVnaXN0cnkodm0pCiAgICAgLCBtX3J1bnRpbWVGbGFncygpCiAgICAg
LCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICAs
IG1fdGhyZWFkTG9jYWxDYWNoZShXVEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUpKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1lRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3J1
bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGlj
aXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogPSAwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9i
amVjdChWTSYsIFN0cnVjdHVyZSosIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiwgY29uc3QgR2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAKQEAgLTg5Myw2ICs4OTMsOCBAQCBwdWJsaWM6CiAgICAg
SlNXcmFwcGVyTWFwKiB3cmFwcGVyTWFwKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyTWFwLmdl
dCgpOyB9CiAgICAgdm9pZCBzZXRXcmFwcGVyTWFwKEpTV3JhcHBlck1hcCogbWFwKSB7IG1fd3Jh
cHBlck1hcCA9IG1hcDsgfQogI2VuZGlmCisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSYgdGhy
ZWFkTG9jYWxDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkTG9jYWxDYWNoZS5nZXQoKTsg
fQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEdsb2JhbFByb3BlcnR5SW5mbyB7CkBAIC05MzAs
NiArOTMyLDggQEAgcHJpdmF0ZToKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFJldGFp
blB0cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKICNlbmRpZgorICAgIAorICAgIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2FsQ2FjaGU7CiB9OwogCiBKU0dsb2JhbE9i
amVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUs
NyBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogCiAgICAgbV92bS0+c2V0TGFzdFN0
YWNrVG9wKHRocmVhZC5zYXZlZExhc3RTdGFja1RvcCgpKTsKICAgICBBU1NFUlQodGhyZWFkLnN0
YWNrKCkuY29udGFpbnMobV92bS0+bGFzdFN0YWNrVG9wKCkpKTsKLQorICAgIAogICAgIG1fdm0t
PmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJyZW50VGhyZWFkKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0
LDcgQEAKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJW
TUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIlRocmVhZExv
Y2FsQ2FjaGUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhdGNocG9p
bnQuaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY1Niw2ICs2
NTcsMTEgQEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmly
c3RPYmplY3QgeyBudWxscHRyIH07CiAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0cmluZ1JlY3Vy
c2lvbkNoZWNrVmlzaXRlZE9iamVjdHM7CisgICAgCisjaWYgIUVOQUJMRShGQVNUX1RMU19KSVQp
CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogdGhyZWFkTG9jYWxDYWNoZURhdGE7CisjZW5k
aWYKKyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gZGVmYXVsdFRocmVhZExvY2FsQ2FjaGU7
CiAKICAgICBMb2NhbFRpbWVPZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShy
ZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsNyBAQCBWTUVudHJ5U2NvcGU6
OlZNRW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9nbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAgIGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxD
YWNoZSgpLT5pbnN0YWxsKHZtKTsKICAgICBBU1NFUlQoIURpc2FsbG93Vk1SZWVudHJ5Ojppc0lu
RWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5z
dGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAgIGlmICghdm0uZW50cnlTY29wZSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331344</attachid>
            <date>2018-01-15 10:36:22 -0800</date>
            <delta_ts>2018-01-15 12:14:17 -0800</delta_ts>
            <desc>getting more things to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>123816</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSwxMiBAQAogCQkwRjcyNUNBQTFDNTAz
REVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmgg
Ki87IH07CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNB
RTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkwRjc0
QjkzQjFGODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMgLyog
UHJvdG90eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU1MjAw
RDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjAyMDBEMjYwQjAwMzhFMkNGIC8q
IExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9y
SW5saW5lcy5oICovOyB9OworCQkwRjc1QTA2MTIwMEQyNjE4MDAzOEUyQ0YgLyogTG9jYWxBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVBMDYyMjAwRDI2MUQwMDM4
RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5s
aW5lcy5oICovOyB9OworCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NDIw
MEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4
RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQzMDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3
NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0Ug
LyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMjQyMCw2ICsyNDI2LDE2IEBACiAJCTBGNzI1Q0FEMUM1MDZEM0IwMEFE
OTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBwYXRoID0gYjMvQjNGb2xkUGF0
aENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzI1Q0FFMUM1
MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzRm9sZFBhdGhDb25zdGFudHMuaDsgcGF0aCA9IGIzL0IzRm9sZFBh
dGhDb25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NEI5M0ExRjg5
NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQcm90b3R5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3
NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxD
YWNoZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTG9j
YWxDYWNoZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTcy
MDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExvY2FsQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNzVBMDU4MjAwRDI1RjAwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyog
TG9jYWxBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TG9jYWxBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1
QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
aHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyog
QWxsb2NhdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxv
Y2F0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDFDMTVB
NTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1
YlJvdXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklU
U3R1YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU0Miw2
ICs1NTU4LDE2IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjc1QTA1NDIwMEQyNUVG
MDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCisJCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNG
IC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0Yg
LyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAv
KiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBM
b2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNG
IC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKKwkJCQkwRjc1QTA1QjIwMEQyNUYxMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAgKi8sCisJCQkJMEY3NUEwNUMyMDBE
MjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVDM0M1
MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJ
MEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywK
IAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCkBA
IC04MDUxLDYgKzgwNzcsNyBAQAogCQkJCTBGMkFDNTcxMUU4RUU0NTQwMDAxRUUzRiAvKiBBaXJG
b3JtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc5MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjEy
MDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVT
YXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjE2LDYgKzgyNDMsNyBAQAogCQkJ
CTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc1QTA2NDIwMEQyNjI4
MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xs
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTgzODUsNiArODQxMyw3IEBACiAJCQkJMEYxRTNB
NDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkREODEyMUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNDFBQjNEOEJFMDBCQkI4RTggLyog
REZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc1QTA2MzIwMEQy
NjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyMjE4
Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1
QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjY1LDYgKzg2OTQsNyBAQAogCQkJCUZFQTBDNDAzMUNE
RDdEMUQwMDQ4MTk5MSAvKiBGdW5jdGlvbldoaXRlbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjAyMDBEMjYwQjAwMzhFMkNGIC8qIExvY2FsQWxsb2Nh
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNF
IC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMEU1RUEx
RTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI0
NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJzICov
LApAQCAtODc0OSw2ICs4Nzc5LDcgQEAKIAkJCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyog
SW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5QjE1RUQ4
RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3
OTFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY3NUEwNjIyMDBEMjYxRDAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQkY5MkI5MUZENzZGRkYwMEFDMjhBOCAvKiBJbmZlcnJlZFN0
cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjkyQkExRkQ3NzAwNDAwQUMyOEE4IC8q
IEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQTc1
MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
OTM1LDYgKzg5NjYsNyBAQAogCQkJCUUzM0Y1MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0
OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc1QTA1RTIwMEQyNUY2MDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwNzUxQjg0MjFD
MDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyog
SlNKb2IuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc3LDYgKzEyNzcsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAg
ICAgICAgICAgICAgICBhcmcgPSB0bXAodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xvYmJl
cjogeworICAgICAgICAgICAgICAgIFRtcCBkc3RUbXAgPSBtX2NvZGUubmV3VG1wKHZhbHVlLnZh
bHVlKCktPnJlc3VsdEJhbmsoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3Zl
Rm9yVHlwZSh2YWx1ZS52YWx1ZSgpLT50eXBlKCkpLCBpbW1PclRtcCh2YWx1ZS52YWx1ZSgpKSwg
ZHN0VG1wKTsKKyAgICAgICAgICAgICAgICBhcmcgPSBkc3RUbXA7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVn
aXN0ZXI6CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAgICAg
ICAgICBzdGFja21hcC0+ZWFybHlDbG9iYmVyZWQoKS5jbGVhcih2YWx1ZS5yZXAoKS5yZWcoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQCBi
b29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0CiAgICAgICAgIGNhc2UgVmFs
dWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVn
aXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZh
bHVlUmVwOjpMYXRlUmVnaXN0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MCw2ICsxMTAsOSBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAg
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKICAgICAgICAgICAgICAgICByb2xlID0g
QXJnOjpVc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKKyAgICAgICAgICAgICAgICByb2xlID0gQXJn
OjpVc2VEZWY7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVl
UmVwOjpMYXRlUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyOCw2ICsxMzEsMTAgQEAgdm9pZCBTdGFja21h
cFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgLy8gYmUgYWJsZSB0byByZWNv
dmVyIHRoZSBzdGFja21hcCB2YWx1ZS4gU28sIGZvcmNlIExhdGVDb2xkVXNlIHRvIHByZXNlcnZl
IHRoZQogICAgICAgICAgICAgLy8gb3JpZ2luYWwgc3RhY2ttYXAgdmFsdWUgYWNyb3NzIHRoZSBT
cGVjaWFsIG9wZXJhdGlvbi4KICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVVc2Uocm9sZSkg
JiYgb3B0aW9uYWxEZWZBcmdXaWR0aCAmJiAqb3B0aW9uYWxEZWZBcmdXaWR0aCA8IGNoaWxkLnZh
bHVlKCktPnJlc3VsdFdpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcm9sZSBjYW4g
b25seSBiZSBzb21lIGtpbmQgb2YgZGVmIGlmIHdlIGRpZCBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJl
ciwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAvLyBvbmx5IGFsbG93ZWQgZm9yIHBhdGNocG9p
bnRzLiBQYXRjaHBvaW50cyBkb24ndCB1c2UgdGhlIGRlZkFyZ1dpZHRoIGZlYXR1cmUuCisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUFyZzo6aXNBbnlEZWYocm9sZSkpOworICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKICAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBl
bHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNw
cAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMTEgQEAgdm9pZCBTdGFja21hcFZh
bHVlOjphcHBlbmRTb21lUmVnaXN0ZXIoVgogICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZh
bHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiB9CiAKK3ZvaWQgU3RhY2ttYXBWYWx1ZTo6
YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIoVmFsdWUqIHZhbHVlKQoreworICAgIGFwcGVu
ZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2Ji
ZXIpKTsKK30KKwogdm9pZCBTdGFja21hcFZhbHVlOjpzZXRDb25zdHJhaW5lZENoaWxkKHVuc2ln
bmVkIGluZGV4LCBjb25zdCBDb25zdHJhaW5lZFZhbHVlJiBjb25zdHJhaW5lZFZhbHVlKQogewog
ICAgIGNoaWxkKGluZGV4KSA9IGNvbnN0cmFpbmVkVmFsdWUudmFsdWUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDIyNjg5MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTk5LDcgKzk5LDggQEAgcHVibGljOgogICAgIC8vIFRoaXMgaXMgYSBoZWxwZXIg
Zm9yIHNvbWV0aGluZyB5b3UgbWlnaHQgZG8gYSBsb3Qgb2Y6IGFwcGVuZCBhIHZhbHVlIHRoYXQg
c2hvdWxkIGJlIGNvbnN0cmFpbmVkCiAgICAgLy8gdG8gU29tZVJlZ2lzdGVyLgogICAgIHZvaWQg
YXBwZW5kU29tZVJlZ2lzdGVyKFZhbHVlKik7Ci0KKyAgICB2b2lkIGFwcGVuZFNvbWVSZWdpc3Rl
cldpdGhDbG9iYmVyKFZhbHVlKik7CisgICAgCiAgICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYg
cmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQogCiAgICAgLy8gU3RhY2ttYXBzIGFsbG93
IHlvdSB0byBzcGVjaWZ5IHRoYXQgdGhlIG9wZXJhdGlvbiBtYXkgY2xvYmJlciBzb21lIHJlZ2lz
dGVycy4gQ2xvYmJlcmluZyBhIHJlZ2lzdGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMiwyMSArNDMyLDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJh
Qml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+dHlw
ZSgpID09IFZvaWQpCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5hczxQYXRj
aHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQgPT0gVmFsdWVSZXA6Oldhcm1BbnksICgi
QXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWlu
dC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICp2YWx1ZSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNr
bWFwQ29uc3RyYWludCh2YWx1ZSwgQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgdmFsdWUtPmFzPFBh
dGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludCksIENvbnN0cmFpbnRSb2xlOjpEZWYp
OwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwKHZh
bHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tBZGQ6
CkBAIC01NzEsMTYgKzU1OCwyNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3dpdGNoICh2
YWx1ZS5yZXAoKS5raW5kKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKLSAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0
ZUNvbGRBbnk6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29s
ZEFueToKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwg
KCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKKyAgICAgICAgICAg
IFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwg
IjogIiwgdmFsdWUpKTsKKyAgICAgICAgICAgIFZBTElEQVRFKGNvbnRleHQtPmFzPFBhdGNocG9p
bnRWYWx1ZT4oKSwgKCJBdCAiLCAqY29udGV4dCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICAgICAgVkFMSURB
VEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6RGVmLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2
YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lz
dGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6CisgICAgICAgICAgICBp
ZiAodmFsdWUucmVwKCkua2luZCgpID09IFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXIpCisgICAgICAg
ICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6VXNlLCAoIkF0ICIsICpj
b250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLnJlcCgpLnJlZygp
LmlzR1BSKCkpCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUudmFsdWUoKS0+
dHlwZSgpKSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAgICAgICAgIGVs
c2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9u
IDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAgdm9pZCBWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lz
dGVyc1RvKFJlZ2lzdAogICAgIGNhc2UgQ29sZEFueToKICAgICBjYXNlIExhdGVDb2xkQW55Ogog
ICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgIGNhc2UgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6
CiAgICAgY2FzZSBTb21lRWFybHlSZWdpc3RlcjoKICAgICBjYXNlIENvbnN0YW50OgogICAgICAg
ICByZXR1cm47CkBAIC03MSw2ICs3Miw3IEBAIHZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY28KICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAg
ICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgog
ICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIExh
dGVSZWdpc3RlcjoKQEAgLTE3NSw2ICsxNzcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAg
ICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAgICAgIG91dC5wcmludCgiU29t
ZVJlZ2lzdGVyV2l0aENsb2JiZXIiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVmFsdWVS
ZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJpbnQoIlNvbWVFYXJseVJlZ2lz
dGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVSZXAuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY1LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBz
aG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCiAgICAgICAgIC8vIHJlZ2lz
dGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKICAgICAgICAgU29tZVJlZ2lzdGVyLAor
ICAgICAgICAKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVh
bnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyIGJ1dCB0aGF0IHRoaXMKKyAgICAg
ICAgLy8gcmVnaXN0ZXIgaXMgdGhlbiBjb2JiZXJlZCB3aXRoIGdhcmJhZ2UuIFRoaXMgb25seSB3
b3JrcyBmb3IgcGF0Y2hwb2ludHMuCisgICAgICAgIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyLAog
CiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRo
YXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGltcGxpZXMKICAgICAgICAgLy8g
dGhhdCB0aGUgZGVmIGhhcHBlbnMgYmVmb3JlIGFueSBvZiB0aGUgZWZmZWN0cyBvZiB0aGUgc3Rh
Y2ttYXAuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IKQEAgLTEwNyw3ICsxMTEsNyBAQCBwdWJsaWM6
CiAgICAgVmFsdWVSZXAoS2luZCBraW5kKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFueSB8fCBraW5kID09IENvbGRBbnkgfHwga2lu
ZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNvbWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVF
YXJseVJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFueSB8fCBraW5kID09
IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNvbWVSZWdpc3RlciB8
fCBraW5kID09IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyIHx8IGtpbmQgPT0gU29tZUVhcmx5UmVn
aXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05NTUsMTQgKzk1NSwxMyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogCiAgICAg
ICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwor
ICAgICAgICAgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxs
b2NhdGUoc2NyYXRjaEdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNs
b3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOCArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZklubGluZUNhcGFjaXR5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlLCBtX2lubGluZUNhcGFjaXR5KTsgfQogCiAgICAgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKQotICAgICAgICA6IG1fYWxsb2NhdG9yKDApCi0gICAgICAgICwgbV9pbmxpbmVDYXBh
Y2l0eSgwKQorICAgICAgICA6IG1faW5saW5lQ2FwYWNpdHkoMCkKICAgICB7CiAgICAgfQogCkBA
IC02Myw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAg
ICAgbV9hbGxvY2F0b3IgPSBudWxscHRyOworICAgICAgICBtX2FsbG9jYXRvciA9IEFsbG9jYXRv
cigpOwogICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX2lubGluZUNhcGFj
aXR5ID0gMDsKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKQEAgLTc3LDcgKzc2LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50
KFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSk7CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogbV9hbGxv
Y2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgZ2VuZXJhdGVk
IGNvZGUuCisgICAgQWxsb2NhdG9yIG1fYWxsb2NhdG9yOyAvLyBQcmVjb21wdXRlZCB0byBtYWtl
IHRoaW5ncyBlYXNpZXIgZm9yIGdlbmVyYXRlZCBjb2RlLgogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fc3RydWN0dXJlOwogICAgIHVuc2lnbmVkIG1faW5saW5lQ2FwYWNpdHk7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBPYmplY3RBbGxvY2F0aW9uUHJvZmkKICAgICBBU1NFUlQoaW5saW5lQ2FwYWNpdHkgPD0gSlNG
aW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSk7CiAKICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0
b3IpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2Nh
dG9yKTsKIAogICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBhY2l0eSBh
dmFpbGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpAQCAtMTEz
LDcgKzExMyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmkKIAog
ICAgIGlmIChpc1BvbHlQcm90bykgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5
UHJvdG8oKSk7Ci0gICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxv
Y2F0b3IgPSBBbGxvY2F0b3IoKTsKICAgICAgICAgZXhlY3V0YWJsZS0+c2V0Q2FjaGVkUG9seVBy
b3RvU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChl
eGVjdXRhYmxlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDE1LDEw
ICsxMTQxNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyhOCiAg
ICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uVHlwZSkpKTsKICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwogICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUikpOwotICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKKyAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7CiAKLSAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYWxsb2Nh
dG9yR1BSKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0
KCkpKSk7CiAKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAg
ICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwpAQCAtMTE0NDgsMTQgKzExNDQ4LDE3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIAogICAgIFJlZ2lzdGVy
ZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vi
c3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCpt
X2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGFsbG9jYXRvclB0ciksIGFsbG9jYXRvckdQUik7Ci0gICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigw
KTsKLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgYWxs
b2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2Ny
YXRjaEdQUiwgc2xvd1BhdGgpOwotICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgbV9qaXQubXV0
YXRvckZlbmNlKCptX2ppdC52bSgpKTsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAgICAgYXV0byBtYXNrID0gVHJ1
c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFs
bG9jYXRvciwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIH0KIAogICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVjdHVyZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAko
cmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzEsNyArMTMxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURf
QUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1hY3JvKEFycmF5U3RvcmFnZV92ZWN0b3IsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCksIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSBcCi0gICAgbWFjcm8oQ29tcGxldGVTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgQ29t
cGxldGVTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpLCBzaXplb2YoQmxv
Y2tEaXJlY3RvcnkqKSkgXAorICAgIG1hY3JvKENvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9y
U2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAo
KSwgc2l6ZW9mKEFsbG9jYXRvcikpIFwKICAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfc3RvcmFn
ZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpIFwKICAgICBtYWNybyhKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXMsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JDb250ZW50cywgMCwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmluZz4pKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MzMsMTAgKzU4MzMsMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIEJsb2NrRGlyZWN0b3J5
KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1Jv
cGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAg
IAogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKAotICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgdm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCksIHNs
b3dQYXRoKTsKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoYWxsb2NhdG9yLm9mZnNldCgp
KSwgdm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCksIHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIHJlc3VsdCwgbV9oZWFwcy5KU1N0
cmluZ192YWx1ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1LaWRzOyAr
K2kpCkBAIC05ODYxLDcgKzk4NjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IGhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSog
Y2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9yIGNlbGxBbGxvY2F0b3IgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAg
ICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0
aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4aW5nSGVhZGVyU2l6ZSA9IDA7CkBAIC05OTIwLDcgKzk5MjAsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICAgICAgTFZhbHVlIG1hc2sgPSBjb21wdXRlQnV0dGVyZmx5SW5kZXhpbmdN
YXNrKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1
ZSA9IGFsbG9jYXRlT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihjZWxsQWxsb2NhdG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUsIG1hc2ssIHNs
b3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjZWxsQWxsb2Nh
dG9yLm9mZnNldCgpKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUsIG1hc2ssIHNsb3dQ
YXRoKTsKIAogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3QgPSBtX291
dC5hbmNob3IoZmFzdE9iamVjdFZhbHVlKTsKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CkBAIC0x
MDg5Miw4ICsxMDg5Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAg
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdlID0g
YWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0aCk7
CisgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSks
IHNsb3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0
LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5C
eXRlcyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC0xMTkyNSwxNiArMTE5MjUsMTggQEAgcHJp
dmF0ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUhlYXBDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExC
YXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFjdHVh
bEFsbG9jYXRvciA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludFB0cigp
KQotICAgICAgICAgICAgYWN0dWFsQWxsb2NhdG9yID0gYml0d2lzZV9jYXN0PEJsb2NrRGlyZWN0
b3J5Kj4oYWxsb2NhdG9yLT5hc0ludFB0cigpKTsKKyAgICAgICAgQWxsb2NhdG9yIGFjdHVhbEFs
bG9jYXRvcjsKKyAgICAgICAgaWYgKGFsbG9jYXRvci0+aGFzSW50MzIoKSkKKyAgICAgICAgICAg
IGFjdHVhbEFsbG9jYXRvciA9IEFsbG9jYXRvcihhbGxvY2F0b3ItPmFzSW50MzIoKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IGVpdGhlciB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvciBpcyBudWxsIG9y
IHdlIGRvbid0IGtub3cgd2hhdCB0aGUKICAgICAgICAgICAgIC8vIGFsbG9jYXRvciBpcy4gSW4g
ZWl0aGVyIGNhc2UsIHdlIG5lZWQgdGhlIG51bGwgY2hlY2suCiAgICAgICAgICAgICBMQmFzaWNC
bG9jayBoYXZlQWxsb2NhdG9yID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGhhdmVBbGxvY2F0
b3IpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGFsbG9jYXRvciwgdXN1YWxseShoYXZlQWxs
b2NhdG9yKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoYWxsb2NhdG9yLCBtX291dC5jb25zdEludDMy
KEFsbG9jYXRvcigpLm9mZnNldCgpKSksCisgICAgICAgICAgICAgICAgdXN1YWxseShoYXZlQWxs
b2NhdG9yKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyho
YXZlQWxsb2NhdG9yLCBsYXN0TmV4dCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMTk0NCw3
ICsxMTk0NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChwb2ludGVyVHlwZSgpKTsKICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7Ci0gICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3RlcihhbGxvY2F0b3IpOworICAgICAgICBpZiAoYWN0dWFsQWxsb2Nh
dG9yKQorICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rlcldp
dGhDbG9iYmVyKGFsbG9jYXRvcik7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJl
Z2lzdGVycysrOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVS
ZXA6OlNvbWVFYXJseVJlZ2lzdGVyOwogICAgICAgICAKQEAgLTExOTU1LDYgKzExOTYwLDEyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QganVtcFRvU2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgR1BSUmVnIGFsbG9jYXRvckdQUjsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFs
QWxsb2NhdG9yKQorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JHUFIgPSBwYXJhbXMuZ3BT
Y3JhdGNoKDEpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWxs
b2NhdG9yR1BSID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIC8vIFdlIHVzZSBhIHBhdGNocG9pbnQgdG8gZW1pdCB0aGUgYWxsb2NhdGlvbiBwYXRo
IGJlY2F1c2Ugd2hlbmV2ZXIgd2UgbWVzcyB3aXRoCiAgICAgICAgICAgICAgICAgLy8gYWxsb2Nh
dGlvbiBwYXRocywgd2UgYWxyZWFkeSByZWFzb24gYWJvdXQgdGhlbSBhdCB0aGUgbWFjaGluZSBj
b2RlIGxldmVsLiBXZSBrbm93CiAgICAgICAgICAgICAgICAgLy8gZXhhY3RseSB3aGF0IGluc3Ry
dWN0aW9uIHNlcXVlbmNlIHdlIHdhbnQuIFdlJ3JlIGNvbmZpZGVudCB0aGF0IG5vIGNvbXBpbGVy
CkBAIC0xMTk2Miw3ICsxMTk3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gQXNz
ZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGUoKS4gVGhhdCB3YXksIHRoZSBzYW1lIG9wdGltaXpl
ZCBwYXRoIGlzIHNoYXJlZCBieQogICAgICAgICAgICAgICAgIC8vIGFsbCBvZiB0aGUgY29tcGls
ZXIgdGllcnMuCiAgICAgICAgICAgICAgICAgaml0LmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxs
b2NhdG9yKAotICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMF0uZ3ByKCksIGFjdHVhbEFsbG9j
YXRvciwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXMuZ3BTY3JhdGNoKDApLAorICAgICAgICAgICAg
ICAgICAgICBwYXJhbXNbMF0uZ3ByKCksIGFjdHVhbEFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBw
YXJhbXMuZ3BTY3JhdGNoKDApLAogICAgICAgICAgICAgICAgICAgICBqdW1wVG9TbG93UGF0aCk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1
bXBUb1N1Y2Nlc3M7CkBAIC0xMjA1NCw4ICsxMjA2NSw4IEBAIHByaXZhdGU6CiAgICAgTFZhbHVl
IGFsbG9jYXRlT2JqZWN0KAogICAgICAgICBzaXplX3Qgc2l6ZSwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExWYWx1ZSBpbmRleGluZ01hc2ssIExCYXNpY0Jsb2Nr
IHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgICAgICByZXR1cm4gYWxs
b2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBidXR0
ZXJmbHksIGluZGV4aW5nTWFzaywgc2xvd1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIHJl
dHVybiBhbGxvY2F0ZU9iamVjdChtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSks
IHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVU
eXBlPgpAQCAtMTIwNzQsMTYgKzEyMDg1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb21w
bGV0ZVN1YnNwYWNlKiBhY3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxDb21wbGV0ZVN1YnNw
YWNlKj4oc3Vic3BhY2UtPmFzSW50UHRyKCkpOwogICAgICAgICAgICAgc2l6ZV90IGFjdHVhbFNp
emUgPSBzaXplLT5hc0ludFB0cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBCbG9ja0Rp
cmVjdG9yeSogYWN0dWFsQWxsb2NhdG9yID0gYWN0dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoYWN0dWFsU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OworICAgICAgICAgICAgQWxsb2NhdG9yIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNl
LT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgICAgIGlmICghYWN0dWFsQWxsb2NhdG9yKSB7CiAg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
c2xvd1BhdGgpOwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnRQdHJaZXJvOworICAg
ICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludFB0cihhY3R1YWxBbGxv
Y2F0b3IpOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIoYWN0dWFsQWxsb2Nh
dG9yKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0g
Z2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3RlcCk7CkBAIC0xMjEwMiw3ICsxMjExMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKAorICAg
ICAgICByZXR1cm4gbV9vdXQubG9hZDMyKAogICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KAog
ICAgICAgICAgICAgICAgIG1faGVhcHMuQ29tcGxldGVTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXpl
U3RlcCwKICAgICAgICAgICAgICAgICBzdWJzcGFjZSwgbV9vdXQuc3ViKHNpemVDbGFzc0luZGV4
LCBtX291dC5pbnRQdHJPbmUpKSk7CkBAIC0xMjExNyw4ICsxMjEyOCw3IEBAIHByaXZhdGU6CiAg
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKICAgICAgICAgTFZhbHVlIHNp
emUsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFs
dWUgYnV0dGVyZmx5SW5kZXhpbmdNYXNrLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0g
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAotICAgICAgICAgICAg
KnN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSksIHNpemUsIHNsb3dQYXRoKTsKKyAgICAgICAg
TFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoKnN1YnNwYWNlRm9yPENsYXNzVHlw
ZT4odm0oKSksIHNpemUsIHNsb3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0
KGFsbG9jYXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIGJ1dHRlcmZseUluZGV4aW5nTWFzaywg
c2xvd1BhdGgpOwogICAgIH0KIApAQCAtMTIxMjYsMTUgKzEyMTM2LDE0IEBAIHByaXZhdGU6CiAg
ICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwoCiAgICAgICAgIExWYWx1ZSBzaXpl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKLSAgICAgICAgICAgICpz
dWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CisgICAgICAgIExW
YWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+
KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZUNlbGwoYWxs
b2NhdG9yLCBzdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGFs
bG9jYXRlT2JqZWN0KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKICAgICAg
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLmdldCgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CisgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxK
U0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAg
ICAgLy8gRklYTUU6IElmIHRoZSBhbGxvY2F0b3IgaXMgbnVsbCwgd2UgY291bGQgc2ltcGx5IGVt
aXQgYSBub3JtYWwgQyBjYWxsIHRvIHRoZSBhbGxvY2F0b3IKICAgICAgICAgLy8gaW5zdGVhZCBv
ZiBwdXR0aW5nIGl0IG9uIHRoZSBzbG93IHBhdGguCkBAIC0xMjE0Niw3ICsxMjE1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAgICBtX291
dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIG1f
b3V0LmludDMyWmVybywgc2xvd1BhdGgpKTsKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
YWxsb2NhdG9yLm9mZnNldCgpKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBtX291dC5p
bnQzMlplcm8sIHNsb3dQYXRoKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxs
b2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFs
bG9jYXRpb25GYWlsdXJlTW9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NEZWZl
cnJhbENvbnRleHQ7CitjbGFzcyBWTTsKKworY2xhc3MgQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAg
ICBBbGxvY2F0b3IoKSB7IH0KKyAgICAKKyAgICBBbGxvY2F0b3IodW5zaWduZWQgb2Zmc2V0KQor
ICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQq
IGFsbG9jYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
IGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldCgpOyB9CisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1f
b2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxsb2NhdG9y
LmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBjb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gVGhy
ZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yKHZtLCBtX29mZnNldCkuYWxsb2NhdGUoY29udGV4dCwg
bW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDggKzQzLDYgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWRlRGVzdHJ1Y3Rv
ckJsbwogCiBCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCogaGVhcCwgc2l6ZV90
IGNlbGxTaXplKQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKLSAgICAsIG1fY3VycmVudEJs
b2NrKDApCi0gICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAgICwgbV9jZWxsU2l6ZShzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9oZWFwKGhlYXApCiB7CkBAIC04
MSwxNDMgKzc5LDE0IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW4K
ICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1cnNvcl07CiB9CiAKLXZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCgpCitNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0Rp
cmVjdG9yeTo6ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpCiB7Ci0gICAgaWYgKG1fY3VycmVudEJs
b2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0gICAg
Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsK
LX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rpbmco
KQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAg
ICAKLSAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICBtX2Fs
bG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmlu
ZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgICAgICBpZiAobV9hbGxvY2F0aW9u
Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwg
bV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9
IHRyeUFsbG9jYXRlSW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXSkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0
eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQotICAgICAgICAmJiAodHJhZGVEZXN0cnVjdG9y
QmxvY2tzIHx8ICFuZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAgICAgIGlmIChNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRv
cigpID09IG1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RF
bXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAgICAgICAgLy8gYmVjYXVzZSB0
aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxs
b2NhdGVCdXROb3RFbXB0eQotICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2Ft
ZSB0aW1lLgotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKLSAgICAg
ICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJs
b2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
dm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2spCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jayk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBCbG9j
a0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLXsK
LSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsK
LSAgICAKLSAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwotICAgIAotICAgIC8vIEl0J3Mg
cG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFya2luZyB0
cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAotICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlzIHJhY3kg
YW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmIChtX2ZyZWVMaXN0LmFs
bG9jYXRpb25XaWxsRmFpbCgpKSB7Ci0gICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVlTGlzdGVk
KCkpOwotICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7Ci0gICAg
ICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAgICAgICAgQVNTRVJUKCFpc0Vt
cHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKLSAgICAgICAgQVNTRVJUKCFpc0NhbkFs
bG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOworICAgIG1fYWxs
b2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5k
Qml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fYWxsb2NhdGlvbkN1cnNv
ciA+PSBtX2Jsb2Nrcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAg
ICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAgIHZvaWQqIHJlc3VsdCA9
IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIH0pOwotICAgIHNldElzRWRlbihOb0xvY2tpbmdOZWNlc3Nhcnks
IG1fY3VycmVudEJsb2NrLCB0cnVlKTsKLSAgICBtYXJrZWRTcGFjZSgpLmRpZEFsbG9jYXRlSW5C
bG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgaWYgKCFPcHRpb25zOjpzbG93
UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljIHVu
c2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7Ci0gICAgaWYgKCFhbGxvY2F0aW9uQ291bnQpIHsK
LSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgewotICAgICAgICAgICAgaWYgKGRl
ZmVycmFsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxk
R0MgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faGVhcC0+Y29s
bGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdl
ZW5HQ3MoKSkKLSAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKLX0KLQotdm9pZCogQmxvY2tE
aXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NFUlQobV9oZWFwLT52
bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBkb1Rlc3RDb2xsZWN0
aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQoIW1hcmtlZFNwYWNl
KCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9y
aWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAg
ICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAgICBtX2hlYXAtPmNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKLSAgICAvLyBH
b29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBk
aXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAvLyBoYXBwZW5zIHdo
ZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhl
IEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCi0g
ICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKLSAg
ICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0g
ICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2Nr
KCk7Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2sp
OwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgc2V0SXNDYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29y
LCBmYWxzZSk7CisgICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNvcl07CiB9CiAK
IHN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKQEAgLTMxMywyNCArMTgyLDE5IEBAIHZv
aWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAgICBpZiAoZmFsc2UpCiAg
ICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJlY3Rvcnk6OnN0b3BB
bGxvY2F0aW5nIVxuIik7Ci0gICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7Ci0gICAgaWYg
KCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9u
V2lsbEZhaWwoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9jdXJyZW50
QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1fbGFzdEFjdGl2ZUJsb2Nr
ID0gbV9jdXJyZW50QmxvY2s7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAgIG1fZnJlZUxp
c3QuY2xlYXIoKTsKKyAgICBtX2xvY2FsQWxsb2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAo
TG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5zdG9w
QWxsb2NhdGluZygpOworICAgICAgICB9KTsKIH0KIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cHJl
cGFyZUZvckFsbG9jYXRpb24oKQogewotICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsK
LSAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwot
CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChMb2NhbEFsbG9j
YXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnByZXBhcmVGb3JBbGxv
Y2F0aW9uKCk7CisgICAgICAgIH0pOworICAgIAogICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7
CiAgICAgbV9lbXB0eUN1cnNvciA9IDA7CiAgICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsKQEAgLTM1
NCwxMiArMjE4LDEwIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6Omxhc3RDaGFuY2VUb0ZpbmFsaXoK
IAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2NhdGluZygpCiB7Ci0gICAgaWYgKCFt
X2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0QWN0aXZlQmxv
Y2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBt
X2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CisgICAg
bV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciog
YWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnJlc3VtZUFsbG9jYXRpbmcoKTsK
KyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmJlZ2luTWFya2luZ0ZvckZ1
bGxDb2xsZWN0aW9uKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGly
ZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tE
aXJlY3RvcnkuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsMTAgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCisjaW5jbHVk
ZSAiQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ2VsbEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJG
cmVlTGlzdC5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+CkBAIC00MSw2ICs0Myw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0
OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFz
cyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogCiAjZGVmaW5lIEZPUl9FQUNIX0JMT0NLX0RJUkVD
VE9SWV9CSVQobWFjcm8pIFwKICAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUgc2V0IG9mIGJs
b2NrIGluZGljZXMgdGhhdCBoYXZlIGFjdHVhbCBibG9ja3MuICovXApAQCAtNzYsOSArNzksNiBA
QCBjbGFzcyBCbG9ja0RpcmVjdG9yeSB7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKIAogcHVibGljOgotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlz
dCgpOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwotCiAgICAgQmxv
Y2tEaXJlY3RvcnkoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgdm9pZCBzZXRTdWJzcGFj
ZShTdWJzcGFjZSopOwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKQEAgLTk3LDcg
Kzk3LDYgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAg
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVz
LmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgSGVhcCogaGVhcCgpIHsg
cmV0dXJuIG1faGVhcDsgfQogCiAgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQq
IHRhcmdldCkgY29uc3Q7CkBAIC0xNTcsMjQgKzE1NiwyMCBAQCBwdWJsaWM6CiAgICAgU3Vic3Bh
Y2UqIHN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNw
YWNlJiBtYXJrZWRTcGFjZSgpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVl
TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gQWxsb2NhdG9yKG1fdGxjT2Zmc2V0KTsgfQogICAgIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRT
dHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIExvY2FsQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAgIGZy
aWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNo
ZUxheW91dDsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dD
YXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KTsKLSAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRl
V2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0
ZUJsb2NrKCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7
Ci0gICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQq
KTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CiAg
ICAgCi0gICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0
cnlBbGxvY2F0ZUJsb2NrKCk7CiAgICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUq
PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZnJlZUJsb2NrSW5kaWNlczsKQEAg
LTE5MywxMCArMTg4LDYgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAg
fTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVt
cHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXplX3Qg
bV91bnN3ZXB0Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBp
cyBhIGNhbmRpZGF0ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSog
bV9sYXN0QWN0aXZlQmxvY2s7Ci0KLSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX2Nl
bGxTaXplOwogICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhNRTog
QWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2LDE2ICsx
OTcsMTAgQEAgcHJpdmF0ZToKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5IHsg
bnVsbHB0ciB9OwogICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNl
IHsgbnVsbHB0ciB9OwogICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CisgICAgCisgICAgTG9jayBtX2xvY2FsQWxs
b2NhdG9yc0xvY2s7CisgICAgc2l6ZV90IG1fdGxjT2Zmc2V0OworICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxMb2NhbEFsbG9jYXRvciwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+
PiBtX2xvY2FsQWxsb2NhdG9yczsKIH07CiAKLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJlY3Rv
cnk6Om9mZnNldE9mRnJlZUxpc3QoKQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQmxv
Y2tEaXJlY3RvcnksIG1fZnJlZUxpc3QpOwotfQotCi1pbmxpbmUgcHRyZGlmZl90IEJsb2NrRGly
ZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEJsb2NrRGlyZWN0b3J5LCBtX2NlbGxTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlu
bGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiw2IEBA
IGlubGluZSBib29sIEJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWQKICAgICByZXR1cm4gbV9m
cmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGUoR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQotewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkgLT4g
SGVhcENlbGwqIHsKLSAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkp
OwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93
Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7Ci0gICAgICAgIH0pOwotfQotCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmZv
ckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIG1fbGl2ZS5mb3JFYWNo
U2V0Qml0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVT
dWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwzNSArMzgsMzMg
QEAgQ29tcGxldGVTdWJzcGFjZTo6Q29tcGxldGVTdWJzcGFjZShDU3RyaQogICAgIDogU3Vic3Bh
Y2UobmFtZSwgaGVhcCkKIHsKICAgICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1l
bW9yeUFsbG9jYXRvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXpl
Q2xhc3NlczsgaS0tOykKLSAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxw
dHI7CiB9CiAKIENvbXBsZXRlU3Vic3BhY2U6On5Db21wbGV0ZVN1YnNwYWNlKCkKIHsKIH0KIAot
QmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQogewogICAgIHJl
dHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1vZGUpOwogfQogCi12b2lkKiBDb21w
bGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCog
Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVN
b2RlKQogewotICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250
ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6
ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiB9CiAKLXZvaWQqIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9p
ZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNp
emUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICB2b2lkICpyZXN1bHQ7Ci0gICAgaWYgKEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9y
LT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBpZiAoQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3IuYWxs
b2NhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIGVsc2UKLSAgICAg
ICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3codm0sIHNpemUsIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUJsb2NrRGlyZWN0
b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxs
b2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7
CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7
CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVT
dGVwW2luZGV4XTsKQEAgLTgyLDcgKzgwLDcgQEAgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJz
YWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAog
ICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0pCisgICAgaWYgKEFsbG9jYXRvciBh
bGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKICAgICAgICAgcmV0dXJu
IGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKQEAgLTk4LDcgKzk2LDcgQEAgQmxvY2tEaXJl
Y3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgICAgICBpZiAoTWFya2VkU3BhY2U6
OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdID0gZGlyZWN0
b3J5OworICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeS0+
YWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWluZGV4LS0pCiAgICAgICAgICAg
ICBicmVhazsKQEAgLTExMCwxNyArMTA4LDE3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2EKICAgICByZXR1cm4gZGlyZWN0b3J5OwogfQogCi12b2lkKiBDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KHNpemUsIGRl
ZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KHZtLCBz
aXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0
ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit2
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZtLCBzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICBzYW5pdGl6ZVN0
YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIHNhbml0aXplU3RhY2tGb3JWTSgm
dm0pOwogICAgIAogICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCiAgICAgICAgIHJl
dHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpSZXR1cm5OdWxsKTsKQEAgLTEzMiwxNSArMTMwLDE1IEBAIHZvaWQqIENvbXBsZXRl
U3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFyZ2VB
bGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3Bh
Y2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24g
PSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlzKTsKICAgICBp
ZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIG1fc3Bh
Y2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBtX3NwYWNlLm1f
aGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0ZShzaXplKTsK
ICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xhcmdlQWxsb2Nh
dGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgc3Vi
c3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMiLCBidXQgdGhh
dCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3QsIEFs
bG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxsb2NhdG9yIGFs
bG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOworICAgIEFsbG9j
YXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CiAg
ICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCog
YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFs
Q29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFs
Q29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9CiAgICAgCi0g
ICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2Fs
bG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JTaXpl
U3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAKIHByaXZhdGU6
Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKKyAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAogICAgIC8vIFRoZXNlIHNsb3cg
cGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBhbGxvY2F0b3Ig
Y3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRl
eHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhz
aXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KFZNJiwg
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAg
dm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOwog
ICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFjZTo6bnVtU2l6
ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgc3RkOjphcnJheTxBbGxvY2F0
b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcDsK
ICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0b3J5Pj4gbV9kaXJlY3Rvcmll
czsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9k
ZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICBp
ZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVD
bGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0gbV9hbGxvY2F0
b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07CiAgICAg
ICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1vZGU6Ok11c3RB
bHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7
CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRl
U3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQobW9k
ZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3IpOwotICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJKHJldmlzaW9u
IDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07CiAKIGNsYXNz
IEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7Ci0gICAgCiBw
dWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5GcmVlTGlzdCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNjg5MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNs
dWRlICJTd2VlcGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgog
I2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6
SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhl
YXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkK
ICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRl
KCkpCisgICAgLCBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJl
YWRMb2NhbENhY2hlTGF5b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4
NCw3IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
cjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgU3dlZXBpbmdTY29wZTsKK2Ns
YXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiBjbGFzcyBWTTsKIGNsYXNzIFdlYWtHQ01hcEJh
c2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRlOwpAQCAtMzcyLDYgKzM3Myw4IEBAIHB1Ymxp
YzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2xvdFZp
c2l0b3IoY29uc3QgRnVuYyYpOworICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQmIHRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQoKSB7IHJldHVybiAqbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0
OyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTcx
NCw2ICs3MTcsOCBAQCBwcml2YXRlOgogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9j
dXJyZW50VGhyZWFkU3RhdGUgeyBudWxscHRyIH07CiAgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVu
dFRocmVhZCB7IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGlu
ZyBwb2ludGVyLgorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRMb2NhbENhY2hlTGF5
b3V0PiBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjAgKzUwLDIwIEBAIElzb1N1YnNwYWNlOjp+SXNvU3Vi
c3BhY2UoKQogewogfQogCi1CbG9ja0RpcmVjdG9yeSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZv
cihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQWxsb2NhdG9yIElzb1N1YnNw
YWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsK
ICAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9p
ZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCog
ZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lk
KiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQogewotICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0
LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwg
ZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIElzb1N1
YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVN
b2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICB2
b2lkKiByZXN1bHQgPSBtX2RpcmVjdG9yeS5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZSh2bSwgZGVm
ZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjY4
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JG
b3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOworICAg
IEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlk
ZTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRv
ckZvck1vZGUpOwogCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CkBAIC01NSwxNSArNTUsMTYgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUq
KSBvdmVycmlkZTsKICAgICAKICAgICBzaXplX3QgbV9zaXplOworICAgIEFsbG9jYXRvciBtX2Fs
bG9jYXRvcjsKICAgICBCbG9ja0RpcmVjdG9yeSBtX2RpcmVjdG9yeTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJc29DZWxsU2V0LCBCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0czsKIH07CiAKLWlubGluZSBCbG9ja0RpcmVjdG9y
eSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9j
YXRvckZvck1vZGUpCitpbmxpbmUgQWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICByZXR1cm4gJm1fZGlyZWN0b3J5Owor
ICAgIHJldHVybiBtX2FsbG9jYXRvcjsKIH0KIAogI2RlZmluZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwQ2VsbFR5cGUsIHR5cGUpICgiSXNvbGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhl
YXApLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5cGUpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxv
Y2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKKyAg
ICAsIG1fY2VsbFNpemUoZGlyZWN0b3J5LT5tX2NlbGxTaXplKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2soZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgIGRpcmVj
dG9yeS0+bV9sb2NhbEFsbG9jYXRvcnMuYXBwZW5kKHRoaXMpOworfQorCitMb2NhbEFsbG9jYXRv
cjo6TG9jYWxBbGxvY2F0b3IoTG9jYWxBbGxvY2F0b3ImJiBvdGhlcikKKyAgICA6IG1fZGlyZWN0
b3J5KG90aGVyLm1fZGlyZWN0b3J5KQorICAgICwgbV9jZWxsU2l6ZShvdGhlci5tX2NlbGxTaXpl
KQorICAgICwgbV9mcmVlTGlzdChXVEZNb3ZlKG90aGVyLm1fZnJlZUxpc3QpKQorICAgICwgbV9j
dXJyZW50QmxvY2sob3RoZXIubV9jdXJyZW50QmxvY2spCisgICAgLCBtX2xhc3RBY3RpdmVCbG9j
ayhvdGhlci5tX2xhc3RBY3RpdmVCbG9jaykKK3sKKyAgICBvdGhlci5yZXNldCgpOworICAgIGlm
IChvdGhlci5pc09uTGlzdCgpKSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9k
aXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzTG9jayk7CisgICAgICAgIG90aGVyLnJlbW92ZSgp
OworICAgICAgICBtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnMuYXBwZW5kKHRoaXMpOwor
ICAgIH0KK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6cmVzZXQoKQoreworICAgIG1fZnJlZUxp
c3QuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgbV9sYXN0QWN0
aXZlQmxvY2sgPSBudWxscHRyOworfQorCitMb2NhbEFsbG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9y
KCkKK3sKKyAgICBpZiAoaXNPbkxpc3QoKSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgICAgICByZW1vdmUo
KTsKKyAgICB9CisgICAgCisgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyBhbGxvY2F0b3IgaXNuJ3Qg
aG9sZGluZyBvbnRvIGFueSBtZW1vcnkuIFRoaXMgaXMgYSB2YWxpZCBhc3NlcnRpb24gZm9yIHRo
ZQorICAgIC8vIGZvbGxvd2luZyB0d28gdXNlIGNhc2VzOgorICAgIC8vIAorICAgIC8vIC0gSW1t
b3J0YWwgVExDLiBUaG9zZSBkZXN0cnVjdCBhZnRlciB0aGUgaGVhcCBpcyBkb25lIGRlc3RydWN0
aW5nLCBzbyB0aGV5IHNob3VsZCBub3QgaGF2ZQorICAgIC8vICAgYW55IHN0YXRlIGxlZnQgaW4g
dGhlbS4KKyAgICAvLworICAgIC8vIC0gVExDIG93bmVkIGJ5IGFuIG9iamVjdC4gU3VjaCBhIFRM
QyBnZXRzIGRlc3Ryb3llZCBhZnRlciBhIEdDIGZsaXAgZHVyaW5nIHdoaWNoIHdlIHByb3ZlZAor
ICAgIC8vICAgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGVyZWZvcmUsIHRoZSBUTEMgc2hv
dWxkIHN0aWxsIGJlIGluIGEgZnVsbHkgcmVzZXQgc3RhdGUgYXQgdGhlCisgICAgLy8gICB0aW1l
IG9mIGRlc3RydWN0aW9uIGJlY2F1c2UgZm9yIGl0IHRvIGdldCBpbnRvIGFueSBvdGhlciBzdGF0
ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxsb2NhdGVkCisgICAgLy8gICBpbiBpdCAod2hpY2ggaXMg
aW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mgc3VwcG9zZWRseSB1bnJlYWNoYWJsZSkuCisgICAgUkVM
RUFTRV9BU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9sYXN0QWN0
aXZlQmxvY2spOworfQorCit2b2lkIExvY2FsQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCit7
CisgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9j
aykgeworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxv
Y2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50Qmxv
Y2s7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fZnJlZUxpc3QuY2xlYXIo
KTsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCit7CisgICAg
aWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0QWN0
aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7CisgICAgbV9jdXJyZW50Qmxv
Y2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7
Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3sKKyAg
ICByZXNldCgpOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
ZmFpbHVyZU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOworICAgIEhlYXAmIGhlYXAgPSAqbV9kaXJlY3RvcnktPm1faGVhcDsKKyAgICBBU1NF
UlQoaGVhcC52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBkb1Rl
c3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CisKKyAgICBBU1NFUlQoIW1h
cmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7CisgICAgaGVhcC5kaWRBbGxvY2F0ZShtX2ZyZWVM
aXN0Lm9yaWdpbmFsU2l6ZSgpKTsKKyAgICAKKyAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAg
ICAKKyAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoaGVhcCk7CisKKyAgICBoZWFwLmNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAKKyAgICAvLyBH
b29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBk
aXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKKyAgICAvLyBoYXBwZW5zIHdo
ZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhl
IEdDJ3MgZmluYWxpemF0aW9uLgorICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCisg
ICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAg
ICAKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Cisg
ICAgCisgICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgCisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+dHJ5
QWxsb2NhdGVCbG9jaygpOworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGZhaWx1cmVN
b2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KQorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CisgICAg
cmVzdWx0ID0gYWxsb2NhdGVJbihibG9jayk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0
KCkKK3sKKyAgICBpZiAobV9jdXJyZW50QmxvY2spCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5k
aWRDb25zdW1lRnJlZUxpc3QoKTsKKyAgICAKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpCit7CisgICAgLy8gRklYTUU6IElmIHdlIHdhbnRl
ZCB0aGlzIHRvIGJlIHVzZWQgZm9yIHJlYWwgbXVsdGktdGhyZWFkZWQgYWxsb2NhdGlvbnMgdGhl
biB3ZSB3b3VsZCBoYXZlIHRvCisgICAgLy8gY29tZSB1cCB3aXRoIHNvbWUgY29uY3VycmVuY3kg
cHJvdG9jb2wgaGVyZS4gVGhhdCBwcm90b2NvbCB3b3VsZCBuZWVkIHRvIGJlIGFibGUgdG8gaGFu
ZGxlOgorICAgIC8vCisgICAgLy8gLSBUaGUgYmFzaWMgY2FzZSBvZiBtdWx0aXBsZSBMb2NhbEFs
bG9jYXRvcnMgdHJ5aW5nIHRvIGRvIGFuIGFsbG9jYXRpb25DdXJzb3Igc2VhcmNoIG9uIHRoZQor
ICAgIC8vICAgc2FtZSBiaXR2ZWN0b3IuIFRoYXQgcHJvYmFibHkgbmVlZHMgdGhlIGJpdHZlY3Rv
ciBsb2NrIGF0IGxlYXN0LgorICAgIC8vCisgICAgLy8gLSBUaGUgaGFyZGVyIGNhc2Ugb2Ygc29t
ZSBMb2NhbEFsbG9jYXRvciB0cmlnZ2VyaW5nIGEgc3RlYWwgZnJvbSBhIGRpZmZlcmVudCBCbG9j
a0RpcmVjdG9yeQorICAgIC8vICAgdmlhIGEgc2VhcmNoIGluIHRoZSBBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yJ3MgbGlzdC4gV2hvIGtub3dzIHdoYXQgbG9ja3MgdGhhdCBuZWVkcy4KKyAgICAvLyAK
KyAgICAvLyBPbmUgd2F5IHRvIG1ha2UgdGhpcyB3b3JrIGlzIHRvIGhhdmUgYSBzaW5nbGUgcGVy
LUhlYXAgbG9jayB0aGF0IHByb3RlY3RzIGFsbCBtdXRhdG9yIGxvY2sKKyAgICAvLyBhbGxvY2F0
aW9uIHNsb3cgcGF0aHMuIFRoYXQgd291bGQgcHJvYmFibHkgYmUgc2NhbGFibGUgZW5vdWdoIGZv
ciB5ZWFycy4gSXQgd291bGQgY2VydGFpbmx5IGJlCisgICAgLy8gZm9yIGZvciB1c2luZyBUTEMg
YWxsb2NhdGlvbiBmcm9tIEpJVCB0aHJlYWRzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2MzUKKyAgICAKKyAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgCisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9j
ayk7CisgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIAor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2Rp
cmVjdG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpOworICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9j
YXRlSW4oYmxvY2spKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgaWYgKE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKKyAg
ICAgICAgJiYgKHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyB8fCAhbmVlZHNEZXN0cnVjdGlvbigpKSkg
eworICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+
bV9zdWJzcGFjZS0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJsb2NrLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9kaXJlY3Rvcnkt
Pm1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSBh
cyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBp
cyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxsb2NhdGVC
dXROb3RFbXB0eQorICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2FtZSB0aW1l
LgorICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKKyAgICAgICAgICAg
IG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2Nh
dGVJbihibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQqIExvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGJsb2NrKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4oYmxvY2spOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2spCit7CisgICAgQVNTRVJUKGJsb2NrKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0
ZWQoKSk7CisgICAgCisgICAgYmxvY2stPnN3ZWVwKCZtX2ZyZWVMaXN0KTsKKyAgICAKKyAgICAv
LyBJdCdzIHBvc3NpYmxlIHRvIHN0dW1ibGUgb24gYSBjb21wbGV0ZWx5IGZ1bGwgYmxvY2suIE1h
cmtpbmcgdHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBidXQKKyAgICAvLyB0aGF0IGFsZ29yaXRobSBp
cyByYWN5IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0IHNvbWV0aW1lcy4KKyAgICBpZiAobV9mcmVl
TGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgICAgICBBU1NFUlQoYmxvY2stPmlzRnJl
ZUxpc3RlZCgpKTsKKyAgICAgICAgYmxvY2stPnVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgp
OworICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CisgICAgICAgIEFTU0VS
VCghbV9kaXJlY3RvcnktPmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOworICAg
ICAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5pc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBibG9jaykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgCisgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKKyAgICAKKyAgICB2b2lkKiByZXN1bHQg
PSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9KTsKKyAgICBtX2RpcmVjdG9yeS0+c2V0SXNFZGVuKE5vTG9j
a2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUpOworICAgIG1fZGlyZWN0b3J5LT5t
YXJrZWRTcGFjZSgpLmRpZEFsbG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6ZG9UZXN0Q29sbGVjdGlvbnNJ
Zk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQoreworICAgIGlmICgh
T3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0aW9uQ291bnQgPSAwOworICAgIGlmICghYWxsb2Nh
dGlvbkNvdW50KSB7CisgICAgICAgIGlmICghbV9kaXJlY3RvcnktPm1faGVhcC0+aXNEZWZlcnJl
ZCgpKSB7CisgICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQorICAgICAgICAgICAgICAg
IGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9kaXJlY3RvcnktPm1faGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xs
ZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICB9CisgICAgfQorICAgIGlmICgrK2FsbG9jYXRp
b25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKKyAgICAgICAg
YWxsb2NhdGlvbkNvdW50ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlzdC5oIgorI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKK2NsYXNzIEdDRGVmZXJyYWxD
b250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsQWxs
b2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9y
eSopOworICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOworICAgIH5Mb2NhbEFs
bG9jYXRvcigpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKKyAg
ICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5n
KCk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCByZXNldCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uo
R0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwor
ICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZygpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSopOworICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxD
b250ZXh0Kik7CisKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9kaXJlY3Rvcnk7CisgICAgdW5zaWdu
ZWQgbV9jZWxsU2l6ZTsKKyAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OworICAgIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrIHsgbnVsbHB0ciB9OworfTsKKworaW5saW5lIHB0cmRp
ZmZfdCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCit7CisgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihMb2NhbEFsbG9jYXRvciwgbV9mcmVlTGlzdCk7Cit9CisKK2lubGluZSBw
dHJkaWZmX3QgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKQoreworICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTG9jYWxBbGxvY2F0b3IsIG1fY2VsbFNpemUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxB
bGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5FIHZvaWQqIExvY2FsQWxsb2NhdG9yOjphbGxvY2F0
ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAg
ICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZN
KG1fZGlyZWN0b3J5LT5oZWFwKCktPnZtKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKSk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKICNpbmNsdWRl
ICJBbGxvY2F0b3JGb3JNb2RlLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
TWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KQEAgLTU2LDggKzU3LDggQEAgcHVibGljOgogICAgIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAgdm9pZCBkZXN0cm95
KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JG
b3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkKiBhbGxv
Y2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9
IDA7CisgICAgdmlydHVhbCBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9y
Rm9yTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoVk0mLCBzaXplX3QsIEdD
RGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7CiAgICAgCiAgICAg
dm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2Fs
Q2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBU
aHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworfQorCitUaHJlYWRMb2NhbENhY2hlOjpU
aHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKK3sKKyAgICBt
X2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExv
Y2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Cit9CisKK1RocmVhZExvY2Fs
Q2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCit7CisgICAgc2l6
ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOworICAgIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENhY2hlTGF5
b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAgICBEYXRhKiByZXN1bHQgPSBmYXN0TWFsbG9jKE9C
SkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpICsgbGF5b3V0LnNpemUpOworICAgIHJlc3Vs
dC0+c2l6ZSA9IGxheW91dC5zaXplOworICAgIHJlc3VsdC0+Y2FjaGUgPSB0aGlzOworICAgIGZv
ciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yo
TG9jYWxBbGxvY2F0b3IpKQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0
KSkgKFdURk1vdmUoYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCkpKTsKKyAgICBmb3IgKHNpemVf
dCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBsYXlvdXQuc2l6ZTsgb2Zmc2V0ICs9IHNpemVv
ZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZz
ZXQpKSAobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcild
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ry
b3lEYXRhKERhdGEqIGRhdGEpCit7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0
IDwgZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAg
IGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBmYXN0RnJl
ZShkYXRhKTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0p
Cit7CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2VGbGFnLAorICAgICAg
ICBbXSAoKSB7CisgICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwgZGVzdHJ1
Y3Rvcik7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgCisgICAgcmVmKCk7CisgICAgCisgICAg
UmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG9sZENhY2hlID0gZ2V0KHZtKTsKKyAgICBvbGRDYWNo
ZS0+ZGVyZWYoKTsKKyAgICAKKyAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKK30KKwordm9p
ZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsRGF0YShWTSYgdm0sIERhdGEqIGRhdGEpCit7Cisj
aWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIF9wdGhy
ZWFkX3NldHNwZWNpZmljX2RpcmVjdCh0bHNLZXksIGRhdGEpOworI2Vsc2UKKyAgICB2bS50aHJl
YWRMb2NhbENhY2hlID0gZGF0YTsKKyNlbmRpZgorfQorCitMb2NhbEFsbG9jYXRvciYgVGhyZWFk
TG9jYWxDYWNoZTo6YWxsb2NhdG9yU2xvdyhWTSYgdm0sIHNpemVfdCBvZmZzZXQpCit7CisgICAg
RGF0YSogb2xkRGF0YSA9IG1fZGF0YTsKKyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKKyAg
ICBkZXN0cm95RGF0YShvbGREYXRhKTsKKyAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPCBtX2RhdGEtPnNpemUpOworICAgIHJldHVybiBhbGxv
Y2F0b3IoKm1fZGF0YSwgb2Zmc2V0KTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjpkZXN0
cnVjdG9yKHZvaWQqIGFyZykKK3sKKyAgICBpZiAoIWFyZykKKyAgICAgICAgcmV0dXJuOworICAg
IERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oYXJnKTsKKyAgICBkYXRhLT5jYWNoZS0+
ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0VExTLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZExvY2FsQ2FjaGU+IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShUaHJlYWRMb2NhbENhY2hlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGNy
ZWF0ZShIZWFwJik7CisgICAgCisgICAgflRocmVhZExvY2FsQ2FjaGUoKTsKKworICAgIHN0YXRp
YyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gZ2V0KFZNJik7CisgICAgCisgICAgLy8gVGhpcyBp
cyBkZXNpZ25lZCB0byBiZSBmYXN0IGVub3VnaCB0aGF0IHlvdSBjb3VsZCBldmVuIGNhbGwgaXQg
YmVmb3JlIGV2ZXJ5IGFsbG9jYXRpb24sIGJ5CisgICAgLy8gb3B0aW1pemluZyBmb3IgdGhlIGNh
c2UgdGhhdCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlzIGFscmVhZHkg
aW5zdGFsbGVkLiBUaGlzCisgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVy
IG9mIGNhY2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRjaCBjb21iaW5l
ZAorICAgIC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZlIGNvbnRleHQg
c3dpdGNoZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4KKyAgICB2b2lk
IGluc3RhbGwoVk0mKTsKKyAgICAKKyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRv
cihWTSYsIHNpemVfdCBvZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGaXJzdEFsbG9jYXRvcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0
b3IpOyB9CisgICAgCitwcml2YXRlOgorICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYpOworICAg
IAorICAgIHN0cnVjdCBEYXRhIHsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIFRocmVh
ZExvY2FsQ2FjaGUqIGNhY2hlOworICAgICAgICBMb2NhbEFsbG9jYXRvciBhbGxvY2F0b3JbMV07
CisgICAgfTsKKworICAgIHN0YXRpYyBEYXRhKiBnZXRJbXBsKFZNJik7CisgICAgCisgICAgRGF0
YSogYWxsb2NhdGVEYXRhKCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveURhdGEoRGF0YSopOwor
ICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKERhdGEmIGRhdGEsIHNpemVfdCBv
ZmZzZXQpOworCisgICAgdm9pZCBpbnN0YWxsU2xvdyhWTSYpOworICAgIHN0YXRpYyB2b2lkIGlu
c3RhbGxEYXRhKFZNJiwgRGF0YSopOworICAgIAorICAgIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0
b3JTbG93KFZNJiwgc2l6ZV90IG9mZnNldCk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZGVzdHJ1
Y3Rvcih2b2lkKik7CisgICAgCisgICAgLy8gV2hlbiBpbnN0YWxsZWQsIHdlIHJlZigpIHRoZSBj
YWNoZS4gVW5pbnN0YWxsaW5nIGRlcmVmKClzIHRoZSBjYWNoZS4gVExTIGRlc3RydWN0aW9uIGRl
cmVmKClzCisgICAgLy8gdGhlIGNhY2hlLiBXaGVuIHRoZSBjYWNoZSBpcyBkZXN0cnVjdGVkLCBp
dCBuZWVkcyB0byByZXR1cm4gYWxsIG9mIGl0cyBzdGF0ZSB0byB0aGUgR0MuIEkKKyAgICAvLyB0
aGluayB0aGF0IGp1c3QgbWVhbnMgc3RvcEFsbG9jYXRpbmcoKSwgYnV0IHdpdGggc29tZSBzZXJp
b3VzbHkgaGVhdnkgY2F2ZWF0cyBoYXZpbmcgdG8gZG8KKyAgICAvLyB3aXRoIHdoZW4gaXQncyB2
YWxpZCB0byBtYWtlIHRoYXQgY2FsbC4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgUkVMRUFTRV9B
U1NFUlQgdGhhdCB0aGUgY2FjaGUKKyAgICAvLyBpcyBlbXB0eSB3aGVuIHdlIGRlc3RydWN0IGl0
LiBUaGlzIGlzIGNvcnJlY3QgZm9yIGNhY2hlcyB0aGF0IGFyZSBrZXB0IGxpdmUgYnkgR0Mgb2Jq
ZWN0cyBhbmQKKyAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGltbW9ydGFsIGNhY2hlcy4KKyAgICBI
ZWFwJiBtX2hlYXA7CisgICAgRGF0YSogbV9kYXRhOworCisjaWYgRU5BQkxFKEZBU1RfVExTX0pJ
VCkKKyAgICBzdGF0aWMgY29uc3QgcHRocmVhZF9rZXlfdCB0bHNLZXkgPSBXVEZfR0NfVExDX0tF
WTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUaHJlYWRMb2NhbENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUaHJlYWRMb2NhbENh
Y2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlOjpnZXRJbXBsKFZNJiB2bSkKK3sKKyNpZiBFTkFC
TEUoRkFTVF9UTFNfSklUKQorICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PERhdGEqPihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QodGxzS2V5KSk7CisjZWxz
ZQorICAgIHJldHVybiB2bS50aHJlYWRMb2NhbENhY2hlOworI2VuZGlmCit9CisKK1JlZlB0cjxU
aHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpnZXQoVk0mIHZtKQoreworICAgIFRo
cmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsKKyAgICBpZiAoZGF0YSkK
KyAgICAgICAgcmV0dXJuIGRhdGEtPmNhY2hlOworICAgIHJldHVybiBudWxscHRyOworfQorCit2
b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGwoVk0mIHZtKQoreworICAgIGlmIChnZXRJbXBs
KHZtKS0+Y2FjaGUgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIGluc3RhbGxTbG93KHZt
KTsKK30KKworTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihWTSYg
dm0sIHNpemVfdCBvZmZzZXQpCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9
IGdldEltcGwodm0pOworICAgIGlmIChMSUtFTFkob2Zmc2V0IDwgZGF0YS0+c2l6ZSkpCisgICAg
ICAgIHJldHVybiBhbGxvY2F0b3IoKmRhdGEsIG9mZnNldCk7CisgICAgcmV0dXJuIGRhdGEtPmNh
Y2hlLT5hbGxvY2F0b3JTbG93KG9mZnNldCk7Cit9CisKK0xvY2FsQWxsb2NhdG9yJiBUaHJlYWRM
b2NhbENhY2hlOjphbGxvY2F0b3IoRGF0YSYgZGF0YSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gKmJpdHdpc2VfY2FzdDxMb2NhbEFsbG9jYXRvcio+KGJpdHdpc2VfY2FzdDxjaGFyKj4o
JmRhdGEuYWxsb2NhdG9yWzBdKSArIG9mZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2Nh
bENhY2hlTGF5b3V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgiCisK
KyNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVGhyZWFk
TG9jYWxDYWNoZUxheW91dDo6VGhyZWFkTG9jYWxDYWNoZUxheW91dCgpCit7Cit9CisKK1RocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ6On5UaHJlYWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKwordm9p
ZCBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjphbGxvY2F0ZU9mZnNldChCbG9ja0RpcmVjdG9yeSog
ZGlyZWN0b3J5KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBk
aXJlY3RvcnktPm1fdGxjT2Zmc2V0ID0gbV9zaXplOworICAgIG1fc2l6ZSArPSBzaXplb2YoTG9j
YWxBbGxvY2F0b3IpOworICAgIG1fZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Cit9CisK
K1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6
OmRpcmVjdG9yaWVzKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgU25hcHNob3QgcmVzdWx0OworICAgIHJlc3VsdC5zaXplID0gbV9zaXplOworICAgIHJlc3Vs
dC5kaXJlY3RvcmllcyA9IG1fZGlyZWN0b3JpZXM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQmxvY2tEaXJl
Y3Rvcnk7CisKKy8vIEVhY2ggSGVhcCBoYXMgYSBUaHJlYWRMb2NhbENhY2hlTGF5b3V0IHRoYXQg
aGVscHMgdXMgZmlndXJlIG91dCBob3cgdG8gYWxsb2NhdGUgYSBUaHJlYWRMb2NhbENhY2hlCisv
LyBmb3IgdGhhdCBIZWFwLgorCitjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRMb2NhbENhY2hlTGF5b3V0KTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1YmxpYzoKKyAgICBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0KCk7CisgICAgflRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKTsKKworICAgIC8vIEJsb2NrRGly
ZWN0b3J5IGNhbGxzIHRoaXMgZHVyaW5nIGNyZWF0aW9uIGFuZCB0aGlzIGZpbGxzIGluIEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXQuCisgICAgdm9pZCBhbGxvY2F0ZU9mZnNldChCbG9ja0RpcmVjdG9y
eSopOworICAgIAorICAgIHN0cnVjdCBTbmFwc2hvdCB7CisgICAgICAgIHNpemVfdCBzaXplOwor
ICAgICAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBkaXJlY3RvcmllczsKKyAgICB9CisgICAg
CisgICAgU25hcHNob3Qgc25hcHNob3QoKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9j
ayBtX2xvY2s7CisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBWZWN0b3I8QmxvY2tEaXJl
Y3RvcnkqPiBtX2RpcmVjdG9yaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4Miw2ICs1ODIsOTUgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTQogfQogI2VuZGlmCiAKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBB
bGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5
IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNo
CisgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCisgICAgICAgIAorICAgIGlmIChPcHRpb25zOjpmb3Jj
ZUdDU2xvd1BhdGhzKCkpIHsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIEp1bXAgcG9wUGF0aDsKKyAgICBKdW1w
IGRvbmU7CisgICAgCisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBsb2FkRnJvbVRMU1B0
cihmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9HQ19UTENfS0VZKSwgc2NyYXRjaEdQUik7CisjZWxz
ZQorICAgIGxvYWRQdHIoJnZtKCkudGhyZWFkTG9jYWxDYWNoZURhdGEsIHNjcmF0Y2hHUFIpOwor
I2VuZGlmCisgICAgaWYgKGFsbG9jYXRvcikKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mRmlyc3RBbGxvY2F0b3IoKSArIGFsbG9j
YXRvci5vZmZzZXQoKSksIGFsbG9jYXRvckdQUik7CisgICAgZWxzZQorICAgICAgICBsb2FkUHRy
KEJhc2VJbmRleChzY3JhdGNoR1BSLCBhbGxvY2F0b3JHUFIsIFRpbWVzT25lLCBUaHJlYWRMb2Nh
bENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworCisgICAg
bG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVl
TGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOworICAg
IHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKKyAgICBpZiAoYWxsb2Nh
dG9yKQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSks
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChpc1g4Nigp
KSB7CisgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2Vs
bFNpemUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6
ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdWIzMihyZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICB9CisgICAgfQorICAgIG5lZ1B0cihyZXN1bHRHUFIp
OworICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmco
KSkpOworICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwg
TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBh
eWxvYWRFbmQoKSk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIGFkZFB0cihwYXlsb2FkRW5k
QWRkciwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5k
QWRkciwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OworICAgIH0KKyAgICAgICAgCisgICAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgcG9w
UGF0aC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9y
R1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNl
dE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAg
ICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOworICAg
IGVsc2UgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAg
fQorICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwor
ICAgICAgICAKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdo
YXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0CisgICAgLy8gaXQncyBzdGlsbCBvbiB0
aGUgR0MncyBmcmVlIGxpc3QuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0
Y2hHUFIpOworICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBM
b2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2Ny
YW1ibGVkSGVhZCgpKSk7CisgICAgICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0
b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQoreworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbTMyKC0xKSkp
OworICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQUiwgYWxsb2Nh
dG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKK30KKwordm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwg
Q29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVn
IHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sK
KyAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNl
OjpzaXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIg
b2YgdHdvLiIpOworICAgIAorICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJr
ZWRTcGFjZTo6c2l6ZVN0ZXApOworICAgIAorICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKKyAgICB1
cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIxKTsKKyAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1tMzIoTWFy
a2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBzY3JhdGNoR1BSMik7
CisgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIFRpbWVzRm91
ciksIHNjcmF0Y2hHUFIxKTsKKyAgICAKKyAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBudWxs
cHRyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKK30KKwogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExF
RV9TQVZFU19SRUdJU1RFUlMgPiAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw2ICs1OSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJu
IG1fY29kZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fY29kZUJsb2NrLT52bSgp
OyB9CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxl
cjsgfQogCiAgICAgdm9pZCBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpCkBAIC0xNDkyLDc5
ICsxNDkzLDE5IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0
aGUgdmFsdWUgaGVsZCBpbiBhbGxvY2F0b3JHUFIgaXMgbm9uLW51bGwuIFRoaXMgRE9FUyBOT1Qg
bWVhbgogICAgIC8vIHRoYXQgYWxsb2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3IgY2FuIGJl
IG51bGwgYXMgYSBzaWduYWwgdGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgLy8gdmFs
dWUgb2YgYWxsb2NhdG9yR1BSIGlzLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxB
bGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkK
LSAgICB7Ci0gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhh
dCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCi0gICAgICAgIC8vIHJl
Z2lzdGVyIHVzYWdlLgotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93
UGF0aHMoKSkgewotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEp1bXAgcG9wUGF0aDsK
LSAgICAgICAgSnVtcCBkb25lOwotICAgICAgICAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBwb3BQYXRoID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChhbGxvY2F0b3IpCi0gICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSksIHJlc3Vs
dEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGlzWDg2
KCkpIHsKLSAgICAgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgc3ViMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5Ojpv
ZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9y
eTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3Vi
MzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBuZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3Jh
dGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJl
ZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7Ci0gICAgICAgIEFkZHJl
c3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6
Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7Ci0g
ICAgICAgIGlmIChpc1g4NigpKQotICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCBy
ZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRQdHIocGF5bG9hZEVu
ZEFkZHIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3Vs
dEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvbmUgPSBqdW1wKCk7Ci0gICAg
ICAgIAotICAgICAgICBwb3BQYXRoLmxpbmsodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgaWYgKGlzWDg2KCkpCi0gICAgICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0
T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxp
c3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICB4b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgfQotICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIpKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3
ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKLSAgICAgICAgLy8gaXQncyBzdGlsbCBvbiB0
aGUgR0MncyBmcmVlIGxpc3QuCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0
b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zm
c2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICB9CisgICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJS
ZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAKLSAgICB2b2lkIGVt
aXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBH
UFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQotICAgIHsKLSAgICAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxvY2F0b3JHUFIpKTsKLSAgICAgICAgZW1pdEFs
bG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0
ZShHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9y
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlND
ZWxsKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBh
bGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwg
SnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKEdQUlJlZyBy
ZXN1bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVj
dHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxv
Y2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgZW1pdFN0b3JlU3RydWN0
dXJlV2l0aFR5cGVJbmZvKHN0cnVjdHVyZSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3Rv
cmFnZVR5cGUsIHR5cGVuYW1lIE1hc2tUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2Us
IE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisg
ICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3Ig
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwg
U3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1
bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1
bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNs
b3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoc3RvcmFnZSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtMTU3NiwxMiArMTUxNywxMSBAQCBwdWJs
aWM6CiAgICAgICAgIFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNo
R1BSMSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgsIHNp
emVfdCBzaXplKQogICAgIHsKLSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAg
aWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSMSwgc3RydWN0dXJlLCBzdG9yYWdlLCBt
YXNrLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTE1OTMsMjAgKzE1
MzMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gYWxsb2NhdGlvblNpemUgY2FuIGJlIGFsaWFz
ZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGlucHV0IEdQUnMuIElmIGl0J3Mgbm90IGFsaWFzZWQg
dGhlbiBpdAogICAgIC8vIHdvbid0IGJlIGNsb2JiZXJlZC4KLSAgICB2b2lkIGVtaXRBbGxvY2F0
ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3Bh
Y2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkp
LCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBnZXRMU0JTZXQoTWFya2VkU3BhY2U6
OnNpemVTdGVwKTsKLSAgICAgICAgCi0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMihzdGVwU2hpZnQpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJ
bW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYgPj4gc3RlcFNoaWZ0KSkpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMSwgdGltZXNQdHIoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgCi0gICAgICAgIGVt
aXRBbGxvY2F0ZShyZXN1bHRHUFIsIG51bGxwdHIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwg
c2xvd1BhdGgpOwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BS
UmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0
aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0
JiBzbG93UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBl
bmFtZSBTdHJ1Y3R1cmVUeXBlPgogICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENl
bGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BS
UmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BS
MiwgSnVtcExpc3QmIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03OSw3ICs3OSw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRp
bWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYg
dm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
LSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0
KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg3LDcg
Kzg3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgbnVsbHB0ciwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIWJhc2UpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFz
ZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNl
ID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHBy
b3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAg
ICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIW5ld0Jhc2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSBh
IG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6OmFsbG9jYXRpb25T
aXplKGNhcGFjaXR5KTsKLSAgICAgICAgdm9pZCogZGF0YSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgbnVsbHB0ciwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCogZGF0YSA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwg
YWxsb2NhdGlvblNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVs
bCk7CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyNjg5MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAz
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC04MSw3ICs4MSwxMCBAQCBKU0Fy
cmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAgICAgICB8fCBoYXND
b250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBp
bml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBv
dXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwp
OworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sCisgICAgICAgICAgICBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwKKyAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0
ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyAr
MTAxLDEwIEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICB9
IGVsc2UgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhCaWFzID0gMDsKICAg
ICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9y
TGVuZ3RoKGluZGV4Qmlhcywgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9p
ZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmly
dHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiB0ZW1w
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAor
ICAgICAgICAgICAgdm0sCisgICAgICAgICAgICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJp
YXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpKSwKKyAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21C
YXNlKHRlbXAsIGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC0zNjgsNyArMzc0LDgg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShjb25zdAogICAgICAgICBhbGxv
Y2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9j
QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVh
bChuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwor
ICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwgbmV3U2l6ZSwgbnVsbHB0ciwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFuZXdBbGxvY0Jh
c2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0
eSA9IGRlc2lyZWRDYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjM4LDYgKzIzOCw3IEBAIGlubGluZSBKU0FycmF5
KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwg
dmVjdG9yTGVuZ3RoSGludCk7CiAgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwKICAg
ICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUs
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLAogICAgICAgICAgICAgbnVs
bHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCF0
ZW1wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGlu
ZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDE0ICsxNDUsMTUgQEAgQ29t
cGxldGVTdWJzcGFjZSogSlNDZWxsOjpzdWJzcGFjZUZvcihWTQogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIEFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmIGhlYXAs
IHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CisgICAgVk0mIHZtID0gKmhlYXAudm0oKTsK
ICAgICBBU1NFUlQoZGVmZXJyYWxDb250ZXh0IHx8ICFEaXNhbGxvd0dDOjppc0luRWZmZWN0T25D
dXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChzaXplID49IHNpemVvZihUKSk7Ci0gICAgSlND
ZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52
bSgpKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpKTsKKyAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNl
Rm9yPFQ+KHZtKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQs
IGZhaWx1cmVNb2RlKSk7CiAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6UmV0dXJuTnVsbCAmJiAhcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNp
ZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0aWFs
aXppbmdPYmplY3QoKSk7Ci0gICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFz
cyhUOjppbmZvKCkpOworICAgIEFTU0VSVCghdm0uaXNJbml0aWFsaXppbmdPYmplY3QoKSk7Cisg
ICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKICNlbmRpZgogICAg
IHJlc3VsdC0+Y2xlYXJTdHJ1Y3R1cmUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNyArMzQyLDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZW5xdQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKLUpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSog
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3Qo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gdGhy
ZWFkTG9jYWxDYWNoZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgMCkKICAgICAsIG1fdm0o
dm0pCiAgICAgLCBtX21hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KGFkb3B0UmVmKG5l
dyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpKQpAQCAtMzYwLDYgKzM2MCw3IEBAIEpTR2xvYmFs
T2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFMKICAgICAsIG1fdGVtcGxhdGVSZWdpc3Ry
eSh2bSkKICAgICAsIG1fcnVudGltZUZsYWdzKCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA6
ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorICAgICwgbV90aHJlYWRMb2NhbENhY2hlKHRo
cmVhZExvY2FsQ2FjaGUgPyBXVEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUpIDogdm0uZGVmYXVsdFRo
cmVhZExvY2FsQ2FjaGUpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDkxLDcgKzQ5MSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSdW50aW1lRmxhZ3MmIHJ1bnRpbWVG
bGFncygpIGNvbnN0IHsgcmV0dXJuIG1fcnVudGltZUZsYWdzOyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVy
ZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+ID0gbnVs
bHB0cik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
CiAKQEAgLTg5Myw2ICs4OTMsOCBAQCBwdWJsaWM6CiAgICAgSlNXcmFwcGVyTWFwKiB3cmFwcGVy
TWFwKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyTWFwLmdldCgpOyB9CiAgICAgdm9pZCBzZXRX
cmFwcGVyTWFwKEpTV3JhcHBlck1hcCogbWFwKSB7IG1fd3JhcHBlck1hcCA9IG1hcDsgfQogI2Vu
ZGlmCisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSYgdGhyZWFkTG9jYWxDYWNoZSgpIGNvbnN0
IHsgcmV0dXJuICptX3RocmVhZExvY2FsQ2FjaGUuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAg
IHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewpAQCAtOTMwLDYgKzkzMiw4IEBAIHByaXZhdGU6
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBSZXRhaW5QdHI8SlNXcmFwcGVyTWFwPiBt
X3dyYXBwZXJNYXA7CiAjZW5kaWYKKyAgICAKKyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4g
bV90aHJlYWRMb2NhbENhY2hlOwogfTsKIAogSlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2JqZWN0
KEpTVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBKU0xvY2s6OmRp
ZEFjcXVpcmVMb2NrKCkKIAogICAgIG1fdm0tPnNldExhc3RTdGFja1RvcCh0aHJlYWQuc2F2ZWRM
YXN0U3RhY2tUb3AoKSk7CiAgICAgQVNTRVJUKHRocmVhZC5zdGFjaygpLmNvbnRhaW5zKG1fdm0t
Pmxhc3RTdGFja1RvcCgpKSk7Ci0KKyAgICAKICAgICBtX3ZtLT5oZWFwLm1hY2hpbmVUaHJlYWRz
KCkuYWRkQ3VycmVudFRocmVhZCgpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBXYXNt
OjpzdGFydFRyYWNraW5nQ3VycmVudFRocmVhZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgzLDYgKzM4Myw5IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgIAogICAgIEdp
Z2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNh
YmxlZENhbGxiYWNrLCB0aGlzKTsKKyAgICAKKyAgICBkZWZhdWx0VGhyZWFkTG9jYWxDYWNoZSA9
IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShoZWFwKTsKKyAgICBkZWZhdWx0VGhyZWFkTG9jYWxD
YWNoZS0+aW5zdGFsbCgqdGhpcyk7CiAKICAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVjdCgp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjY4
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgi
CiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKKyNpbmNs
dWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+
CkBAIC02NTYsNiArNjU3LDExIEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBzdHJpbmdSZWN1
cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsgbnVsbHB0ciB9OwogICAgIEhhc2hTZXQ8SlNPYmplY3Qq
PiBzdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzOworICAgIAorI2lmICFFTkFCTEUo
RkFTVF9UTFNfSklUKQorICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIHRocmVhZExvY2FsQ2Fj
aGVEYXRhOworI2VuZGlmCisgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGRlZmF1bHRUaHJl
YWRMb2NhbENhY2hlOwogCiAgICAgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUgbG9jYWxUaW1lT2Zmc2V0
Q2FjaGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRy
eVNjb3BlLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAg
Vk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAgIDogbV92bSh2bSkK
ICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKKyAgICBnbG9iYWxPYmplY3Qt
PnRocmVhZExvY2FsQ2FjaGUoKS0+aW5zdGFsbCh2bSk7CiAgICAgQVNTRVJUKCFEaXNhbGxvd1ZN
UmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsKICAgICBBU1NFUlQoVGhyZWFk
OjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKICAgICBpZiAoIXZtLmVu
dHJ5U2NvcGUpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331352</attachid>
            <date>2018-01-15 12:14:17 -0800</date>
            <delta_ts>2018-01-19 15:27:56 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>140235</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDYg
KzQ2Niw3IEBAIGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAogaGVh
cC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAoraGVhcC9BbGxvY2F0b3IuY3BwCiBoZWFwL0Js
b2NrRGlyZWN0b3J5LmNwcAogaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAKIGhlYXAvQ2VsbENvbnRh
aW5lci5jcHAKQEAgLTUwMCw2ICs1MDEsNyBAQCBoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lz
b1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxv
Y2F0aW9uLmNwcAoraGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmNwcApAQCAtNTE4LDYgKzUyMCw4IEBAIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAvVGhyZWFkTG9jYWxD
YWNoZS5jcHAKK2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM4OSw2ICszODksMTIgQEAKIAkJMEY3MjVDQUExQzUwM0RFRDAwQUQ5NDNBIC8q
IEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovOyB9OwogCQkwRjcy
NUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUUxQzUwNkQzQjAwQUQ5
NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsKIAkJMEY3NEI5M0IxRjg5NjE0ODAw
QjkzNUQzIC8qIFByb3RvdHlwZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVB
MDVFMjAwRDI1RjYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRv
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLzsg
fTsKKwkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NzIwMEQyNUYw
MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjc1QTA2MjIwMEQyNjFEMDAzOEUyQ0YgLyogQWxsb2Nh
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLzsgfTsK
KwkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNG
IC8qIEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzVBMDY0MjAwRDI2MjgwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDJDMTVBOEND
M0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZE
MkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDMxMTVBQTgxMTIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI0MjAsNiArMjQyNiwxNiBAQAogCQkwRjcyNUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xk
UGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0Eg
LyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVEMyAv
KiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90
eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU1MjAwRDI1
RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1ODIw
MEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2FsQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUEyMDBEMjVGMDAwMzhF
MkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDVDMjAwRDI1
RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0Ug
LyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
U3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4
Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NDIsNiArNTU1OCwxNiBAQAog
CQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFs
bG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2Nh
dG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0
b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuY3BwICovLAorCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2Nh
bENhY2hlLmggKi8sCisJCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAorCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5
QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0
MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEEx
REI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtODA1MSw2ICs4MDc3
LDcgQEAKIAkJCQkwRjJBQzU3MTFFOEVFNDU0MDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVBMDYxMjAwRDI2MTgwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0ExQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtODIxNiw2ICs4MjQzLDcgQEAKIAkJCQkwRjZCOEFERDFDNEVG
QUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
RkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REYyMUJFOTNB
RDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC04Mzg1LDYgKzg0MTMsNyBAQAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBG
OTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgx
MjFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8q
IEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3
IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAw
QkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtODY2NSw2ICs4Njk0LDcgQEAKIAkJCQlGRUEwQzQwMzFDREQ3RDFEMDA0ODE5OTEg
LyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QkUyQ0FFMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIw
OCAvKiBHQ0NvbmR1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDc2N0UxRDk5QUVBOTAw
OEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTg3NDksNiAr
ODc3OSw3IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVy
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1
MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVB
MDYyMjAwRDI2MUQwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkJGOTJCOTFGRDc2RkZGMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkY5MkJBMUZENzcwMDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNSw2ICs4OTY2LDcg
QEAKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8q
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMUUx
ODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3Nyw2ICsxMjc3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAg
YXJnID0gdG1wKHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6IHsKKyAgICAgICAg
ICAgICAgICBUbXAgZHN0VG1wID0gbV9jb2RlLm5ld1RtcCh2YWx1ZS52YWx1ZSgpLT5yZXN1bHRC
YW5rKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUu
dmFsdWUoKS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUudmFsdWUoKSksIGRzdFRtcCk7CisgICAg
ICAgICAgICAgICAgYXJnID0gZHN0VG1wOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgc3RhY2ttYXAt
PmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodmFsdWUucmVwKCkucmVnKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgYm9vbCBQYXRjaHBvaW50
U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdAogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0Fy
Z3VtZW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENs
b2JiZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJl
Z2lzdGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDkgQEAg
dm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6Q29uc3RhbnQ6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlRGVmOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lz
dGVyOgogICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMjgsNiArMTMxLDEwIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JF
YWNoQXJnSW1wbCgKICAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gcmVjb3ZlciB0aGUgc3RhY2tt
YXAgdmFsdWUuIFNvLCBmb3JjZSBMYXRlQ29sZFVzZSB0byBwcmVzZXJ2ZSB0aGUKICAgICAgICAg
ICAgIC8vIG9yaWdpbmFsIHN0YWNrbWFwIHZhbHVlIGFjcm9zcyB0aGUgU3BlY2lhbCBvcGVyYXRp
b24uCiAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIG9wdGlvbmFsRGVm
QXJnV2lkdGggJiYgKm9wdGlvbmFsRGVmQXJnV2lkdGggPCBjaGlsZC52YWx1ZSgpLT5yZXN1bHRX
aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHJvbGUgY2FuIG9ubHkgYmUgc29tZSBr
aW5kIG9mIGRlZiBpZiB3ZSBkaWQgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIsIHdoaWNoIGlzCisg
ICAgICAgICAgICAgICAgLy8gb25seSBhbGxvd2VkIGZvciBwYXRjaHBvaW50cy4gUGF0Y2hwb2lu
dHMgZG9uJ3QgdXNlIHRoZSBkZWZBcmdXaWR0aCBmZWF0dXJlLgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFBcmc6OmlzQW55RGVmKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDYgKzUzLDExIEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29t
ZVJlZ2lzdGVyKFYKICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOwogfQogCit2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKSk7Cit9CisKIHZv
aWQgU3RhY2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgQ29uc3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAgICBjaGlsZChpbmRl
eCkgPSBjb25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw3
ICs5OSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21ldGhpbmcg
eW91IG1pZ2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25z
dHJhaW5lZAogICAgIC8vIHRvIFNvbWVSZWdpc3Rlci4KICAgICB2b2lkIGFwcGVuZFNvbWVSZWdp
c3RlcihWYWx1ZSopOwotCisgICAgdm9pZCBhcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihW
YWx1ZSopOworICAgIAogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMoKSBjb25zdCB7
IHJldHVybiBtX3JlcHM7IH0KIAogICAgIC8vIFN0YWNrbWFwcyBhbGxvdyB5b3UgdG8gc3BlY2lm
eSB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIgc29tZSByZWdpc3RlcnMuIENsb2JiZXJp
bmcgYSByZWdpc3RlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsMjEgKzQzMiw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBWb2lkKQog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigp
LT5yZXN1bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQua2luZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTdGFja0FyZ3VtZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURShm
YWxzZSwgKCJBdCAiLCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcENvbnN0cmFpbnQo
dmFsdWUsIENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+
KCktPnJlc3VsdENvbnN0cmFpbnQpLCBDb25zdHJhaW50Um9sZTo6RGVmKTsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENoZWNrQWRkOgpAQCAtNTcxLDE2ICs1
NTgsMjQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHN3aXRjaCAodmFsdWUucmVwKCkua2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbGRBbnk6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xkQW55OgogICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6TGF0ZUNvbGRBbnk6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgICAg
ICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRl
eHQsICI6ICIsIHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICBWQUxJREFURShyb2xl
ID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7
CisgICAgICAgICAgICBWQUxJREFURShjb250ZXh0LT5hczxQYXRjaHBvaW50VmFsdWU+KCksICgi
QXQgIiwgKmNvbnRleHQpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29u
c3RyYWludFJvbGU6OkRlZiwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKHZhbHVlLnJlcCgp
LmtpbmQoKSA9PSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIFZBTElE
QVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwg
dmFsdWUpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5yZXAoKS5yZWcoKS5pc0dQUigpKQogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLnZhbHVlKCktPnR5cGUoKSksICgiQXQg
IiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MCw2ICs0MCw3IEBAIHZvaWQgVmFsdWVSZXA6OmFkZFVzZWRSZWdpc3RlcnNUbyhSZWdpc3QK
ICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVS
ZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuOwpAQCAt
NzEsNiArNzIsNyBAQCB2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvCiAg
ICAgY2FzZSBDb2xkQW55OgogICAgIGNhc2UgTGF0ZUNvbGRBbnk6CiAgICAgY2FzZSBTb21lUmVn
aXN0ZXI6CisgICAgY2FzZSBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVF
YXJseVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRlUmVnaXN0ZXI6CkBA
IC0xNzUsNiArMTc3LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZh
bAogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJT
b21lUmVnaXN0ZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcldpdGhDbG9iYmVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJTb21lRWFybHlSZWdpc3RlciIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02NSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEFzIGFu
IGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29t
ZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQogICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMg
Y2xhaW1zIHRvIGNsb2JiZXIhCiAgICAgICAgIFNvbWVSZWdpc3RlciwKKyAgICAgICAgCisgICAg
ICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hv
dWxkIHBpY2sgc29tZSByZWdpc3RlciBidXQgdGhhdCB0aGlzCisgICAgICAgIC8vIHJlZ2lzdGVy
IGlzIHRoZW4gY29iYmVyZWQgd2l0aCBnYXJiYWdlLiBUaGlzIG9ubHkgd29ya3MgZm9yIHBhdGNo
cG9pbnRzLgorICAgICAgICBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwKIAogICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIHNob3VsZCBw
aWNrIHNvbWUgcmVnaXN0ZXIsIGJ1dCBpbXBsaWVzCiAgICAgICAgIC8vIHRoYXQgdGhlIGRlZiBo
YXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMgb2YgdGhlIHN0YWNrbWFwLiBUaGlzIGlz
IG9ubHkgdmFsaWQgZm9yCkBAIC0xMDcsNyArMTExLDcgQEAgcHVibGljOgogICAgIFZhbHVlUmVw
KEtpbmQga2luZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRB
bnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7
CisgICAgICAgIEFTU0VSVChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtp
bmQgPT0gTGF0ZUNvbGRBbnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21l
UmVnaXN0ZXJXaXRoQ2xvYmJlciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKICAgICB9
CiAKICAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTU1LDE0ICs5NTUsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFs
bG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1Np
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAg
ICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQogICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIyKTsKICAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hH
UFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXpl
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVDYXBhY2l0
eSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSwgbV9p
bmxpbmVDYXBhY2l0eSk7IH0KIAogICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKLSAgICAg
ICAgOiBtX2FsbG9jYXRvcigwKQotICAgICAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKKyAgICAg
ICAgOiBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApAQCAtNjMsNyArNjIsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1fYWxsb2NhdG9y
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3IoKTsKICAgICAgICAg
bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IDA7CiAgICAg
ICAgIEFTU0VSVChpc051bGwoKSk7CkBAIC03Nyw3ICs3Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYsIEpTT2JqZWN0
KiBwcm90b3R5cGUpOwogCi0gICAgQmxvY2tEaXJlY3RvcnkqIG1fYWxsb2NhdG9yOyAvLyBQcmVj
b21wdXRlZCB0byBtYWtlIHRoaW5ncyBlYXNpZXIgZm9yIGdlbmVyYXRlZCBjb2RlLgorICAgIEFs
bG9jYXRvciBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVy
IGZvciBnZW5lcmF0ZWQgY29kZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKICAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5OwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpCiAKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlY3V0YWJs
ZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKLSAg
ICAgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fYWxsb2NhdG9y
ID0gQWxsb2NhdG9yKCk7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk5LDExICs5OSwxMSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGlu
ZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5s
aW5lQ2FwYWNpdHkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bS5jZWxsU3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uY2VsbFNw
YWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkVuc3VyZUFsbG9jYXRvcik7CiAKICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBp
bmxpbmUgY2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgogICAgIGlmIChhbGxv
Y2F0b3IpIHsKLSAgICAgICAgc2l6ZV90IHNsb3AgPSAoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpIC0g
YWxsb2NhdGlvblNpemUpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAg
IHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci5jZWxsU2l6ZSh2bS5oZWFwKSAtIGFsbG9jYXRpb25T
aXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgICAgICBpbmxpbmVDYXBh
Y2l0eSArPSBzbG9wOwogICAgICAgICBpZiAoaW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0Zp
bmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpOwpAQCAtMTEzLDcgKzExMyw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmkKIAogICAgIGlmIChpc1BvbHlQcm90
bykgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7Ci0gICAgICAg
IG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3Io
KTsKICAgICAgICAgZXhlY3V0YWJsZS0+c2V0Q2FjaGVkUG9seVByb3RvU3RydWN0dXJlKHZtLCBz
dHJ1Y3R1cmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChleGVjdXRhYmxlKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKDApLCBzdG9yYWdlR1BSKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cykpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkg
ewogICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwg
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faml0LmFkZFB0cigKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQ
dHIpIHsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNj
cmF0Y2hHUFIpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFs
T2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2Nh
dG9yKSB7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2so
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBh
bGxvY2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFn
ZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2sp
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDIw
OCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGJsb2NrRGlyZWN0
b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYmxvY2tEaXJlY3Rv
cnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGJs
b2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2Ny
YXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JWYWx1ZSA9IHN1YnNw
YWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yVmFsdWUsIGFs
bG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJl
KG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyAr
ODM4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1Zh
bHVlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQwOCw3ICs4NDA1LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BS
MiA9IHNjcmF0Y2gyLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdw
cigpOwogICAgICAgICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICBt
X2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CkBA
IC04NDI4LDcgKzg0MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9y
OwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIGlmICghYWxsb2Nh
dG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CkBAIC04NDU2LDcgKzg0NTIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7CiAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
Mywgc2xvd1BhdGgpOwogICAgIAogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwpA
QCAtMTE0MTUsMTQgKzExNDEwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVUaGlzKE4KICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
KSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIp
OworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKIAot
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0
b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQ
UiwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBBbGxvY2F0b3IoKSwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1
cmVHUFIsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9m
ZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZklubGluZUNhcGFjaXR5KCkpLCBpbmxpbmVDYXBhY2l0eUdQUik7CkBAIC0xMTQ0OCwxNCArMTE0
NDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChObwogCiAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JQ
dHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBzdWJzcGFjZUZvcjxKU0Zp
bmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwotICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBhdXRvIG1hc2sgPSBU
cnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxv
Y2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICBtX2ppdC5lbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgaWYgKCFhbGxvY2F0b3JW
YWx1ZSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAg
ICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclZhbHVlLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Cisg
ICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9q
aXQudm0oKSk7CisgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJl
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxMjAsNyArMzEyMCw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGEgY2VsbCBvZiBhIHNwZWNpZmljIHNpemUuCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoCi0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxv
Y2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAorICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVK
U0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CkBAIC0zMTI5LDcgKzMxMjksNyBAQCBwdWJsaWM6CiAgICAgLy8g
QWxsb2NhdG9yIGZvciBhbiBvYmplY3Qgb2YgYSBzcGVjaWZpYyBzaXplLgogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUg
TWFza1R5cGU+IC8vIFN0cnVjdHVyZVR5cGUsIFN0b3JhZ2VUeXBlIGFuZCwgTWFza1R5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdCgKLSAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9J
TkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVj
dG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0
ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6
ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9j
YXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNp
emVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRz
X3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+
KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMzLDEwICs1ODMzLDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmlu
c2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
b2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwog
ICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdl
dCgpLCBzbG93UGF0aCk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5v
ZmZzZXQoKSksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
S2lkczsgKytpKQpAQCAtOTg2MSw3ICs5ODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRl
eGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAg
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxsQWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVk
UHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwpAQCAtOTkyMCw3ICs5OTIwLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBtYXNrID0gY29tcHV0ZUJ1dHRlcmZseUlu
ZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2Jq
ZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoY2VsbEFsbG9jYXRvciksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBt
YXNrLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2Vs
bEFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNr
LCBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0
ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUp
OwpAQCAtMTA4OTIsOCArMTA4OTIsOCBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAg
ICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwot
ICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgICAgIExWYWx1ZSBzdGFydE9mU3Rv
cmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIExWYWx1ZSBzdGFydE9m
U3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkg
PSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIo
c2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMTE5MjUsMTYgKzExOTI1LDE4
IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2Nh
dG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5
KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJ
bnRQdHIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxCbG9j
a0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIoKSk7CisgICAgICAgIEFsbG9jYXRvciBh
Y3R1YWxBbGxvY2F0b3I7CisgICAgICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAg
ICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBBbGxvY2F0b3IoYWxsb2NhdG9yLT5hc0ludDMyKCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAgICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBlaXRoZXIgd2Uga25vdyB0aGF0IHRoZSBhbGxvY2F0b3IgaXMg
bnVsbCBvciB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgICAgICAgICAvLyBhbGxvY2F0b3Ig
aXMuIEluIGVpdGhlciBjYXNlLCB3ZSBuZWVkIHRoZSBudWxsIGNoZWNrLgogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaGF2ZUFsbG9jYXRvciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZl
QWxsb2NhdG9yKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChhbGxvY2F0b3IsIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGFsbG9jYXRvciwgbV9vdXQuY29u
c3RJbnQzMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpLAorICAgICAgICAgICAgICAgIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaGF2ZUFsbG9jYXRvciwgbGFzdE5leHQpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTE5NDQsNyArMTE5NDYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOwotICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYWxsb2NhdG9yKTsKKyAgICAgICAgaWYgKGFjdHVh
bEFsbG9jYXRvcikKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cysrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcihhbGxvY2F0b3IpOwogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9
IFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjsKICAgICAgICAgCkBAIC0xMTk1NSw2ICsxMTk2
MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGp1bXBUb1Nsb3dQYXRoOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhbGxvY2F0b3JHUFI7CisgICAgICAgICAgICAgICAgaWYg
KGFjdHVhbEFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFy
YW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRp
b24gcGF0aCBiZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8v
IGFsbG9jYXRpb24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1h
Y2hpbmUgY29kZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hh
dCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBj
b21waWxlcgpAQCAtMTE5NjIsNyArMTE5NzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IC8vIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBv
cHRpbWl6ZWQgcGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhl
IGNvbXBpbGVyIHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1
YWxBbGxvY2F0b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9TdWNjZXNzOwpAQCAtMTIwNTQsOCArMTIwNjUsOCBAQCBwcml2YXRlOgogICAg
IExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0
dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4KQEAgLTEyMDc0LDE2ICsxMjA4NSwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxl
dGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBh
Y3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxT
dWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVy
bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0
dWFsQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVh
bEFsbG9jYXRvcik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHN0ZXBT
aGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIxMDIsNyArMTIx
MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0
cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9y
Rm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1YihzaXplQ2xh
c3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxMTcsOCArMTIxMjgsNyBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAgICAgICAgIExW
YWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAg
ICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKLSAgICAg
ICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7Cisg
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJzcGFjZUZvcjxD
bGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJmbHlJbmRleGlu
Z01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTI2LDE1ICsxMjEzNiwxNCBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAgICAgICBMVmFs
dWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAg
IHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCi0gICAgICAg
ICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOworICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3BhY2VGb3I8Q2xh
c3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVD
ZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIExW
YWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7
CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRp
b25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNp
bXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGlu
c3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxNDYsNyArMTIxNTUs
NyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJa
ZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywg
bV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1
ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Vuc2ln
bmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0KS0+Y2VsbFNp
emUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZNOworCitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAgIAorICAgIEFs
bG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgY2Vs
bFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFsbG9j
YXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldCgpOyB9
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRv
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZShWTSYgdm0sIEdDRGVmZXJyYWxD
b250ZXh0KiBjb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgbW9kZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yKHZtLCBtX29mZnNldCkuYWxsb2Nh
dGUoY29udGV4dCwgbW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAy
MjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDYgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRy
YWRlRGVzdHJ1Y3RvckJsbwogCiBCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCog
aGVhcCwgc2l6ZV90IGNlbGxTaXplKQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKLSAgICAs
IG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAgICwgbV9j
ZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9oZWFwKGhl
YXApCiB7CkBAIC04MSwxNDMgKzc5LDE0IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGly
ZWN0b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1cnNvcl07CiB9CiAKLXZv
aWQgQmxvY2tEaXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCgpCitNYXJrZWRCbG9jazo6SGFu
ZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpCiB7Ci0gICAgaWYg
KG1fY3VycmVudEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVM
aXN0KCk7Ci0gICAgCi0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotICAgIG1fY3VycmVudEJsb2Nr
ID0gbnVsbHB0cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmcoKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKLSAgICAKLSAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQo
bV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7Oykgewot
ICAgICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwg
bV9lbXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgICAgICBpZiAo
bV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAKLSAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKHZv
aWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXSkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAoT3B0aW9u
czo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQotICAgICAgICAmJiAodHJh
ZGVEZXN0cnVjdG9yQmxvY2tzIHx8ICFuZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAgICAgIGlm
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2Nr
VG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1l
bW9yeUFsbG9jYXRvcigpID09IG1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxs
b2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAgICAgICAg
Ly8gYmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZl
IGJvdGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNl
dCBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3Rv
cnkoKTsKLSAgICAgICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBh
bGxvY2F0ZUluKGJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9j
ayk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykKLXsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRnJl
ZUxpc3RlZCgpKTsKLSAgICAKLSAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwotICAgIAot
ICAgIC8vIEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9j
ay4gTWFya2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAotICAgIC8vIHRoYXQgYWxnb3Jp
dGhtIGlzIHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmICht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7Ci0gICAgICAgIEFTU0VSVChibG9jay0+
aXNGcmVlTGlzdGVkKCkpOwotICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2Nh
dGVkKCk7Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAgICAgICAg
QVNTRVJUKCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKLSAgICAgICAgQVNT
RVJUKCFpc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykp
OworICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBt
X2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fYWxs
b2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAgIHZv
aWQqIHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhlYXBD
ZWxsKiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0pOwotICAgIHNldElzRWRlbihOb0xvY2tp
bmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKLSAgICBtYXJrZWRTcGFjZSgpLmRp
ZEFsbG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lm
TmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgaWYgKCFP
cHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7Ci0gICAgaWYgKCFhbGxvY2F0
aW9uQ291bnQpIHsKLSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgewotICAgICAg
ICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRl
eHQtPm1fc2hvdWxkR0MgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1faGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0
aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKLX0KLQot
dm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewot
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NF
UlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBk
b1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQo
IW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZSht
X2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3Qo
KTsKLSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAg
ICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAg
ICAKLSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFu
ZCBub3cgdGhpcyBkaXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAv
LyBoYXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxi
YWNrIGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJl
bnRCbG9jaykpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlB
bGxvY2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFpbHVyZU1v
ZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9j
YXRlSW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxv
Y2F0aW9uQ3Vyc29yLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1
cnNvcl07CiB9CiAKIHN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKQEAgLTMxMywyNCAr
MTgyLDE5IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAgICBp
ZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJl
Y3Rvcnk6OnN0b3BBbGxvY2F0aW5nIVxuIik7Ci0gICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9j
ayk7Ci0gICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICBBU1NFUlQobV9mcmVlTGlz
dC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1fbGFz
dEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwot
ICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAor
ICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFs
bG9jYXRvci0+c3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tE
aXJlY3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBtX2xhc3RBY3RpdmVCbG9j
ayA9IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotICAgIG1fZnJlZUxp
c3QuY2xlYXIoKTsKLQorICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsm
XSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5w
cmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgICAgICB9KTsKKyAgICAKICAgICBtX2FsbG9jYXRp
b25DdXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1fdW5zd2VwdEN1cnNv
ciA9IDA7CkBAIC0zNTQsMTIgKzIxOCwxMCBAQCB2b2lkIEJsb2NrRGlyZWN0b3J5OjpsYXN0Q2hh
bmNlVG9GaW5hbGl6CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmcoKQog
ewotICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
bGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBu
dWxscHRyOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAoTG9j
YWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5yZXN1bWVB
bGxvY2F0aW5nKCk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpiZWdp
bk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpCkBAIC01MTIsNSArMzc0LDE1IEBAIE1hcmtlZFNw
YWNlJiBCbG9ja0RpcmVjdG9yeTo6bWFya2VkU3BhY2UKICAgICByZXR1cm4gbV9zdWJzcGFjZS0+
c3BhY2UoKTsKIH0KIAorYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbChjb25z
dCB2b2lkKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBt
X2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBh
bGxvY2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBhbGxvY2F0b3ItPmlzRnJlZUxpc3Rl
ZENlbGwodGFyZ2V0KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2Nr
RGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsMTAgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCisjaW5j
bHVkZSAiQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ2VsbEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRl
ICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0
Qml0VmVjdG9yLmg+CkBAIC00MSw2ICs0Myw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxs
U2V0OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Citj
bGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogCiAjZGVmaW5lIEZPUl9FQUNIX0JMT0NLX0RJ
UkVDVE9SWV9CSVQobWFjcm8pIFwKICAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUgc2V0IG9m
IGJsb2NrIGluZGljZXMgdGhhdCBoYXZlIGFjdHVhbCBibG9ja3MuICovXApAQCAtNzYsOSArNzks
NiBAQCBjbGFzcyBCbG9ja0RpcmVjdG9yeSB7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIAogcHVibGljOgotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVl
TGlzdCgpOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwotCiAgICAg
QmxvY2tEaXJlY3RvcnkoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgdm9pZCBzZXRTdWJz
cGFjZShTdWJzcGFjZSopOwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKQEAgLTk3
LDcgKzk3LDYgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAg
ICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2b2lkKiBhbGxvY2F0ZShHQ0Rl
ZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgSGVhcCogaGVhcCgp
IHsgcmV0dXJuIG1faGVhcDsgfQogCiAgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZv
aWQqIHRhcmdldCkgY29uc3Q7CkBAIC0xNTcsMjQgKzE1NiwyMCBAQCBwdWJsaWM6CiAgICAgU3Vi
c3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtl
ZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBm
cmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gQWxsb2NhdG9yKG1fdGxjT2Zmc2V0KTsgfQogICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJp
bnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIExvY2FsQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAg
IGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxD
YWNoZUxheW91dDsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNs
b3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVN
b2RlKTsKLSAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlV2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxv
Y2F0ZUJsb2NrKCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
Kik7Ci0gICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRl
eHQqKTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7
CiAgICAgCi0gICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiB0cnlBbGxvY2F0ZUJsb2NrKCk7CiAgICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5k
bGUqPiBtX2Jsb2NrczsKICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZnJlZUJsb2NrSW5kaWNlczsK
QEAgLTE5MywxMCArMTg4LDYgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7
IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9y
IGVtcHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXpl
X3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhh
dCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogbV9sYXN0QWN0aXZlQmxvY2s7Ci0KLSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBt
X2NlbGxTaXplOwogICAgIENlbGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhN
RTogQWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2LDE2
ICsxOTcsMTAgQEAgcHJpdmF0ZToKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5
IHsgbnVsbHB0ciB9OwogICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNw
YWNlIHsgbnVsbHB0ciB9OwogICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFs
aWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CisgICAgCisgICAgTG9jayBtX2xvY2Fs
QWxsb2NhdG9yc0xvY2s7CisgICAgc2l6ZV90IG1fdGxjT2Zmc2V0OworICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxMb2NhbEFsbG9jYXRvciwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0
b3I+PiBtX2xvY2FsQWxsb2NhdG9yczsKIH07CiAKLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
QmxvY2tEaXJlY3RvcnksIG1fZnJlZUxpc3QpOwotfQotCi1pbmxpbmUgcHRyZGlmZl90IEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEJsb2NrRGlyZWN0b3J5LCBtX2NlbGxTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9y
eUlubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICszMSw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNG
cmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZnJlZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9k
ZSkKLXsKLSAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+
IEhlYXBDZWxsKiB7Ci0gICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xv
d0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOwotICAgICAgICB9KTsKLX0KLQog
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpm
b3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBtX2xpdmUuZm9yRWFj
aFNldEJpdCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRl
U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMzUgKzM4LDMz
IEBAIENvbXBsZXRlU3Vic3BhY2U6OkNvbXBsZXRlU3Vic3BhY2UoQ1N0cmkKICAgICA6IFN1YnNw
YWNlKG5hbWUsIGhlYXApCiB7CiAgICAgaW5pdGlhbGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6
ZUNsYXNzZXM7IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxs
cHRyOwogfQogCiBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAK
LUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNp
emUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICBy
ZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9pZCogQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKIHsKLSAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNp
emUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3Zv
aWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChWTSYgdm0sIHNpemVfdCBz
aXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cykpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgaWYgKEFsbG9j
YXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLmFs
bG9jYXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKICAgICBlbHNlCi0gICAg
ICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENv
bnRleHQsIGZhaWx1cmVNb2RlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1CbG9ja0RpcmVj
dG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2xvdyhzaXplX3Qgc2l6ZSkKK0Fs
bG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQog
ewogICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUp
OwogICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXpl
U3RlcFtpbmRleF07CkBAIC04Miw3ICs4MCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2EKICAgICAvLyB0aGF0IGFueSAiZm9yRWFjaEFsbG9jYXRvciIgdHJhdmVy
c2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVyIGl0J3MgaW5pdGlhbGl6ZWQK
ICAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fc3BhY2UuZGlyZWN0b3J5TG9jaygpKTsKLSAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQorICAgIGlmIChBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0pCiAgICAgICAgIHJldHVy
biBhbGxvY2F0b3I7CiAKICAgICBpZiAoZmFsc2UpCkBAIC05OCw3ICs5Niw3IEBAIEJsb2NrRGly
ZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAgICAgICAgaWYgKE1hcmtlZFNwYWNl
OjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGRpcmVj
dG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0gPSBkaXJlY3Rvcnkt
PmFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpbmRleC0tKQogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMTAsMTcgKzEwOCwxNyBAQCBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVT
dWJzcGFjZTo6YWxsb2NhCiAgICAgcmV0dXJuIGRpcmVjdG9yeTsKIH0KIAotdm9pZCogQ29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCog
ZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lk
KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZh
aWx1cmVNb2RlKQogewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhzaXplLCBk
ZWZlcnJhbENvbnRleHQpOworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyh2bSwg
c2l6ZSwgZGVmZXJyYWxDb250ZXh0KTsKICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQor
dm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KFZNJiB2bSwgc2l6ZV90IHNp
emUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7Ci0gICAgc2FuaXRpemVT
dGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgpKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0o
JnZtKTsKICAgICAKICAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IGFsbG9jYXRv
ckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpKQogICAgICAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6UmV0dXJuTnVsbCk7CkBAIC0xMzIsMTUgKzEzMCwxNSBAQCB2b2lkKiBDb21wbGV0
ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgdm0uaGVhcC5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAgc2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOwotICAgIExhcmdl
QWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX3Nw
YWNlLm1faGVhcCwgc2l6ZSwgdGhpcyk7CisgICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
ID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUodm0uaGVhcCwgc2l6ZSwgdGhpcyk7CiAgICAg
aWYgKCFhbGxvY2F0aW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBtX3Nw
YWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7Ci0gICAgbV9zcGFjZS5t
X2hlYXAtPmRpZEFsbG9jYXRlKHNpemUpOworICAgIHZtLmhlYXAuZGlkQWxsb2NhdGUoc2l6ZSk7
CiAgICAgbV9zcGFjZS5tX2NhcGFjaXR5ICs9IHNpemU7CiAgICAgCiAgICAgbV9sYXJnZUFsbG9j
YXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksMzEgKzM5LDMxIEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHN1
YnNwYWNlcyBzcGVhayBvZiBCbG9ja0RpcmVjdG9yaWVzIGFzICJhbGxvY2F0b3JzIiwgYnV0IHRo
YXQncyB0ZW1wb3JhcnkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MTU1OQotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBB
bGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOworICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKKyAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwog
ICAgIAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQq
IGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDb21wbGV0ZVN1YnNwYWNlLCBtX2FsbG9jYXRvckZvclNpemVTdGVwKTsgfQogICAgIAot
ICAgIEJsb2NrRGlyZWN0b3J5KiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9h
bGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQorICAgIEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2l6
ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQogCiBwcml2YXRl
OgotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKICAgICAKICAgICAvLyBUaGVzZSBzbG93
IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgYWxsb2NhdG9y
IGNyZWF0aW9uLgotICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZVNsb3co
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOworICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhWTSYs
IHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAg
IHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqKTsK
ICAgICAKLSAgICBzdGQ6OmFycmF5PEJsb2NrRGlyZWN0b3J5KiwgTWFya2VkU3BhY2U6Om51bVNp
emVDbGFzc2VzPiBtX2FsbG9jYXRvckZvclNpemVTdGVwOworICAgIHN0ZDo6YXJyYXk8QWxsb2Nh
dG9yLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7
CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCbG9ja0RpcmVjdG9yeT4+IG1fZGlyZWN0b3Jp
ZXM7CiB9OwogCi1BTFdBWVNfSU5MSU5FIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1v
ZGUpCitBTFdBWVNfSU5MSU5FIEFsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAg
aWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7Ci0gICAgICAgIEJsb2NrRGly
ZWN0b3J5KiByZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXpl
Q2xhc3NUb0luZGV4KHNpemUpXTsKKyAgICAgICAgQWxsb2NhdG9yIHJlc3VsdCA9IG1fYWxsb2Nh
dG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOwogICAg
ICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgY2FzZSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0
QWxyZWFkeUhhdmVBbGxvY2F0b3I6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQp
OwpAQCAtNzgsNyArNzgsNyBAQCBBTFdBWVNfSU5MSU5FIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0
ZVN1CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUKG1v
ZGUgIT0gQWxsb2NhdG9yRm9yTW9kZTo6TXVzdEFscmVhZHlIYXZlQWxsb2NhdG9yKTsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQWxsb2NhdG9yKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lv
biAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw2IEBAIHN0cnVjdCBGcmVlQ2VsbCB7CiB9OwogCiBjbGFz
cyBGcmVlTGlzdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJlZUxpc3QpOwotICAgIAog
cHVibGljOgogICAgIEZyZWVMaXN0KHVuc2lnbmVkIGNlbGxTaXplKTsKICAgICB+RnJlZUxpc3Qo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMjY4OTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjgsNiArNjgsNyBAQAogI2luY2x1ZGUgIlN0b3BJZk5lY2Vzc2FyeVRpbWVyLmgiCiAjaW5j
bHVkZSAiU3dlZXBpbmdTY29wZS5oIgogI2luY2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIK
ICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgpAQCAtMzEyLDYgKzMxMyw3IEBAIEhlYXA6
OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1faGVscGVyQ2xpZW50KCZo
ZWFwSGVscGVyUG9vbCgpKQogICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkp
CiAgICAgLCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0
ZSgpKQorICAgICwgbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0KHN0ZDo6bWFrZV91bmlxdWU8VGhy
ZWFkTG9jYWxDYWNoZUxheW91dD4oKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsNyBAQCBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7Citj
bGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogY2xhc3MgVk07CiBjbGFzcyBXZWFrR0NNYXBC
YXNlOwogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKQEAgLTM3Miw2ICszNzMsOCBAQCBwdWJs
aWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNsb3RW
aXNpdG9yKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlTGF5b3V0JiB0
aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNoZUxheW91
dDsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC03
MTQsNiArNzE3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBDdXJyZW50VGhyZWFkU3RhdGUqIG1f
Y3VycmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9OwogICAgIFdURjo6VGhyZWFkKiBtX2N1cnJl
bnRUaHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3MgT0sgaWYgdGhpcyBiZWNvbWVzIGEgZGFuZ2xp
bmcgcG9pbnRlci4KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkTG9jYWxDYWNoZUxh
eW91dD4gbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCShyZXZp
c2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDIwICs1MCwyMCBAQCBJc29TdWJzcGFjZTo6fklzb1N1
YnNwYWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JG
b3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBJc29TdWJz
cGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7
CiAgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZv
aWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9p
ZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9k
ZSkKIHsKLSAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4
dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUs
IGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6
YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29T
dWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAg
dm9pZCogcmVzdWx0ID0gbV9kaXJlY3RvcnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWls
dXJlTW9kZSk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRl
ZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2
ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
Rm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAg
ICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJp
ZGU7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0
b3JGb3JNb2RlKTsKIAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRl
eHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwg
R0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwg
R0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwpAQCAtNTUsMTUgKzU1LDE2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxl
Kikgb3ZlcnJpZGU7CiAgICAgCiAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBBbGxvY2F0b3IgbV9h
bGxvY2F0b3I7CiAgICAgQmxvY2tEaXJlY3RvcnkgbV9kaXJlY3Rvcnk7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5l
bE5vZGU8SXNvQ2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCi1pbmxpbmUgQmxvY2tEaXJlY3Rv
cnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxv
Y2F0b3JGb3JNb2RlKQoraW5saW5lIEFsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgcmV0dXJuICZtX2RpcmVjdG9yeTsK
KyAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiB9CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcENlbGxUeXBlLCB0eXBlKSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsICho
ZWFwKSwgKGhlYXBDZWxsVHlwZSksIHNpemVvZih0eXBlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKEJs
b2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCisg
ICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGRpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJl
Y3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKK30KKworTG9jYWxBbGxvY2F0
b3I6OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCisgICAgOiBtX2RpcmVj
dG9yeShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6
ZSkKKyAgICAsIG1fZnJlZUxpc3QoV1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKKyAgICAsIG1f
Y3VycmVudEJsb2NrKG90aGVyLm1fY3VycmVudEJsb2NrKQorICAgICwgbV9sYXN0QWN0aXZlQmxv
Y2sob3RoZXIubV9sYXN0QWN0aXZlQmxvY2spCit7CisgICAgb3RoZXIucmVzZXQoKTsKKyAgICBp
ZiAob3RoZXIuaXNPbkxpc3QoKSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
ZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgICAgICBvdGhlci5yZW1vdmUo
KTsKKyAgICAgICAgbV9kaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsK
KyAgICB9Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2ZyZWVM
aXN0LmNsZWFyKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbnVsbHB0cjsKK30KKworTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRv
cigpCit7CisgICAgaWYgKGlzT25MaXN0KCkpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICAgICAgcmVtb3Zl
KCk7CisgICAgfQorICAgIAorICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0
IGhvbGRpbmcgb250byBhbnkgbWVtb3J5LiBUaGlzIGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0
aGUKKyAgICAvLyBmb2xsb3dpbmcgdHdvIHVzZSBjYXNlczoKKyAgICAvLyAKKyAgICAvLyAtIElt
bW9ydGFsIFRMQy4gVGhvc2UgZGVzdHJ1Y3QgYWZ0ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVj
dGluZywgc28gdGhleSBzaG91bGQgbm90IGhhdmUKKyAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGlu
IHRoZW0uCisgICAgLy8KKyAgICAvLyAtIFRMQyBvd25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBU
TEMgZ2V0cyBkZXN0cm95ZWQgYWZ0ZXIgYSBHQyBmbGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQK
KyAgICAvLyAgIHRoYXQgaXQgaXMgbm90IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNo
b3VsZCBzdGlsbCBiZSBpbiBhIGZ1bGx5IHJlc2V0IHN0YXRlIGF0IHRoZQorICAgIC8vICAgdGlt
ZSBvZiBkZXN0cnVjdGlvbiBiZWNhdXNlIGZvciBpdCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3Rh
dGUsIHNvbWVvbmUgbXVzdCBoYXZlIGFsbG9jYXRlZAorICAgIC8vICAgaW4gaXQgKHdoaWNoIGlz
IGltcG9zc2libGUgYmVjYXVzZSBpdCdzIHN1cHBvc2VkbHkgdW5yZWFjaGFibGUpLgorICAgIFJF
TEVBU0VfQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdEFj
dGl2ZUJsb2NrKTsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQor
eworICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOworICAgIGlmICghbV9jdXJyZW50Qmxv
Y2spIHsKKyAgICAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxs
b2NhdGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJs
b2NrOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2ZyZWVMaXN0LmNsZWFy
KCk7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRpbmcoKQoreworICAg
IGlmICghbV9sYXN0QWN0aXZlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEFj
dGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fY3VycmVudEJs
b2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRy
OworfQorCit2b2lkIExvY2FsQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCit7Cisg
ICAgcmVzZXQoKTsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKKyAgICBIZWFwJiBoZWFwID0gKm1fZGlyZWN0b3J5LT5tX2hlYXA7CisgICAgQVNT
RVJUKGhlYXAudm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgZG9U
ZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJUKCFt
YXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOworICAgIGhlYXAuZGlkQWxsb2NhdGUobV9mcmVl
TGlzdC5vcmlnaW5hbFNpemUoKSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7Cisg
ICAgCisgICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKGhlYXApOworCisgICAgaGVhcC5j
b2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8g
R29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMg
ZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3
aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRo
ZSBHQydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQor
ICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cisg
ICAgCisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwor
ICAgIAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPnRy
eUFsbG9jYXRlQmxvY2soKTsKKyAgICBpZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChmYWlsdXJl
TW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAg
IHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlz
dCgpCit7CisgICAgaWYgKG1fY3VycmVudEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+
ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAg
IG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50
ZWQgdGhpcyB0byBiZSB1c2VkIGZvciByZWFsIG11bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRo
ZW4gd2Ugd291bGQgaGF2ZSB0bworICAgIC8vIGNvbWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5
IHByb3RvY29sIGhlcmUuIFRoYXQgcHJvdG9jb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhh
bmRsZToKKyAgICAvLworICAgIC8vIC0gVGhlIGJhc2ljIGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxB
bGxvY2F0b3JzIHRyeWluZyB0byBkbyBhbiBhbGxvY2F0aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUK
KyAgICAvLyAgIHNhbWUgYml0dmVjdG9yLiBUaGF0IHByb2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0
b3IgbG9jayBhdCBsZWFzdC4KKyAgICAvLworICAgIC8vIC0gVGhlIGhhcmRlciBjYXNlIG9mIHNv
bWUgTG9jYWxBbGxvY2F0b3IgdHJpZ2dlcmluZyBhIHN0ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxv
Y2tEaXJlY3RvcnkKKyAgICAvLyAgIHZpYSBhIHNlYXJjaCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcidzIGxpc3QuIFdobyBrbm93cyB3aGF0IGxvY2tzIHRoYXQgbmVlZHMuCisgICAgLy8g
CisgICAgLy8gT25lIHdheSB0byBtYWtlIHRoaXMgd29yayBpcyB0byBoYXZlIGEgc2luZ2xlIHBl
ci1IZWFwIGxvY2sgdGhhdCBwcm90ZWN0cyBhbGwgbXV0YXRvciBsb2NrCisgICAgLy8gYWxsb2Nh
dGlvbiBzbG93IHBhdGhzLiBUaGF0IHdvdWxkIHByb2JhYmx5IGJlIHNjYWxhYmxlIGVub3VnaCBm
b3IgeWVhcnMuIEl0IHdvdWxkIGNlcnRhaW5seSBiZQorICAgIC8vIGZvciBmb3IgdXNpbmcgVExD
IGFsbG9jYXRpb24gZnJvbSBKSVQgdGhyZWFkcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjM1CisgICAgCisgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIEFTU0VSVCghbV9jdXJyZW50Qmxv
Y2spOworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9k
aXJlY3RvcnktPmZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSB0cnlBbGxv
Y2F0ZUluKGJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCisg
ICAgICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkp
IHsKKyAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3Rvcnkt
Pm1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fZGlyZWN0b3J5
LT5tX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkg
YXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUg
aXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRl
QnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGlt
ZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAg
ICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgcmV0dXJuIGFsbG9j
YXRlSW4oYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFu
ZGxlKiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJs
b2NrKQoreworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlz
dGVkKCkpOworICAgIAorICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7CisgICAgCisgICAg
Ly8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBN
YXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CisgICAgLy8gdGhhdCBhbGdvcml0aG0g
aXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCisgICAgaWYgKG1fZnJl
ZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0Zy
ZWVMaXN0ZWQoKSk7CisgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQo
KTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICBBU1NF
UlQoIW1fZGlyZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAg
ICAgICAgQVNTRVJUKCFtX2RpcmVjdG9yeS0+aXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9j
a2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIAorICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgCisgICAgdm9pZCogcmVzdWx0
ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfSk7CisgICAgbV9kaXJlY3RvcnktPnNldElzRWRlbihOb0xv
Y2tpbmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKKyAgICBtX2RpcmVjdG9yeS0+
bWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25z
SWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAgICBpZiAo
IU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKKyAgICBpZiAoIWFsbG9j
YXRpb25Db3VudCkgeworICAgICAgICBpZiAoIW1fZGlyZWN0b3J5LT5tX2hlYXAtPmlzRGVmZXJy
ZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgICAgICAg
ICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5tX2hlYXAtPmNvbGxlY3ROb3coU3luYywgQ29s
bGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKythbGxvY2F0
aW9uQ291bnQgPj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgICAg
IGFsbG9jYXRpb25Db3VudCA9IDA7Cit9CisKK2Jvb2wgTG9jYWxBbGxvY2F0b3I6OmlzRnJlZUxp
c3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIC8vIFRoaXMgYWJvbWlu
YXRpb24gZXhpc3RzIHRvIGRldGVjdCB3aGVuIGFuIG9iamVjdCBpcyBpbiB0aGUgZGVhZC1idXQt
bm90LWRlc3RydWN0ZWQgc3RhdGUuCisgICAgLy8gVGhlcmVmb3JlLCBpdCdzIG5vdCBldmVuIGNs
ZWFyIHRoYXQgdGhpcyBuZWVkcyB0byBkbyBhbnl0aGluZyBiZXlvbmQgcmV0dXJuaW5nICJmYWxz
ZSIsIHNpbmNlCisgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25pbmcgdGhlIG9i
amVjdCBpcyBmcmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFueQorICAgIC8v
IG9iamVjdHMgdG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0YXRlLgorICAg
IC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2NTUKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250
YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0
b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsK
K2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1Ymxp
YyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKExvY2FsQWxsb2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAgICBMb2NhbEFsbG9j
YXRvcihCbG9ja0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9y
JiYpOworICAgIH5Mb2NhbEFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKEdD
RGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQgc3Rv
cEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgdm9p
ZCByZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkZyZWVMaXN0KCk7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7Cisg
ICAgCisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxs
b2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBm
YWlsdXJlTW9kZSk7CisgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVJbihN
YXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6
SGFuZGxlKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVk
ZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKworICAgIEJsb2NrRGlyZWN0b3J5KiBtX2RpcmVjdG9y
eTsKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplOworICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7Cisg
ICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CisgICAg
TWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBudWxscHRyIH07Cit9Owor
CitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkKK3sK
KyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvY2FsQWxsb2NhdG9yLCBtX2ZyZWVMaXN0KTsK
K30KKworaW5saW5lIHB0cmRpZmZfdCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgp
Cit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2NhbEFsbG9jYXRvciwgbV9jZWxsU2l6
ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0
b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUgdm9pZCogTG9jYWxBbGxv
Y2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5h
bGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0obV9kaXJlY3RvcnktPmhlYXAoKS0+dm0oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpKTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvckZvck1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNTYsOCArNTcsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAg
ICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKIAotICAgIHZpcnR1YWwgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6
ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShW
TSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0g
MDsKICAgICAKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUmVmUHRyPFRocmVh
ZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShIZWFwJiBoZWFwKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNoZShoZWFwKSk7Cit9CisKK1RocmVh
ZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcCho
ZWFwKQoreworICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgpOworfQorCitUaHJlYWRMb2NhbENh
Y2hlOjp+VGhyZWFkTG9jYWxDYWNoZSgpCit7CisgICAgZGVzdHJveURhdGEobV9kYXRhKTsKK30K
KworVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdGVEYXRh
KCkKK3sKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fZGF0YSA/IG1fZGF0YS0+c2l6ZSA6IDA7Cisg
ICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6U25hcHNob3QgbGF5b3V0ID0gbV9oZWFwLnRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQoKS5zbmFwc2hvdCgpOworICAgIAorICAgIERhdGEqIHJlc3VsdCA9
IGZhc3RNYWxsb2MoT0JKRUNUX09GRlNFVE9GKERhdGEsIGFsbG9jYXRvcikgKyBsYXlvdXQuc2l6
ZSk7CisgICAgcmVzdWx0LT5zaXplID0gbGF5b3V0LnNpemU7CisgICAgcmVzdWx0LT5jYWNoZSA9
IHRoaXM7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zm
c2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAoJmFsbG9jYXRvcigq
cmVzdWx0LCBvZmZzZXQpKSAoV1RGTW92ZShhbGxvY2F0b3IoKm1fZGF0YSwgb2Zmc2V0KSkpOwor
ICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IG9sZFNpemU7IG9mZnNldCA8IGxheW91dC5zaXplOyBv
ZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9y
KCpyZXN1bHQsIG9mZnNldCkpIChsYXlvdXQuZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExv
Y2FsQWxsb2NhdG9yKV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgVGhyZWFkTG9j
YWxDYWNoZTo6ZGVzdHJveURhdGEoRGF0YSogZGF0YSkKK3sKKyAgICBmb3IgKHNpemVfdCBvZmZz
ZXQgPSAwOyBvZmZzZXQgPCBkYXRhLT5zaXplOyBvZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2Nh
dG9yKSkKKyAgICAgICAgYWxsb2NhdG9yKCpkYXRhLCBvZmZzZXQpLn5Mb2NhbEFsbG9jYXRvcigp
OworICAgIGZhc3RGcmVlKGRhdGEpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3Rh
bGxTbG93KFZNJiB2bSkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25j
ZUZsYWcsCisgICAgICAgIFtdICgpIHsKKyAgICAgICAgICAgIHB0aHJlYWRfa2V5X2luaXRfbnAo
dGxzS2V5LCBkZXN0cnVjdG9yKTsKKyAgICAgICAgfSk7CisjZW5kaWYKKyAgICAKKyAgICByZWYo
KTsKKyAgICAKKyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gb2xkQ2FjaGUgPSBnZXQodm0p
OworICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIAorICAgIGluc3RhbGxEYXRhKHZtLCBtX2Rh
dGEpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxEYXRhKFZNJiB2bSwgRGF0
YSogZGF0YSkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIFVOVVNFRF9QQVJBTSh2
bSk7CisgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSwgZGF0YSk7CisjZWxz
ZQorICAgIHZtLnRocmVhZExvY2FsQ2FjaGUgPSBkYXRhOworI2VuZGlmCit9CisKK0xvY2FsQWxs
b2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KFZNJiB2bSwgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBEYXRhKiBvbGREYXRhID0gbV9kYXRhOworICAgIG1fZGF0YSA9IGFsbG9j
YXRlRGF0YSgpOworICAgIGRlc3Ryb3lEYXRhKG9sZERhdGEpOworICAgIGluc3RhbGxEYXRhKHZt
LCBtX2RhdGEpOworICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA8IG1fZGF0YS0+c2l6ZSk7Cisg
ICAgcmV0dXJuIGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpOworfQorCit2b2lkIFRocmVhZExv
Y2FsQ2FjaGU6OmRlc3RydWN0b3Iodm9pZCogYXJnKQoreworICAgIGlmICghYXJnKQorICAgICAg
ICByZXR1cm47CisgICAgRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihhcmcpOworICAg
IGRhdGEtPmNhY2hlLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRocmVhZExvY2Fs
Q2FjaGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkTG9jYWxDYWNoZT4gewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZExvY2FsQ2FjaGUpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmKTsKKyAgICAKKyAgICB+VGhyZWFkTG9jYWxDYWNoZSgp
OworCisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBnZXQoVk0mKTsKKyAgICAK
KyAgICAvLyBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGZhc3QgZW5vdWdoIHRoYXQgeW91IGNvdWxk
IGV2ZW4gY2FsbCBpdCBiZWZvcmUgZXZlcnkgYWxsb2NhdGlvbiwgYnkKKyAgICAvLyBvcHRpbWl6
aW5nIGZvciB0aGUgY2FzZSB0aGF0IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcgdGhlIGNhY2hlIHRo
YXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFRoaXMKKyAgICAvLyBhc3N1bWVzIGEgcmVsYXRpdmVs
eSBzbWFsbCBudW1iZXIgb2YgY2FjaGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0dWFsIGNvbnRleHQg
c3dpdGNoIGNvbWJpbmVkCisgICAgLy8gd2l0aCBwb3NzaWJseSBoaWdoIHJhdGUgb2YgIkkgbWF5
IGhhdmUgY29udGV4dCBzd2l0Y2hlZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMgb3V0IG9mIHBhcmFu
b2lhLgorICAgIHZvaWQgaW5zdGFsbChWTSYpOworICAgIAorICAgIHN0YXRpYyBMb2NhbEFsbG9j
YXRvciYgYWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCk7CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkZpcnN0QWxsb2NhdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KERhdGEsIGFsbG9jYXRvcik7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVGhyZWFkTG9jYWxDYWNo
ZShIZWFwJik7CisgICAgCisgICAgc3RydWN0IERhdGEgeworICAgICAgICBzaXplX3Qgc2l6ZTsK
KyAgICAgICAgVGhyZWFkTG9jYWxDYWNoZSogY2FjaGU7CisgICAgICAgIExvY2FsQWxsb2NhdG9y
IGFsbG9jYXRvclsxXTsKKyAgICB9OworCisgICAgc3RhdGljIERhdGEqIGdldEltcGwoVk0mKTsK
KyAgICAKKyAgICBEYXRhKiBhbGxvY2F0ZURhdGEoKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
RGF0YShEYXRhKik7CisgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYg
ZGF0YSwgc2l6ZV90IG9mZnNldCk7CisKKyAgICB2b2lkIGluc3RhbGxTbG93KFZNJik7CisgICAg
c3RhdGljIHZvaWQgaW5zdGFsbERhdGEoVk0mLCBEYXRhKik7CisgICAgCisgICAgTG9jYWxBbGxv
Y2F0b3ImIGFsbG9jYXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cnVjdG9yKHZvaWQqKTsKKyAgICAKKyAgICAvLyBXaGVuIGluc3RhbGxlZCwg
d2UgcmVmKCkgdGhlIGNhY2hlLiBVbmluc3RhbGxpbmcgZGVyZWYoKXMgdGhlIGNhY2hlLiBUTFMg
ZGVzdHJ1Y3Rpb24gZGVyZWYoKXMKKyAgICAvLyB0aGUgY2FjaGUuIFdoZW4gdGhlIGNhY2hlIGlz
IGRlc3RydWN0ZWQsIGl0IG5lZWRzIHRvIHJldHVybiBhbGwgb2YgaXRzIHN0YXRlIHRvIHRoZSBH
Qy4gSQorICAgIC8vIHRoaW5rIHRoYXQganVzdCBtZWFucyBzdG9wQWxsb2NhdGluZygpLCBidXQg
d2l0aCBzb21lIHNlcmlvdXNseSBoZWF2eSBjYXZlYXRzIGhhdmluZyB0byBkbworICAgIC8vIHdp
dGggd2hlbiBpdCdzIHZhbGlkIHRvIG1ha2UgdGhhdCBjYWxsLiBBbHRlcm5hdGl2ZWx5LCB3ZSBj
b3VsZCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZSBjYWNoZQorICAgIC8vIGlzIGVtcHR5IHdoZW4g
d2UgZGVzdHJ1Y3QgaXQuIFRoaXMgaXMgY29ycmVjdCBmb3IgY2FjaGVzIHRoYXQgYXJlIGtlcHQg
bGl2ZSBieSBHQyBvYmplY3RzIGFuZAorICAgIC8vIGl0J3MgY29ycmVjdCBmb3IgaW1tb3J0YWwg
Y2FjaGVzLgorICAgIEhlYXAmIG1faGVhcDsKKyAgICBEYXRhKiBtX2RhdGE7CisKKyNpZiBFTkFC
TEUoRkFTVF9UTFNfSklUKQorICAgIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRsc0tleSA9
IFdURl9HQ19UTENfS0VZOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hl
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1RocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZt
KQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdCh0
bHNLZXkpKTsKKyNlbHNlCisgICAgcmV0dXJuIHZtLnRocmVhZExvY2FsQ2FjaGU7CisjZW5kaWYK
K30KKworUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmdldChWTSYg
dm0pCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOwor
ICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+Y2FjaGU7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbChWTSYgdm0pCit7Cisg
ICAgaWYgKGdldEltcGwodm0pLT5jYWNoZSA9PSB0aGlzKQorICAgICAgICByZXR1cm47CisgICAg
aW5zdGFsbFNsb3codm0pOworfQorCitMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6
YWxsb2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBUaHJlYWRMb2NhbENhY2hl
OjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKExJS0VMWShvZmZzZXQgPCBkYXRh
LT5zaXplKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KTsKKyAgICBy
ZXR1cm4gZGF0YS0+Y2FjaGUtPmFsbG9jYXRvclNsb3cob2Zmc2V0KTsKK30KKworTG9jYWxBbGxv
Y2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zm
c2V0KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PExvY2FsQWxsb2NhdG9yKj4oYml0d2lz
ZV9jYXN0PGNoYXIqPigmZGF0YS5hbGxvY2F0b3JbMF0pICsgb2Zmc2V0KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQuaCIKKworI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0KCkK
K3sKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6flRocmVhZExvY2FsQ2FjaGVMYXlvdXQo
KQoreworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmFsbG9jYXRlT2Zmc2V0KEJs
b2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgIGRpcmVjdG9yeS0+bV90bGNPZmZzZXQgPSBtX3NpemU7CisgICAgbV9zaXpl
ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcik7CisgICAgbV9kaXJlY3Rvcmllcy5hcHBlbmQoZGly
ZWN0b3J5KTsKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6U25hcHNob3QgVGhyZWFkTG9j
YWxDYWNoZUxheW91dDo6c25hcHNob3QoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICBTbmFwc2hvdCByZXN1bHQ7CisgICAgcmVzdWx0LnNpemUgPSBtX3NpemU7
CisgICAgcmVzdWx0LmRpcmVjdG9yaWVzID0gbV9kaXJlY3RvcmllczsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitCbG9ja0RpcmVjdG9yeSogVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6ZGlyZWN0
b3J5KHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisgICAgcmV0dXJuIG1fZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2Nh
dG9yKV07Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEJsb2NrRGlyZWN0b3J5OworCisvLyBFYWNoIEhlYXAgaGFzIGEgVGhyZWFkTG9jYWxDYWNo
ZUxheW91dCB0aGF0IGhlbHBzIHVzIGZpZ3VyZSBvdXQgaG93IHRvIGFsbG9jYXRlIGEgVGhyZWFk
TG9jYWxDYWNoZQorLy8gZm9yIHRoYXQgSGVhcC4KKworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxh
eW91dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkTG9jYWxDYWNoZUxheW91dCk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgVGhyZWFk
TG9jYWxDYWNoZUxheW91dCgpOworICAgIH5UaHJlYWRMb2NhbENhY2hlTGF5b3V0KCk7CisKKyAg
ICAvLyBCbG9ja0RpcmVjdG9yeSBjYWxscyB0aGlzIGR1cmluZyBjcmVhdGlvbiBhbmQgdGhpcyBm
aWxscyBpbiBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0LgorICAgIHZvaWQgYWxsb2NhdGVPZmZzZXQo
QmxvY2tEaXJlY3RvcnkqKTsKKyAgICAKKyAgICBzdHJ1Y3QgU25hcHNob3QgeworICAgICAgICBz
aXplX3Qgc2l6ZTsKKyAgICAgICAgVmVjdG9yPEJsb2NrRGlyZWN0b3J5Kj4gZGlyZWN0b3JpZXM7
CisgICAgfTsKKyAgICAKKyAgICBTbmFwc2hvdCBzbmFwc2hvdCgpIGNvbnN0OworICAgIAorICAg
IEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkodW5zaWduZWQgb2Zmc2V0KTsKKyAgICAKK3ByaXZh
dGU6CisgICAgTG9jayBtX2xvY2s7CisgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBWZWN0
b3I8QmxvY2tEaXJlY3RvcnkqPiBtX2RpcmVjdG9yaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4Miw2ICs1ODIsOTUgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTQogfQogI2VuZGlmCiAKK3ZvaWQg
QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcg
cmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIC8vIE5PVEU6IFRoaXMg
aXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNh
bGxvdyBzY3JhdGNoCisgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCisgICAgICAgIAorICAgIGlmIChP
cHRpb25zOjpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIEp1bXAgcG9wUGF0
aDsKKyAgICBKdW1wIGRvbmU7CisgICAgCisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBs
b2FkRnJvbVRMU1B0cihmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9HQ19UTENfS0VZKSwgc2NyYXRj
aEdQUik7CisjZWxzZQorICAgIGxvYWRQdHIoJnZtKCkudGhyZWFkTG9jYWxDYWNoZURhdGEsIHNj
cmF0Y2hHUFIpOworI2VuZGlmCisgICAgaWYgKGFsbG9jYXRvcikKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mRmlyc3RBbGxvY2F0
b3IoKSArIGFsbG9jYXRvci5vZmZzZXQoKSksIGFsbG9jYXRvckdQUik7CisgICAgZWxzZQorICAg
ICAgICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoR1BSLCBhbGxvY2F0b3JHUFIsIFRpbWVzT25l
LCBUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JH
UFIpOworCisgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1
bHRHUFIpOworICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKKyAg
ICBpZiAoYWxsb2NhdG9yKQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+
Y2VsbFNpemUoKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgZWxzZSB7CisgICAgICAg
IGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6
Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zm
c2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdWIzMihyZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICB9CisgICAgfQorICAgIG5lZ1B0
cihyZXN1bHRHUFIpOworICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0
T2ZSZW1haW5pbmcoKSkpOworICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0
OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIGFkZFB0
cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZFB0
cihwYXlsb2FkRW5kQWRkciwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFB0cihzY3JhdGNoR1BS
LCByZXN1bHRHUFIpOworICAgIH0KKyAgICAgICAgCisgICAgZG9uZSA9IGp1bXAoKTsKKyAgICAg
ICAgCisgICAgcG9wUGF0aC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICBsb2FkUHRyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAoaXNY
ODYoKSkKKyAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1
bHRHUFIpOworICAgIGVsc2UgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9m
U2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3Vs
dEdQUik7CisgICAgfQorICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJl
c3VsdEdQUikpOworICAgICAgICAKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVk
OiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0CisgICAgLy8gaXQn
cyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dEdQUiksIHNjcmF0Y2hHUFIpOworICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CisgICAgICAgIAorICAgIGRvbmUubGluayh0aGlz
KTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0
R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2Ny
YXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIGlmICghYWxsb2NhdG9yKQorICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvckdQUiwgVHJ1c3Rl
ZEltbTMyKC0xKSkpOworICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3Vs
dEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKK30K
Kwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVn
IHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9u
U2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBz
bG93UGF0aCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYg
KE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0
IGJlIGEgcG93ZXIgb2YgdHdvLiIpOworICAgIAorICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdl
dExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOworICAgIAorICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMihNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hH
UFIxKTsKKyAgICB1cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIx
KTsKKyAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVz
dGVkSW1tMzIoTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBz
Y3JhdGNoR1BSMik7CisgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQ
UjEsIFRpbWVzRm91ciksIHNjcmF0Y2hHUFIxKTsKKyAgICAKKyAgICBlbWl0QWxsb2NhdGUocmVz
dWx0R1BSLCBudWxscHRyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKK30K
Kwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUpCiB7CiAjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fY29k
ZUJsb2NrLT52bSgpOyB9CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVy
biBtX2Fzc2VtYmxlcjsgfQogCiAgICAgdm9pZCBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
CkBAIC0xNDkxLDgwICsxNDkyLDIxIEBAIHB1YmxpYzoKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5
b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBoZWxkIGluIGFsbG9jYXRvckdQUiBpcyBub24tbnVsbC4g
VGhpcyBET0VTIE5PVCBtZWFuCiAgICAgLy8gdGhhdCBhbGxvY2F0b3IgaXMgbm9uLW51bGw7IGFs
bG9jYXRvciBjYW4gYmUgbnVsbCBhcyBhIHNpZ25hbCB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0
aGUKLSAgICAvLyB2YWx1ZSBvZiBhbGxvY2F0b3JHUFIgaXMuCi0gICAgdm9pZCBlbWl0QWxsb2Nh
dGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExp
c3QmIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAgLy8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkg
d3JpdHRlbiBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gK
LSAgICAgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCi0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9u
czo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
SnVtcCBwb3BQYXRoOwotICAgICAgICBKdW1wIGRvbmU7Ci0gICAgICAgIAotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
IHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGFs
bG9jYXRvcikKLSAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxs
U2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoaXNYODYoKSkgewotICAgICAgICAgICAgICAgIG1vdmUocmVzdWx0R1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxv
Y2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIs
IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICBzdWIzMihyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAg
ICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9y
eTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsK
LSAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBC
bG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5
bG9hZEVuZCgpKTsKLSAgICAgICAgaWYgKGlzWDg2KCkpCi0gICAgICAgICAgICBhZGRQdHIocGF5
bG9hZEVuZEFkZHIsIHJlc3VsdEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9h
ZFB0cihwYXlsb2FkRW5kQWRkciwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBhZGRQdHIoc2Ny
YXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG9uZSA9
IGp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHBvcFBhdGgubGluayh0aGlzKTsKLSAgICAgICAg
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5Ojpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICBpZiAoaXNYODYoKSkKLSAgICAgICAgICAgIHhvclB0cihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgIHhvclB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAg
ICB9Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQ
UikpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDog
d2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVzaCBvYmplY3QsIGJ1dAotICAgICAgICAvLyBp
dCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBB
ZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSAr
IEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSkpOwotICAgICAgICAKLSAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIH0KKyAgICAvLyB2YWx1ZSBvZiBhbGxvY2F0b3JHUFIgaXMu
IEFkZGl0aW9uYWxseSwgaWYgdGhlIGFsbG9jYXRvciBpcyBub3QgbnVsbCwgdGhlbiB0aGVyZSBp
cyBubyBuZWVkCisgICAgLy8gdG8gcG9wdWxhdGUgYWxsb2NhdG9yR1BSIC0gdGhpcyBjb2RlIHdp
bGwgaWdub3JlIHRoZSBjb250ZW50cyBvZiBhbGxvY2F0b3JHUFIuCisgICAgdm9pZCBlbWl0QWxs
b2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxs
b2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3Qm
IHNsb3dQYXRoKTsKICAgICAKLSAgICB2b2lkIGVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BS
LCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAgaWYgKCFhbGxv
Y2F0b3IpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBh
bGxvY2F0b3JHUFIpKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3Io
cmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0
b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVU
eXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKEdQUlJlZyByZXN1bHRHUFIsIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUg
c3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZv
aWQgZW1pdEFsbG9jYXRlSlNDZWxsKEdQUlJlZyByZXN1bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcg
c2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgZW1pdEFsbG9j
YXRlKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQ
YXRoKTsKICAgICAgICAgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKHN0cnVjdHVyZSwg
cmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUsIHR5cGVuYW1lIE1hc2tUeXBl
PgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tE
aXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBz
dHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3Jh
dGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVj
dChHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9y
R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5
cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAg
ICAgICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9y
R1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIo
c3RvcmFnZSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OwpAQCAtMTU3NiwxMiArMTUxOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFZNJiB2bSwgR1BSUmVn
IHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2Us
IE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSMSwKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNz
VHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMSk7
CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBzY3Jh
dGNoR1BSMSwgc3RydWN0dXJlLCBzdG9yYWdlLCBtYXNrLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgp
OwogICAgIH0KICAgICAKQEAgLTE1OTMsMjAgKzE1MzQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ly8gYWxsb2NhdGlvblNpemUgY2FuIGJlIGFsaWFzZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGlu
cHV0IEdQUnMuIElmIGl0J3Mgbm90IGFsaWFzZWQgdGhlbiBpdAogICAgIC8vIHdvbid0IGJlIGNs
b2JiZXJlZC4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3Vs
dEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0
aCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAg
JiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11
c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBzdGVw
U2hpZnQgPSBnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnNpemVTdGVwKTsKLSAgICAgICAgCi0gICAg
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2Nh
dGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMihz
dGVwU2hpZnQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gz
MihBYm92ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRv
ZmYgPj4gc3RlcFNoaWZ0KSkpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2Uu
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgIGxvYWRQ
dHIoQmFzZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgdGltZXNQdHIoKSksIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgCi0gICAgICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIG51bGxw
dHIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwotICAgIH0KKyAgICB2b2lk
IGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJz
cGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIx
LCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCk7CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgogICAgIHZv
aWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BS
LCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcg
c2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC04NTYsOSArODU2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MoY2FsbGVlUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVu
Y3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSks
IGFsbG9jYXRvclJlZyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFs
LCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAog
ICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1w
IGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9u
UmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7
CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1
Y3RpbwogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgbnVsbHB0ciwgYWxsb2NhdG9yUmVnLCBz
dHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEFsbG9jYXRvcigpLCBhbGxvY2F0b3JS
ZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0
ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03NjYsOSArNzY2
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MoY2FsbGVlUmVnLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSks
IHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVE
YXRhUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZDMy
KEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9j
YXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcs
IEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVn
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW0z
MihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24s
IGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBi
cmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBAIC03NzgsNyArNzc4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgYXV0
byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgbnVsbHB0ciwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFz
aywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1
bHRSZWcsIEFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5
LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaFJlZywg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2NyYXRjaFJlZyk7CiAgICAgbG9hZDMy
KEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw3ICs3OSw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5Ojpv
cHRpbWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChW
TSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNz
ZXJ0KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg3
LDcgKzg3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5n
SGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgbnVsbHB0
ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIWJhc2UpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2Uo
YmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAtMTY1LDcgKzE2NSw3IEBA
IGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVC
YXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
LSAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
UmV0dXJuTnVsbCk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIW5ld0Jhc2UpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBi
ZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1h
cEltcGwuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6OmFsbG9jYXRp
b25TaXplKGNhcGFjaXR5KTsKLSAgICAgICAgdm9pZCogZGF0YSA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgbnVsbHB0
ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCogZGF0
YSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2
bSwgYWxsb2NhdGlvblNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJu
TnVsbCk7CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyNjg5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC04MSw3ICs4MSwxMCBAQCBK
U0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAgICAgICB8fCBo
YXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJl
LCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51
bGwpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sCisgICAgICAgICAgICBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwKKyAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgs
NyArMTAxLDEwIEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAg
ICB9IGVsc2UgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhCaWFzID0gMDsK
ICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVj
dG9yTGVuZ3RoKGluZGV4Qmlhcywgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAg
dm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9u
VmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2Us
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiB0
ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KAorICAgICAgICAgICAgdm0sCisgICAgICAgICAgICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRl
eEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0
b3JMZW5ndGgpKSwKKyAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKHRlbXAsIGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC0zNjgsNyArMzc0
LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShjb25zdAogICAgICAgICBh
bGxvY2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90
IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0Fs
bG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmly
dHVhbChuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwp
OworICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwgbmV3U2l6ZSwgbnVsbHB0ciwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFuZXdBbGxv
Y0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBh
Y2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjM4LDYgKzIzOCw3IEBAIGlubGluZSBKU0Fy
cmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVy
ZSwgdmVjdG9yTGVuZ3RoSGludCk7CiAgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwK
ICAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLAogICAgICAgICAgICAg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYg
KCF0ZW1wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDE0ICsxNDUsMTUgQEAg
Q29tcGxldGVTdWJzcGFjZSogSlNDZWxsOjpzdWJzcGFjZUZvcihWTQogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIEFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmIGhl
YXAsIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CisgICAgVk0mIHZtID0gKmhlYXAudm0o
KTsKICAgICBBU1NFUlQoZGVmZXJyYWxDb250ZXh0IHx8ICFEaXNhbGxvd0dDOjppc0luRWZmZWN0
T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChzaXplID49IHNpemVvZihUKSk7Ci0gICAg
SlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVh
cC52bSgpKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVy
ZU1vZGUpKTsKKyAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNw
YWNlRm9yPFQ+KHZtKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBkZWZlcnJhbENvbnRl
eHQsIGZhaWx1cmVNb2RlKSk7CiAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6UmV0dXJuTnVsbCAmJiAhcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0
aWFsaXppbmdPYmplY3QoKSk7Ci0gICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RD
bGFzcyhUOjppbmZvKCkpOworICAgIEFTU0VSVCghdm0uaXNJbml0aWFsaXppbmdPYmplY3QoKSk7
CisgICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKICNlbmRpZgog
ICAgIHJlc3VsdC0+Y2xlYXJTdHJ1Y3R1cmUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAko
cmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNyArMzQyLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZW5xdQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmpl
Y3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4g
dGhyZWFkTG9jYWxDYWNoZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgMCkKICAgICAsIG1f
dm0odm0pCiAgICAgLCBtX21hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KGFkb3B0UmVm
KG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpKQpAQCAtMzYwLDYgKzM2MCw3IEBAIEpTR2xv
YmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFMKICAgICAsIG1fdGVtcGxhdGVSZWdp
c3RyeSh2bSkKICAgICAsIG1fcnVudGltZUZsYWdzKCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorICAgICwgbV90aHJlYWRMb2NhbENhY2hl
KHRocmVhZExvY2FsQ2FjaGUgPyBXVEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUpIDogdm0uZGVmYXVs
dFRocmVhZExvY2FsQ2FjaGUpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDkxLDcgKzQ5MSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSdW50aW1lRmxhZ3MmIHJ1bnRp
bWVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fcnVudGltZUZsYWdzOyB9CiAKIHByb3RlY3RlZDoK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVj
dHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3Qg
R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+ID0g
bnVsbHB0cik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CiAKQEAgLTg5Myw2ICs4OTMsOCBAQCBwdWJsaWM6CiAgICAgSlNXcmFwcGVyTWFwKiB3cmFw
cGVyTWFwKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyTWFwLmdldCgpOyB9CiAgICAgdm9pZCBz
ZXRXcmFwcGVyTWFwKEpTV3JhcHBlck1hcCogbWFwKSB7IG1fd3JhcHBlck1hcCA9IG1hcDsgfQog
I2VuZGlmCisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSYgdGhyZWFkTG9jYWxDYWNoZSgpIGNv
bnN0IHsgcmV0dXJuICptX3RocmVhZExvY2FsQ2FjaGUuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgog
ICAgIHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewpAQCAtOTMwLDYgKzkzMiw4IEBAIHByaXZh
dGU6CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBSZXRhaW5QdHI8SlNXcmFwcGVyTWFw
PiBtX3dyYXBwZXJNYXA7CiAjZW5kaWYKKyAgICAKKyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNo
ZT4gbV90aHJlYWRMb2NhbENhY2hlOwogfTsKIAogSlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2Jq
ZWN0KEpTVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBKU0xvY2s6
OmRpZEFjcXVpcmVMb2NrKCkKIAogICAgIG1fdm0tPnNldExhc3RTdGFja1RvcCh0aHJlYWQuc2F2
ZWRMYXN0U3RhY2tUb3AoKSk7CiAgICAgQVNTRVJUKHRocmVhZC5zdGFjaygpLmNvbnRhaW5zKG1f
dm0tPmxhc3RTdGFja1RvcCgpKSk7Ci0KKyAgICAKICAgICBtX3ZtLT5oZWFwLm1hY2hpbmVUaHJl
YWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBX
YXNtOjpzdGFydFRyYWNraW5nQ3VycmVudFRocmVhZCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgzLDYgKzM4Myw5IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgIAogICAg
IEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VE
aXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKKyAgICAKKyAgICBkZWZhdWx0VGhyZWFkTG9jYWxDYWNo
ZSA9IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShoZWFwKTsKKyAgICBkZWZhdWx0VGhyZWFkTG9j
YWxDYWNoZS0+aW5zdGFsbCgqdGhpcyk7CiAKICAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVj
dCgpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAy
MjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxl
LmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKKyNp
bmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9y
Lmg+CkBAIC02NTYsNiArNjU3LDExIEBAIHB1YmxpYzoKIAogICAgIEpTT2JqZWN0KiBzdHJpbmdS
ZWN1cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsgbnVsbHB0ciB9OwogICAgIEhhc2hTZXQ8SlNPYmpl
Y3QqPiBzdHJpbmdSZWN1cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzOworICAgIAorI2lmICFFTkFC
TEUoRkFTVF9UTFNfSklUKQorICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIHRocmVhZExvY2Fs
Q2FjaGVEYXRhOworI2VuZGlmCisgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGRlZmF1bHRU
aHJlYWRMb2NhbENhY2hlOwogCiAgICAgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUgbG9jYWxUaW1lT2Zm
c2V0Q2FjaGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlT
Y29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1F
bnRyeVNjb3BlLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcg
QEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAgIDogbV92bSh2
bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKKyAgICBnbG9iYWxPYmpl
Y3QtPnRocmVhZExvY2FsQ2FjaGUoKS0+aW5zdGFsbCh2bSk7CiAgICAgQVNTRVJUKCFEaXNhbGxv
d1ZNUmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsKICAgICBBU1NFUlQoVGhy
ZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKICAgICBpZiAoIXZt
LmVudHJ5U2NvcGUpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331796</attachid>
            <date>2018-01-19 15:27:56 -0800</date>
            <delta_ts>2018-01-19 17:01:20 -0800</delta_ts>
            <desc>got it to build!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>155851</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDYg
KzQ2Niw3IEBAIGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAogaGVh
cC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAoraGVhcC9BbGxvY2F0b3IuY3BwCiBoZWFwL0Js
b2NrRGlyZWN0b3J5LmNwcAogaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAKIGhlYXAvQ2VsbENvbnRh
aW5lci5jcHAKQEAgLTUwMCw2ICs1MDEsNyBAQCBoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lz
b1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxv
Y2F0aW9uLmNwcAoraGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmNwcApAQCAtNTE4LDYgKzUyMCw4IEBAIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAvVGhyZWFkTG9jYWxD
YWNoZS5jcHAKK2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM4OSw2ICszODksMTIgQEAKIAkJMEY3MjVDQUExQzUwM0RFRDAwQUQ5NDNBIC8q
IEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovOyB9OwogCQkwRjcy
NUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUUxQzUwNkQzQjAwQUQ5
NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsKIAkJMEY3NEI5M0IxRjg5NjE0ODAw
QjkzNUQzIC8qIFByb3RvdHlwZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVB
MDVFMjAwRDI1RjYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRv
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLzsg
fTsKKwkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NzIwMEQyNUYw
MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjc1QTA2MjIwMEQyNjFEMDAzOEUyQ0YgLyogQWxsb2Nh
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLzsgfTsK
KwkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNG
IC8qIEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzVBMDY0MjAwRDI2MjgwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDJDMTVBOEND
M0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZE
MkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDMxMTVBQTgxMTIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI0MjAsNiArMjQyNiwxNiBAQAogCQkwRjcyNUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xk
UGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0Eg
LyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVEMyAv
KiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90
eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU1MjAwRDI1
RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1ODIw
MEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2FsQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUEyMDBEMjVGMDAwMzhF
MkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDVDMjAwRDI1
RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0Ug
LyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
U3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4
Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NDIsNiArNTU1OCwxNiBAQAog
CQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFs
bG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2Nh
dG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0
b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuY3BwICovLAorCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2Nh
bENhY2hlLmggKi8sCisJCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAorCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5
QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0
MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEEx
REI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtODA1MSw2ICs4MDc3
LDcgQEAKIAkJCQkwRjJBQzU3MTFFOEVFNDU0MDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVBMDYxMjAwRDI2MTgwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0ExQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtODIxNiw2ICs4MjQzLDcgQEAKIAkJCQkwRjZCOEFERDFDNEVG
QUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
RkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REYyMUJFOTNB
RDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC04Mzg1LDYgKzg0MTMsNyBAQAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBG
OTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgx
MjFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8q
IEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3
IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAw
QkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtODY2NSw2ICs4Njk0LDcgQEAKIAkJCQlGRUEwQzQwMzFDREQ3RDFEMDA0ODE5OTEg
LyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QkUyQ0FFMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIw
OCAvKiBHQ0NvbmR1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDc2N0UxRDk5QUVBOTAw
OEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTg3NDksNiAr
ODc3OSw3IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVy
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1
MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVB
MDYyMjAwRDI2MUQwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkJGOTJCOTFGRDc2RkZGMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkY5MkJBMUZENzcwMDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNSw2ICs4OTY2LDcg
QEAKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8q
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMUUx
ODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3Nyw2ICsxMjc3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAg
YXJnID0gdG1wKHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6IHsKKyAgICAgICAg
ICAgICAgICBUbXAgZHN0VG1wID0gbV9jb2RlLm5ld1RtcCh2YWx1ZS52YWx1ZSgpLT5yZXN1bHRC
YW5rKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUu
dmFsdWUoKS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUudmFsdWUoKSksIGRzdFRtcCk7CisgICAg
ICAgICAgICAgICAgYXJnID0gZHN0VG1wOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgc3RhY2ttYXAt
PmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodmFsdWUucmVwKCkucmVnKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgYm9vbCBQYXRjaHBvaW50
U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdAogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0Fy
Z3VtZW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENs
b2JiZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJl
Z2lzdGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDkgQEAg
dm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6Q29uc3RhbnQ6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlRGVmOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lz
dGVyOgogICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMjgsNiArMTMxLDEwIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JF
YWNoQXJnSW1wbCgKICAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gcmVjb3ZlciB0aGUgc3RhY2tt
YXAgdmFsdWUuIFNvLCBmb3JjZSBMYXRlQ29sZFVzZSB0byBwcmVzZXJ2ZSB0aGUKICAgICAgICAg
ICAgIC8vIG9yaWdpbmFsIHN0YWNrbWFwIHZhbHVlIGFjcm9zcyB0aGUgU3BlY2lhbCBvcGVyYXRp
b24uCiAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIG9wdGlvbmFsRGVm
QXJnV2lkdGggJiYgKm9wdGlvbmFsRGVmQXJnV2lkdGggPCBjaGlsZC52YWx1ZSgpLT5yZXN1bHRX
aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHJvbGUgY2FuIG9ubHkgYmUgc29tZSBr
aW5kIG9mIGRlZiBpZiB3ZSBkaWQgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIsIHdoaWNoIGlzCisg
ICAgICAgICAgICAgICAgLy8gb25seSBhbGxvd2VkIGZvciBwYXRjaHBvaW50cy4gUGF0Y2hwb2lu
dHMgZG9uJ3QgdXNlIHRoZSBkZWZBcmdXaWR0aCBmZWF0dXJlLgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFBcmc6OmlzQW55RGVmKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDYgKzUzLDExIEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29t
ZVJlZ2lzdGVyKFYKICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOwogfQogCit2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKSk7Cit9CisKIHZv
aWQgU3RhY2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgQ29uc3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAgICBjaGlsZChpbmRl
eCkgPSBjb25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw3
ICs5OSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21ldGhpbmcg
eW91IG1pZ2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25z
dHJhaW5lZAogICAgIC8vIHRvIFNvbWVSZWdpc3Rlci4KICAgICB2b2lkIGFwcGVuZFNvbWVSZWdp
c3RlcihWYWx1ZSopOwotCisgICAgdm9pZCBhcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihW
YWx1ZSopOworICAgIAogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMoKSBjb25zdCB7
IHJldHVybiBtX3JlcHM7IH0KIAogICAgIC8vIFN0YWNrbWFwcyBhbGxvdyB5b3UgdG8gc3BlY2lm
eSB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIgc29tZSByZWdpc3RlcnMuIENsb2JiZXJp
bmcgYSByZWdpc3RlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsMjEgKzQzMiw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBWb2lkKQog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigp
LT5yZXN1bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQua2luZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTdGFja0FyZ3VtZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURShm
YWxzZSwgKCJBdCAiLCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcENvbnN0cmFpbnQo
dmFsdWUsIENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+
KCktPnJlc3VsdENvbnN0cmFpbnQpLCBDb25zdHJhaW50Um9sZTo6RGVmKTsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENoZWNrQWRkOgpAQCAtNTcxLDE2ICs1
NTgsMjQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHN3aXRjaCAodmFsdWUucmVwKCkua2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbGRBbnk6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xkQW55OgogICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6TGF0ZUNvbGRBbnk6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgICAg
ICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRl
eHQsICI6ICIsIHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICBWQUxJREFURShyb2xl
ID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7
CisgICAgICAgICAgICBWQUxJREFURShjb250ZXh0LT5hczxQYXRjaHBvaW50VmFsdWU+KCksICgi
QXQgIiwgKmNvbnRleHQpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29u
c3RyYWludFJvbGU6OkRlZiwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKHZhbHVlLnJlcCgp
LmtpbmQoKSA9PSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIFZBTElE
QVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwg
dmFsdWUpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5yZXAoKS5yZWcoKS5pc0dQUigpKQogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLnZhbHVlKCktPnR5cGUoKSksICgiQXQg
IiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MCw2ICs0MCw3IEBAIHZvaWQgVmFsdWVSZXA6OmFkZFVzZWRSZWdpc3RlcnNUbyhSZWdpc3QK
ICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVS
ZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuOwpAQCAt
NzEsNiArNzIsNyBAQCB2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvCiAg
ICAgY2FzZSBDb2xkQW55OgogICAgIGNhc2UgTGF0ZUNvbGRBbnk6CiAgICAgY2FzZSBTb21lUmVn
aXN0ZXI6CisgICAgY2FzZSBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVF
YXJseVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRlUmVnaXN0ZXI6CkBA
IC0xNzUsNiArMTc3LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZh
bAogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJT
b21lUmVnaXN0ZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcldpdGhDbG9iYmVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJTb21lRWFybHlSZWdpc3RlciIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02NSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEFzIGFu
IGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29t
ZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQogICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMg
Y2xhaW1zIHRvIGNsb2JiZXIhCiAgICAgICAgIFNvbWVSZWdpc3RlciwKKyAgICAgICAgCisgICAg
ICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hv
dWxkIHBpY2sgc29tZSByZWdpc3RlciBidXQgdGhhdCB0aGlzCisgICAgICAgIC8vIHJlZ2lzdGVy
IGlzIHRoZW4gY29iYmVyZWQgd2l0aCBnYXJiYWdlLiBUaGlzIG9ubHkgd29ya3MgZm9yIHBhdGNo
cG9pbnRzLgorICAgICAgICBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwKIAogICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIHNob3VsZCBw
aWNrIHNvbWUgcmVnaXN0ZXIsIGJ1dCBpbXBsaWVzCiAgICAgICAgIC8vIHRoYXQgdGhlIGRlZiBo
YXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMgb2YgdGhlIHN0YWNrbWFwLiBUaGlzIGlz
IG9ubHkgdmFsaWQgZm9yCkBAIC0xMDcsNyArMTExLDcgQEAgcHVibGljOgogICAgIFZhbHVlUmVw
KEtpbmQga2luZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRB
bnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7
CisgICAgICAgIEFTU0VSVChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtp
bmQgPT0gTGF0ZUNvbGRBbnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21l
UmVnaXN0ZXJXaXRoQ2xvYmJlciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKICAgICB9
CiAKICAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTU1LDE0ICs5NTUsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFs
bG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1Np
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAg
ICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQogICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIyKTsKICAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hH
UFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXpl
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVDYXBhY2l0
eSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSwgbV9p
bmxpbmVDYXBhY2l0eSk7IH0KIAogICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKLSAgICAg
ICAgOiBtX2FsbG9jYXRvcigwKQotICAgICAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKKyAgICAg
ICAgOiBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApAQCAtNjMsNyArNjIsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1fYWxsb2NhdG9y
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3IoKTsKICAgICAgICAg
bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IDA7CiAgICAg
ICAgIEFTU0VSVChpc051bGwoKSk7CkBAIC03Nyw3ICs3Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYsIEpTT2JqZWN0
KiBwcm90b3R5cGUpOwogCi0gICAgQmxvY2tEaXJlY3RvcnkqIG1fYWxsb2NhdG9yOyAvLyBQcmVj
b21wdXRlZCB0byBtYWtlIHRoaW5ncyBlYXNpZXIgZm9yIGdlbmVyYXRlZCBjb2RlLgorICAgIEFs
bG9jYXRvciBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVy
IGZvciBnZW5lcmF0ZWQgY29kZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKICAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5OwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpCiAKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlY3V0YWJs
ZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKLSAg
ICAgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fYWxsb2NhdG9y
ID0gQWxsb2NhdG9yKCk7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk5LDExICs5OSwxMSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGlu
ZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5s
aW5lQ2FwYWNpdHkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bS5jZWxsU3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uY2VsbFNw
YWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkVuc3VyZUFsbG9jYXRvcik7CiAKICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBp
bmxpbmUgY2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgogICAgIGlmIChhbGxv
Y2F0b3IpIHsKLSAgICAgICAgc2l6ZV90IHNsb3AgPSAoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpIC0g
YWxsb2NhdGlvblNpemUpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAg
IHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci5jZWxsU2l6ZSh2bS5oZWFwKSAtIGFsbG9jYXRpb25T
aXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgICAgICBpbmxpbmVDYXBh
Y2l0eSArPSBzbG9wOwogICAgICAgICBpZiAoaW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0Zp
bmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpOwpAQCAtMTEzLDcgKzExMyw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmkKIAogICAgIGlmIChpc1BvbHlQcm90
bykgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7Ci0gICAgICAg
IG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3Io
KTsKICAgICAgICAgZXhlY3V0YWJsZS0+c2V0Q2FjaGVkUG9seVByb3RvU3RydWN0dXJlKHZtLCBz
dHJ1Y3R1cmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChleGVjdXRhYmxlKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKDApLCBzdG9yYWdlR1BSKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cykpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkg
ewogICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwg
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faml0LmFkZFB0cigKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQ
dHIpIHsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNj
cmF0Y2hHUFIpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFs
T2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2Nh
dG9yKSB7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2so
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBh
bGxvY2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFn
ZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2sp
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDIw
OCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGJsb2NrRGlyZWN0
b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYmxvY2tEaXJlY3Rv
cnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGJs
b2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2Ny
YXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JWYWx1ZSA9IHN1YnNw
YWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yVmFsdWUsIGFs
bG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJl
KG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyAr
ODM4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1Zh
bHVlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQwOCw3ICs4NDA1LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BS
MiA9IHNjcmF0Y2gyLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdw
cigpOwogICAgICAgICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICBt
X2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CkBA
IC04NDI4LDcgKzg0MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9y
OwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIGlmICghYWxsb2Nh
dG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CkBAIC04NDU2LDcgKzg0NTIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7CiAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
Mywgc2xvd1BhdGgpOwogICAgIAogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwpA
QCAtMTE0MTUsMTQgKzExNDEwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVUaGlzKE4KICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
KSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIp
OworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKIAot
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0
b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQ
UiwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBBbGxvY2F0b3IoKSwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1
cmVHUFIsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9m
ZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZklubGluZUNhcGFjaXR5KCkpLCBpbmxpbmVDYXBhY2l0eUdQUik7CkBAIC0xMTQ0OCwxNCArMTE0
NDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChObwogCiAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JQ
dHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBzdWJzcGFjZUZvcjxKU0Zp
bmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwotICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBhdXRvIG1hc2sgPSBU
cnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxv
Y2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICBtX2ppdC5lbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgaWYgKCFhbGxvY2F0b3JW
YWx1ZSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAg
ICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclZhbHVlLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Cisg
ICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9q
aXQudm0oKSk7CisgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJl
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxMjAsNyArMzEyMCw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGEgY2VsbCBvZiBhIHNwZWNpZmljIHNpemUuCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoCi0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxv
Y2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAorICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVK
U0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CkBAIC0zMTI5LDcgKzMxMjksNyBAQCBwdWJsaWM6CiAgICAgLy8g
QWxsb2NhdG9yIGZvciBhbiBvYmplY3Qgb2YgYSBzcGVjaWZpYyBzaXplLgogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUg
TWFza1R5cGU+IC8vIFN0cnVjdHVyZVR5cGUsIFN0b3JhZ2VUeXBlIGFuZCwgTWFza1R5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdCgKLSAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9J
TkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVj
dG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0
ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6
ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9j
YXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNp
emVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRz
X3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+
KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMzLDEwICs1ODMzLDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmlu
c2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
b2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwog
ICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdl
dCgpLCBzbG93UGF0aCk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5v
ZmZzZXQoKSksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
S2lkczsgKytpKQpAQCAtOTg2MSw3ICs5ODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRl
eGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAg
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxsQWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVk
UHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwpAQCAtOTkyMCw3ICs5OTIwLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBtYXNrID0gY29tcHV0ZUJ1dHRlcmZseUlu
ZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2Jq
ZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoY2VsbEFsbG9jYXRvciksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBt
YXNrLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2Vs
bEFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNr
LCBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0
ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUp
OwpAQCAtMTA4OTIsOCArMTA4OTIsOCBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAg
ICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwot
ICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgICAgIExWYWx1ZSBzdGFydE9mU3Rv
cmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIExWYWx1ZSBzdGFydE9m
U3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkg
PSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIo
c2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMTE5MjUsMTYgKzExOTI1LDE4
IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2Nh
dG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5
KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJ
bnRQdHIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxCbG9j
a0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIoKSk7CisgICAgICAgIEFsbG9jYXRvciBh
Y3R1YWxBbGxvY2F0b3I7CisgICAgICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAg
ICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBBbGxvY2F0b3IoYWxsb2NhdG9yLT5hc0ludDMyKCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAgICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBlaXRoZXIgd2Uga25vdyB0aGF0IHRoZSBhbGxvY2F0b3IgaXMg
bnVsbCBvciB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgICAgICAgICAvLyBhbGxvY2F0b3Ig
aXMuIEluIGVpdGhlciBjYXNlLCB3ZSBuZWVkIHRoZSBudWxsIGNoZWNrLgogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaGF2ZUFsbG9jYXRvciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZl
QWxsb2NhdG9yKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChhbGxvY2F0b3IsIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGFsbG9jYXRvciwgbV9vdXQuY29u
c3RJbnQzMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpLAorICAgICAgICAgICAgICAgIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaGF2ZUFsbG9jYXRvciwgbGFzdE5leHQpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTE5NDQsNyArMTE5NDYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOwotICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYWxsb2NhdG9yKTsKKyAgICAgICAgaWYgKGFjdHVh
bEFsbG9jYXRvcikKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cysrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcihhbGxvY2F0b3IpOwogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9
IFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjsKICAgICAgICAgCkBAIC0xMTk1NSw2ICsxMTk2
MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGp1bXBUb1Nsb3dQYXRoOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhbGxvY2F0b3JHUFI7CisgICAgICAgICAgICAgICAgaWYg
KGFjdHVhbEFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFy
YW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRp
b24gcGF0aCBiZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8v
IGFsbG9jYXRpb24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1h
Y2hpbmUgY29kZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hh
dCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBj
b21waWxlcgpAQCAtMTE5NjIsNyArMTE5NzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IC8vIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBv
cHRpbWl6ZWQgcGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhl
IGNvbXBpbGVyIHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1
YWxBbGxvY2F0b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9TdWNjZXNzOwpAQCAtMTIwNTQsOCArMTIwNjUsOCBAQCBwcml2YXRlOgogICAg
IExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0
dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4KQEAgLTEyMDc0LDE2ICsxMjA4NSwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxl
dGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBh
Y3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxT
dWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVy
bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0
dWFsQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVh
bEFsbG9jYXRvci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIx
MDIsNyArMTIxMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQubG9hZFB0cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1f
b3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2Vf
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1
YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxMTcsOCArMTIxMjgs
NyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAg
ICAgICAgIExWYWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVl
IGJ1dHRlcmZseSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xv
d1BhdGgpCiAgICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6
ZSgKLSAgICAgICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93
UGF0aCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJm
bHlJbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTI2LDE1ICsxMjEzNiwx
NCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAg
ICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUo
Ci0gICAgICAgICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1Bh
dGgpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4g
YWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0
Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdl
IGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAg
ICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxNDYs
NyArMTIxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291
dC5pbnRQdHJaZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50
UHRyWmVybywgbV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3Vuc2lnbmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0
KS0+Y2VsbFNpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZN
OworCitjbGFzcyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAg
IAorICAgIEFsbG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgdW5z
aWduZWQgY2VsbFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9m
ZnNldCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0FsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoVk0m
IHZtLCBHQ0RlZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1v
ZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcih2bSwg
bV9vZmZzZXQpLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKIAotI2luY2x1ZGUgIkFs
bG9jYXRpbmdTY29wZS5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTQyLDEw
ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWRlRGVz
dHJ1Y3RvckJsb2NrcyA9IHRydWU7CiAKIEJsb2NrRGlyZWN0b3J5OjpCbG9ja0RpcmVjdG9yeShI
ZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX2ZyZWVMaXN0KGNlbGxTaXplKQot
ICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDApCi0gICAg
LCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCisgICAgOiBtX2Nl
bGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCiAgICAgLCBtX2hlYXAoaGVh
cCkKIHsKIH0KQEAgLTgxLDE0MyArNzcsMTQgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tE
aXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAot
dm9pZCBCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKK01hcmtlZEJsb2NrOjpI
YW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBp
ZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJl
ZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50Qmxv
Y2sgPSBudWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZygpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOwotICAgIAotICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOwotICAgIEFTU0VS
VChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAKLSAgICBmb3IgKDs7KSB7
Ci0gICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkg
fCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7Ci0gICAgICAgIGlm
IChtX2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIAotICAgICAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKLQotICAgICAgICBpZiAo
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihtX2Jsb2Nrc1ttX2FsbG9jYXRpb25DdXJzb3Jd
KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIGlmIChPcHRp
b25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCi0gICAgICAgICYmICh0
cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKLSAgICAgICAg
aWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFjZS0+ZmluZEVtcHR5Qmxv
Y2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9zdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCi0gICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhh
dmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5Ci0gICAgICAgICAgICAvLyBhbmQgZW1wdHkg
c2V0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJvbURpcmVj
dG9yeSgpOwotICAgICAgICAgICAgYWRkQmxvY2soYmxvY2spOwotICAgICAgICAgICAgcmV0dXJu
IGFsbG9jYXRlSW4oYmxvY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbihNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jaykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJs
b2NrKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5k
bGUqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwotICAgIAotICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7Ci0gICAg
Ci0gICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJs
b2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0Ci0gICAgLy8gdGhhdCBhbGdv
cml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCi0gICAgaWYg
KG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKLSAgICAgICAgQVNTRVJUKGJsb2Nr
LT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxv
Y2F0ZWQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwotICAgICAg
ICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwotICAgICAgICBB
U1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2Nr
KSk7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8
IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICBpZiAobV9h
bGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotICAgIAotICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAgCi0gICAg
dm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgW10gKCkgLT4gSGVh
cENlbGwqIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSk7Ci0gICAgc2V0SXNFZGVuKE5vTG9j
a2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUpOwotICAgIG1hcmtlZFNwYWNlKCku
ZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmRvVGVzdENvbGxlY3Rpb25z
SWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBpZiAo
IU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKLSAgICBpZiAoIWFsbG9j
YXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAgICAgICAgICAgICAgIGRlZmVycmFsQ29u
dGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49IE9wdGlvbnM6OnNsb3dQ
YXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAwOwotfQot
Ci12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCi17
Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIEFT
U0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAg
IGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKLQotICAgIEFTU0VS
VCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKLSAgICBtX2hlYXAtPmRpZEFsbG9jYXRl
KG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwotICAgIAotICAgIGRpZENvbnN1bWVGcmVlTGlz
dCgpOwotICAgIAotICAgIEFsbG9jYXRpbmdTY29wZSBoZWxwaW5nSGVhcCgqbV9oZWFwKTsKLQot
ICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOwog
ICAgIAotICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sg
YW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQotICAg
IC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2Fs
bGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElLRUxZKG1fY3Vy
cmVudEJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFp
bHVyZU1vZGUpOwotICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENv
bGxlY3RpbmcoKTsKLSAgICAKLSAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IHRy
eUFsbG9jYXRlQmxvY2soKTsKLSAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlmIChmYWlsdXJl
TW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBhZGRCbG9jayhibG9jayk7Ci0gICAgcmVzdWx0ID0gYWxs
b2NhdGVJbihibG9jayk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2Fs
bG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKKyAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9u
Q3Vyc29yXTsKIH0KIAogc3RhdGljIHNpemVfdCBibG9ja0hlYWRlclNpemUoKQpAQCAtMzEzLDI0
ICsxODAsMTkgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmcoKQogewogICAg
IGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBCbG9ja0Rp
cmVjdG9yeTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAgICBBU1NFUlQoIW1fbGFzdEFjdGl2ZUJs
b2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVChtX2ZyZWVM
aXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAgbV9s
YXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJlbnRCbG9jayA9IDA7
Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2go
CisgICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAg
YWxsb2NhdG9yLT5zdG9wQWxsb2NhdGluZygpOworICAgICAgICB9KTsKIH0KIAogdm9pZCBCbG9j
a0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogewotICAgIG1fbGFzdEFjdGl2ZUJs
b2NrID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9mcmVl
TGlzdC5jbGVhcigpOwotCisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAg
WyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3It
PnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgICAgIH0pOworICAgIAogICAgIG1fYWxsb2Nh
dGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNvciA9IDA7CiAgICAgbV91bnN3ZXB0Q3Vy
c29yID0gMDsKQEAgLTM1NCwxMiArMjE2LDEwIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6Omxhc3RD
aGFuY2VUb0ZpbmFsaXoKIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2NhdGluZygp
CiB7Ci0gICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAgbV9j
dXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RBY3RpdmVCbG9jayA9
IG51bGxwdHI7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChM
b2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnJlc3Vt
ZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmJl
Z2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKQEAgLTM3OSw3ICsyMzksNyBAQCB2b2lkIEJs
b2NrRGlyZWN0b3J5OjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBvZiBjb2xs
ZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhlIG1f
bWFya2luZ1hZWgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgaWYgKCF0cmFkZURlc3RydWN0
b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgaWYgKCFPcHRpb25zOjp0cmFk
ZURlc3RydWN0b3JCbG9ja3MoKSAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsKICAgICAgICAgQVNT
RVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKICAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5
ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CiAgICAgfSBlbHNlIHsKQEAgLTUxMiw1ICsz
NzIsMTUgQEAgTWFya2VkU3BhY2UmIEJsb2NrRGlyZWN0b3J5OjptYXJrZWRTcGFjZQogICAgIHJl
dHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQogCitib29sIEJsb2NrRGlyZWN0b3J5Ojppc0Zy
ZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZh
bHNlOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAoTG9jYWxB
bGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0IHw9IGFsbG9jYXRvci0+
aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDZWxsQXR0cmlidXRlcy5o
IgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVk
ZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQzLDcgQEAgY2xhc3MgSGVhcDsKIGNs
YXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUgRk9SX0VB
Q0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxpdmUsIExpdmUpIC8q
IFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4gKi9cCkBA
IC03Niw5ICs3OSw2IEBAIGNsYXNzIEJsb2NrRGlyZWN0b3J5IHsKICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkZyZWVMaXN0KCk7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXpl
KCk7Ci0KICAgICBCbG9ja0RpcmVjdG9yeShIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKICAgICB2
b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6
ZSgpOwpAQCAtOTcsMTAgKzk3LDkgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3Ry
dWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2b2lkKiBh
bGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAg
SGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogCi0gICAgYm9vbCBpc0ZyZWVMaXN0ZWRD
ZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxs
KGNvbnN0IHZvaWQqIHRhcmdldCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7CkBAIC0x
NTcsMjQgKzE1NiwyMCBAQCBwdWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNv
bnN0OwogICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJlZUxpc3Q7IH0KKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
QWxsb2NhdG9yKG1fdGxjT2Zmc2V0KTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmls
ZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwog
ICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKLSAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
LSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgdm9pZCog
dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCogYWxsb2NhdGVJ
bihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENv
bGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgbV9m
cmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CiAg
ICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKICAgICBWZWN0
b3I8dW5zaWduZWQ+IG1fZnJlZUJsb2NrSW5kaWNlczsKQEAgLTE5MywxMCArMTg4LDYgQEAgcHJp
dmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBu
ZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVtcHR5IGFsbG9jYXRpb24gKGFsbG9j
YXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXplX3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9
OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5j
cmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJy
ZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2s7Ci0K
LSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIENlbGxBdHRy
aWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHNob3VsZCBw
cm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2LDE2ICsxOTcsMTAgQEAgcHJpdmF0ZToKICAg
ICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5IHsgbnVsbHB0ciB9OwogICAgIEJsb2Nr
RGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlIHsgbnVsbHB0ciB9OwogICAgIEJs
b2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBu
dWxscHRyIH07CisgICAgCisgICAgTG9jayBtX2xvY2FsQWxsb2NhdG9yc0xvY2s7CisgICAgc2l6
ZV90IG1fdGxjT2Zmc2V0OworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMb2NhbEFsbG9jYXRvciwg
QmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+PiBtX2xvY2FsQWxsb2NhdG9yczsK
IH07CiAKLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3Qo
KQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQmxvY2tEaXJlY3RvcnksIG1fZnJlZUxp
c3QpOwotfQotCi1pbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxT
aXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEJsb2NrRGlyZWN0b3J5LCBtX2Nl
bGxTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkocmV2aXNpb24gMjI2
ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1pbmxpbmUgYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lk
KiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMoYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCogQmxv
Y2tEaXJlY3Rvcnk6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKLXsKLSAgICByZXR1cm4gbV9mcmVl
TGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAgICAgICAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBm
YWlsdXJlTW9kZSkpOwotICAgICAgICB9KTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IGlubGluZSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKIHsKICAgICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAy
MjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9y
eUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxv
Y2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0zOCw0MCArNDIsMzggQEAgQ29tcGxldGVTdWJzcGFjZTo6Q29tcGxldGVTdWJzcGFj
ZShDU3RyaQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKIHsKICAgICBpbml0aWFsaXplKGhl
YXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9
IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKLSAgICAgICAgbV9hbGxvY2F0b3JG
b3JTaXplU3RlcFtpXSA9IG51bGxwdHI7CiB9CiAKIENvbXBsZXRlU3Vic3BhY2U6On5Db21wbGV0
ZVN1YnNwYWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQWxsb2NhdG9y
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1v
ZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwg
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoVk0mIHZtLCBz
aXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1
YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIGFsbG9j
YXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiB9
CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0
dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICB2b2lkICpyZXN1
bHQ7Ci0gICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkKLSAgICAg
ICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAgICAgICBy
ZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KHNpemUsIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3co
dm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JT
bG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZv
clNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNp
emVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNl
OjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKICAgICBpZiAoIXNpemVDbGFzcykKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBBbGxvY2F0b3IoKTsKICAgICAK
ICAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sgZm9yIHRo
ZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKICAgICAvLyB0byBnZW5l
cmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVuIHVzZWQg
eWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0KQEAgLTgyLDcgKzg0LDcgQEAgQmxvY2tEaXJlY3Rv
cnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQgYW55ICJmb3JFYWNoQWxs
b2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0ZXIgaXQn
cyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAogICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwotICAgIGlmIChCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0pCisgICAg
aWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkK
ICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKQEAgLTk4LDcgKzEw
MCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAgICAgICAg
aWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xh
c3MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVw
W2luZGV4XSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRl
eF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpbmRl
eC0tKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsMjMgKzEwOSwyMyBAQCBCbG9ja0RpcmVj
dG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CiAgICAgbV9maXJzdERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICByZXR1cm4gZGly
ZWN0b3J5OworICAgIHJldHVybiBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogfQogCi12b2lkKiBD
b21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
K3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVfdCBzaXpl
LCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KHNp
emUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93
KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlB
bGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZtLCBzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIHNhbml0aXplU3RhY2tG
b3JWTSgmdm0pOwogICAgIAotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gYWxs
b2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCi0gICAg
ICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpKQor
ICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgCiAgICAgaWYgKHNpemUgPD0g
T3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8PSBNYXJr
ZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKQEAgLTEzMiwxNSArMTM0LDE1IEBAIHZvaWQqIENvbXBs
ZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5l
Y2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxlY3RJZk5l
Y2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFy
Z2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1f
c3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRp
b24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlzKTsKICAg
ICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIG1f
c3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBtX3NwYWNl
Lm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0ZShzaXpl
KTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xhcmdlQWxs
b2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkg
c3Vic3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMiLCBidXQg
dGhhdCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxsb2NhdG9y
IGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOworICAgIEFs
bG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7
CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9CiAgICAg
Ci0gICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZt
X2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JT
aXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAKIHByaXZh
dGU6Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKKyAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAogICAgIC8vIFRoZXNlIHNs
b3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBhbGxvY2F0
b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xv
dyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVTbG93KFZN
Jiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCop
OwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFjZTo6bnVt
U2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgc3RkOjphcnJheTxBbGxv
Y2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0b3J5Pj4gbV9kaXJlY3Rv
cmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUg
bW9kZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAg
ICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAgQmxvY2tE
aXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNp
emVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0gbV9hbGxv
Y2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07CiAg
ICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1vZGU6Ok11
c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dCk7CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBs
ZXRlU3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQo
bW9kZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3IpOwotICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07CiAKIGNs
YXNzIEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7Ci0gICAg
CiBwdWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5GcmVlTGlz
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29u
dGV4dC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworY2xhc3MgTG9j
YWxBbGxvY2F0b3I7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKICAgICBmcmllbmQgY2xh
c3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgZnJpZW5kIGNs
YXNzIExvY2FsQWxsb2NhdG9yOwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVycmFsQ29udGV4
dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBA
CiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJTd2VlcGluZ1Nj
b3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVy
LmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgogI2luY2x1ZGUgIlR5cGVQ
cm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlu
a2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhl
YXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkp
CiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFk
Q29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCisgICAgLCBtX3Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRMb2NhbENhY2hlTGF5
b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIFNs
b3RWaXNpdG9yOwogY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJ
Zk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgU3dlZXBpbmdTY29wZTsKK2NsYXNzIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQ7CiBjbGFzcyBWTTsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3Vy
cmVudFRocmVhZFN0YXRlOwpAQCAtMzcyLDYgKzM3Myw4IEBAIHB1YmxpYzoKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVu
YyYpOworICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQmIHRocmVhZExvY2FsQ2FjaGVM
YXlvdXQoKSB7IHJldHVybiAqbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OyB9CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTcxNCw2ICs3MTcsOCBAQCBw
cml2YXRlOgogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50VGhyZWFkU3Rh
dGUgeyBudWxscHRyIH07CiAgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVhZCB7IG51bGxw
dHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2ludGVyLgorICAg
IAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRMb2NhbENhY2hlTGF5b3V0PiBtX3RocmVhZExv
Y2FsQ2FjaGVMYXlvdXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
OSArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
I2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVs
TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkFsbG9jYXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJJ
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxp
bmVzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTUwLDIwICs1MywyMCBAQCBJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkK
IHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90
IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxs
b2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0
dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1
YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogSXNvU3Vi
c3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAg
ICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVy
ZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFs
Q29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6
YWxsb2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgdm9pZCogcmVz
dWx0ID0gbV9kaXJlY3RvcnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7
CisgICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTEgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAg
QWxsb2NhdG9yIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2Rl
KTsKIAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQq
IGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBJc29DZWxsU2V0OwpAQCAtNTUsMTUgKzU1LDE2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBkaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdChNYXJrZWRCbG9jazo6SGFuZGxlKikgb3ZlcnJp
ZGU7CiAgICAgCiAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7
CiAgICAgQmxvY2tEaXJlY3RvcnkgbV9kaXJlY3Rvcnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAg
ICBTZW50aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNv
Q2VsbFNldD4+IG1fY2VsbFNldHM7CiB9OwogCi1pbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1
YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JN
b2RlKQoraW5saW5lIEFsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChz
aXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgcmV0dXJuICZtX2RpcmVjdG9yeTsKKyAgICByZXR1
cm4gbV9hbGxvY2F0b3I7CiB9CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cENlbGxUeXBlLCB0eXBlKSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhl
YXBDZWxsVHlwZSksIHNpemVvZih0eXBlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCisjaW5j
bHVkZSAiQWxsb2NhdGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVz
LmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxBbGxv
Y2F0b3I6OkxvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBt
X2RpcmVjdG9yeShkaXJlY3RvcnkpCisgICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxs
U2l6ZSkKKyAgICAsIG1fZnJlZUxpc3QobV9jZWxsU2l6ZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGRpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJlY3Rv
cnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKK30KKworTG9jYWxBbGxvY2F0b3I6
OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCisgICAgOiBtX2RpcmVjdG9y
eShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkK
KyAgICAsIG1fZnJlZUxpc3QoV1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKKyAgICAsIG1fY3Vy
cmVudEJsb2NrKG90aGVyLm1fY3VycmVudEJsb2NrKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2so
b3RoZXIubV9sYXN0QWN0aXZlQmxvY2spCit7CisgICAgb3RoZXIucmVzZXQoKTsKKyAgICBpZiAo
b3RoZXIuaXNPbkxpc3QoKSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGly
ZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgICAgICBvdGhlci5yZW1vdmUoKTsK
KyAgICAgICAgbV9kaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2ZyZWVMaXN0
LmNsZWFyKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fbGFzdEFjdGl2
ZUJsb2NrID0gbnVsbHB0cjsKK30KKworTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigp
Cit7CisgICAgaWYgKGlzT25MaXN0KCkpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICAgICAgcmVtb3ZlKCk7
CisgICAgfQorICAgIAorICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0IGhv
bGRpbmcgb250byBhbnkgbWVtb3J5LiBUaGlzIGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0aGUK
KyAgICAvLyBmb2xsb3dpbmcgdHdvIHVzZSBjYXNlczoKKyAgICAvLyAKKyAgICAvLyAtIEltbW9y
dGFsIFRMQy4gVGhvc2UgZGVzdHJ1Y3QgYWZ0ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVjdGlu
Zywgc28gdGhleSBzaG91bGQgbm90IGhhdmUKKyAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGluIHRo
ZW0uCisgICAgLy8KKyAgICAvLyAtIFRMQyBvd25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBUTEMg
Z2V0cyBkZXN0cm95ZWQgYWZ0ZXIgYSBHQyBmbGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQKKyAg
ICAvLyAgIHRoYXQgaXQgaXMgbm90IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3Vs
ZCBzdGlsbCBiZSBpbiBhIGZ1bGx5IHJlc2V0IHN0YXRlIGF0IHRoZQorICAgIC8vICAgdGltZSBv
ZiBkZXN0cnVjdGlvbiBiZWNhdXNlIGZvciBpdCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUs
IHNvbWVvbmUgbXVzdCBoYXZlIGFsbG9jYXRlZAorICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGlt
cG9zc2libGUgYmVjYXVzZSBpdCdzIHN1cHBvc2VkbHkgdW5yZWFjaGFibGUpLgorICAgIFJFTEVB
U0VfQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdEFjdGl2
ZUJsb2NrKTsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQorewor
ICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOworICAgIGlmICghbV9jdXJyZW50QmxvY2sp
IHsKKyAgICAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxsb2Nh
dGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJsb2Nr
OworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7
Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRpbmcoKQoreworICAgIGlm
ICghbV9sYXN0QWN0aXZlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEFjdGl2
ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fY3VycmVudEJsb2Nr
ID0gbV9sYXN0QWN0aXZlQmxvY2s7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwor
fQorCit2b2lkIExvY2FsQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCit7CisgICAg
cmVzZXQoKTsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZh
aWx1cmVNb2RlKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKKyAgICBIZWFwJiBoZWFwID0gKm1fZGlyZWN0b3J5LT5tX2hlYXA7CisgICAgQVNTRVJU
KGhlYXAudm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgZG9UZXN0
Q29sbGVjdGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJUKCFtX2Rp
cmVjdG9yeS0+bWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKKyAgICBoZWFwLmRpZEFsbG9j
YXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOworICAgIAorICAgIGRpZENvbnN1bWVGcmVl
TGlzdCgpOworICAgIAorICAgIEFsbG9jYXRpbmdTY29wZSBoZWxwaW5nSGVhcChoZWFwKTsKKwor
ICAgIGhlYXAuY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOworICAg
IAorICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5k
IG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQorICAgIC8v
IGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2FsbGJh
Y2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVu
dEJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVy
ZU1vZGUpOworICAgIAorICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxl
Y3RpbmcoKTsKKyAgICAKKyAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fZGly
ZWN0b3J5LT50cnlBbGxvY2F0ZUJsb2NrKCk7CisgICAgaWYgKCFibG9jaykgeworICAgICAgICBp
ZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJs
b2NrKTsKKyAgICByZXN1bHQgPSBhbGxvY2F0ZUluKGJsb2NrKTsKKyAgICBBU1NFUlQocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIExvY2FsQWxsb2NhdG9yOjpkaWRDb25z
dW1lRnJlZUxpc3QoKQoreworICAgIGlmIChtX2N1cnJlbnRCbG9jaykKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgIAorICAgIG1fZnJlZUxpc3QuY2xl
YXIoKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Cit9CisKK3ZvaWQqIExvY2FsQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCkKK3sKKyAgICAvLyBGSVhNRTog
SWYgd2Ugd2FudGVkIHRoaXMgdG8gYmUgdXNlZCBmb3IgcmVhbCBtdWx0aS10aHJlYWRlZCBhbGxv
Y2F0aW9ucyB0aGVuIHdlIHdvdWxkIGhhdmUgdG8KKyAgICAvLyBjb21lIHVwIHdpdGggc29tZSBj
b25jdXJyZW5jeSBwcm90b2NvbCBoZXJlLiBUaGF0IHByb3RvY29sIHdvdWxkIG5lZWQgdG8gYmUg
YWJsZSB0byBoYW5kbGU6CisgICAgLy8KKyAgICAvLyAtIFRoZSBiYXNpYyBjYXNlIG9mIG11bHRp
cGxlIExvY2FsQWxsb2NhdG9ycyB0cnlpbmcgdG8gZG8gYW4gYWxsb2NhdGlvbkN1cnNvciBzZWFy
Y2ggb24gdGhlCisgICAgLy8gICBzYW1lIGJpdHZlY3Rvci4gVGhhdCBwcm9iYWJseSBuZWVkcyB0
aGUgYml0dmVjdG9yIGxvY2sgYXQgbGVhc3QuCisgICAgLy8KKyAgICAvLyAtIFRoZSBoYXJkZXIg
Y2FzZSBvZiBzb21lIExvY2FsQWxsb2NhdG9yIHRyaWdnZXJpbmcgYSBzdGVhbCBmcm9tIGEgZGlm
ZmVyZW50IEJsb2NrRGlyZWN0b3J5CisgICAgLy8gICB2aWEgYSBzZWFyY2ggaW4gdGhlIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IncyBsaXN0LiBXaG8ga25vd3Mgd2hhdCBsb2NrcyB0aGF0IG5lZWRz
LgorICAgIC8vIAorICAgIC8vIE9uZSB3YXkgdG8gbWFrZSB0aGlzIHdvcmsgaXMgdG8gaGF2ZSBh
IHNpbmdsZSBwZXItSGVhcCBsb2NrIHRoYXQgcHJvdGVjdHMgYWxsIG11dGF0b3IgbG9jaworICAg
IC8vIGFsbG9jYXRpb24gc2xvdyBwYXRocy4gVGhhdCB3b3VsZCBwcm9iYWJseSBiZSBzY2FsYWJs
ZSBlbm91Z2ggZm9yIHllYXJzLiBJdCB3b3VsZCBjZXJ0YWlubHkgYmUKKyAgICAvLyBmb3IgZm9y
IHVzaW5nIFRMQyBhbGxvY2F0aW9uIGZyb20gSklUIHRocmVhZHMuCisgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTYzNQorICAgIAorICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAKKyAgICBBU1NFUlQoIW1f
Y3VycmVudEJsb2NrKTsKKyAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwo
KSk7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jayA9IG1fZGlyZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CisgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodm9pZCogcmVzdWx0
ID0gdHJ5QWxsb2NhdGVJbihibG9jaykpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9j
YXRvcnMoKQorICAgICAgICAmJiAoT3B0aW9uczo6dHJhZGVEZXN0cnVjdG9yQmxvY2tzKCkgfHwg
IW1fZGlyZWN0b3J5LT5uZWVkc0Rlc3RydWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jayA9IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5maW5kRW1wdHlC
bG9ja1RvU3RlYWwoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoKSA9PSBtX2RpcmVjdG9yeS0+bV9zdWJzcGFjZS0+YWxpZ25lZE1l
bW9yeUFsbG9jYXRvcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxvY2stPnN3ZWVw
KG51bGxwdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0
aGlzIGNsZWFycyBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJp
dHMsCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0
IGEgYmxvY2sgbWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CisgICAgICAgICAg
ICAvLyBhbmQgZW1wdHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBibG9jay0+
cmVtb3ZlRnJvbURpcmVjdG9yeSgpOworICAgICAgICAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2Nr
KGJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCogTG9jYWxBbGxv
Y2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgdm9p
ZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jayk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBBU1NFUlQoYmxv
Y2spOworICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAKKyAgICBibG9j
ay0+c3dlZXAoJm1fZnJlZUxpc3QpOworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdG8gc3R1
bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFya2luZyB0cmllcyB0byByZXRpcmUg
dGhlc2UsIGJ1dAorICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlzIHJhY3kgYW5kIG1heSBmb3JnZXQg
dG8gZG8gaXQgc29tZXRpbWVzLgorICAgIGlmIChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFp
bCgpKSB7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICBi
bG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CisgICAgICAgIEFTU0VSVCghYmxv
Y2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2RpcmVjdG9yeS0+aXNFbXB0
eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7CisgICAgICAgIEFTU0VSVCghbV9kaXJlY3Rv
cnktPmlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IGJsb2NrOworICAgIAorICAgIHZvaWQqIHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUo
CisgICAgICAgIFtdICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0p
OworICAgIG1fZGlyZWN0b3J5LT5zZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1cnJl
bnRCbG9jaywgdHJ1ZSk7CisgICAgbV9kaXJlY3RvcnktPm1hcmtlZFNwYWNlKCkuZGlkQWxsb2Nh
dGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IExvY2FsQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgaWYgKCFPcHRpb25zOjpzbG93UGF0aEFsbG9j
c0JldHdlZW5HQ3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljIHVuc2lnbmVkIGFs
bG9jYXRpb25Db3VudCA9IDA7CisgICAgaWYgKCFhbGxvY2F0aW9uQ291bnQpIHsKKyAgICAgICAg
aWYgKCFtX2RpcmVjdG9yeS0+bV9oZWFwLT5pc0RlZmVycmVkKCkpIHsKKyAgICAgICAgICAgIGlm
IChkZWZlcnJhbENvbnRleHQpCisgICAgICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3No
b3VsZEdDID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2RpcmVj
dG9yeS0+bV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49IE9wdGlvbnM6OnNs
b3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAwOwor
fQorCitib29sIExvY2FsQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRh
cmdldCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGFib21pbmF0aW9uIGV4aXN0cyB0byBkZXRlY3Qg
d2hlbiBhbiBvYmplY3QgaXMgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0YXRlLgor
ICAgIC8vIFRoZXJlZm9yZSwgaXQncyBub3QgZXZlbiBjbGVhciB0aGF0IHRoaXMgbmVlZHMgdG8g
ZG8gYW55dGhpbmcgYmV5b25kIHJldHVybmluZyAiZmFsc2UiLCBzaW5jZQorICAgIC8vIGlmIHdl
IGtub3cgdGhhdCB0aGUgYmxvY2sgb3duaW5nIHRoZSBvYmplY3QgaXMgZnJlZS1saXN0ZWQsIHRo
ZW4gaXQncyBpbXBvc3NpYmxlIGZvciBhbnkKKyAgICAvLyBvYmplY3RzIHRvIGJlIGluIHRoZSBk
ZWFkLWJ1dC1ub3QtZGVzdHJ1Y3RlZCBzdGF0ZS4KKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0
aGlzIGFib21pbmF0aW9uLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgxNjU1CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBD
ZWxsKj4odGFyZ2V0KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRl
ICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CitjbGFzcyBHQ0RlZmVycmFsQ29udGV4
dDsKKworY2xhc3MgTG9jYWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8
TG9jYWxBbGxvY2F0b3I+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbEFsbG9jYXRv
cik7CisgICAgCitwdWJsaWM6CisgICAgTG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqKTsK
KyAgICBMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYmKTsKKyAgICB+TG9jYWxBbGxvY2F0
b3IoKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSk7CisKKyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CisgICAgdm9p
ZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZygpOwor
ICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlzdCgpOworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOworICAgIAorICAgIGJvb2wgaXNGcmVlTGlz
dGVkQ2VsbChjb25zdCB2b2lkKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZXNldCgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOworICAgIHZvaWQg
ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVj
dGluZygpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwor
ICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0Kik7
CisKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9kaXJlY3Rvcnk7CisgICAgdW5zaWduZWQgbV9jZWxs
U2l6ZTsKKyAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1f
bGFzdEFjdGl2ZUJsb2NrIHsgbnVsbHB0ciB9OworfTsKKworaW5saW5lIHB0cmRpZmZfdCBMb2Nh
bEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihMb2NhbEFsbG9jYXRvciwgbV9mcmVlTGlzdCk7Cit9CisKK2lubGluZSBwdHJkaWZmX3Qg
TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKQoreworICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoTG9jYWxBbGxvY2F0b3IsIG1fY2VsbFNpemUpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxB
bGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitBTFdBWVNfSU5MSU5FIHZvaWQqIExvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpCit7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAo
KSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKG1fZGlyZWN0
b3J5LT5oZWFwKCktPnZtKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBD
ZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7Cisg
ICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWlu
dFNvbHZlci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0
b3BJZk5lY2Vzc2FyeVRpbWVyLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIyNjg5MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJW
aXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQwLDYgKzQxLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxs
OwogY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRlcjsKIGNsYXNzIE1hcmtlZEJsb2NrOworY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKIGNsYXNz
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjY4
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUu
aCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTU2LDggKzU3LDggQEAgcHVibGljOgogICAg
IHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIEJsb2NrRGlyZWN0b3J5
KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoVk0m
LCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7
CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRocmVhZExvY2FsQ2FjaGUuaCIKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZlB0cjxUaHJlYWRMb2NhbENh
Y2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworfQorCitUaHJlYWRMb2NhbENh
Y2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKK3sK
KyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6flRo
cmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Cit9CisKK1RocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCit7Cisg
ICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOworICAgIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENh
Y2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAgICBEYXRhKiByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxEYXRhKj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2NhdG9yKSAr
IGxheW91dC5zaXplKSk7CisgICAgcmVzdWx0LT5zaXplID0gbGF5b3V0LnNpemU7CisgICAgcmVz
dWx0LT5jYWNoZSA9IHRoaXM7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
b2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAo
JmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9j
YXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6
ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3Ip
KQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0
b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lE
YXRhKERhdGEqIGRhdGEpCit7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
ZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIGFs
bG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBmYXN0RnJlZShk
YXRhKTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0pCit7
CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2VGbGFnLAorICAgICAgICBb
XSAoKSB7CisgICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwgZGVzdHJ1Y3Rv
cik7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgCisgICAgcmVmKCk7CisgICAgCisgICAgUmVm
UHRyPFRocmVhZExvY2FsQ2FjaGU+IG9sZENhY2hlID0gZ2V0KHZtKTsKKyAgICBvbGRDYWNoZS0+
ZGVyZWYoKTsKKyAgICAKKyAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKK30KKwordm9pZCBU
aHJlYWRMb2NhbENhY2hlOjppbnN0YWxsRGF0YShWTSYgdm0sIERhdGEqIGRhdGEpCit7CisjaWYg
RU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIF9wdGhyZWFk
X3NldHNwZWNpZmljX2RpcmVjdCh0bHNLZXksIGRhdGEpOworI2Vsc2UKKyAgICB2bS50aHJlYWRM
b2NhbENhY2hlID0gZGF0YTsKKyNlbmRpZgorfQorCitMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9j
YWxDYWNoZTo6YWxsb2NhdG9yU2xvdyhWTSYgdm0sIHNpemVfdCBvZmZzZXQpCit7CisgICAgRGF0
YSogb2xkRGF0YSA9IG1fZGF0YTsKKyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKKyAgICBk
ZXN0cm95RGF0YShvbGREYXRhKTsKKyAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChvZmZzZXQgPCBtX2RhdGEtPnNpemUpOworICAgIHJldHVybiBhbGxvY2F0
b3IoKm1fZGF0YSwgb2Zmc2V0KTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjpkZXN0cnVj
dG9yKHZvaWQqIGFyZykKK3sKKyAgICBpZiAoIWFyZykKKyAgICAgICAgcmV0dXJuOworICAgIERh
dGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oYXJnKTsKKyAgICBkYXRhLT5jYWNoZS0+ZGVy
ZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9GYXN0VExTLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZExvY2FsQ2FjaGU+IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShUaHJlYWRMb2NhbENhY2hlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGNyZWF0
ZShIZWFwJik7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflRocmVhZExvY2FsQ2FjaGUo
KTsKKworICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gZ2V0KFZNJik7CisgICAg
CisgICAgLy8gVGhpcyBpcyBkZXNpZ25lZCB0byBiZSBmYXN0IGVub3VnaCB0aGF0IHlvdSBjb3Vs
ZCBldmVuIGNhbGwgaXQgYmVmb3JlIGV2ZXJ5IGFsbG9jYXRpb24sIGJ5CisgICAgLy8gb3B0aW1p
emluZyBmb3IgdGhlIGNhc2UgdGhhdCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0
aGF0IGlzIGFscmVhZHkgaW5zdGFsbGVkLiBUaGlzCisgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZl
bHkgc21hbGwgbnVtYmVyIG9mIGNhY2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0
IHN3aXRjaCBjb21iaW5lZAorICAgIC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1h
eSBoYXZlIGNvbnRleHQgc3dpdGNoZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJh
bm9pYS4KKyAgICB2b2lkIGluc3RhbGwoVk0mKTsKKyAgICAKKyAgICBzdGF0aWMgTG9jYWxBbGxv
Y2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOworICAgIAorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihEYXRhLCBhbGxvY2F0b3IpOyB9CisgICAgCitwcml2YXRlOgorICAgIFRocmVhZExvY2FsQ2Fj
aGUoSGVhcCYpOworICAgIAorICAgIHN0cnVjdCBEYXRhIHsKKyAgICAgICAgc2l6ZV90IHNpemU7
CisgICAgICAgIFRocmVhZExvY2FsQ2FjaGUqIGNhY2hlOworICAgICAgICBMb2NhbEFsbG9jYXRv
ciBhbGxvY2F0b3JbMV07CisgICAgfTsKKworICAgIHN0YXRpYyBEYXRhKiBnZXRJbXBsKFZNJik7
CisgICAgCisgICAgRGF0YSogYWxsb2NhdGVEYXRhKCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJv
eURhdGEoRGF0YSopOworICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKERhdGEm
IGRhdGEsIHNpemVfdCBvZmZzZXQpOworCisgICAgdm9pZCBpbnN0YWxsU2xvdyhWTSYpOworICAg
IHN0YXRpYyB2b2lkIGluc3RhbGxEYXRhKFZNJiwgRGF0YSopOworICAgIAorICAgIExvY2FsQWxs
b2NhdG9yJiBhbGxvY2F0b3JTbG93KFZNJiwgc2l6ZV90IG9mZnNldCk7CisgICAgCisgICAgc3Rh
dGljIHZvaWQgZGVzdHJ1Y3Rvcih2b2lkKik7CisgICAgCisgICAgLy8gV2hlbiBpbnN0YWxsZWQs
IHdlIHJlZigpIHRoZSBjYWNoZS4gVW5pbnN0YWxsaW5nIGRlcmVmKClzIHRoZSBjYWNoZS4gVExT
IGRlc3RydWN0aW9uIGRlcmVmKClzCisgICAgLy8gdGhlIGNhY2hlLiBXaGVuIHRoZSBjYWNoZSBp
cyBkZXN0cnVjdGVkLCBpdCBuZWVkcyB0byByZXR1cm4gYWxsIG9mIGl0cyBzdGF0ZSB0byB0aGUg
R0MuIEkKKyAgICAvLyB0aGluayB0aGF0IGp1c3QgbWVhbnMgc3RvcEFsbG9jYXRpbmcoKSwgYnV0
IHdpdGggc29tZSBzZXJpb3VzbHkgaGVhdnkgY2F2ZWF0cyBoYXZpbmcgdG8gZG8KKyAgICAvLyB3
aXRoIHdoZW4gaXQncyB2YWxpZCB0byBtYWtlIHRoYXQgY2FsbC4gQWx0ZXJuYXRpdmVseSwgd2Ug
Y291bGQgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGUgY2FjaGUKKyAgICAvLyBpcyBlbXB0eSB3aGVu
IHdlIGRlc3RydWN0IGl0LiBUaGlzIGlzIGNvcnJlY3QgZm9yIGNhY2hlcyB0aGF0IGFyZSBrZXB0
IGxpdmUgYnkgR0Mgb2JqZWN0cyBhbmQKKyAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGltbW9ydGFs
IGNhY2hlcy4KKyAgICBIZWFwJiBtX2hlYXA7CisgICAgRGF0YSogbV9kYXRhOworCisjaWYgRU5B
QkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMgY29uc3QgcHRocmVhZF9rZXlfdCB0bHNLZXkg
PSBXVEZfR0NfVExDX0tFWTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9U
aHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitpbmxpbmUgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogVGhyZWFkTG9jYWxDYWNoZTo6Z2V0SW1w
bChWTSYgdm0pCit7CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBVTlVTRURfUEFSQU0o
dm0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRhKj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNf
ZGlyZWN0KHRsc0tleSkpOworI2Vsc2UKKyAgICByZXR1cm4gdm0udGhyZWFkTG9jYWxDYWNoZTsK
KyNlbmRpZgorfQorCitpbmxpbmUgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2Fs
Q2FjaGU6OmdldChWTSYgdm0pCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9
IGdldEltcGwodm0pOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+Y2FjaGU7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2lubGluZSB2b2lkIFRocmVhZExvY2FsQ2FjaGU6
Omluc3RhbGwoVk0mIHZtKQoreworICAgIGlmIChnZXRJbXBsKHZtKS0+Y2FjaGUgPT0gdGhpcykK
KyAgICAgICAgcmV0dXJuOworICAgIGluc3RhbGxTbG93KHZtKTsKK30KKworaW5saW5lIExvY2Fs
QWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoVk0mIHZtLCBzaXplX3Qgb2Zm
c2V0KQoreworICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsK
KyAgICBpZiAoTElLRUxZKG9mZnNldCA8IGRhdGEtPnNpemUpKQorICAgICAgICByZXR1cm4gYWxs
b2NhdG9yKCpkYXRhLCBvZmZzZXQpOworICAgIHJldHVybiBkYXRhLT5jYWNoZS0+YWxsb2NhdG9y
U2xvdyh2bSwgb2Zmc2V0KTsKK30KKworaW5saW5lIExvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2Nh
bENhY2hlOjphbGxvY2F0b3IoRGF0YSYgZGF0YSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1
cm4gKmJpdHdpc2VfY2FzdDxMb2NhbEFsbG9jYXRvcio+KGJpdHdpc2VfY2FzdDxjaGFyKj4oJmRh
dGEuYWxsb2NhdG9yWzBdKSArIG9mZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENh
Y2hlTGF5b3V0LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgiCisKKyNp
bmNsdWRlICJCbG9ja0RpcmVjdG9yeS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVGhyZWFkTG9j
YWxDYWNoZUxheW91dDo6VGhyZWFkTG9jYWxDYWNoZUxheW91dCgpCit7Cit9CisKK1RocmVhZExv
Y2FsQ2FjaGVMYXlvdXQ6On5UaHJlYWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKwordm9pZCBU
aHJlYWRMb2NhbENhY2hlTGF5b3V0OjphbGxvY2F0ZU9mZnNldChCbG9ja0RpcmVjdG9yeSogZGly
ZWN0b3J5KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBkaXJl
Y3RvcnktPm1fdGxjT2Zmc2V0ID0gbV9zaXplOworICAgIG1fc2l6ZSArPSBzaXplb2YoTG9jYWxB
bGxvY2F0b3IpOworICAgIG1fZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Cit9CisKK1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OnNu
YXBzaG90KCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgU25h
cHNob3QgcmVzdWx0OworICAgIHJlc3VsdC5zaXplID0gbV9zaXplOworICAgIHJlc3VsdC5kaXJl
Y3RvcmllcyA9IG1fZGlyZWN0b3JpZXM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQmxvY2tE
aXJlY3RvcnkqIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmRpcmVjdG9yeSh1bnNpZ25lZCBvZmZz
ZXQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIHJldHVybiBt
X2RpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFk
TG9jYWxDYWNoZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9y
eTsKKworLy8gRWFjaCBIZWFwIGhhcyBhIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQgdGhhdCBoZWxw
cyB1cyBmaWd1cmUgb3V0IGhvdyB0byBhbGxvY2F0ZSBhIFRocmVhZExvY2FsQ2FjaGUKKy8vIGZv
ciB0aGF0IEhlYXAuCisKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRocmVhZExvY2FsQ2FjaGVMYXlvdXQpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQo
KTsKKyAgICB+VGhyZWFkTG9jYWxDYWNoZUxheW91dCgpOworCisgICAgLy8gQmxvY2tEaXJlY3Rv
cnkgY2FsbHMgdGhpcyBkdXJpbmcgY3JlYXRpb24gYW5kIHRoaXMgZmlsbHMgaW4gQmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldC4KKyAgICB2b2lkIGFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5Kik7
CisgICAgCisgICAgc3RydWN0IFNuYXBzaG90IHsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAg
ICAgIFZlY3RvcjxCbG9ja0RpcmVjdG9yeSo+IGRpcmVjdG9yaWVzOworICAgIH07CisgICAgCisg
ICAgU25hcHNob3Qgc25hcHNob3QoKTsKKyAgICAKKyAgICBCbG9ja0RpcmVjdG9yeSogZGlyZWN0
b3J5KHVuc2lnbmVkIG9mZnNldCk7CisgICAgCitwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOwor
ICAgIHNpemVfdCBtX3NpemUgeyAwIH07CisgICAgVmVjdG9yPEJsb2NrRGlyZWN0b3J5Kj4gbV9k
aXJlY3RvcmllczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMjY4OTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01ODIsNiArNTgyLDk1IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
UmFuZG9tVGh1bmsoVk0KIH0KICNlbmRpZgogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFs
bG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQWxsb2NhdG9yIGFs
bG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0
JiBzbG93UGF0aCkKK3sKKyAgICAvLyBOT1RFOiBUaGlzIGlzIGNhcmVmdWxseSB3cml0dGVuIHNv
IHRoYXQgd2UgY2FuIGNhbGwgaXQgd2hpbGUgd2UgZGlzYWxsb3cgc2NyYXRjaAorICAgIC8vIHJl
Z2lzdGVyIHVzYWdlLgorICAgICAgICAKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRo
cygpKSB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgICAgICAKKyAgICBKdW1wIHBvcFBhdGg7CisgICAgSnVtcCBkb25lOworICAg
IAorI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09m
ZnNldEZvcktleShXVEZfR0NfVExDX0tFWSksIHNjcmF0Y2hHUFIpOworI2Vsc2UKKyAgICBsb2Fk
UHRyKCZ2bSgpLnRocmVhZExvY2FsQ2FjaGVEYXRhLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgorICAg
IGlmIChhbGxvY2F0b3IpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBUaHJl
YWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9yKCkgKyBhbGxvY2F0b3Iub2Zmc2V0
KCkpLCBhbGxvY2F0b3JHUFIpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihCYXNlSW5kZXgo
c2NyYXRjaEdQUiwgYWxsb2NhdG9yR1BSLCBUaW1lc09uZSwgVGhyZWFkTG9jYWxDYWNoZTo6b2Zm
c2V0T2ZGaXJzdEFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKKworICAgIGxvYWQzMihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICBwb3BQYXRoID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7CisgICAgaWYgKGFsbG9jYXRvcikKKyAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3IuY2VsbFNpemUodm0oKS5oZWFwKSksIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChpc1g4NigpKSB7
CisgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBz
dWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNp
emUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdWIzMihyZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICB9CisgICAgfQorICAgIG5lZ1B0cihyZXN1bHRHUFIpOwor
ICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2Nh
dG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkp
OworICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9j
YWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxv
YWRFbmQoKSk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIGFkZFB0cihwYXlsb2FkRW5kQWRk
ciwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5kQWRk
ciwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwor
ICAgIH0KKyAgICAgICAgCisgICAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgcG9wUGF0
aC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9m
U2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAg
eG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVl
TGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOworICAgIGVs
c2UgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgfQor
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOworICAg
ICAgICAKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQg
d2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0CisgICAgLy8gaXQncyBzdGlsbCBvbiB0aGUg
R0MncyBmcmVlIGxpc3QuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hH
UFIpOworICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2Nh
bEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1i
bGVkSGVhZCgpKSk7CisgICAgICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3Ig
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExp
c3QmIHNsb3dQYXRoKQoreworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbTMyKC0xKSkpOwor
ICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQUiwgYWxsb2NhdG9y
LCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKK30KKwordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29t
cGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNj
cmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sKKyAg
ICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNlOjpz
aXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2Yg
dHdvLiIpOworICAgIAorICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXApOworICAgIAorICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRTcGFj
ZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKKyAgICB1cnNo
aWZ0MzIoVHJ1c3RlZEltbTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIxKTsKKyAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1tMzIoTWFya2Vk
U3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBzY3JhdGNoR1BSMik7Cisg
ICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIFRpbWVzRm91ciks
IHNjcmF0Y2hHUFIxKTsKKyAgICAKKyAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBBbGxvY2F0
b3IoKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7Cit9CisKIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJFUl9PRl9DQUxM
RUVfU0FWRVNfUkVHSVNURVJTID4gMApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNiArNTks
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVy
biBtX2NvZGVCbG9jazsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuICptX2NvZGVCbG9jay0+dm0o
KTsgfQogICAgIEFzc2VtYmxlclR5cGVfVCYgYXNzZW1ibGVyKCkgeyByZXR1cm4gbV9hc3NlbWJs
ZXI7IH0KIAogICAgIHZvaWQgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKQpAQCAtMTQ5MSw4
MCArMTQ5MiwyMSBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhh
dCB0aGUgdmFsdWUgaGVsZCBpbiBhbGxvY2F0b3JHUFIgaXMgbm9uLW51bGwuIFRoaXMgRE9FUyBO
T1QgbWVhbgogICAgIC8vIHRoYXQgYWxsb2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3IgY2Fu
IGJlIG51bGwgYXMgYSBzaWduYWwgdGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCi0gICAgLy8g
dmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51
bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwg
R1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0
aCkKLSAgICB7Ci0gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28g
dGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCi0gICAgICAgIC8v
IHJlZ2lzdGVyIHVzYWdlLgotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NT
bG93UGF0aHMoKSkgewotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEp1bXAgcG9wUGF0
aDsKLSAgICAgICAgSnVtcCBkb25lOwotICAgICAgICAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBwb3BQYXRoID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChhbGxvY2F0b3IpCi0g
ICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSksIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGlz
WDg2KCkpIHsKLSAgICAgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICAgICAgc3ViMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5
OjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVj
dG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAg
c3ViMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBuZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihz
Y3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7Ci0gICAgICAgIEFk
ZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rv
cnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7
Ci0gICAgICAgIGlmIChpc1g4NigpKQotICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRy
LCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRQdHIocGF5bG9h
ZEVuZEFkZHIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvbmUgPSBqdW1wKCk7Ci0g
ICAgICAgIAotICAgICAgICBwb3BQYXRoLmxpbmsodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVl
TGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsK
LSAgICAgICAgaWYgKGlzWDg2KCkpCi0gICAgICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxvY2F0
b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zm
c2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJl
ZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICB4b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgfQotICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIpKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hh
dCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKLSAgICAgICAgLy8gaXQncyBzdGlsbCBv
biB0aGUgR0MncyBmcmVlIGxpc3QuCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICB9CisgICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLiBBZGRpdGlvbmFs
bHksIGlmIHRoZSBhbGxvY2F0b3IgaXMgbm90IG51bGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZAor
ICAgIC8vIHRvIHBvcHVsYXRlIGFsbG9jYXRvckdQUiAtIHRoaXMgY29kZSB3aWxsIGlnbm9yZSB0
aGUgY29udGVudHMgb2YgYWxsb2NhdG9yR1BSLgorICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5v
bk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQWxsb2NhdG9yIGFsbG9jYXRvciwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7
CiAgICAgCi0gICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIs
IEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yKQotICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yR1BS
KSk7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQUiwg
YWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICB9Cisg
ICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgQWxsb2NhdG9yIGFsbG9jYXRv
ciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93
UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KLSAgICB2
b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwg
R1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxv
Y2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hHUFIs
IEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRH
UFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAg
ICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhzdHJ1Y3R1cmUsIHJlc3VsdEdQUiwg
c2NyYXRjaEdQUik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cnVjdHVy
ZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4KLSAgICB2b2lk
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBT
dG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJl
c3VsdEdQUiwgQWxsb2NhdG9yIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0
dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQ
UlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBlbWl0
QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0
dXJlLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRyKHN0b3JhZ2UsIEFk
ZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKQEAgLTE1NzYs
MTIgKzE1MTgsMTEgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIs
IFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVt
cExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Cisg
ICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjEsIHN0
cnVjdHVyZSwgc3RvcmFnZSwgbWFzaywgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAg
ICAgCkBAIC0xNTkzLDIwICsxNTM0LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIGFsbG9jYXRp
b25TaXplIGNhbiBiZSBhbGlhc2VkIHdpdGggYW55IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJ
ZiBpdCdzIG5vdCBhbGlhc2VkIHRoZW4gaXQKICAgICAvLyB3b24ndCBiZSBjbG9iYmVyZWQuCi0g
ICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBs
ZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3Jh
dGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi0gICAgewot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNw
YWNlOjpzaXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93
ZXIgb2YgdHdvLiIpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0gZ2V0
TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3RlcCk7Ci0gICAgICAgIAotICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSksIGFsbG9jYXRpb25TaXplLCBz
Y3JhdGNoR1BSMSk7Ci0gICAgICAgIHVyc2hpZnQzMihUcnVzdGVkSW1tMzIoc3RlcFNoaWZ0KSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNj
cmF0Y2hHUFIxLCBUcnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBT
aGlmdCkpKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHN1YnNwYWNlLmFsbG9jYXRvckZv
clNpemVTdGVwKCkgLSAxKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBsb2FkUHRyKEJhc2VJbmRl
eChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHRpbWVzUHRyKCkpLCBzY3JhdGNoR1BSMSk7Ci0g
ICAgICAgIAotICAgICAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBudWxscHRyLCBzY3JhdGNo
R1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKLSAgICB9CisgICAgdm9pZCBlbWl0QWxsb2Nh
dGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNw
YWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNj
cmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KICAgICB2b2lkIGVtaXRBbGxv
Y2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJl
VHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIx
LCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIyNjg5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNzksMjIgKzc5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1
Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxs
b2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFj
ZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJldHVyblZhbHVl
R1BSOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9y
KSwgYWxsb2NhdG9yUmVnKTsKLSAgICBpZiAoYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2Fz
ZShKdW1wKCkpOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDAp
OwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNo
UmVnLCBzbG93Q2FzZXMpOwotICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKLSAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlc3VsdFJlZyk7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CisgICAgZWxzZSB7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAg
YXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBhdXRvIG1h
c2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
YnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0U3RvcmVD
ZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAt
ODU2LDkgKzg1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8K
ICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxlZVJlZywgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uVHlwZSkp
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJh
cmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0ciha
ZXJvLCByYXJlRGF0YVJlZykpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJh
cmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0
cnVjdHVyZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxvY2F0
b3JSZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgYWxsb2NhdG9yUmVnLCBU
cnVzdGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKGNhY2hl
ZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVD
YWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0
cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwpAQCAtODY4LDcgKzg2OSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwogICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0
ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcs
IGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwogICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVzdWx0UmVnKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJv
Z2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODEsMjIgKzgxLDIzIEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1
Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9j
YXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNG
aW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklE
IHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7
CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBpZiAoYWxsb2NhdG9yKQotICAg
ICAgICBhZGRTbG93Q2FzZShKdW1wKCkpOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0g
VHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgYWxs
b2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5
LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAg
ICAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAg
ICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC03NjYsOSArNzY3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMo
SW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MoY2Fs
bGVlUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb25UeXBlKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246
Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVE
YXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9j
YXRvclJlZyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFpl
cm8sIGFsbG9jYXRvclJlZykpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBhbGxv
Y2F0b3JSZWcsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGxv
YWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1Nl
ZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBU
cnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBAIC03
NzgsNyArNzc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpbwog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CiAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgbnVsbHB0ciwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1
cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0
QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcsIHN0
cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKICAgICBsb2FkUHRy
KEFkZHJlc3Moc2NyYXRjaFJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2Ny
YXRjaFJlZyk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2
aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgQnV0dGVyZmx5OjpvcHRpbWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6
ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQg
PSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUo
Vk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhp
bmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXpl
X3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5k
ZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNl
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNp
emUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9p
ZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmly
dHVhbCh2bSwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxs
KTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZs
eSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkp
OwpAQCAtMTY1LDcgKzE2NSw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRl
eGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBu
ZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbmV3
U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBp
ZiAoIW5ld0Jhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlz
IHByb2JhYmx5IHNob3VsZG4ndCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjI2ODkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6
b3ZlcnJpZGVUaGluZ3MoVk0mCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5j
YWxsZWUsIG1fY2FsbGVlLmdldCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5p
dGVyYXRvclN5bWJvbCwgZ2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAg
ICAgCi0gICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSht
X21hcHBlZEFyZ3VtZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwobWFwcGVkQXJndW1lbnRz
U2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgdm9p
ZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3Vt
ZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIG1hcHBlZEFyZ3VtZW50c1NpemUoKSwg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIGJvb2wqIG92ZXJy
aWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVkQXJn
dW1lbnRzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmluaXRNb2RpZmllCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1bWVu
dHNEZXNjcmlwdG9yKTsKIAogICAgIGlmIChhcmdzTGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQqIGJh
Y2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50
c0Rlc2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjw4PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOworICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNw
YWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVh
bCh2bSwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIGJvb2wqIG1vZGlmaWVkQXJn
dW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgICAgIG1fbW9k
aWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwgdGhpcywgbW9kaWZpZWRBcmd1bWVudHMp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcmdzTGVuZ3RoOyBpLS07KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyMjY4
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAg
ICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBhbGxvY2F0aW9uU2l6ZSwgbnVs
bHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFk
YXRhKSB7CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
bnlwb3AuY29tKQogICoKQEAgLTgxLDcgKzgxLDEwIEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdU
eXBlKSk7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRp
bWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAg
ICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIHRl
bXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwo
CisgICAgICAgICAgICB2bSwKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91
dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLAorICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2Uo
dGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC05OCw3ICsxMDEsMTAgQEAgSlNBcnJheSog
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEJpYXMgPSAwOwogICAgICAgICB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBz
dHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90
YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKHZlY3Rvckxlbmd0aCkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwKKyAg
ICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFn
ZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLAorICAgICAgICAg
ICAgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFz
LCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTM2OCw3ICszNzQsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBm
YWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIG5ld0FsbG9jQmFz
ZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgK
KyAgICAgICAgICAgIHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24g
MjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0yMzgsNiArMjM4LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0
ZShWTSYgdgogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0
aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGhIaW50KTsK
ICAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIHZtLAogICAgICAgICAgICAgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksCiAgICAgICAgICAgICBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIXRlbXApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShy
ZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1
ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAg
ICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAg
aWYgKHNpemUpIHsKLSAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICAgICAgaWYgKCF0
ZW1wKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAy
MjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNDUsMTQgKzE0NSwxNSBAQCBDb21wbGV0ZVN1YnNwYWNlKiBK
U0NlbGw6OnN1YnNwYWNlRm9yKFZNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElO
RSB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIEdD
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBm
YWlsdXJlTW9kZSkKIHsKKyAgICBWTSYgdm0gPSAqaGVhcC52bSgpOwogICAgIEFTU0VSVChkZWZl
cnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7
CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0NlbGwqIHJlc3VsdCA9IHN0
YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZU5v
blZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgIEpTQ2Vs
bCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4odm0pLT5hbGxv
Y2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsK
ICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxs
ICYmICFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQotICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsK
LSAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6OmluZm8oKSk7Cisg
ICAgQVNTRVJUKCF2bS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAgICB2bS5zZXRJbml0aWFs
aXppbmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOwogI2VuZGlmCiAgICAgcmVzdWx0LT5jbGVhclN0
cnVjdHVyZSgpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlbnF1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSkKK0pTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKQog
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV92bSh2bSkKICAgICAsIG1fbWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQo
SXNXYXRjaGVkKSkpCkBAIC0zNjAsNiArMzYwLDcgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFs
T2JqZWN0KFZNJiB2bSwgUwogICAgICwgbV90ZW1wbGF0ZVJlZ2lzdHJ5KHZtKQogICAgICwgbV9y
dW50aW1lRmxhZ3MoKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUpCisgICAgLCBtX3RocmVhZExvY2FsQ2FjaGUodGhyZWFkTG9jYWxDYWNoZSA/
IFdURk1vdmUodGhyZWFkTG9jYWxDYWNoZSkgOiB2bS5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZSkK
IHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAg
cHVibGljOgogICAgIGNvbnN0IFJ1bnRpbWVGbGFncyYgcnVudGltZUZsYWdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydW50aW1lRmxhZ3M7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQg
SlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RU
YWJsZSogPSAwLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApAQCAtODkzLDYgKzg5
Myw4IEBAIHB1YmxpYzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBwZXJNYXAoKSBjb25zdCB7IHJl
dHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNldFdyYXBwZXJNYXAoSlNXcmFw
cGVyTWFwKiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAjZW5kaWYKKyAgICAKKyAgICBU
aHJlYWRMb2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1cm4gKm1fdGhy
ZWFkTG9jYWxDYWNoZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEdsb2JhbFBy
b3BlcnR5SW5mbyB7CkBAIC05MzAsNiArOTMyLDggQEAgcHJpdmF0ZToKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgIFJldGFpblB0cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKICNl
bmRpZgorICAgIAorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2FsQ2Fj
aGU7CiB9OwogCiBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDIyNjg5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hY2hpbmVT
dGFja01hcmtlci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJU
aHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5o
IgogI2luY2x1ZGUgPHRocmVhZD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xNDUs
NyArMTQ2LDkgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKIAogICAgIG1fdm0tPnNl
dExhc3RTdGFja1RvcCh0aHJlYWQuc2F2ZWRMYXN0U3RhY2tUb3AoKSk7CiAgICAgQVNTRVJUKHRo
cmVhZC5zdGFjaygpLmNvbnRhaW5zKG1fdm0tPmxhc3RTdGFja1RvcCgpKSk7Ci0KKyAgICAKKyAg
ICBtX3ZtLT5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZS0+aW5zdGFsbCgqbV92bSk7CisgICAgCiAg
ICAgbV92bS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5j
SXRlcmF0aW9uID0gZmEKICAgICB2KGJvb2wsIGR1bXBTaXplQ2xhc3NlcywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQnVtcEFsbG9jYXRvciwgdHJ1ZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2Nh
dG9ycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB0cmFkZURlc3RydWN0
b3JCbG9ja3MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJseVVw
ZGF0ZVRvcENhbGxGcmFtZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2
KGJvb2wsIHVzZU9TUkVudHJ5VG9ERkcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBBTFdBWVNfSU5MSU5F
IEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKICAgICBib29sIGNyZWF0ZVVuaW5p
dGlhbGl6ZWQgPSBnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwotICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwp
OworICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0ZU5vblZpcnR1YWwodm0sIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxs
KTsKICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw2ICsxMjEsNyBAQAogI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmls
ZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKQEAgLTM4Myw2ICszODQsOSBAQCBW
TTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAKICAg
ICBHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdl
RGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7CisgICAgCisgICAgZGVmYXVsdFRocmVhZExvY2FsQ2Fj
aGUgPSBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoaGVhcCk7CisgICAgZGVmYXVsdFRocmVhZExv
Y2FsQ2FjaGUtPmluc3RhbGwoKnRoaXMpOwogCiAgICAgaGVhcC5ub3RpZnlJc1NhZmVUb0NvbGxl
Y3QoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24g
MjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJs
ZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisj
aW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAj
aW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRv
ci5oPgpAQCAtNjU2LDYgKzY1NywxMSBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogc3RyaW5n
UmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBIYXNoU2V0PEpTT2Jq
ZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKKyAgICAKKyNpZiAhRU5B
QkxFKEZBU1RfVExTX0pJVCkKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiB0aHJlYWRMb2Nh
bENhY2hlRGF0YTsKKyNlbmRpZgorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBkZWZhdWx0
VGhyZWFkTG9jYWxDYWNoZTsKIAogICAgIExvY2FsVGltZU9mZnNldENhY2hlIGxvY2FsVGltZU9m
ZnNldENhY2hlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
RW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiRGlzYWxsb3dWTVJlZW50cnkuaCIKICNpbmNsdWRlICJPcHRpb25zLmgi
CiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2Fj
aGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAtNDAsNiArNDEsNyBAQCBWTUVudHJ5U2NvcGU6
OlZNRW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9nbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAgIGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxD
YWNoZSgpLmluc3RhbGwodm0pOwogICAgIEFTU0VSVCghRGlzYWxsb3dWTVJlZW50cnk6OmlzSW5F
ZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0
YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgaWYgKCF2bS5lbnRyeVNjb3BlKSB7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CaXRtYXAuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGFycmF5PgogI2lu
Y2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8c3RyaW5nLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331821</attachid>
            <date>2018-01-19 17:01:20 -0800</date>
            <delta_ts>2018-01-20 11:27:14 -0800</delta_ts>
            <desc>TLCs can say hello!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>156718</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDYg
KzQ2Niw3IEBAIGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAogaGVh
cC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAoraGVhcC9BbGxvY2F0b3IuY3BwCiBoZWFwL0Js
b2NrRGlyZWN0b3J5LmNwcAogaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAKIGhlYXAvQ2VsbENvbnRh
aW5lci5jcHAKQEAgLTUwMCw2ICs1MDEsNyBAQCBoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lz
b1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxv
Y2F0aW9uLmNwcAoraGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmNwcApAQCAtNTE4LDYgKzUyMCw4IEBAIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAvVGhyZWFkTG9jYWxD
YWNoZS5jcHAKK2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM4OSw2ICszODksMTIgQEAKIAkJMEY3MjVDQUExQzUwM0RFRDAwQUQ5NDNBIC8q
IEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovOyB9OwogCQkwRjcy
NUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUUxQzUwNkQzQjAwQUQ5
NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsKIAkJMEY3NEI5M0IxRjg5NjE0ODAw
QjkzNUQzIC8qIFByb3RvdHlwZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVB
MDVFMjAwRDI1RjYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRv
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLzsg
fTsKKwkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NzIwMEQyNUYw
MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjc1QTA2MjIwMEQyNjFEMDAzOEUyQ0YgLyogQWxsb2Nh
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLzsgfTsK
KwkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNG
IC8qIEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzVBMDY0MjAwRDI2MjgwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDJDMTVBOEND
M0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZE
MkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDMxMTVBQTgxMTIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI0MjAsNiArMjQyNiwxNiBAQAogCQkwRjcyNUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xk
UGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0Eg
LyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVEMyAv
KiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90
eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU1MjAwRDI1
RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1ODIw
MEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2FsQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUEyMDBEMjVGMDAwMzhF
MkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDVDMjAwRDI1
RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0Ug
LyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
U3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4
Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NDIsNiArNTU1OCwxNiBAQAog
CQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFs
bG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2Nh
dG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0
b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuY3BwICovLAorCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2Nh
bENhY2hlLmggKi8sCisJCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAorCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5
QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0
MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEEx
REI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtODA1MSw2ICs4MDc3
LDcgQEAKIAkJCQkwRjJBQzU3MTFFOEVFNDU0MDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVBMDYxMjAwRDI2MTgwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0ExQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtODIxNiw2ICs4MjQzLDcgQEAKIAkJCQkwRjZCOEFERDFDNEVG
QUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
RkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REYyMUJFOTNB
RDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC04Mzg1LDYgKzg0MTMsNyBAQAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBG
OTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgx
MjFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8q
IEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3
IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAw
QkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtODY2NSw2ICs4Njk0LDcgQEAKIAkJCQlGRUEwQzQwMzFDREQ3RDFEMDA0ODE5OTEg
LyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QkUyQ0FFMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIw
OCAvKiBHQ0NvbmR1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDc2N0UxRDk5QUVBOTAw
OEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTg3NDksNiAr
ODc3OSw3IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVy
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1
MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVB
MDYyMjAwRDI2MUQwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkJGOTJCOTFGRDc2RkZGMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkY5MkJBMUZENzcwMDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNSw2ICs4OTY2LDcg
QEAKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8q
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMUUx
ODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3Nyw2ICsxMjc3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAg
YXJnID0gdG1wKHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6IHsKKyAgICAgICAg
ICAgICAgICBUbXAgZHN0VG1wID0gbV9jb2RlLm5ld1RtcCh2YWx1ZS52YWx1ZSgpLT5yZXN1bHRC
YW5rKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUu
dmFsdWUoKS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUudmFsdWUoKSksIGRzdFRtcCk7CisgICAg
ICAgICAgICAgICAgYXJnID0gZHN0VG1wOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgc3RhY2ttYXAt
PmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodmFsdWUucmVwKCkucmVnKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgYm9vbCBQYXRjaHBvaW50
U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdAogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0Fy
Z3VtZW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENs
b2JiZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJl
Z2lzdGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDkgQEAg
dm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6Q29uc3RhbnQ6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlRGVmOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lz
dGVyOgogICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMjgsNiArMTMxLDEwIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JF
YWNoQXJnSW1wbCgKICAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gcmVjb3ZlciB0aGUgc3RhY2tt
YXAgdmFsdWUuIFNvLCBmb3JjZSBMYXRlQ29sZFVzZSB0byBwcmVzZXJ2ZSB0aGUKICAgICAgICAg
ICAgIC8vIG9yaWdpbmFsIHN0YWNrbWFwIHZhbHVlIGFjcm9zcyB0aGUgU3BlY2lhbCBvcGVyYXRp
b24uCiAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIG9wdGlvbmFsRGVm
QXJnV2lkdGggJiYgKm9wdGlvbmFsRGVmQXJnV2lkdGggPCBjaGlsZC52YWx1ZSgpLT5yZXN1bHRX
aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHJvbGUgY2FuIG9ubHkgYmUgc29tZSBr
aW5kIG9mIGRlZiBpZiB3ZSBkaWQgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIsIHdoaWNoIGlzCisg
ICAgICAgICAgICAgICAgLy8gb25seSBhbGxvd2VkIGZvciBwYXRjaHBvaW50cy4gUGF0Y2hwb2lu
dHMgZG9uJ3QgdXNlIHRoZSBkZWZBcmdXaWR0aCBmZWF0dXJlLgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFBcmc6OmlzQW55RGVmKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDYgKzUzLDExIEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29t
ZVJlZ2lzdGVyKFYKICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOwogfQogCit2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKSk7Cit9CisKIHZv
aWQgU3RhY2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgQ29uc3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAgICBjaGlsZChpbmRl
eCkgPSBjb25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw3
ICs5OSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21ldGhpbmcg
eW91IG1pZ2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25z
dHJhaW5lZAogICAgIC8vIHRvIFNvbWVSZWdpc3Rlci4KICAgICB2b2lkIGFwcGVuZFNvbWVSZWdp
c3RlcihWYWx1ZSopOwotCisgICAgdm9pZCBhcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihW
YWx1ZSopOworICAgIAogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMoKSBjb25zdCB7
IHJldHVybiBtX3JlcHM7IH0KIAogICAgIC8vIFN0YWNrbWFwcyBhbGxvdyB5b3UgdG8gc3BlY2lm
eSB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIgc29tZSByZWdpc3RlcnMuIENsb2JiZXJp
bmcgYSByZWdpc3RlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsMjEgKzQzMiw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBWb2lkKQog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigp
LT5yZXN1bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQua2luZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTdGFja0FyZ3VtZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURShm
YWxzZSwgKCJBdCAiLCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcENvbnN0cmFpbnQo
dmFsdWUsIENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+
KCktPnJlc3VsdENvbnN0cmFpbnQpLCBDb25zdHJhaW50Um9sZTo6RGVmKTsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENoZWNrQWRkOgpAQCAtNTcxLDE2ICs1
NTgsMjQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHN3aXRjaCAodmFsdWUucmVwKCkua2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbGRBbnk6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xkQW55OgogICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6TGF0ZUNvbGRBbnk6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgICAg
ICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRl
eHQsICI6ICIsIHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICBWQUxJREFURShyb2xl
ID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7
CisgICAgICAgICAgICBWQUxJREFURShjb250ZXh0LT5hczxQYXRjaHBvaW50VmFsdWU+KCksICgi
QXQgIiwgKmNvbnRleHQpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29u
c3RyYWludFJvbGU6OkRlZiwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKHZhbHVlLnJlcCgp
LmtpbmQoKSA9PSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIFZBTElE
QVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwg
dmFsdWUpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5yZXAoKS5yZWcoKS5pc0dQUigpKQogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLnZhbHVlKCktPnR5cGUoKSksICgiQXQg
IiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MCw2ICs0MCw3IEBAIHZvaWQgVmFsdWVSZXA6OmFkZFVzZWRSZWdpc3RlcnNUbyhSZWdpc3QK
ICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVS
ZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuOwpAQCAt
NzEsNiArNzIsNyBAQCB2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvCiAg
ICAgY2FzZSBDb2xkQW55OgogICAgIGNhc2UgTGF0ZUNvbGRBbnk6CiAgICAgY2FzZSBTb21lUmVn
aXN0ZXI6CisgICAgY2FzZSBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVF
YXJseVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRlUmVnaXN0ZXI6CkBA
IC0xNzUsNiArMTc3LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZh
bAogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJT
b21lUmVnaXN0ZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcldpdGhDbG9iYmVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJTb21lRWFybHlSZWdpc3RlciIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02NSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEFzIGFu
IGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29t
ZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQogICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMg
Y2xhaW1zIHRvIGNsb2JiZXIhCiAgICAgICAgIFNvbWVSZWdpc3RlciwKKyAgICAgICAgCisgICAg
ICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hv
dWxkIHBpY2sgc29tZSByZWdpc3RlciBidXQgdGhhdCB0aGlzCisgICAgICAgIC8vIHJlZ2lzdGVy
IGlzIHRoZW4gY29iYmVyZWQgd2l0aCBnYXJiYWdlLiBUaGlzIG9ubHkgd29ya3MgZm9yIHBhdGNo
cG9pbnRzLgorICAgICAgICBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwKIAogICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIHNob3VsZCBw
aWNrIHNvbWUgcmVnaXN0ZXIsIGJ1dCBpbXBsaWVzCiAgICAgICAgIC8vIHRoYXQgdGhlIGRlZiBo
YXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMgb2YgdGhlIHN0YWNrbWFwLiBUaGlzIGlz
IG9ubHkgdmFsaWQgZm9yCkBAIC0xMDcsNyArMTExLDcgQEAgcHVibGljOgogICAgIFZhbHVlUmVw
KEtpbmQga2luZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRB
bnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7
CisgICAgICAgIEFTU0VSVChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtp
bmQgPT0gTGF0ZUNvbGRBbnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21l
UmVnaXN0ZXJXaXRoQ2xvYmJlciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKICAgICB9
CiAKICAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTU1LDE0ICs5NTUsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFs
bG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1Np
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAg
ICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQogICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIyKTsKICAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hH
UFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXpl
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVDYXBhY2l0
eSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSwgbV9p
bmxpbmVDYXBhY2l0eSk7IH0KIAogICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKLSAgICAg
ICAgOiBtX2FsbG9jYXRvcigwKQotICAgICAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKKyAgICAg
ICAgOiBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApAQCAtNjMsNyArNjIsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1fYWxsb2NhdG9y
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3IoKTsKICAgICAgICAg
bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IDA7CiAgICAg
ICAgIEFTU0VSVChpc051bGwoKSk7CkBAIC03Nyw3ICs3Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYsIEpTT2JqZWN0
KiBwcm90b3R5cGUpOwogCi0gICAgQmxvY2tEaXJlY3RvcnkqIG1fYWxsb2NhdG9yOyAvLyBQcmVj
b21wdXRlZCB0byBtYWtlIHRoaW5ncyBlYXNpZXIgZm9yIGdlbmVyYXRlZCBjb2RlLgorICAgIEFs
bG9jYXRvciBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVy
IGZvciBnZW5lcmF0ZWQgY29kZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKICAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5OwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpCiAKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlY3V0YWJs
ZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKLSAg
ICAgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fYWxsb2NhdG9y
ID0gQWxsb2NhdG9yKCk7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk5LDExICs5OSwxMSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGlu
ZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5s
aW5lQ2FwYWNpdHkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bS5jZWxsU3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uY2VsbFNw
YWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkVuc3VyZUFsbG9jYXRvcik7CiAKICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBp
bmxpbmUgY2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgogICAgIGlmIChhbGxv
Y2F0b3IpIHsKLSAgICAgICAgc2l6ZV90IHNsb3AgPSAoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpIC0g
YWxsb2NhdGlvblNpemUpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAg
IHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci5jZWxsU2l6ZSh2bS5oZWFwKSAtIGFsbG9jYXRpb25T
aXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgICAgICBpbmxpbmVDYXBh
Y2l0eSArPSBzbG9wOwogICAgICAgICBpZiAoaW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0Zp
bmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpOwpAQCAtMTEzLDcgKzExMyw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmkKIAogICAgIGlmIChpc1BvbHlQcm90
bykgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7Ci0gICAgICAg
IG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3Io
KTsKICAgICAgICAgZXhlY3V0YWJsZS0+c2V0Q2FjaGVkUG9seVByb3RvU3RydWN0dXJlKHZtLCBz
dHJ1Y3R1cmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChleGVjdXRhYmxlKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKDApLCBzdG9yYWdlR1BSKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cykpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkg
ewogICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwg
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faml0LmFkZFB0cigKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQ
dHIpIHsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNj
cmF0Y2hHUFIpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFs
T2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2Nh
dG9yKSB7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2so
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBh
bGxvY2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFn
ZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2sp
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDIw
OCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGJsb2NrRGlyZWN0
b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYmxvY2tEaXJlY3Rv
cnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGJs
b2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2Ny
YXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JWYWx1ZSA9IHN1YnNw
YWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yVmFsdWUsIGFs
bG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJl
KG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyAr
ODM4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1Zh
bHVlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQwOCw3ICs4NDA1LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BS
MiA9IHNjcmF0Y2gyLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdw
cigpOwogICAgICAgICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICBt
X2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CkBA
IC04NDI4LDcgKzg0MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9y
OwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIGlmICghYWxsb2Nh
dG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CkBAIC04NDU2LDcgKzg0NTIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7CiAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
Mywgc2xvd1BhdGgpOwogICAgIAogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwpA
QCAtMTE0MTUsMTQgKzExNDEwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVUaGlzKE4KICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
KSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIp
OworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKIAot
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0
b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQ
UiwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBBbGxvY2F0b3IoKSwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1
cmVHUFIsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9m
ZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZklubGluZUNhcGFjaXR5KCkpLCBpbmxpbmVDYXBhY2l0eUdQUik7CkBAIC0xMTQ0OCwxNCArMTE0
NDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChObwogCiAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JQ
dHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBzdWJzcGFjZUZvcjxKU0Zp
bmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwotICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBhdXRvIG1hc2sgPSBU
cnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxv
Y2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICBtX2ppdC5lbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgaWYgKCFhbGxvY2F0b3JW
YWx1ZSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAg
ICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclZhbHVlLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Cisg
ICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9q
aXQudm0oKSk7CisgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJl
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxMjAsNyArMzEyMCw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGEgY2VsbCBvZiBhIHNwZWNpZmljIHNpemUuCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoCi0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxv
Y2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAorICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVK
U0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CkBAIC0zMTI5LDcgKzMxMjksNyBAQCBwdWJsaWM6CiAgICAgLy8g
QWxsb2NhdG9yIGZvciBhbiBvYmplY3Qgb2YgYSBzcGVjaWZpYyBzaXplLgogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUg
TWFza1R5cGU+IC8vIFN0cnVjdHVyZVR5cGUsIFN0b3JhZ2VUeXBlIGFuZCwgTWFza1R5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdCgKLSAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9J
TkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVj
dG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0
ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6
ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9j
YXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNp
emVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRz
X3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+
KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMzLDEwICs1ODMzLDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmlu
c2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
b2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwog
ICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdl
dCgpLCBzbG93UGF0aCk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5v
ZmZzZXQoKSksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
S2lkczsgKytpKQpAQCAtOTg2MSw3ICs5ODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRl
eGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAg
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxsQWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVk
UHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwpAQCAtOTkyMCw3ICs5OTIwLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBtYXNrID0gY29tcHV0ZUJ1dHRlcmZseUlu
ZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2Jq
ZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoY2VsbEFsbG9jYXRvciksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBt
YXNrLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2Vs
bEFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNr
LCBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0
ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUp
OwpAQCAtMTA4OTIsOCArMTA4OTIsOCBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAg
ICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwot
ICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgICAgIExWYWx1ZSBzdGFydE9mU3Rv
cmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIExWYWx1ZSBzdGFydE9m
U3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkg
PSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIo
c2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMTE5MjUsMTYgKzExOTI1LDE4
IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2Nh
dG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5
KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJ
bnRQdHIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxCbG9j
a0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIoKSk7CisgICAgICAgIEFsbG9jYXRvciBh
Y3R1YWxBbGxvY2F0b3I7CisgICAgICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAg
ICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBBbGxvY2F0b3IoYWxsb2NhdG9yLT5hc0ludDMyKCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAgICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBlaXRoZXIgd2Uga25vdyB0aGF0IHRoZSBhbGxvY2F0b3IgaXMg
bnVsbCBvciB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgICAgICAgICAvLyBhbGxvY2F0b3Ig
aXMuIEluIGVpdGhlciBjYXNlLCB3ZSBuZWVkIHRoZSBudWxsIGNoZWNrLgogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaGF2ZUFsbG9jYXRvciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZl
QWxsb2NhdG9yKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChhbGxvY2F0b3IsIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGFsbG9jYXRvciwgbV9vdXQuY29u
c3RJbnQzMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpLAorICAgICAgICAgICAgICAgIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaGF2ZUFsbG9jYXRvciwgbGFzdE5leHQpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTE5NDQsNyArMTE5NDYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOwotICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYWxsb2NhdG9yKTsKKyAgICAgICAgaWYgKGFjdHVh
bEFsbG9jYXRvcikKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cysrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcihhbGxvY2F0b3IpOwogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9
IFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjsKICAgICAgICAgCkBAIC0xMTk1NSw2ICsxMTk2
MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGp1bXBUb1Nsb3dQYXRoOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhbGxvY2F0b3JHUFI7CisgICAgICAgICAgICAgICAgaWYg
KGFjdHVhbEFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFy
YW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRp
b24gcGF0aCBiZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8v
IGFsbG9jYXRpb24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1h
Y2hpbmUgY29kZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hh
dCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBj
b21waWxlcgpAQCAtMTE5NjIsNyArMTE5NzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IC8vIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBv
cHRpbWl6ZWQgcGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhl
IGNvbXBpbGVyIHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1
YWxBbGxvY2F0b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9TdWNjZXNzOwpAQCAtMTIwNTQsOCArMTIwNjUsOCBAQCBwcml2YXRlOgogICAg
IExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0
dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4KQEAgLTEyMDc0LDE2ICsxMjA4NSwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxl
dGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBh
Y3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxT
dWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVy
bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0
dWFsQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVh
bEFsbG9jYXRvci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIx
MDIsNyArMTIxMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQubG9hZFB0cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1f
b3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2Vf
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1
YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxMTcsOCArMTIxMjgs
NyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAg
ICAgICAgIExWYWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVl
IGJ1dHRlcmZseSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xv
d1BhdGgpCiAgICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6
ZSgKLSAgICAgICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93
UGF0aCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJm
bHlJbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTI2LDE1ICsxMjEzNiwx
NCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAg
ICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUo
Ci0gICAgICAgICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1Bh
dGgpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4g
YWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0
Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdl
IGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAg
ICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxNDYs
NyArMTIxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291
dC5pbnRQdHJaZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50
UHRyWmVybywgbV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3Vuc2lnbmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0
KS0+Y2VsbFNpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZN
OworCitjbGFzcyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAg
IAorICAgIEFsbG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgdW5z
aWduZWQgY2VsbFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9m
ZnNldCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0FsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoVk0m
IHZtLCBHQ0RlZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1v
ZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcih2bSwg
bV9vZmZzZXQpLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKIAotI2luY2x1ZGUgIkFs
bG9jYXRpbmdTY29wZS5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTM5LDE1
ICszOCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0ZXhwciBib29sIHRy
YWRlRGVzdHJ1Y3RvckJsb2NrcyA9IHRydWU7Ci0KIEJsb2NrRGlyZWN0b3J5OjpCbG9ja0RpcmVj
dG9yeShIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX2ZyZWVMaXN0KGNlbGxT
aXplKQotICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDAp
Ci0gICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCisgICAg
OiBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCiAgICAgLCBtX2hl
YXAoaGVhcCkKIHsKKyAgICBoZWFwLT50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuYWxsb2NhdGVP
ZmZzZXQodGhpcyk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnNldFN1YnNwYWNlKFN1YnNw
YWNlKiBzdWJzcGFjZSkKQEAgLTgxLDE0MyArNzYsMTQgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSog
QmxvY2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsK
IH0KIAotdm9pZCBCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKLXsKLSAgICBp
ZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJl
ZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50Qmxv
Y2sgPSBudWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZygpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOwotICAgIAotICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOwotICAgIEFTU0VS
VChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAKLSAgICBmb3IgKDs7KSB7
Ci0gICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkg
fCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7Ci0gICAgICAgIGlm
IChtX2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIAotICAgICAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKLQotICAgICAgICBpZiAo
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihtX2Jsb2Nrc1ttX2FsbG9jYXRpb25DdXJzb3Jd
KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIGlmIChPcHRp
b25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCi0gICAgICAgICYmICh0
cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKLSAgICAgICAg
aWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFjZS0+ZmluZEVtcHR5Qmxv
Y2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9zdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCi0gICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhh
dmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5Ci0gICAgICAgICAgICAvLyBhbmQgZW1wdHkg
c2V0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJvbURpcmVj
dG9yeSgpOwotICAgICAgICAgICAgYWRkQmxvY2soYmxvY2spOwotICAgICAgICAgICAgcmV0dXJu
IGFsbG9jYXRlSW4oYmxvY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbihNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jaykKK01hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5Ojpm
aW5kQmxvY2tGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0
ZUluKGJsb2NrKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9j
ay0+aXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7
Ci0gICAgCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBm
dWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0Ci0gICAgLy8gdGhh
dCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCi0g
ICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKLSAgICAgICAgQVNTRVJU
KGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3
bHlBbGxvY2F0ZWQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwot
ICAgICAgICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwotICAg
ICAgICBBU1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nhcnks
IGJsb2NrKSk7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RF
bXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICBp
ZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQogICAgIAotICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAg
Ci0gICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgW10gKCkg
LT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSk7Ci0gICAgc2V0SXNFZGVu
KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUpOwotICAgIG1hcmtlZFNw
YWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAg
ICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKLSAgICBpZiAo
IWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7
Ci0gICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAgICAgICAgICAgICAgIGRlZmVy
cmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49IE9wdGlvbnM6
OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAw
OwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwot
ICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OwotICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKLQotICAg
IEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKLSAgICBtX2hlYXAtPmRpZEFs
bG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwotICAgIAotICAgIGRpZENvbnN1bWVG
cmVlTGlzdCgpOwotICAgIAotICAgIEFsbG9jYXRpbmdTY29wZSBoZWxwaW5nSGVhcCgqbV9oZWFw
KTsKLQotICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRl
eHQpOwotICAgIAotICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2Fs
bGJhY2sgYW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25s
eQotICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0
IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElLRUxZ
KG1fY3VycmVudEJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4
dCwgZmFpbHVyZU1vZGUpOwotICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmcoKTsKLSAgICAKLSAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
ayA9IHRyeUFsbG9jYXRlQmxvY2soKTsKLSAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlmIChm
YWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBhZGRCbG9jayhibG9jayk7Ci0gICAgcmVzdWx0
ID0gYWxsb2NhdGVJbihibG9jayk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5
LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKKyAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxv
Y2F0aW9uQ3Vyc29yXTsKIH0KIAogc3RhdGljIHNpemVfdCBibG9ja0hlYWRlclNpemUoKQpAQCAt
MzEzLDI0ICsxNzksMTkgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmcoKQog
ewogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBC
bG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAgICBBU1NFUlQoIW1fbGFzdEFj
dGl2ZUJsb2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVCht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0g
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJlbnRCbG9j
ayA9IDA7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZv
ckVhY2goCisgICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAg
ICAgICAgYWxsb2NhdG9yLT5zdG9wQWxsb2NhdGluZygpOworICAgICAgICB9KTsKIH0KIAogdm9p
ZCBCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogewotICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAg
bV9mcmVlTGlzdC5jbGVhcigpOwotCisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAg
ICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxv
Y2F0b3ItPnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgICAgIH0pOworICAgIAogICAgIG1f
YWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNvciA9IDA7CiAgICAgbV91bnN3
ZXB0Q3Vyc29yID0gMDsKQEAgLTM1NCwxMiArMjE1LDEwIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
Omxhc3RDaGFuY2VUb0ZpbmFsaXoKIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2Nh
dGluZygpCiB7Ci0gICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0g
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IG51bGxwdHI7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAg
WyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3It
PnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rv
cnk6OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKQEAgLTM3OSw3ICsyMzgsNyBAQCB2
b2lkIEJsb2NrRGlyZWN0b3J5OjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBv
ZiBjb2xsZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4g
dGhlIG1fbWFya2luZ1hZWgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgaWYgKCF0cmFkZURl
c3RydWN0b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgaWYgKCFPcHRpb25z
Ojp0cmFkZURlc3RydWN0b3JCbG9ja3MoKSAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsKICAgICAg
ICAgQVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKICAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5v
dEVtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CiAgICAgfSBlbHNlIHsKQEAgLTUx
Miw1ICszNzEsMTUgQEAgTWFya2VkU3BhY2UmIEJsb2NrRGlyZWN0b3J5OjptYXJrZWRTcGFjZQog
ICAgIHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQogCitib29sIEJsb2NrRGlyZWN0b3J5
Ojppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkKK3sKKyAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAo
TG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0IHw9IGFsbG9j
YXRvci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOworICAgICAgICB9KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFp
bHVyZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDZWxsQXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQzLDcgQEAgY2xhc3MgSGVh
cDsKIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUg
Rk9SX0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxpdmUsIExp
dmUpIC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4g
Ki9cCkBAIC03Niw5ICs3OSw2IEBAIGNsYXNzIEJsb2NrRGlyZWN0b3J5IHsKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNl
bGxTaXplKCk7Ci0KICAgICBCbG9ja0RpcmVjdG9yeShIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsK
ICAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOwpAQCAtOTcsMTAgKzk3LDkgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVk
c0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQg
Y2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2
b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7
CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogCi0gICAgYm9vbCBpc0ZyZWVM
aXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CisgICAgYm9vbCBpc0ZyZWVMaXN0
ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7
CkBAIC0xNTcsMjQgKzE1NiwyMCBAQCBwdWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFj
ZSgpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gQWxsb2NhdG9yKG1fdGxjT2Zmc2V0KTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpk
YXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2Nh
dG9yOwogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxD
b250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKLSAgICB2b2lkIGRp
ZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmcoKTsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAg
dm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCogYWxs
b2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRv
VGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CiAgICAgCi0gICAgRnJlZUxp
c3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2Nr
KCk7CiAgICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKICAg
ICBWZWN0b3I8dW5zaWduZWQ+IG1fZnJlZUJsb2NrSW5kaWNlczsKQEAgLTE5MywxMCArMTg4LDYg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRv
IHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVtcHR5IGFsbG9jYXRpb24g
KGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXplX3QgbV91bnN3ZXB0Q3Vyc29y
IHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBm
b3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSog
bV9jdXJyZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxv
Y2s7Ci0KLSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIENl
bGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHNo
b3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2LDE2ICsxOTcsMTAgQEAgcHJpdmF0
ZToKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5IHsgbnVsbHB0ciB9OwogICAg
IEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlIHsgbnVsbHB0ciB9Owog
ICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IgeyBudWxscHRyIH07CisgICAgCisgICAgTG9jayBtX2xvY2FsQWxsb2NhdG9yc0xvY2s7Cisg
ICAgc2l6ZV90IG1fdGxjT2Zmc2V0OworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMb2NhbEFsbG9j
YXRvciwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+PiBtX2xvY2FsQWxsb2Nh
dG9yczsKIH07CiAKLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJl
ZUxpc3QoKQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQmxvY2tEaXJlY3RvcnksIG1f
ZnJlZUxpc3QpOwotfQotCi1pbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkNlbGxTaXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEJsb2NrRGlyZWN0b3J5
LCBtX2NlbGxTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICszMSw2IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1pbmxpbmUgYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbChjb25z
dCB2b2lkKiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMo
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKLXsKLSAgICByZXR1cm4g
bV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAg
ICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250
ZXh0LCBmYWlsdXJlTW9kZSkpOwotICAgICAgICB9KTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+IGlubGluZSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpmb3JFYWNoQmxvY2soY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCShyZXZp
c2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJCbG9ja0Rp
cmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTG9j
YWxBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0zOCw0MCArNDIsMzggQEAgQ29tcGxldGVTdWJzcGFjZTo6Q29tcGxldGVT
dWJzcGFjZShDU3RyaQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKIHsKICAgICBpbml0aWFs
aXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKLSAgICAgICAgbV9hbGxv
Y2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7CiB9CiAKIENvbXBsZXRlU3Vic3BhY2U6On5D
b21wbGV0ZVN1YnNwYWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQWxs
b2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNp
emUsIG1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qg
c2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoVk0m
IHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBhbGxvY2F0ZU5v
blZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJu
IGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9k
ZSk7CiB9CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVO
b25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICB2b2lk
ICpyZXN1bHQ7Ci0gICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkK
LSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZh
aWx1cmVNb2RlKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgZmFp
bHVyZU1vZGUpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KHNpemUs
IGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0
ZVNsb3codm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKICAgICBpZiAoIXNpemVDbGFz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBBbGxvY2F0b3IoKTsK
ICAgICAKICAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sg
Zm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKICAgICAvLyB0
byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVu
IHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0KQEAgLTgyLDcgKzg0LDcgQEAgQmxvY2tE
aXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQgYW55ICJmb3JF
YWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0
ZXIgaXQncyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwotICAgIGlmIChC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0p
CisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2lu
ZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKQEAgLTk4
LDcgKzEwMCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAg
ICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBz
aXplQ2xhc3MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX2FsbG9jYXRvckZvclNp
emVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtpbmRleF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpbmRleC0tKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsMjMgKzEwOSwyMyBAQCBCbG9j
a0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9maXJzdERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICByZXR1
cm4gZGlyZWN0b3J5OworICAgIHJldHVybiBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogfQogCi12
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVT
bG93KHNpemUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9
PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZt
LCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIHNhbml0aXpl
U3RhY2tGb3JWTSgmdm0pOwogICAgIAotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikp
Ci0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0
b3IpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgCiAgICAgaWYgKHNp
emUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8
PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKQEAgLTEzMiwxNSArMTM0LDE1IEBAIHZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0g
ICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVh
dGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFs
bG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlz
KTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBt
X3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0
ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xh
cmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJy
ZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMi
LCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihz
aXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9y
TW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9
CiAgICAgCi0gICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0
dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAK
IHByaXZhdGU6Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsK
KyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAogICAgIC8vIFRo
ZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBh
bGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVT
bG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29u
dGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFj
ZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgc3RkOjphcnJh
eTxBbGxvY2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0b3J5Pj4gbV9k
aXJlY3RvcmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZv
ck1vZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkK
IHsKICAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXpl
KV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1v
ZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9B
U1NFUlQobW9kZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3Ip
OwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJ
KHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07
CiAKIGNsYXNzIEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7
Ci0gICAgCiBwdWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5G
cmVlTGlzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVy
cmFsQ29udGV4dC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworY2xh
c3MgTG9jYWxBbGxvY2F0b3I7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKICAgICBmcmll
bmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgZnJp
ZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVycmFs
Q29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2
OCw3IEBACiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJTd2Vl
cGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6SGVhcChWTSog
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQ
b29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1f
dGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCisgICAg
LCBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNs
YXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNz
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgU3dlZXBpbmdTY29wZTsKK2NsYXNzIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ7CiBjbGFzcyBWTTsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1
Y3QgQ3VycmVudFRocmVhZFN0YXRlOwpAQCAtMzcyLDYgKzM3Myw4IEBAIHB1YmxpYzoKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYpOworICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQmIHRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQoKSB7IHJldHVybiAqbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTcxNCw2ICs3MTcs
OCBAQCBwcml2YXRlOgogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50VGhy
ZWFkU3RhdGUgeyBudWxscHRyIH07CiAgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVhZCB7
IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2ludGVy
LgorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRMb2NhbENhY2hlTGF5b3V0PiBtX3Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDIyNjg5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsOSArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJNYXJrZWRCbG9j
ay5oIgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1Nl
bnRpbmVsTGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkFsbG9j
YXRvcklubGluZXMuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNs
dWRlICJJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0
b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTM1LDYgKzM4LDcgQEAgSXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSAogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKICAgICAsIG1fc2l6
ZShzaXplKQogICAgICwgbV9kaXJlY3RvcnkoJmhlYXAsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpKQorICAgICwgbV9hbGxvY2F0b3IobV9kaXJl
Y3RvcnkuYWxsb2NhdG9yKCkpCiAgICAgLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3Rk
OjptYWtlX3VuaXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQogewogICAgIGluaXRp
YWxpemUoaGVhcENlbGxUeXBlLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOwpA
QCAtNTAsMjAgKzU0LDIwIEBAIElzb1N1YnNwYWNlOjp+SXNvU3Vic3BhY2UoKQogewogfQogCi1C
bG9ja0RpcmVjdG9yeSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZSBtb2RlKQorQWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Io
c2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9pZCogSXNvU3Vic3BhY2U6OmFs
bG9jYXRlKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGUoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBh
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cisg
ICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBm
YWlsdXJlTW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5v
blZpcnR1YWwoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICB2b2lkKiByZXN1bHQgPSBtX2Rp
cmVjdG9yeS5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lk
KiByZXN1bHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZSh2bSwgZGVmZXJyYWxDb250ZXh0LCBmYWls
dXJlTW9kZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSAr
NDEsMTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0
b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yTm9u
VmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOworICAgIEFsbG9jYXRvciBhbGxvY2F0
b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwogCi0gICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVO
b25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIElz
b0NlbGxTZXQ7CkBAIC01NiwxNCArNTYsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICBzaXplX3Qg
bV9zaXplOwogICAgIEJsb2NrRGlyZWN0b3J5IG1fZGlyZWN0b3J5OworICAgIEFsbG9jYXRvciBt
X2FsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJ
c29DZWxsU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0czsK
IH07CiAKLWlubGluZSBCbG9ja0RpcmVjdG9yeSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpCitpbmxpbmUgQWxsb2NhdG9y
IElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0
b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsK
LSAgICByZXR1cm4gJm1fZGlyZWN0b3J5OworICAgIHJldHVybiBtX2FsbG9jYXRvcjsKIH0KIAog
I2RlZmluZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwQ2VsbFR5cGUsIHR5cGUpICgiSXNv
bGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhlYXApLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5
cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRlICJBbGxvY2F0aW5nU2NvcGUu
aCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcHRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3Io
QmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkK
KyAgICAsIG1fY2VsbFNpemUoZGlyZWN0b3J5LT5tX2NlbGxTaXplKQorICAgICwgbV9mcmVlTGlz
dChtX2NlbGxTaXplKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZGlyZWN0b3J5LT5t
X2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgIGRpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnMu
YXBwZW5kKHRoaXMpOworfQorCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoTG9jYWxB
bGxvY2F0b3ImJiBvdGhlcikKKyAgICA6IG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQor
ICAgICwgbV9jZWxsU2l6ZShvdGhlci5tX2NlbGxTaXplKQorICAgICwgbV9mcmVlTGlzdChXVEZN
b3ZlKG90aGVyLm1fZnJlZUxpc3QpKQorICAgICwgbV9jdXJyZW50QmxvY2sob3RoZXIubV9jdXJy
ZW50QmxvY2spCisgICAgLCBtX2xhc3RBY3RpdmVCbG9jayhvdGhlci5tX2xhc3RBY3RpdmVCbG9j
aykKK3sKKyAgICBvdGhlci5yZXNldCgpOworICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9kaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0
b3JzTG9jayk7CisgICAgICAgIG90aGVyLnJlbW92ZSgpOworICAgICAgICBtX2RpcmVjdG9yeS0+
bV9sb2NhbEFsbG9jYXRvcnMuYXBwZW5kKHRoaXMpOworICAgIH0KK30KKwordm9pZCBMb2NhbEFs
bG9jYXRvcjo6cmVzZXQoKQoreworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2N1cnJl
bnRCbG9jayA9IG51bGxwdHI7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOworfQor
CitMb2NhbEFsbG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKCkKK3sKKyAgICBpZiAoaXNPbkxpc3Qo
KSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2Fs
QWxsb2NhdG9yc0xvY2spOworICAgICAgICByZW1vdmUoKTsKKyAgICB9CisgICAgCisgICAgLy8g
QXNzZXJ0IHRoYXQgdGhpcyBhbGxvY2F0b3IgaXNuJ3QgaG9sZGluZyBvbnRvIGFueSBtZW1vcnku
IFRoaXMgaXMgYSB2YWxpZCBhc3NlcnRpb24gZm9yIHRoZQorICAgIC8vIGZvbGxvd2luZyB0d28g
dXNlIGNhc2VzOgorICAgIC8vIAorICAgIC8vIC0gSW1tb3J0YWwgVExDLiBUaG9zZSBkZXN0cnVj
dCBhZnRlciB0aGUgaGVhcCBpcyBkb25lIGRlc3RydWN0aW5nLCBzbyB0aGV5IHNob3VsZCBub3Qg
aGF2ZQorICAgIC8vICAgYW55IHN0YXRlIGxlZnQgaW4gdGhlbS4KKyAgICAvLworICAgIC8vIC0g
VExDIG93bmVkIGJ5IGFuIG9iamVjdC4gU3VjaCBhIFRMQyBnZXRzIGRlc3Ryb3llZCBhZnRlciBh
IEdDIGZsaXAgZHVyaW5nIHdoaWNoIHdlIHByb3ZlZAorICAgIC8vICAgdGhhdCBpdCBpcyBub3Qg
cmVhY2hhYmxlLiBUaGVyZWZvcmUsIHRoZSBUTEMgc2hvdWxkIHN0aWxsIGJlIGluIGEgZnVsbHkg
cmVzZXQgc3RhdGUgYXQgdGhlCisgICAgLy8gICB0aW1lIG9mIGRlc3RydWN0aW9uIGJlY2F1c2Ug
Zm9yIGl0IHRvIGdldCBpbnRvIGFueSBvdGhlciBzdGF0ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxs
b2NhdGVkCisgICAgLy8gICBpbiBpdCAod2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mg
c3VwcG9zZWRseSB1bnJlYWNoYWJsZSkuCisgICAgUkVMRUFTRV9BU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2Nr
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOworfQorCit2b2lkIExv
Y2FsQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCit7CisgICAgQVNTRVJUKCFtX2xhc3RBY3Rp
dmVCbG9jayk7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBBU1NFUlQobV9m
cmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAg
IG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKK30KKwordm9pZCBMb2NhbEFsbG9j
YXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCit7CisgICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRp
bmcobV9mcmVlTGlzdCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsK
KyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0
b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3sKKyAgICByZXNldCgpOworfQorCit2b2lkKiBM
b2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIEhlYXAmIGhlYXAg
PSAqbV9kaXJlY3RvcnktPm1faGVhcDsKKyAgICBBU1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRl
ZmVycmFsQ29udGV4dCk7CisKKyAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgp
LmlzSXRlcmF0aW5nKCkpOworICAgIGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5h
bFNpemUoKSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxs
b2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVy
IGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhh
cyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcg
V2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFs
aXphdGlvbi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1
cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9p
ZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlm
IChMSUtFTFkocmVzdWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxv
Y2soKTsKKyAgICBpZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFs
bG9jYXRlSW4oYmxvY2spOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAg
aWYgKG1fY3VycmVudEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZy
ZWVMaXN0KCk7CisgICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJs
b2NrID0gbnVsbHB0cjsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmcoKQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBi
ZSB1c2VkIGZvciByZWFsIG11bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQg
aGF2ZSB0bworICAgIC8vIGNvbWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhl
cmUuIFRoYXQgcHJvdG9jb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAv
LworICAgIC8vIC0gVGhlIGJhc2ljIGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRy
eWluZyB0byBkbyBhbiBhbGxvY2F0aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNh
bWUgYml0dmVjdG9yLiBUaGF0IHByb2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBs
ZWFzdC4KKyAgICAvLworICAgIC8vIC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxv
Y2F0b3IgdHJpZ2dlcmluZyBhIHN0ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkK
KyAgICAvLyAgIHZpYSBhIHNlYXJjaCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxp
c3QuIFdobyBrbm93cyB3aGF0IGxvY2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25l
IHdheSB0byBtYWtlIHRoaXMgd29yayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sg
dGhhdCBwcm90ZWN0cyBhbGwgbXV0YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBh
dGhzLiBUaGF0IHdvdWxkIHByb2JhYmx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0
IHdvdWxkIGNlcnRhaW5seSBiZQorICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24g
ZnJvbSBKSVQgdGhyZWFkcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgxNjM1CisgICAgCisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOworICAgIAorICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFT
U0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZp
bmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2Nr
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRp
b25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmIChP
cHRpb25zOjp0cmFkZURlc3RydWN0b3JCbG9ja3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVz
dHJ1Y3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0g
bV9kaXJlY3RvcnktPm1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09
IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRl
QnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJl
Y2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3Ro
IGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQg
dGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7
CisgICAgICAgICAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAg
cmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiBudWxscHRyOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0
ZUluKGJsb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrKQoreworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9j
ay0+aXNGcmVlTGlzdGVkKCkpOworICAgIAorICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7
CisgICAgCisgICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBm
dWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CisgICAgLy8gdGhh
dCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCisg
ICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgQVNTRVJU
KGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CisgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3
bHlBbGxvY2F0ZWQoKTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwor
ICAgICAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwg
YmxvY2spKTsKKyAgICAgICAgQVNTRVJUKCFtX2RpcmVjdG9yeS0+aXNDYW5BbGxvY2F0ZUJ1dE5v
dEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgCisgICAg
dm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVh
cENlbGwqIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSk7CisgICAgbV9kaXJlY3RvcnktPnNl
dElzRWRlbihOb0xvY2tpbmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKKyAgICBt
X2RpcmVjdG9yeS0+bWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50Qmxv
Y2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRvVGVz
dENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkK
K3sKKyAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKKyAg
ICBpZiAoIWFsbG9jYXRpb25Db3VudCkgeworICAgICAgICBpZiAoIW1fZGlyZWN0b3J5LT5tX2hl
YXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAg
ICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5tX2hlYXAtPmNvbGxlY3RO
b3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAoKythbGxvY2F0aW9uQ291bnQgPj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0Nz
KCkpCisgICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7Cit9CisKK2Jvb2wgTG9jYWxBbGxvY2F0
b3I6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIC8v
IFRoaXMgYWJvbWluYXRpb24gZXhpc3RzIHRvIGRldGVjdCB3aGVuIGFuIG9iamVjdCBpcyBpbiB0
aGUgZGVhZC1idXQtbm90LWRlc3RydWN0ZWQgc3RhdGUuCisgICAgLy8gVGhlcmVmb3JlLCBpdCdz
IG5vdCBldmVuIGNsZWFyIHRoYXQgdGhpcyBuZWVkcyB0byBkbyBhbnl0aGluZyBiZXlvbmQgcmV0
dXJuaW5nICJmYWxzZSIsIHNpbmNlCisgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBv
d25pbmcgdGhlIG9iamVjdCBpcyBmcmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9y
IGFueQorICAgIC8vIG9iamVjdHMgdG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVk
IHN0YXRlLgorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2NTUKKyAgICByZXR1cm4gbV9m
cmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TG9jYWxBbGxvY2F0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Mb2NhbEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9j
a0RpcmVjdG9yeTsKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9j
YXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsQWxsb2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAg
ICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKExv
Y2FsQWxsb2NhdG9yJiYpOworICAgIH5Mb2NhbEFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQq
IGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKwor
ICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9u
KCk7CisgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNl
bGxTaXplKCk7CisgICAgCisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CisgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CisgICAgdm9pZCogdHJ5
QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCogYWxsb2NhdGVJbihN
YXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKworICAgIEJsb2NrRGlyZWN0b3J5
KiBtX2RpcmVjdG9yeTsKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplOworICAgIEZyZWVMaXN0IG1f
ZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBudWxs
cHRyIH07CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBudWxs
cHRyIH07Cit9OworCitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvY2FsQWxsb2NhdG9yLCBt
X2ZyZWVMaXN0KTsKK30KKworaW5saW5lIHB0cmRpZmZfdCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0
T2ZDZWxsU2l6ZSgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2NhbEFsbG9jYXRv
ciwgbV9jZWxsU2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
TG9jYWxBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4g
bV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CisgICAg
ICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9kaXJlY3RvcnktPmhlYXAoKS0+dm0oKSk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNl
KGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIK
ICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1
ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsNiAr
NDEsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBIZWFwU25hcHNob3RC
dWlsZGVyOwogY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXpl
cjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRv
ckZvck1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9j
ay5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgpAQCAtNTYsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0Nl
bGwqKTsKIAotICAgIHZpcnR1YWwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKHNpemVf
dCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKKyAgICB2
aXJ0dWFsIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKICAgICAKICAgICB2b2lkIHByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgor
CisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRM
b2NhbENhY2hlTGF5b3V0LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6
OmNyZWF0ZShIZWFwJiBoZWFwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9j
YWxDYWNoZShoZWFwKSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUo
SGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQoreworICAgIG1fZGF0YSA9IGFsbG9jYXRl
RGF0YSgpOworfQorCitUaHJlYWRMb2NhbENhY2hlOjp+VGhyZWFkTG9jYWxDYWNoZSgpCit7Cisg
ICAgZGVzdHJveURhdGEobV9kYXRhKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogVGhy
ZWFkTG9jYWxDYWNoZTo6YWxsb2NhdGVEYXRhKCkKK3sKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG1f
ZGF0YSA/IG1fZGF0YS0+c2l6ZSA6IDA7CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6U25h
cHNob3QgbGF5b3V0ID0gbV9oZWFwLnRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKS5zbmFwc2hvdCgp
OworICAgIAorICAgIERhdGEqIHJlc3VsdCA9IHN0YXRpY19jYXN0PERhdGEqPihmYXN0TWFsbG9j
KE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpICsgbGF5b3V0LnNpemUpKTsKKyAgICBy
ZXN1bHQtPnNpemUgPSBsYXlvdXQuc2l6ZTsKKyAgICByZXN1bHQtPmNhY2hlID0gdGhpczsKKyAg
ICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6
ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9m
ZnNldCkpIExvY2FsQWxsb2NhdG9yKFdURk1vdmUoYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCkp
KTsKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBsYXlvdXQuc2l6
ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAoJmFsbG9j
YXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihsYXlvdXQuZGlyZWN0b3JpZXNb
b2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJveURhdGEoRGF0YSogZGF0YSkKK3sKKyAg
ICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBkYXRhLT5zaXplOyBvZmZzZXQgKz0g
c2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgYWxsb2NhdG9yKCpkYXRhLCBvZmZzZXQp
Ln5Mb2NhbEFsbG9jYXRvcigpOworICAgIGZhc3RGcmVlKGRhdGEpOworfQorCit2b2lkIFRocmVh
ZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxf
b25jZSgKKyAgICAgICAgb25jZUZsYWcsCisgICAgICAgIFtdICgpIHsKKyAgICAgICAgICAgIHB0
aHJlYWRfa2V5X2luaXRfbnAodGxzS2V5LCBkZXN0cnVjdG9yKTsKKyAgICAgICAgfSk7CisjZW5k
aWYKKyAgICAKKyAgICByZWYoKTsKKyAgICAKKyAgICBpZiAoUmVmUHRyPFRocmVhZExvY2FsQ2Fj
aGU+IG9sZENhY2hlID0gZ2V0KHZtKSkKKyAgICAgICAgb2xkQ2FjaGUtPmRlcmVmKCk7CisgICAg
CisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNo
ZTo6aW5zdGFsbERhdGEoVk0mIHZtLCBEYXRhKiBkYXRhKQoreworI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19k
aXJlY3QodGxzS2V5LCBkYXRhKTsKKyNlbHNlCisgICAgdm0udGhyZWFkTG9jYWxDYWNoZSA9IGRh
dGE7CisjZW5kaWYKK30KKworTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9j
YXRvclNsb3coVk0mIHZtLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIERhdGEqIG9sZERhdGEgPSBt
X2RhdGE7CisgICAgbV9kYXRhID0gYWxsb2NhdGVEYXRhKCk7CisgICAgZGVzdHJveURhdGEob2xk
RGF0YSk7CisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
b2Zmc2V0IDwgbV9kYXRhLT5zaXplKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yKCptX2RhdGEsIG9m
ZnNldCk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcih2b2lkKiBhcmcp
Cit7CisgICAgaWYgKCFhcmcpCisgICAgICAgIHJldHVybjsKKyAgICBEYXRhKiBkYXRhID0gc3Rh
dGljX2Nhc3Q8RGF0YSo+KGFyZyk7CisgICAgZGF0YS0+Y2FjaGUtPmRlcmVmKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJl
YWRMb2NhbENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFRM
Uy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxUaHJlYWRMb2NhbENhY2hlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFk
TG9jYWxDYWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6
CisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAg
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UaHJlYWRMb2NhbENhY2hlKCk7CisKKyAgICBzdGF0
aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGdldChWTSYpOworICAgIAorICAgIC8vIFRoaXMg
aXMgZGVzaWduZWQgdG8gYmUgZmFzdCBlbm91Z2ggdGhhdCB5b3UgY291bGQgZXZlbiBjYWxsIGl0
IGJlZm9yZSBldmVyeSBhbGxvY2F0aW9uLCBieQorICAgIC8vIG9wdGltaXppbmcgZm9yIHRoZSBj
YXNlIHRoYXQgeW91J3JlIGp1c3QgaW5zdGFsbGluZyB0aGUgY2FjaGUgdGhhdCBpcyBhbHJlYWR5
IGluc3RhbGxlZC4gVGhpcworICAgIC8vIGFzc3VtZXMgYSByZWxhdGl2ZWx5IHNtYWxsIG51bWJl
ciBvZiBjYWNoZXMgb3IgbG93IGNoYW5jZSBvZiBhY3R1YWwgY29udGV4dCBzd2l0Y2ggY29tYmlu
ZWQKKyAgICAvLyB3aXRoIHBvc3NpYmx5IGhpZ2ggcmF0ZSBvZiAiSSBtYXkgaGF2ZSBjb250ZXh0
IHN3aXRjaGVkIiBzaXRlcyB0aGF0IGNhbGwgdGhpcyBvdXQgb2YgcGFyYW5vaWEuCisgICAgdm9p
ZCBpbnN0YWxsKFZNJik7CisgICAgCisgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0
b3IoVk0mLCBzaXplX3Qgb2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRmlyc3RBbGxvY2F0b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2Nh
dG9yKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUaHJlYWRMb2NhbENhY2hlKEhlYXAmKTsKKyAg
ICAKKyAgICBzdHJ1Y3QgRGF0YSB7CisgICAgICAgIHNpemVfdCBzaXplOworICAgICAgICBUaHJl
YWRMb2NhbENhY2hlKiBjYWNoZTsKKyAgICAgICAgTG9jYWxBbGxvY2F0b3IgYWxsb2NhdG9yWzFd
OworICAgIH07CisKKyAgICBzdGF0aWMgRGF0YSogZ2V0SW1wbChWTSYpOworICAgIAorICAgIERh
dGEqIGFsbG9jYXRlRGF0YSgpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lEYXRhKERhdGEqKTsK
KyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qg
b2Zmc2V0KTsKKworICAgIHZvaWQgaW5zdGFsbFNsb3coVk0mKTsKKyAgICBzdGF0aWMgdm9pZCBp
bnN0YWxsRGF0YShWTSYsIERhdGEqKTsKKyAgICAKKyAgICBMb2NhbEFsbG9jYXRvciYgYWxsb2Nh
dG9yU2xvdyhWTSYsIHNpemVfdCBvZmZzZXQpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ry
dWN0b3Iodm9pZCopOworICAgIAorICAgIC8vIFdoZW4gaW5zdGFsbGVkLCB3ZSByZWYoKSB0aGUg
Y2FjaGUuIFVuaW5zdGFsbGluZyBkZXJlZigpcyB0aGUgY2FjaGUuIFRMUyBkZXN0cnVjdGlvbiBk
ZXJlZigpcworICAgIC8vIHRoZSBjYWNoZS4gV2hlbiB0aGUgY2FjaGUgaXMgZGVzdHJ1Y3RlZCwg
aXQgbmVlZHMgdG8gcmV0dXJuIGFsbCBvZiBpdHMgc3RhdGUgdG8gdGhlIEdDLiBJCisgICAgLy8g
dGhpbmsgdGhhdCBqdXN0IG1lYW5zIHN0b3BBbGxvY2F0aW5nKCksIGJ1dCB3aXRoIHNvbWUgc2Vy
aW91c2x5IGhlYXZ5IGNhdmVhdHMgaGF2aW5nIHRvIGRvCisgICAgLy8gd2l0aCB3aGVuIGl0J3Mg
dmFsaWQgdG8gbWFrZSB0aGF0IGNhbGwuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIFJFTEVBU0Vf
QVNTRVJUIHRoYXQgdGhlIGNhY2hlCisgICAgLy8gaXMgZW1wdHkgd2hlbiB3ZSBkZXN0cnVjdCBp
dC4gVGhpcyBpcyBjb3JyZWN0IGZvciBjYWNoZXMgdGhhdCBhcmUga2VwdCBsaXZlIGJ5IEdDIG9i
amVjdHMgYW5kCisgICAgLy8gaXQncyBjb3JyZWN0IGZvciBpbW1vcnRhbCBjYWNoZXMuCisgICAg
SGVhcCYgbV9oZWFwOworICAgIERhdGEqIG1fZGF0YTsKKworI2lmIEVOQUJMRShGQVNUX1RMU19K
SVQpCisgICAgc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19L
RVk7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFRocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZtKQorewor
I2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGF0YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdCh0bHNLZXkp
KTsKKyNlbHNlCisgICAgcmV0dXJuIHZtLnRocmVhZExvY2FsQ2FjaGU7CisjZW5kaWYKK30KKwor
aW5saW5lIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpnZXQoVk0m
IHZtKQoreworICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsK
KyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPmNhY2hlOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitpbmxpbmUgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2
bSkKK3sKKyAgICBpZiAoZ2V0SW1wbCh2bSkgPT0gbV9kYXRhKQorICAgICAgICByZXR1cm47Cisg
ICAgaW5zdGFsbFNsb3codm0pOworfQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExv
Y2FsQ2FjaGU6OmFsbG9jYXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQpCit7CisgICAgVGhyZWFk
TG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOworICAgIGlmIChMSUtFTFkob2Zm
c2V0IDwgZGF0YS0+c2l6ZSkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3IoKmRhdGEsIG9mZnNl
dCk7CisgICAgcmV0dXJuIGRhdGEtPmNhY2hlLT5hbGxvY2F0b3JTbG93KHZtLCBvZmZzZXQpOwor
fQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihE
YXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PExv
Y2FsQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PGNoYXIqPigmZGF0YS5hbGxvY2F0b3JbMF0pICsg
b2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVM
YXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworI2luY2x1ZGUgIkJsb2NrRGlyZWN0
b3J5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpUaHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6flRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQoKQoreworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQ6OmFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIGRpcmVjdG9yeS0+bV90bGNPZmZzZXQg
PSBtX3NpemU7CisgICAgbV9zaXplICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcik7CisgICAgbV9k
aXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91
dDo6U25hcHNob3QgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6c25hcHNob3QoKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBTbmFwc2hvdCByZXN1bHQ7CisgICAg
cmVzdWx0LnNpemUgPSBtX3NpemU7CisgICAgcmVzdWx0LmRpcmVjdG9yaWVzID0gbV9kaXJlY3Rv
cmllczsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9ja0RpcmVjdG9yeSogVGhyZWFkTG9j
YWxDYWNoZUxheW91dDo6ZGlyZWN0b3J5KHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgcmV0dXJuIG1fZGlyZWN0b3JpZXNbb2Zmc2V0
IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV07Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OworCisvLyBFYWNoIEhlYXAg
aGFzIGEgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB0aGF0IGhlbHBzIHVzIGZpZ3VyZSBvdXQgaG93
IHRvIGFsbG9jYXRlIGEgVGhyZWFkTG9jYWxDYWNoZQorLy8gZm9yIHRoYXQgSGVhcC4KKworY2xh
c3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhy
ZWFkTG9jYWxDYWNoZUxheW91dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
CitwdWJsaWM6CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dCgpOworICAgIH5UaHJlYWRMb2Nh
bENhY2hlTGF5b3V0KCk7CisKKyAgICAvLyBCbG9ja0RpcmVjdG9yeSBjYWxscyB0aGlzIGR1cmlu
ZyBjcmVhdGlvbiBhbmQgdGhpcyBmaWxscyBpbiBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0LgorICAg
IHZvaWQgYWxsb2NhdGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqKTsKKyAgICAKKyAgICBzdHJ1Y3Qg
U25hcHNob3QgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgVmVjdG9yPEJsb2NrRGly
ZWN0b3J5Kj4gZGlyZWN0b3JpZXM7CisgICAgfTsKKyAgICAKKyAgICBTbmFwc2hvdCBzbmFwc2hv
dCgpOworICAgIAorICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkodW5zaWduZWQgb2Zmc2V0
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CisgICAgc2l6ZV90IG1fc2l6ZSB7
IDAgfTsKKyAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBtX2RpcmVjdG9yaWVzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4Miw2
ICs1ODIsOTUgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTQogfQog
I2VuZGlmCiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFs
bG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxs
b2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAg
IC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBp
dCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCisgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCisgICAg
ICAgIAorICAgIGlmIChPcHRpb25zOjpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIEp1bXAgcG9wUGF0aDsKKyAgICBKdW1wIGRvbmU7CisgICAgCisjaWYgRU5BQkxFKEZBU1Rf
VExTX0pJVCkKKyAgICBsb2FkRnJvbVRMU1B0cihmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9HQ19U
TENfS0VZKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgIGxvYWRQdHIoJnZtKCkudGhyZWFkTG9j
YWxDYWNoZURhdGEsIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgaWYgKGFsbG9jYXRvcikKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNl
dE9mRmlyc3RBbGxvY2F0b3IoKSArIGFsbG9jYXRvci5vZmZzZXQoKSksIGFsbG9jYXRvckdQUik7
CisgICAgZWxzZQorICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoR1BSLCBhbGxvY2F0
b3JHUFIsIFRpbWVzT25lLCBUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9y
KCkpLCBhbGxvY2F0b3JHUFIpOworCisgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBM
b2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVt
YWluaW5nKCkpLCByZXN1bHRHUFIpOworICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywg
cmVzdWx0R1BSKTsKKyAgICBpZiAoYWxsb2NhdG9yKQorICAgICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoLWFsbG9jYXRvci5jZWxsU2l6ZSh2bSgpLmhlYXApKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIG1vdmUo
cmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN1YjMyKEFkZHJlc3MoYWxsb2Nh
dG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgbmVnUHRyKHJlc3VsdEdQUik7CisgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxp
c3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7CisgICAgQWRkcmVzcyBwYXls
b2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKKyAgICBpZiAo
aXNYODYoKSkKKyAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOworICAg
IGVsc2UgeworICAgICAgICBsb2FkUHRyKHBheWxvYWRFbmRBZGRyLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgfQorICAgICAgICAKKyAg
ICBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICBwb3BQYXRoLmxpbmsodGhpcyk7CisgICAg
ICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCBy
ZXN1bHRHUFIpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICB4
b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CisgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIAorICAgIC8vIFRoZSBv
YmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2gg
b2JqZWN0LCBidXQKKyAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CisgICAgc3RvcmVQdHIo
c2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKKyAgICAg
ICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBh
bGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCit7Cisg
ICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihFcXVh
bCwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tMzIoLTEpKSk7CisgICAgZW1pdEFsbG9jYXRlV2l0
aE5vbk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2Ny
YXRjaEdQUiwgc2xvd1BhdGgpOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9j
YXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJz
cGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBz
Y3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIHN0YXRpY19hc3NlcnQoIShN
YXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFy
a2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgCisgICAg
dW5zaWduZWQgc3RlcFNoaWZ0ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3RlcCk7Cisg
ICAgCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpLCBh
bGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEpOworICAgIHVyc2hpZnQzMihUcnVzdGVkSW1tMzIo
c3RlcFNoaWZ0KSwgc2NyYXRjaEdQUjEpOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihB
Ym92ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYg
Pj4gc3RlcFNoaWZ0KSkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdWJzcGFjZS5hbGxvY2F0
b3JGb3JTaXplU3RlcCgpIC0gMSksIHNjcmF0Y2hHUFIyKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4
KHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgVGltZXNGb3VyKSwgc2NyYXRjaEdQUjEpOworICAg
IAorICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIEFsbG9jYXRvcigpLCBzY3JhdGNoR1BSMSwg
c2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSom
IHRvcEVudHJ5RnJhbWUpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMg
PiAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Cisg
ICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fY29kZUJsb2NrLT52bSgpOyB9CiAgICAgQXNzZW1ibGVy
VHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQogCiAgICAgdm9pZCBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpCkBAIC0xNDkxLDgwICsxNDkyLDIxIEBAIHB1Ymxp
YzoKIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBoZWxkIGlu
IGFsbG9jYXRvckdQUiBpcyBub24tbnVsbC4gVGhpcyBET0VTIE5PVCBtZWFuCiAgICAgLy8gdGhh
dCBhbGxvY2F0b3IgaXMgbm9uLW51bGw7IGFsbG9jYXRvciBjYW4gYmUgbnVsbCBhcyBhIHNpZ25h
bCB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUKLSAgICAvLyB2YWx1ZSBvZiBhbGxvY2F0b3JH
UFIgaXMuCi0gICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcg
cmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAg
Ly8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3JpdHRlbiBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0
IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKLSAgICAgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCi0g
ICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7Ci0gICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgSnVtcCBwb3BQYXRoOwotICAgICAgICBKdW1wIGRv
bmU7Ci0gICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5p
bmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywg
cmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGFsbG9jYXRvcikKLSAgICAgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNYODYoKSkgewotICAgICAgICAg
ICAgICAgIG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIz
MihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBs
b2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxT
aXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIzMihyZXN1bHRHUFIsIHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKLSAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRk
ciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKLSAgICAgICAgaWYgKGlzWDg2
KCkpCi0gICAgICAgICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIsIHJlc3VsdEdQUik7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5kQWRkciwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZG9uZSA9IGp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHBv
cFBhdGgubGluayh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBpZiAoaXNYODYo
KSkKLSAgICAgICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rv
cnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHhvclB0cihzY3Jh
dGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICB9Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
IG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVz
aCBvYmplY3QsIGJ1dAotICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlz
dC4KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhl
YWQoKSkpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIH0KKyAgICAv
LyB2YWx1ZSBvZiBhbGxvY2F0b3JHUFIgaXMuIEFkZGl0aW9uYWxseSwgaWYgdGhlIGFsbG9jYXRv
ciBpcyBub3QgbnVsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkCisgICAgLy8gdG8gcG9wdWxhdGUg
YWxsb2NhdG9yR1BSIC0gdGhpcyBjb2RlIHdpbGwgaWdub3JlIHRoZSBjb250ZW50cyBvZiBhbGxv
Y2F0b3JHUFIuCisgICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJS
ZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAKLSAgICB2b2lkIGVt
aXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBH
UFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQotICAgIHsKLSAgICAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxvY2F0b3JHUFIpKTsKLSAgICAgICAgZW1pdEFs
bG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0
ZShHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9y
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlND
ZWxsKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBh
bGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwg
SnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKEdQUlJlZyBy
ZXN1bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVj
dHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxv
Y2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgZW1pdFN0b3JlU3RydWN0
dXJlV2l0aFR5cGVJbmZvKHN0cnVjdHVyZSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3Rv
cmFnZVR5cGUsIHR5cGVuYW1lIE1hc2tUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2Us
IE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisg
ICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3Ig
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwg
U3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1
bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1
bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNs
b3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoc3RvcmFnZSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtMTU3NiwxMiArMTUxOCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNo
R1BSMSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgsIHNp
emVfdCBzaXplKQogICAgIHsKLSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAg
aWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSMSwgc3RydWN0dXJlLCBzdG9yYWdlLCBt
YXNrLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKQEAgLTE1OTMsMjAgKzE1
MzQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gYWxsb2NhdGlvblNpemUgY2FuIGJlIGFsaWFz
ZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGlucHV0IEdQUnMuIElmIGl0J3Mgbm90IGFsaWFzZWQg
dGhlbiBpdAogICAgIC8vIHdvbid0IGJlIGNsb2JiZXJlZC4KLSAgICB2b2lkIGVtaXRBbGxvY2F0
ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3Bh
Y2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkp
LCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBnZXRMU0JTZXQoTWFya2VkU3BhY2U6
OnNpemVTdGVwKTsKLSAgICAgICAgCi0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMihzdGVwU2hpZnQpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJ
bW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYgPj4gc3RlcFNoaWZ0KSkpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMSwgdGltZXNQdHIoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgCi0gICAgICAgIGVt
aXRBbGxvY2F0ZShyZXN1bHRHUFIsIG51bGxwdHIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwg
c2xvd1BhdGgpOwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BS
UmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0
aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0
JiBzbG93UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBl
bmFtZSBTdHJ1Y3R1cmVUeXBlPgogICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENl
bGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BS
UmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BS
MiwgSnVtcExpc3QmIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03OSwyMiArNzksMjMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+
KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwo
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7CiAgICAgUmVnaXN0ZXJJ
RCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdU
MzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcpOwot
ICAgIGlmIChhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7Ci0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxs
cHRyKTsKLSAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBhbGxvY2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0g
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRTdG9y
ZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICBp
ZiAoIWFsbG9jYXRvcikKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigw
KTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBhbGxvY2F0b3IsIGFs
bG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNj
cmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC04NTYsOSArODU3LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoTm90RXF1YWwsIEFkZHJlc3MoY2FsbGVlUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRh
UmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwg
YWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW0zMihBbGxvY2F0
b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1
bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIo
RXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBAIC04NjgsNyArODY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgYXV0byBtYXNrID0g
VHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgbnVs
bHB0ciwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRj
aFJlZywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEFs
bG9jYXRvcigpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBz
Y3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAg
ZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC04MSwyMiArODEsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJ
bnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
IEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6
OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7
CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNj
cmF0Y2hSZWcgPSByZWdUMjsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBh
bGxvY2F0b3JSZWcpOwotICAgIGlmIChhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKEp1
bXAoKSk7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0g
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBhbGxvY2F0b3IsIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcs
IHNsb3dDYXNlcyk7Ci0gICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywg
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgZWxzZSB7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgYXV0byBi
dXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBhdXRvIG1hc2sgPSBU
cnVzdGVkSW1tMzIoMCk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
YWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVy
Zmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAgICBlbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTc2Niw5ICs3
NjcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhjYWxsZWVSZWcsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgp
KSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFy
ZURhdGFSZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxs
b2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJl
ZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVS
ZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvclJlZywgVHJ1c3RlZElt
bTMyKEFsbG9jYXRvcigpLm9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihjYWNoZWRGdW5jdGlv
biwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9
IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxs
OjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKQEAgLTc3OCw3ICs3NzksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBh
dXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVz
dWx0UmVnLCBudWxscHRyLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBt
YXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJm
bHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjYWxsZWUsIHNjcmF0Y2hSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoUmVn
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBzY3JhdGNoUmVnKTsKICAgICBsb2Fk
MzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxp
bmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDcgKzc5LDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6
Om9wdGltYQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVk
KFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpB
c3NlcnQpOworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6QXNzZXJ0KTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
ODcsNyArODcsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pCiBp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnRyeUNyZWF0ZShWTSYgdm0sIEpTQ2VsbCosIHNp
emVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhp
bmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxs
cHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghYmFzZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFz
ZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CkBAIC0xNjUsNyArMTY1LDcg
QEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRo
ZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0g
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUo
MCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OwotICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKTsKKyAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghbmV3QmFzZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkbid0
IGJlIGEgbWVtY3B5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTE4LDcgKzExOCw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9i
YWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICAKLSAgICB2b2lkKiBiYWNr
aW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtp
bmQpLmFsbG9jYXRlTm9uVmlydHVhbChtYXBwZWRBcmd1bWVudHNTaXplKCksIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2
bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRl
Tm9uVmlydHVhbCh2bSwgbWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8
Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlz
LCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYzLDcgKzI2Myw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWUK
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOwogCiAg
ICAgaWYgKGFyZ3NMZW5ndGgpIHsKLSAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5kKS5h
bGxvY2F0ZU5vblZpcnR1YWwoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgp
LCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgICAgIHZvaWQq
IGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3Vt
ZW50c0Rlc2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KTsKICAgICAgICAgYm9vbCogbW9kaWZpZWRBcmd1bWVudHMgPSBzdGF0aWNfY2Fz
dDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICAgICAgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2Ny
aXB0b3Iuc2V0KHZtLCB0aGlzLCBtb2RpZmllZEFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGFyZ3NMZW5ndGg7IGktLTspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDcs
NyArMjA3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFw
QnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSk7Ci0gICAgICAgIHZvaWQqIGRhdGEgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7Cisg
ICAgICAgIHZvaWQqIGRhdGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0ZU5vblZpcnR1YWwodm0sIGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
IENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHly
aWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAt
ODEsNyArODEsMTAgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAog
ICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKIAogICAgICAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9y
TGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIHZtLAor
ICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1
ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksCisgICAgICAgICAgICBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVT
dG9yYWdlKTsKQEAgLTk4LDcgKzEwMSwxMCBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkCiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGluZGV4QmlhcyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3Rv
cmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHN0cnVjdHVyZSwgaW5pdGlhbExl
bmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBv
dXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsK
KyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIHZtLAorICAgICAgICAgICAgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksCisgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJS0VM
WSghdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5
ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCBpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2Up
OwpAQCAtMzY4LDcgKzM3NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2Uo
Y29uc3QKICAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IGZhbHNlOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVy
dHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkp
OwotICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sIG5l
d1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAg
ICAgIGlmICghbmV3QWxsb2NCYXNlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIzOCw2ICsyMzgs
NyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlKFZNJiB2CiAKICAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rv
ckxlbmd0aChzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aEhpbnQpOwogICAgICAgICB2b2lkKiB0ZW1w
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAor
ICAgICAgICAgICAgdm0sCiAgICAgICAgICAgICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRP
ZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwKICAgICAgICAgICAgIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVs
bCk7CiAgICAgICAgIGlmICghdGVtcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6CiAgICAgICAgIHZvaWQqIHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0g
c2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAg
ICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVs
bCk7CisgICAgICAgICAgICB0ZW1wID0gdm0ucHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE0NSwxNCArMTQ1LDE1IEBAIENvbXBsZXRlU3Vic3BhY2UqIEpTQ2VsbDo6c3Vic3BhY2VGb3Io
Vk0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRl
Q2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogeworICAg
IFZNJiB2bSA9ICpoZWFwLnZtKCk7CiAgICAgQVNTRVJUKGRlZmVycmFsQ29udGV4dCB8fCAhRGlz
YWxsb3dHQzo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsKICAgICBBU1NFUlQoc2l6ZSA+
PSBzaXplb2YoVCkpOwotICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
c3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZl
cnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CisgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPih2bSktPmFsbG9jYXRlTm9uVmlydHVhbCh2bSwg
c2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOwogICAgIGlmIChmYWlsdXJlTW9k
ZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwgJiYgIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi0gICAgQVNTRVJU
KCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAgIGhlYXAudm0oKS0+c2V0
SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKKyAgICBBU1NFUlQoIXZtLmlzSW5p
dGlhbGl6aW5nT2JqZWN0KCkpOworICAgIHZtLnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6
OmluZm8oKSk7CiAjZW5kaWYKICAgICByZXN1bHQtPmNsZWFyU3RydWN0dXJlKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQyLDcg
KzM0Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVucXUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1KU0dsb2JhbE9iamVj
dDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorSlNHbG9iYWxP
YmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSwgUmVmUHRy
PFRocmVhZExvY2FsQ2FjaGU+IHRocmVhZExvY2FsQ2FjaGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUsIDApCiAgICAgLCBtX3ZtKHZtKQogICAgICwgbV9tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpKSkKQEAgLTM2
MCw2ICszNjAsNyBAQCBKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTCiAg
ICAgLCBtX3RlbXBsYXRlUmVnaXN0cnkodm0pCiAgICAgLCBtX3J1bnRpbWVGbGFncygpCiAgICAg
LCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICAs
IG1fdGhyZWFkTG9jYWxDYWNoZSh0aHJlYWRMb2NhbENhY2hlID8gV1RGTW92ZSh0aHJlYWRMb2Nh
bENhY2hlKSA6IHZtLmRlZmF1bHRUaHJlYWRMb2NhbENhY2hlKQogewogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
UnVudGltZUZsYWdzJiBydW50aW1lRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3J1bnRpbWVGbGFn
czsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9i
YWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSog
PSAwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYs
IFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDAsIFJlZlB0cjxU
aHJlYWRMb2NhbENhY2hlPiA9IG51bGxwdHIpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCkBAIC04OTMsNiArODkzLDggQEAgcHVibGljOgogICAg
IEpTV3JhcHBlck1hcCogd3JhcHBlck1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlck1hcC5n
ZXQoKTsgfQogICAgIHZvaWQgc2V0V3JhcHBlck1hcChKU1dyYXBwZXJNYXAqIG1hcCkgeyBtX3dy
YXBwZXJNYXAgPSBtYXA7IH0KICNlbmRpZgorICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGUmIHRo
cmVhZExvY2FsQ2FjaGUoKSBjb25zdCB7IHJldHVybiAqbV90aHJlYWRMb2NhbENhY2hlLmdldCgp
OyB9CiAKIHByb3RlY3RlZDoKICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKQEAgLTkz
MCw2ICs5MzIsOCBAQCBwcml2YXRlOgogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgUmV0
YWluUHRyPEpTV3JhcHBlck1hcD4gbV93cmFwcGVyTWFwOwogI2VuZGlmCisgICAgCisgICAgUmVm
UHRyPFRocmVhZExvY2FsQ2FjaGU+IG1fdGhyZWFkTG9jYWxDYWNoZTsKIH07CiAKIEpTR2xvYmFs
T2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAjaW5j
bHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFk
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTE0NSw3ICsxNDYsOSBAQCB2b2lkIEpT
TG9jazo6ZGlkQWNxdWlyZUxvY2soKQogCiAgICAgbV92bS0+c2V0TGFzdFN0YWNrVG9wKHRocmVh
ZC5zYXZlZExhc3RTdGFja1RvcCgpKTsKICAgICBBU1NFUlQodGhyZWFkLnN0YWNrKCkuY29udGFp
bnMobV92bS0+bGFzdFN0YWNrVG9wKCkpKTsKLQorICAgIAorICAgIG1fdm0tPmRlZmF1bHRUaHJl
YWRMb2NhbENhY2hlLT5pbnN0YWxsKCptX3ZtKTsKKyAgICAKICAgICBtX3ZtLT5oZWFwLm1hY2hp
bmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
ICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3VycmVudFRocmVhZCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYs
NiArMjM2LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlQXN5bmNJdGVyYXRpb24gPSBmYQogICAg
IHYoYm9vbCwgZHVtcFNpemVDbGFzc2VzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihib29sLCB1c2VCdW1wQWxsb2NhdG9yLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzLCB0cnVlLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHRyYWRlRGVzdHJ1Y3RvckJsb2NrcywgdHJ1ZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBlYWdlcmx5VXBkYXRlVG9wQ2FsbEZyYW1lLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlT1NSRW50cnlU
b0RGRywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMjI2ODkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAw
OC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC00Miw3ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRl
VW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFsaXplZCA9IGdsb2JhbE9i
amVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgdm9pZCogdGVt
cCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogdGVtcCA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwg
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmIChVTkxJS0VM
WSghdGVtcCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw3IEBACiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRp
bHMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIlRo
dW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5
cGVQcm9maWxlckxvZy5oIgpAQCAtMzA2LDYgKzMwNyw5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1cGRhdGVTb2Z0UmVzZXJ2ZWRab25lU2l6ZShPcHRp
b25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpKTsKICAgICBzZXRMYXN0U3RhY2tUb3Aoc3RhY2su
b3JpZ2luKCkpOwogCisgICAgZGVmYXVsdFRocmVhZExvY2FsQ2FjaGUgPSBUaHJlYWRMb2NhbENh
Y2hlOjpjcmVhdGUoaGVhcCk7CisgICAgZGVmYXVsdFRocmVhZExvY2FsQ2FjaGUtPmluc3RhbGwo
KnRoaXMpOworCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBj
b25zaXN0ZW50IGhlcmUKICAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBBdG9taWNT
dHJpbmdUYWJsZSogZXhpc3RpbmdFbnRyeUF0b21pY1N0cmluZ1RhYmxlID0gVGhyZWFkOjpjdXJy
ZW50KCkuc2V0Q3VycmVudEF0b21pY1N0cmluZ1RhYmxlKG1fYXRvbWljU3RyaW5nVGFibGUpOwpA
QCAtMzgzLDcgKzM4Nyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICNlbmRpZgogICAgIAogICAgIEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJh
Y2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0aGlzKTsKLQorICAgIAogICAg
IGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgCiAgICAgTExJbnQ6OkRhdGE6OnBl
cmZvcm1Bc3NlcnRpb25zKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVn
aXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJW
TVRyYXBzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgogI2luY2x1ZGUgIldhc21D
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9p
bnRlckFsbG9jYXRvci5oPgpAQCAtNjU2LDYgKzY1NywxMSBAQCBwdWJsaWM6CiAKICAgICBKU09i
amVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBI
YXNoU2V0PEpTT2JqZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKKyAg
ICAKKyNpZiAhRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRh
KiB0aHJlYWRMb2NhbENhY2hlRGF0YTsKKyNlbmRpZgorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENh
Y2hlPiBkZWZhdWx0VGhyZWFkTG9jYWxDYWNoZTsKIAogICAgIExvY2FsVGltZU9mZnNldENhY2hl
IGxvY2FsVGltZU9mZnNldENhY2hlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGlzYWxsb3dWTVJlZW50cnkuaCIKICNpbmNsdWRl
ICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgorI2luY2x1ZGUgIlRo
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXRj
aGRvZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAtNDAsNiArNDEsNyBAQCBW
TUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAgICAgOiBtX3ZtKHZtKQog
ICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAgIGdsb2JhbE9iamVjdC0+
dGhyZWFkTG9jYWxDYWNoZSgpLmluc3RhbGwodm0pOwogICAgIEFTU0VSVCghRGlzYWxsb3dWTVJl
ZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKFRocmVhZDo6
Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgaWYgKCF2bS5lbnRy
eVNjb3BlKSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL1dURi93
dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUg
PGFycmF5PgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5j
dGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8c3RkaW50
Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331846</attachid>
            <date>2018-01-20 11:27:14 -0800</date>
            <delta_ts>2018-01-20 14:47:50 -0800</delta_ts>
            <desc>can run significant things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>156740</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDYg
KzQ2Niw3IEBAIGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAogaGVh
cC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAoraGVhcC9BbGxvY2F0b3IuY3BwCiBoZWFwL0Js
b2NrRGlyZWN0b3J5LmNwcAogaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAKIGhlYXAvQ2VsbENvbnRh
aW5lci5jcHAKQEAgLTUwMCw2ICs1MDEsNyBAQCBoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lz
b1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxv
Y2F0aW9uLmNwcAoraGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmNwcApAQCAtNTE4LDYgKzUyMCw4IEBAIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAvVGhyZWFkTG9jYWxD
YWNoZS5jcHAKK2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM4OSw2ICszODksMTIgQEAKIAkJMEY3MjVDQUExQzUwM0RFRDAwQUQ5NDNBIC8q
IEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovOyB9OwogCQkwRjcy
NUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUUxQzUwNkQzQjAwQUQ5
NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsKIAkJMEY3NEI5M0IxRjg5NjE0ODAw
QjkzNUQzIC8qIFByb3RvdHlwZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVB
MDVFMjAwRDI1RjYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRv
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLzsg
fTsKKwkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NzIwMEQyNUYw
MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjc1QTA2MjIwMEQyNjFEMDAzOEUyQ0YgLyogQWxsb2Nh
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLzsgfTsK
KwkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNG
IC8qIEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzVBMDY0MjAwRDI2MjgwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDJDMTVBOEND
M0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZE
MkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDMxMTVBQTgxMTIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI0MjAsNiArMjQyNiwxNiBAQAogCQkwRjcyNUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xk
UGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0Eg
LyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVEMyAv
KiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90
eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU1MjAwRDI1
RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
b2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1ODIw
MEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2FsQWxsb2NhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUEyMDBEMjVGMDAwMzhF
MkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDVDMjAwRDI1
RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0Ug
LyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
U3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4
Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NDIsNiArNTU1OCwxNiBAQAog
CQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFs
bG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2Nh
dG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0
b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJ
bmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuY3BwICovLAorCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2Nh
bENhY2hlLmggKi8sCisJCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAorCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5
QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0
MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEEx
REI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtODA1MSw2ICs4MDc3
LDcgQEAKIAkJCQkwRjJBQzU3MTFFOEVFNDU0MDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVBMDYxMjAwRDI2MTgwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0ExQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtODIxNiw2ICs4MjQzLDcgQEAKIAkJCQkwRjZCOEFERDFDNEVG
QUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMz
RkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REYyMUJFOTNB
RDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5
NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC04Mzg1LDYgKzg0MTMsNyBAQAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBG
OTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgx
MjFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8q
IEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3
IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAw
QkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtODY2NSw2ICs4Njk0LDcgQEAKIAkJCQlGRUEwQzQwMzFDREQ3RDFEMDA0ODE5OTEg
LyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QkUyQ0FFMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIw
OCAvKiBHQ0NvbmR1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDc2N0UxRDk5QUVBOTAw
OEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTg3NDksNiAr
ODc3OSw3IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVy
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1
MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVB
MDYyMjAwRDI2MUQwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkJGOTJCOTFGRDc2RkZGMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkY5MkJBMUZENzcwMDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtODkzNSw2ICs4OTY2LDcg
QEAKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8q
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMUUx
ODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3Nyw2ICsxMjc3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAg
YXJnID0gdG1wKHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6IHsKKyAgICAgICAg
ICAgICAgICBUbXAgZHN0VG1wID0gbV9jb2RlLm5ld1RtcCh2YWx1ZS52YWx1ZSgpLT5yZXN1bHRC
YW5rKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUu
dmFsdWUoKS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUudmFsdWUoKSksIGRzdFRtcCk7CisgICAg
ICAgICAgICAgICAgYXJnID0gZHN0VG1wOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgc3RhY2ttYXAt
PmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodmFsdWUucmVwKCkucmVnKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgYm9vbCBQYXRjaHBvaW50
U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdAogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0Fy
Z3VtZW50OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENs
b2JiZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJl
Z2lzdGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDkgQEAg
dm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6Q29uc3RhbnQ6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlRGVmOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lz
dGVyOgogICAgICAgICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMjgsNiArMTMxLDEwIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JF
YWNoQXJnSW1wbCgKICAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gcmVjb3ZlciB0aGUgc3RhY2tt
YXAgdmFsdWUuIFNvLCBmb3JjZSBMYXRlQ29sZFVzZSB0byBwcmVzZXJ2ZSB0aGUKICAgICAgICAg
ICAgIC8vIG9yaWdpbmFsIHN0YWNrbWFwIHZhbHVlIGFjcm9zcyB0aGUgU3BlY2lhbCBvcGVyYXRp
b24uCiAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIG9wdGlvbmFsRGVm
QXJnV2lkdGggJiYgKm9wdGlvbmFsRGVmQXJnV2lkdGggPCBjaGlsZC52YWx1ZSgpLT5yZXN1bHRX
aWR0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHJvbGUgY2FuIG9ubHkgYmUgc29tZSBr
aW5kIG9mIGRlZiBpZiB3ZSBkaWQgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIsIHdoaWNoIGlzCisg
ICAgICAgICAgICAgICAgLy8gb25seSBhbGxvd2VkIGZvciBwYXRjaHBvaW50cy4gUGF0Y2hwb2lu
dHMgZG9uJ3QgdXNlIHRoZSBkZWZBcmdXaWR0aCBmZWF0dXJlLgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFBcmc6OmlzQW55RGVmKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUzLDYgKzUzLDExIEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29t
ZVJlZ2lzdGVyKFYKICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOwogfQogCit2b2lkIFN0YWNrbWFwVmFsdWU6OmFwcGVuZFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBhcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKSk7Cit9CisKIHZv
aWQgU3RhY2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgQ29uc3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRWYWx1ZSkKIHsKICAgICBjaGlsZChpbmRl
eCkgPSBjb25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw3
ICs5OSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21ldGhpbmcg
eW91IG1pZ2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25z
dHJhaW5lZAogICAgIC8vIHRvIFNvbWVSZWdpc3Rlci4KICAgICB2b2lkIGFwcGVuZFNvbWVSZWdp
c3RlcihWYWx1ZSopOwotCisgICAgdm9pZCBhcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihW
YWx1ZSopOworICAgIAogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMoKSBjb25zdCB7
IHJldHVybiBtX3JlcHM7IH0KIAogICAgIC8vIFN0YWNrbWFwcyBhbGxvdyB5b3UgdG8gc3BlY2lm
eSB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIgc29tZSByZWdpc3RlcnMuIENsb2JiZXJp
bmcgYSByZWdpc3RlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsMjEgKzQzMiw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBWb2lkKQog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigp
LT5yZXN1bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpXYXJtQW55LCAoIkF0ICIsICp2YWx1ZSkp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQua2luZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTdGFja0FyZ3VtZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURShm
YWxzZSwgKCJBdCAiLCAqdmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcENvbnN0cmFpbnQo
dmFsdWUsIENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+
KCktPnJlc3VsdENvbnN0cmFpbnQpLCBDb25zdHJhaW50Um9sZTo6RGVmKTsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENoZWNrQWRkOgpAQCAtNTcxLDE2ICs1
NTgsMjQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHN3aXRjaCAodmFsdWUucmVwKCkua2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldhcm1Bbnk6Ci0gICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbGRBbnk6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVDb2xkQW55OgogICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6TGF0ZUNvbGRBbnk6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6CisgICAgICAg
ICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRl
eHQsICI6ICIsIHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAgICAgICAgICBWQUxJREFURShyb2xl
ID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7
CisgICAgICAgICAgICBWQUxJREFURShjb250ZXh0LT5hczxQYXRjaHBvaW50VmFsdWU+KCksICgi
QXQgIiwgKmNvbnRleHQpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29u
c3RyYWludFJvbGU6OkRlZiwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKHZhbHVlLnJlcCgp
LmtpbmQoKSA9PSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIFZBTElE
QVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwg
dmFsdWUpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5yZXAoKS5yZWcoKS5pc0dQUigpKQogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLnZhbHVlKCktPnR5cGUoKSksICgiQXQg
IiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CiAgICAgICAgICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MCw2ICs0MCw3IEBAIHZvaWQgVmFsdWVSZXA6OmFkZFVzZWRSZWdpc3RlcnNUbyhSZWdpc3QK
ICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVS
ZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0dXJuOwpAQCAt
NzEsNiArNzIsNyBAQCB2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvCiAg
ICAgY2FzZSBDb2xkQW55OgogICAgIGNhc2UgTGF0ZUNvbGRBbnk6CiAgICAgY2FzZSBTb21lUmVn
aXN0ZXI6CisgICAgY2FzZSBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAgICBjYXNlIFNvbWVF
YXJseVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRlUmVnaXN0ZXI6CkBA
IC0xNzUsNiArMTc3LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZh
bAogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJT
b21lUmVnaXN0ZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcldpdGhDbG9iYmVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJTb21lRWFybHlSZWdpc3RlciIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02NSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIEFzIGFu
IGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29t
ZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQogICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMg
Y2xhaW1zIHRvIGNsb2JiZXIhCiAgICAgICAgIFNvbWVSZWdpc3RlciwKKyAgICAgICAgCisgICAg
ICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hv
dWxkIHBpY2sgc29tZSByZWdpc3RlciBidXQgdGhhdCB0aGlzCisgICAgICAgIC8vIHJlZ2lzdGVy
IGlzIHRoZW4gY29iYmVyZWQgd2l0aCBnYXJiYWdlLiBUaGlzIG9ubHkgd29ya3MgZm9yIHBhdGNo
cG9pbnRzLgorICAgICAgICBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwKIAogICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIHNob3VsZCBw
aWNrIHNvbWUgcmVnaXN0ZXIsIGJ1dCBpbXBsaWVzCiAgICAgICAgIC8vIHRoYXQgdGhlIGRlZiBo
YXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMgb2YgdGhlIHN0YWNrbWFwLiBUaGlzIGlz
IG9ubHkgdmFsaWQgZm9yCkBAIC0xMDcsNyArMTExLDcgQEAgcHVibGljOgogICAgIFZhbHVlUmVw
KEtpbmQga2luZCkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRB
bnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7
CisgICAgICAgIEFTU0VSVChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xkQW55IHx8IGtp
bmQgPT0gTGF0ZUNvbGRBbnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2luZCA9PSBTb21l
UmVnaXN0ZXJXaXRoQ2xvYmJlciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKICAgICB9
CiAKICAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTU1LDE0ICs5NTUsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFs
bG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1Np
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAg
ICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQogICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIyKTsKICAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hH
UFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXpl
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVDYXBhY2l0
eSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSwgbV9p
bmxpbmVDYXBhY2l0eSk7IH0KIAogICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkKLSAgICAg
ICAgOiBtX2FsbG9jYXRvcigwKQotICAgICAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKKyAgICAg
ICAgOiBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApAQCAtNjMsNyArNjIsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1fYWxsb2NhdG9y
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3IoKTsKICAgICAgICAg
bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IDA7CiAgICAg
ICAgIEFTU0VSVChpc051bGwoKSk7CkBAIC03Nyw3ICs3Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgcG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudChWTSYsIEpTT2JqZWN0
KiBwcm90b3R5cGUpOwogCi0gICAgQmxvY2tEaXJlY3RvcnkqIG1fYWxsb2NhdG9yOyAvLyBQcmVj
b21wdXRlZCB0byBtYWtlIHRoaW5ncyBlYXNpZXIgZm9yIGdlbmVyYXRlZCBjb2RlLgorICAgIEFs
bG9jYXRvciBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVy
IGZvciBnZW5lcmF0ZWQgY29kZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKICAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5OwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpCiAKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlY3V0YWJs
ZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKLSAg
ICAgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fYWxsb2NhdG9y
ID0gQWxsb2NhdG9yKCk7CiAgICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk5LDExICs5OSwxMSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGlu
ZUNhcGFjaXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5s
aW5lQ2FwYWNpdHkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bS5jZWxsU3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0uY2VsbFNw
YWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkVuc3VyZUFsbG9jYXRvcik7CiAKICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBp
bmxpbmUgY2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgogICAgIGlmIChhbGxv
Y2F0b3IpIHsKLSAgICAgICAgc2l6ZV90IHNsb3AgPSAoYWxsb2NhdG9yLT5jZWxsU2l6ZSgpIC0g
YWxsb2NhdGlvblNpemUpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAg
IHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci5jZWxsU2l6ZSh2bS5oZWFwKSAtIGFsbG9jYXRpb25T
aXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgICAgICBpbmxpbmVDYXBh
Y2l0eSArPSBzbG9wOwogICAgICAgICBpZiAoaW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0Zp
bmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpOwpAQCAtMTEzLDcgKzExMyw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmkKIAogICAgIGlmIChpc1BvbHlQcm90
bykgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7Ci0gICAgICAg
IG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3Io
KTsKICAgICAgICAgZXhlY3V0YWJsZS0+c2V0Q2FjaGVkUG9seVByb3RvU3RydWN0dXJlKHZtLCBz
dHJ1Y3R1cmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChleGVjdXRhYmxlKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKDApLCBzdG9yYWdlR1BSKTsKIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChCbG9j
a0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cykpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkg
ewogICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwg
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faml0LmFkZFB0cigKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQ
dHIpIHsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNj
cmF0Y2hHUFIpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFs
T2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2Nh
dG9yKSB7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2so
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBh
bGxvY2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFn
ZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2sp
LCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDIw
OCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGJsb2NrRGlyZWN0
b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYmxvY2tEaXJlY3Rv
cnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGJs
b2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2Ny
YXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JWYWx1ZSA9IHN1YnNw
YWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yVmFsdWUsIGFs
bG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJl
KG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CiAgICAgICAgIAogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyAr
ODM4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAK
ICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1Zh
bHVlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQwOCw3ICs4NDA1LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BS
MiA9IHNjcmF0Y2gyLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdw
cigpOwogICAgICAgICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICBt
X2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CkBA
IC04NDI4LDcgKzg0MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByCiAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9y
OwogICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIGlmICghYWxsb2Nh
dG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CkBAIC04NDU2LDcgKzg0NTIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7CiAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
Mywgc2xvd1BhdGgpOwogICAgIAogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwpA
QCAtMTE0MTUsMTQgKzExNDEwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVh
dGVUaGlzKE4KICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
KSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIp
OworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwog
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKIAot
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0
b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQ
UiwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBBbGxvY2F0b3IoKSwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1
cmVHUFIsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9m
ZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZklubGluZUNhcGFjaXR5KCkpLCBpbmxpbmVDYXBhY2l0eUdQUik7CkBAIC0xMTQ0OCwxNCArMTE0
NDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChObwogCiAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JQ
dHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBzdWJzcGFjZUZvcjxKU0Zp
bmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAotICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwotICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBhdXRvIG1hc2sgPSBU
cnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxv
Y2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICBtX2ppdC5lbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisgICAgaWYgKCFhbGxvY2F0b3JW
YWx1ZSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAg
ICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclZhbHVlLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Cisg
ICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9q
aXQudm0oKSk7CisgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJl
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxMjAsNyArMzEyMCw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGEgY2VsbCBvZiBhIHNwZWNpZmljIHNpemUuCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoCi0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxv
Y2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAorICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVK
U0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CkBAIC0zMTI5LDcgKzMxMjksNyBAQCBwdWJsaWM6CiAgICAgLy8g
QWxsb2NhdG9yIGZvciBhbiBvYmplY3Qgb2YgYSBzcGVjaWZpYyBzaXplLgogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUg
TWFza1R5cGU+IC8vIFN0cnVjdHVyZVR5cGUsIFN0b3JhZ2VUeXBlIGFuZCwgTWFza1R5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdCgKLSAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIsIEFsbG9jYXRvciBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVy
ZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9J
TkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVj
dG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0
ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6
ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9j
YXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNp
emVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRz
X3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+
KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMzLDEwICs1ODMzLDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmlu
c2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
b2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwog
ICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdl
dCgpLCBzbG93UGF0aCk7CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5v
ZmZzZXQoKSksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
S2lkczsgKytpKQpAQCAtOTg2MSw3ICs5ODYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRl
eGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAg
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxsQWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKIAogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVk
UHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwpAQCAtOTkyMCw3ICs5OTIwLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBtYXNrID0gY29tcHV0ZUJ1dHRlcmZseUlu
ZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2Jq
ZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnRQdHIoY2VsbEFsbG9jYXRvciksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBt
YXNrLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2Vs
bEFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNr
LCBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0
ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUp
OwpAQCAtMTA4OTIsOCArMTA4OTIsOCBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAg
ICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwot
ICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgICAgIExWYWx1ZSBzdGFydE9mU3Rv
cmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIExWYWx1ZSBzdGFydE9m
U3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkg
PSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIo
c2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMTE5MjUsMTYgKzExOTI1LDE4
IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2Nh
dG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5
KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJ
bnRQdHIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxCbG9j
a0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIoKSk7CisgICAgICAgIEFsbG9jYXRvciBh
Y3R1YWxBbGxvY2F0b3I7CisgICAgICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAg
ICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBBbGxvY2F0b3IoYWxsb2NhdG9yLT5hc0ludDMyKCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAgICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBlaXRoZXIgd2Uga25vdyB0aGF0IHRoZSBhbGxvY2F0b3IgaXMg
bnVsbCBvciB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgICAgICAgICAvLyBhbGxvY2F0b3Ig
aXMuIEluIGVpdGhlciBjYXNlLCB3ZSBuZWVkIHRoZSBudWxsIGNoZWNrLgogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaGF2ZUFsbG9jYXRvciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZl
QWxsb2NhdG9yKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChhbGxvY2F0b3IsIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGFsbG9jYXRvciwgbV9vdXQuY29u
c3RJbnQzMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpLAorICAgICAgICAgICAgICAgIHVzdWFsbHko
aGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOwogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaGF2ZUFsbG9jYXRvciwgbGFzdE5leHQpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTE5NDQsNyArMTE5NDYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMudGVybWluYWwgPSB0cnVlOwotICAgICAgICBwYXRj
aHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYWxsb2NhdG9yKTsKKyAgICAgICAgaWYgKGFjdHVh
bEFsbG9jYXRvcikKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cysrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcihhbGxvY2F0b3IpOwogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9
IFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjsKICAgICAgICAgCkBAIC0xMTk1NSw2ICsxMTk2
MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGp1bXBUb1Nsb3dQYXRoOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhbGxvY2F0b3JHUFI7CisgICAgICAgICAgICAgICAgaWYg
KGFjdHVhbEFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFy
YW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRp
b24gcGF0aCBiZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8v
IGFsbG9jYXRpb24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1h
Y2hpbmUgY29kZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hh
dCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBj
b21waWxlcgpAQCAtMTE5NjIsNyArMTE5NzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IC8vIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBv
cHRpbWl6ZWQgcGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhl
IGNvbXBpbGVyIHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1
YWxBbGxvY2F0b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9TdWNjZXNzOwpAQCAtMTIwNTQsOCArMTIwNjUsOCBAQCBwcml2YXRlOgogICAg
IExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0
dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4KQEAgLTEyMDc0LDE2ICsxMjA4NSwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxl
dGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBh
Y3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxT
dWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVy
bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0
dWFsQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVh
bEFsbG9jYXRvci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIx
MDIsNyArMTIxMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQubG9hZFB0cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1f
b3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2Vf
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1
YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxMTcsOCArMTIxMjgs
NyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAg
ICAgICAgIExWYWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVl
IGJ1dHRlcmZseSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xv
d1BhdGgpCiAgICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6
ZSgKLSAgICAgICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93
UGF0aCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJm
bHlJbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTI2LDE1ICsxMjEzNiwx
NCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAg
ICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUo
Ci0gICAgICAgICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1Bh
dGgpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4g
YWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0
Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdl
IGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAg
ICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxNDYs
NyArMTIxNTUsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291
dC5pbnRQdHJaZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50
UHRyWmVybywgbV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3Vuc2lnbmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0
KS0+Y2VsbFNpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZN
OworCitjbGFzcyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAg
IAorICAgIEFsbG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgdW5z
aWduZWQgY2VsbFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9m
ZnNldCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0FsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoVk0m
IHZtLCBHQ0RlZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1v
ZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcih2bSwg
bV9vZmZzZXQpLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKIAotI2luY2x1ZGUgIkFs
bG9jYXRpbmdTY29wZS5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTM5LDE1
ICszOCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0ZXhwciBib29sIHRy
YWRlRGVzdHJ1Y3RvckJsb2NrcyA9IHRydWU7Ci0KIEJsb2NrRGlyZWN0b3J5OjpCbG9ja0RpcmVj
dG9yeShIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX2ZyZWVMaXN0KGNlbGxT
aXplKQotICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDAp
Ci0gICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCisgICAg
OiBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCiAgICAgLCBtX2hl
YXAoaGVhcCkKIHsKKyAgICBoZWFwLT50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuYWxsb2NhdGVP
ZmZzZXQodGhpcyk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnNldFN1YnNwYWNlKFN1YnNw
YWNlKiBzdWJzcGFjZSkKQEAgLTgxLDE0MyArNzYsMTQgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSog
QmxvY2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsK
IH0KIAotdm9pZCBCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKLXsKLSAgICBp
ZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJl
ZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50Qmxv
Y2sgPSBudWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVXaXRo
b3V0Q29sbGVjdGluZygpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOwotICAgIAotICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOwotICAgIEFTU0VS
VChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAKLSAgICBmb3IgKDs7KSB7
Ci0gICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkg
fCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7Ci0gICAgICAgIGlm
IChtX2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIAotICAgICAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKLQotICAgICAgICBpZiAo
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihtX2Jsb2Nrc1ttX2FsbG9jYXRpb25DdXJzb3Jd
KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIGlmIChPcHRp
b25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCi0gICAgICAgICYmICh0
cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKLSAgICAgICAg
aWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFjZS0+ZmluZEVtcHR5Qmxv
Y2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9zdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCi0gICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhh
dmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5Ci0gICAgICAgICAgICAvLyBhbmQgZW1wdHkg
c2V0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJvbURpcmVj
dG9yeSgpOwotICAgICAgICAgICAgYWRkQmxvY2soYmxvY2spOwotICAgICAgICAgICAgcmV0dXJu
IGFsbG9jYXRlSW4oYmxvY2spOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVJbihNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jaykKK01hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5Ojpm
aW5kQmxvY2tGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0
ZUluKGJsb2NrKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9j
ay0+aXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7
Ci0gICAgCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBm
dWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0Ci0gICAgLy8gdGhh
dCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCi0g
ICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKLSAgICAgICAgQVNTRVJU
KGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3
bHlBbGxvY2F0ZWQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwot
ICAgICAgICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwotICAg
ICAgICBBU1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nhcnks
IGJsb2NrKSk7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RF
bXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICBp
ZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQogICAgIAotICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAg
Ci0gICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgW10gKCkg
LT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSk7Ci0gICAgc2V0SXNFZGVu
KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUpOwotICAgIG1hcmtlZFNw
YWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAg
ICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKLSAgICBpZiAo
IWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgpKSB7
Ci0gICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAgICAgICAgICAgICAgIGRlZmVy
cmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49IE9wdGlvbnM6
OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBhbGxvY2F0aW9uQ291bnQgPSAw
OwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwot
ICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OwotICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKLQotICAg
IEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKLSAgICBtX2hlYXAtPmRpZEFs
bG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwotICAgIAotICAgIGRpZENvbnN1bWVG
cmVlTGlzdCgpOwotICAgIAotICAgIEFsbG9jYXRpbmdTY29wZSBoZWxwaW5nSGVhcCgqbV9oZWFw
KTsKLQotICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRl
eHQpOwotICAgIAotICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2Fs
bGJhY2sgYW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25s
eQotICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0
IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElLRUxZ
KG1fY3VycmVudEJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4
dCwgZmFpbHVyZU1vZGUpOwotICAgIAotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmcoKTsKLSAgICAKLSAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
ayA9IHRyeUFsbG9jYXRlQmxvY2soKTsKLSAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlmIChm
YWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBhZGRCbG9jayhibG9jayk7Ci0gICAgcmVzdWx0
ID0gYWxsb2NhdGVJbihibG9jayk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5
LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKKyAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxv
Y2F0aW9uQ3Vyc29yXTsKIH0KIAogc3RhdGljIHNpemVfdCBibG9ja0hlYWRlclNpemUoKQpAQCAt
MzEzLDI0ICsxNzksMTkgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmcoKQog
ewogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBC
bG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAgICBBU1NFUlQoIW1fbGFzdEFj
dGl2ZUJsb2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVCht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0g
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJlbnRCbG9j
ayA9IDA7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZv
ckVhY2goCisgICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAg
ICAgICAgYWxsb2NhdG9yLT5zdG9wQWxsb2NhdGluZygpOworICAgICAgICB9KTsKIH0KIAogdm9p
ZCBCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogewotICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAg
bV9mcmVlTGlzdC5jbGVhcigpOwotCisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAg
ICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxv
Y2F0b3ItPnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgICAgIH0pOworICAgIAogICAgIG1f
YWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNvciA9IDA7CiAgICAgbV91bnN3
ZXB0Q3Vyc29yID0gMDsKQEAgLTM1NCwxMiArMjE1LDEwIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
Omxhc3RDaGFuY2VUb0ZpbmFsaXoKIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2Nh
dGluZygpCiB7Ci0gICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0g
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IG51bGxwdHI7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAg
WyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3It
PnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rv
cnk6OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKQEAgLTM3OSw3ICsyMzgsNyBAQCB2
b2lkIEJsb2NrRGlyZWN0b3J5OjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBv
ZiBjb2xsZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4g
dGhlIG1fbWFya2luZ1hZWgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgaWYgKCF0cmFkZURl
c3RydWN0b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgaWYgKCFPcHRpb25z
Ojp0cmFkZURlc3RydWN0b3JCbG9ja3MoKSAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsKICAgICAg
ICAgQVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKICAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5v
dEVtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CiAgICAgfSBlbHNlIHsKQEAgLTUx
Miw1ICszNzEsMTUgQEAgTWFya2VkU3BhY2UmIEJsb2NrRGlyZWN0b3J5OjptYXJrZWRTcGFjZQog
ICAgIHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQogCitib29sIEJsb2NrRGlyZWN0b3J5
Ojppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkKK3sKKyAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAo
TG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0IHw9IGFsbG9j
YXRvci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOworICAgICAgICB9KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFp
bHVyZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDZWxsQXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQzLDcgQEAgY2xhc3MgSGVh
cDsKIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUg
Rk9SX0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxpdmUsIExp
dmUpIC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4g
Ki9cCkBAIC03Niw5ICs3OSw2IEBAIGNsYXNzIEJsb2NrRGlyZWN0b3J5IHsKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNl
bGxTaXplKCk7Ci0KICAgICBCbG9ja0RpcmVjdG9yeShIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsK
ICAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpOwpAQCAtOTcsMTAgKzk3LDkgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVk
c0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQg
Y2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2
b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7
CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogCi0gICAgYm9vbCBpc0ZyZWVM
aXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CisgICAgYm9vbCBpc0ZyZWVMaXN0
ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7
CkBAIC0xNTcsMjQgKzE1NiwyMCBAQCBwdWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFj
ZSgpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gQWxsb2NhdG9yKG1fdGxjT2Zmc2V0KTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpk
YXRhRmlsZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2Nh
dG9yOwogICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRCbG9jazsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxD
b250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKLSAgICB2b2lkIGRp
ZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmcoKTsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAg
dm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCogYWxs
b2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRv
VGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CiAgICAgCi0gICAgRnJlZUxp
c3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2Nr
KCk7CiAgICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKICAg
ICBWZWN0b3I8dW5zaWduZWQ+IG1fZnJlZUJsb2NrSW5kaWNlczsKQEAgLTE5MywxMCArMTg4LDYg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRv
IHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVtcHR5IGFsbG9jYXRpb24g
KGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXplX3QgbV91bnN3ZXB0Q3Vyc29y
IHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBm
b3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSog
bV9jdXJyZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxv
Y2s7Ci0KLSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIENl
bGxBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHNo
b3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2LDE2ICsxOTcsMTAgQEAgcHJpdmF0
ZToKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5IHsgbnVsbHB0ciB9OwogICAg
IEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlIHsgbnVsbHB0ciB9Owog
ICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IgeyBudWxscHRyIH07CisgICAgCisgICAgTG9jayBtX2xvY2FsQWxsb2NhdG9yc0xvY2s7Cisg
ICAgc2l6ZV90IG1fdGxjT2Zmc2V0OworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMb2NhbEFsbG9j
YXRvciwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+PiBtX2xvY2FsQWxsb2Nh
dG9yczsKIH07CiAKLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJl
ZUxpc3QoKQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQmxvY2tEaXJlY3RvcnksIG1f
ZnJlZUxpc3QpOwotfQotCi1pbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkNlbGxTaXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEJsb2NrRGlyZWN0b3J5
LCBtX2NlbGxTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICszMSw2IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1pbmxpbmUgYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbChjb25z
dCB2b2lkKiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMo
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKLXsKLSAgICByZXR1cm4g
bV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAg
ICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250
ZXh0LCBmYWlsdXJlTW9kZSkpOwotICAgICAgICB9KTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+IGlubGluZSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpmb3JFYWNoQmxvY2soY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCShyZXZp
c2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJCbG9ja0Rp
cmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTG9j
YWxBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0zOCw0MCArNDIsMzggQEAgQ29tcGxldGVTdWJzcGFjZTo6Q29tcGxldGVT
dWJzcGFjZShDU3RyaQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKIHsKICAgICBpbml0aWFs
aXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKLSAgICAgICAgbV9hbGxv
Y2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7CiB9CiAKIENvbXBsZXRlU3Vic3BhY2U6On5D
b21wbGV0ZVN1YnNwYWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQWxs
b2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNp
emUsIG1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qg
c2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoVk0m
IHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBhbGxvY2F0ZU5v
blZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJu
IGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9k
ZSk7CiB9CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVO
b25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICB2b2lk
ICpyZXN1bHQ7Ci0gICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkK
LSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZh
aWx1cmVNb2RlKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgZmFp
bHVyZU1vZGUpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KHNpemUs
IGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0
ZVNsb3codm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKICAgICBpZiAoIXNpemVDbGFz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBBbGxvY2F0b3IoKTsK
ICAgICAKICAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sg
Zm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKICAgICAvLyB0
byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVu
IHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0KQEAgLTgyLDcgKzg0LDcgQEAgQmxvY2tE
aXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQgYW55ICJmb3JF
YWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0
ZXIgaXQncyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwotICAgIGlmIChC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0p
CisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2lu
ZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKQEAgLTk4
LDcgKzEwMCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAg
ICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBz
aXplQ2xhc3MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX2FsbG9jYXRvckZvclNp
emVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtpbmRleF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpbmRleC0tKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsMjMgKzEwOSwyMyBAQCBCbG9j
a0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9maXJzdERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICByZXR1
cm4gZGlyZWN0b3J5OworICAgIHJldHVybiBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogfQogCi12
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVT
bG93KHNpemUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9
PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZt
LCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIHNhbml0aXpl
U3RhY2tGb3JWTSgmdm0pOwogICAgIAotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikp
Ci0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0
b3IpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgCiAgICAgaWYgKHNp
emUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8
PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKQEAgLTEzMiwxNSArMTM0LDE1IEBAIHZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0g
ICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVh
dGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFs
bG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlz
KTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBt
X3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0
ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xh
cmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJy
ZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMi
LCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihz
aXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9y
TW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9
CiAgICAgCi0gICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0
dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAK
IHByaXZhdGU6Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsK
KyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAogICAgIC8vIFRo
ZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBh
bGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVT
bG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29u
dGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFj
ZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgc3RkOjphcnJh
eTxBbGxvY2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0b3J5Pj4gbV9k
aXJlY3RvcmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZv
ck1vZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkK
IHsKICAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXpl
KV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1v
ZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9B
U1NFUlQobW9kZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3Ip
OwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJ
KHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07
CiAKIGNsYXNzIEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7
Ci0gICAgCiBwdWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5G
cmVlTGlzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVy
cmFsQ29udGV4dC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworY2xh
c3MgTG9jYWxBbGxvY2F0b3I7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKICAgICBmcmll
bmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgZnJp
ZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVycmFs
Q29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2
OCw3IEBACiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJTd2Vl
cGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6SGVhcChWTSog
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQ
b29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1f
dGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCisgICAg
LCBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNs
YXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNz
IFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgU3dlZXBpbmdTY29wZTsKK2NsYXNzIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ7CiBjbGFzcyBWTTsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1
Y3QgQ3VycmVudFRocmVhZFN0YXRlOwpAQCAtMzcyLDYgKzM3Myw4IEBAIHB1YmxpYzoKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29u
c3QgRnVuYyYpOworICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQmIHRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQoKSB7IHJldHVybiAqbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTcxNCw2ICs3MTcs
OCBAQCBwcml2YXRlOgogICAgIAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50VGhy
ZWFkU3RhdGUgeyBudWxscHRyIH07CiAgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVhZCB7
IG51bGxwdHIgfTsgLy8gSXQncyBPSyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2ludGVy
LgorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRMb2NhbENhY2hlTGF5b3V0PiBtX3Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDIyNjg5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsOSArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJNYXJrZWRCbG9j
ay5oIgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1Nl
bnRpbmVsTGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkFsbG9j
YXRvcklubGluZXMuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNs
dWRlICJJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0
b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTM1LDYgKzM4LDcgQEAgSXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSAogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKICAgICAsIG1fc2l6
ZShzaXplKQogICAgICwgbV9kaXJlY3RvcnkoJmhlYXAsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpKQorICAgICwgbV9hbGxvY2F0b3IobV9kaXJl
Y3RvcnkuYWxsb2NhdG9yKCkpCiAgICAgLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3Rk
OjptYWtlX3VuaXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQogewogICAgIGluaXRp
YWxpemUoaGVhcENlbGxUeXBlLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOwpA
QCAtNTAsMjAgKzU0LDIwIEBAIElzb1N1YnNwYWNlOjp+SXNvU3Vic3BhY2UoKQogewogfQogCi1C
bG9ja0RpcmVjdG9yeSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZSBtb2RlKQorQWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Io
c2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9pZCogSXNvU3Vic3BhY2U6OmFs
bG9jYXRlKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGUoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBh
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cisg
ICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBm
YWlsdXJlTW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5v
blZpcnR1YWwoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICB2b2lkKiByZXN1bHQgPSBtX2Rp
cmVjdG9yeS5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lk
KiByZXN1bHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZSh2bSwgZGVmZXJyYWxDb250ZXh0LCBmYWls
dXJlTW9kZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSAr
NDEsMTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0
b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yTm9u
VmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOworICAgIEFsbG9jYXRvciBhbGxvY2F0
b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwogCi0gICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVO
b25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIElz
b0NlbGxTZXQ7CkBAIC01NiwxNCArNTYsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICBzaXplX3Qg
bV9zaXplOwogICAgIEJsb2NrRGlyZWN0b3J5IG1fZGlyZWN0b3J5OworICAgIEFsbG9jYXRvciBt
X2FsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJ
c29DZWxsU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0czsK
IH07CiAKLWlubGluZSBCbG9ja0RpcmVjdG9yeSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpCitpbmxpbmUgQWxsb2NhdG9y
IElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0
b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsK
LSAgICByZXR1cm4gJm1fZGlyZWN0b3J5OworICAgIHJldHVybiBtX2FsbG9jYXRvcjsKIH0KIAog
I2RlZmluZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwQ2VsbFR5cGUsIHR5cGUpICgiSXNv
bGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhlYXApLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5
cGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRlICJBbGxvY2F0aW5nU2NvcGUu
aCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcHRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3Io
QmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkK
KyAgICAsIG1fY2VsbFNpemUoZGlyZWN0b3J5LT5tX2NlbGxTaXplKQorICAgICwgbV9mcmVlTGlz
dChtX2NlbGxTaXplKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZGlyZWN0b3J5LT5t
X2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgIGRpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnMu
YXBwZW5kKHRoaXMpOworfQorCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoTG9jYWxB
bGxvY2F0b3ImJiBvdGhlcikKKyAgICA6IG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQor
ICAgICwgbV9jZWxsU2l6ZShvdGhlci5tX2NlbGxTaXplKQorICAgICwgbV9mcmVlTGlzdChXVEZN
b3ZlKG90aGVyLm1fZnJlZUxpc3QpKQorICAgICwgbV9jdXJyZW50QmxvY2sob3RoZXIubV9jdXJy
ZW50QmxvY2spCisgICAgLCBtX2xhc3RBY3RpdmVCbG9jayhvdGhlci5tX2xhc3RBY3RpdmVCbG9j
aykKK3sKKyAgICBvdGhlci5yZXNldCgpOworICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9kaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0
b3JzTG9jayk7CisgICAgICAgIG90aGVyLnJlbW92ZSgpOworICAgICAgICBtX2RpcmVjdG9yeS0+
bV9sb2NhbEFsbG9jYXRvcnMuYXBwZW5kKHRoaXMpOworICAgIH0KK30KKwordm9pZCBMb2NhbEFs
bG9jYXRvcjo6cmVzZXQoKQoreworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2N1cnJl
bnRCbG9jayA9IG51bGxwdHI7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOworfQor
CitMb2NhbEFsbG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKCkKK3sKKyAgICBpZiAoaXNPbkxpc3Qo
KSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2Fs
QWxsb2NhdG9yc0xvY2spOworICAgICAgICByZW1vdmUoKTsKKyAgICB9CisgICAgCisgICAgLy8g
QXNzZXJ0IHRoYXQgdGhpcyBhbGxvY2F0b3IgaXNuJ3QgaG9sZGluZyBvbnRvIGFueSBtZW1vcnku
IFRoaXMgaXMgYSB2YWxpZCBhc3NlcnRpb24gZm9yIHRoZQorICAgIC8vIGZvbGxvd2luZyB0d28g
dXNlIGNhc2VzOgorICAgIC8vIAorICAgIC8vIC0gSW1tb3J0YWwgVExDLiBUaG9zZSBkZXN0cnVj
dCBhZnRlciB0aGUgaGVhcCBpcyBkb25lIGRlc3RydWN0aW5nLCBzbyB0aGV5IHNob3VsZCBub3Qg
aGF2ZQorICAgIC8vICAgYW55IHN0YXRlIGxlZnQgaW4gdGhlbS4KKyAgICAvLworICAgIC8vIC0g
VExDIG93bmVkIGJ5IGFuIG9iamVjdC4gU3VjaCBhIFRMQyBnZXRzIGRlc3Ryb3llZCBhZnRlciBh
IEdDIGZsaXAgZHVyaW5nIHdoaWNoIHdlIHByb3ZlZAorICAgIC8vICAgdGhhdCBpdCBpcyBub3Qg
cmVhY2hhYmxlLiBUaGVyZWZvcmUsIHRoZSBUTEMgc2hvdWxkIHN0aWxsIGJlIGluIGEgZnVsbHkg
cmVzZXQgc3RhdGUgYXQgdGhlCisgICAgLy8gICB0aW1lIG9mIGRlc3RydWN0aW9uIGJlY2F1c2Ug
Zm9yIGl0IHRvIGdldCBpbnRvIGFueSBvdGhlciBzdGF0ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxs
b2NhdGVkCisgICAgLy8gICBpbiBpdCAod2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mg
c3VwcG9zZWRseSB1bnJlYWNoYWJsZSkuCisgICAgUkVMRUFTRV9BU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudEJsb2Nr
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOworfQorCit2b2lkIExv
Y2FsQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCit7CisgICAgQVNTRVJUKCFtX2xhc3RBY3Rp
dmVCbG9jayk7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBBU1NFUlQobV9m
cmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAg
IG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKK30KKwordm9pZCBMb2NhbEFsbG9j
YXRvcjo6cmVzdW1lQWxsb2NhdGluZygpCit7CisgICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRp
bmcobV9mcmVlTGlzdCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsK
KyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0
b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3sKKyAgICByZXNldCgpOworfQorCit2b2lkKiBM
b2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIEhlYXAmIGhlYXAg
PSAqbV9kaXJlY3RvcnktPm1faGVhcDsKKyAgICBBU1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRl
ZmVycmFsQ29udGV4dCk7CisKKyAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgp
LmlzSXRlcmF0aW5nKCkpOworICAgIGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5h
bFNpemUoKSk7CisgICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxs
b2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVy
IGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhh
cyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcg
V2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFs
aXphdGlvbi4KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1
cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9p
ZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlm
IChMSUtFTFkocmVzdWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxv
Y2soKTsKKyAgICBpZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFs
bG9jYXRlSW4oYmxvY2spOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAg
aWYgKG1fY3VycmVudEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZy
ZWVMaXN0KCk7CisgICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJs
b2NrID0gbnVsbHB0cjsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0
aG91dENvbGxlY3RpbmcoKQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBi
ZSB1c2VkIGZvciByZWFsIG11bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQg
aGF2ZSB0bworICAgIC8vIGNvbWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhl
cmUuIFRoYXQgcHJvdG9jb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAv
LworICAgIC8vIC0gVGhlIGJhc2ljIGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRy
eWluZyB0byBkbyBhbiBhbGxvY2F0aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNh
bWUgYml0dmVjdG9yLiBUaGF0IHByb2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBs
ZWFzdC4KKyAgICAvLworICAgIC8vIC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxv
Y2F0b3IgdHJpZ2dlcmluZyBhIHN0ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkK
KyAgICAvLyAgIHZpYSBhIHNlYXJjaCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxp
c3QuIFdobyBrbm93cyB3aGF0IGxvY2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25l
IHdheSB0byBtYWtlIHRoaXMgd29yayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sg
dGhhdCBwcm90ZWN0cyBhbGwgbXV0YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBh
dGhzLiBUaGF0IHdvdWxkIHByb2JhYmx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0
IHdvdWxkIGNlcnRhaW5seSBiZQorICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24g
ZnJvbSBKSVQgdGhyZWFkcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgxNjM1CisgICAgCisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOworICAgIAorICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFT
U0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZp
bmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2Nr
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRp
b25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmIChP
cHRpb25zOjp0cmFkZURlc3RydWN0b3JCbG9ja3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVz
dHJ1Y3Rpb24oKSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0g
bV9kaXJlY3RvcnktPm1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09
IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRl
QnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJl
Y2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3Ro
IGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQg
dGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7
CisgICAgICAgICAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAg
cmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiBudWxscHRyOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJr
ZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0
ZUluKGJsb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrKQoreworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9j
ay0+aXNGcmVlTGlzdGVkKCkpOworICAgIAorICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7
CisgICAgCisgICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBm
dWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CisgICAgLy8gdGhh
dCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCisg
ICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgQVNTRVJU
KGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CisgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3
bHlBbGxvY2F0ZWQoKTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwor
ICAgICAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwg
YmxvY2spKTsKKyAgICAgICAgQVNTRVJUKCFtX2RpcmVjdG9yeS0+aXNDYW5BbGxvY2F0ZUJ1dE5v
dEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgCisgICAg
dm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVh
cENlbGwqIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSk7CisgICAgbV9kaXJlY3RvcnktPnNl
dElzRWRlbihOb0xvY2tpbmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKKyAgICBt
X2RpcmVjdG9yeS0+bWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50Qmxv
Y2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRvVGVz
dENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkK
K3sKKyAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKKyAg
ICBpZiAoIWFsbG9jYXRpb25Db3VudCkgeworICAgICAgICBpZiAoIW1fZGlyZWN0b3J5LT5tX2hl
YXAtPmlzRGVmZXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAg
ICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5tX2hlYXAtPmNvbGxlY3RO
b3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAoKythbGxvY2F0aW9uQ291bnQgPj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0Nz
KCkpCisgICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7Cit9CisKK2Jvb2wgTG9jYWxBbGxvY2F0
b3I6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIC8v
IFRoaXMgYWJvbWluYXRpb24gZXhpc3RzIHRvIGRldGVjdCB3aGVuIGFuIG9iamVjdCBpcyBpbiB0
aGUgZGVhZC1idXQtbm90LWRlc3RydWN0ZWQgc3RhdGUuCisgICAgLy8gVGhlcmVmb3JlLCBpdCdz
IG5vdCBldmVuIGNsZWFyIHRoYXQgdGhpcyBuZWVkcyB0byBkbyBhbnl0aGluZyBiZXlvbmQgcmV0
dXJuaW5nICJmYWxzZSIsIHNpbmNlCisgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBv
d25pbmcgdGhlIG9iamVjdCBpcyBmcmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9y
IGFueQorICAgIC8vIG9iamVjdHMgdG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVk
IHN0YXRlLgorICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2NTUKKyAgICByZXR1cm4gbV9m
cmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TG9jYWxBbGxvY2F0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Mb2NhbEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9j
a0RpcmVjdG9yeTsKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9j
YXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsQWxsb2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAg
ICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKExv
Y2FsQWxsb2NhdG9yJiYpOworICAgIH5Mb2NhbEFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQq
IGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKwor
ICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9u
KCk7CisgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNl
bGxTaXplKCk7CisgICAgCisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CisgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CisgICAgdm9pZCogdHJ5
QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCogYWxsb2NhdGVJbihN
YXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKworICAgIEJsb2NrRGlyZWN0b3J5
KiBtX2RpcmVjdG9yeTsKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplOworICAgIEZyZWVMaXN0IG1f
ZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBudWxs
cHRyIH07CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBudWxs
cHRyIH07Cit9OworCitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvY2FsQWxsb2NhdG9yLCBt
X2ZyZWVMaXN0KTsKK30KKworaW5saW5lIHB0cmRpZmZfdCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0
T2ZDZWxsU2l6ZSgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2NhbEFsbG9jYXRv
ciwgbV9jZWxsU2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
TG9jYWxBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4g
bV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CisgICAg
ICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9kaXJlY3RvcnktPmhlYXAoKS0+dm0oKSk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNl
KGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKKyAgICAgICAgfSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIK
ICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlZpc2l0UmFjZUtleS5oIgogI2luY2x1
ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsNiAr
NDEsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBIZWFwU25hcHNob3RC
dWlsZGVyOwogY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNs
YXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXpl
cjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRv
ckZvck1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9j
ay5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgpAQCAtNTYsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0Nl
bGwqKTsKIAotICAgIHZpcnR1YWwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRvckZvck1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKHNpemVf
dCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKKyAgICB2
aXJ0dWFsIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKICAgICAKICAgICB2b2lkIHByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgor
CisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRM
b2NhbENhY2hlTGF5b3V0LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6
OmNyZWF0ZShIZWFwJiBoZWFwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9j
YWxDYWNoZShoZWFwKSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUo
SGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQoreworICAgIG1fZGF0YSA9IGFsbG9jYXRl
RGF0YSgpOworfQorCitUaHJlYWRMb2NhbENhY2hlOjp+VGhyZWFkTG9jYWxDYWNoZSgpCit7Cisg
ICAgZGVzdHJveURhdGEobV9kYXRhKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogVGhy
ZWFkTG9jYWxDYWNoZTo6YWxsb2NhdGVEYXRhKCkKK3sKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG1f
ZGF0YSA/IG1fZGF0YS0+c2l6ZSA6IDA7CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6U25h
cHNob3QgbGF5b3V0ID0gbV9oZWFwLnRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKS5zbmFwc2hvdCgp
OworICAgIAorICAgIERhdGEqIHJlc3VsdCA9IHN0YXRpY19jYXN0PERhdGEqPihmYXN0TWFsbG9j
KE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpICsgbGF5b3V0LnNpemUpKTsKKyAgICBy
ZXN1bHQtPnNpemUgPSBsYXlvdXQuc2l6ZTsKKyAgICByZXN1bHQtPmNhY2hlID0gdGhpczsKKyAg
ICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6
ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9m
ZnNldCkpIExvY2FsQWxsb2NhdG9yKFdURk1vdmUoYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCkp
KTsKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBsYXlvdXQuc2l6
ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAoJmFsbG9j
YXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihsYXlvdXQuZGlyZWN0b3JpZXNb
b2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJveURhdGEoRGF0YSogZGF0YSkKK3sKKyAg
ICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBkYXRhLT5zaXplOyBvZmZzZXQgKz0g
c2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgYWxsb2NhdG9yKCpkYXRhLCBvZmZzZXQp
Ln5Mb2NhbEFsbG9jYXRvcigpOworICAgIGZhc3RGcmVlKGRhdGEpOworfQorCit2b2lkIFRocmVh
ZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNf
SklUKQorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxf
b25jZSgKKyAgICAgICAgb25jZUZsYWcsCisgICAgICAgIFtdICgpIHsKKyAgICAgICAgICAgIHB0
aHJlYWRfa2V5X2luaXRfbnAodGxzS2V5LCBkZXN0cnVjdG9yKTsKKyAgICAgICAgfSk7CisjZW5k
aWYKKyAgICAKKyAgICByZWYoKTsKKyAgICAKKyAgICBpZiAoUmVmUHRyPFRocmVhZExvY2FsQ2Fj
aGU+IG9sZENhY2hlID0gZ2V0KHZtKSkKKyAgICAgICAgb2xkQ2FjaGUtPmRlcmVmKCk7CisgICAg
CisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNo
ZTo6aW5zdGFsbERhdGEoVk0mIHZtLCBEYXRhKiBkYXRhKQoreworI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19k
aXJlY3QodGxzS2V5LCBkYXRhKTsKKyNlbHNlCisgICAgdm0udGhyZWFkTG9jYWxDYWNoZSA9IGRh
dGE7CisjZW5kaWYKK30KKworTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9j
YXRvclNsb3coVk0mIHZtLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIERhdGEqIG9sZERhdGEgPSBt
X2RhdGE7CisgICAgbV9kYXRhID0gYWxsb2NhdGVEYXRhKCk7CisgICAgZGVzdHJveURhdGEob2xk
RGF0YSk7CisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
b2Zmc2V0IDwgbV9kYXRhLT5zaXplKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yKCptX2RhdGEsIG9m
ZnNldCk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcih2b2lkKiBhcmcp
Cit7CisgICAgaWYgKCFhcmcpCisgICAgICAgIHJldHVybjsKKyAgICBEYXRhKiBkYXRhID0gc3Rh
dGljX2Nhc3Q8RGF0YSo+KGFyZyk7CisgICAgZGF0YS0+Y2FjaGUtPmRlcmVmKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJl
YWRMb2NhbENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFRM
Uy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxUaHJlYWRMb2NhbENhY2hlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhyZWFk
TG9jYWxDYWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6
CisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAg
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UaHJlYWRMb2NhbENhY2hlKCk7CisKKyAgICBzdGF0
aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGdldChWTSYpOworICAgIAorICAgIC8vIFRoaXMg
aXMgZGVzaWduZWQgdG8gYmUgZmFzdCBlbm91Z2ggdGhhdCB5b3UgY291bGQgZXZlbiBjYWxsIGl0
IGJlZm9yZSBldmVyeSBhbGxvY2F0aW9uLCBieQorICAgIC8vIG9wdGltaXppbmcgZm9yIHRoZSBj
YXNlIHRoYXQgeW91J3JlIGp1c3QgaW5zdGFsbGluZyB0aGUgY2FjaGUgdGhhdCBpcyBhbHJlYWR5
IGluc3RhbGxlZC4gVGhpcworICAgIC8vIGFzc3VtZXMgYSByZWxhdGl2ZWx5IHNtYWxsIG51bWJl
ciBvZiBjYWNoZXMgb3IgbG93IGNoYW5jZSBvZiBhY3R1YWwgY29udGV4dCBzd2l0Y2ggY29tYmlu
ZWQKKyAgICAvLyB3aXRoIHBvc3NpYmx5IGhpZ2ggcmF0ZSBvZiAiSSBtYXkgaGF2ZSBjb250ZXh0
IHN3aXRjaGVkIiBzaXRlcyB0aGF0IGNhbGwgdGhpcyBvdXQgb2YgcGFyYW5vaWEuCisgICAgdm9p
ZCBpbnN0YWxsKFZNJik7CisgICAgCisgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0
b3IoVk0mLCBzaXplX3Qgb2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRmlyc3RBbGxvY2F0b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2Nh
dG9yKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUaHJlYWRMb2NhbENhY2hlKEhlYXAmKTsKKyAg
ICAKKyAgICBzdHJ1Y3QgRGF0YSB7CisgICAgICAgIHNpemVfdCBzaXplOworICAgICAgICBUaHJl
YWRMb2NhbENhY2hlKiBjYWNoZTsKKyAgICAgICAgTG9jYWxBbGxvY2F0b3IgYWxsb2NhdG9yWzFd
OworICAgIH07CisKKyAgICBzdGF0aWMgRGF0YSogZ2V0SW1wbChWTSYpOworICAgIAorICAgIERh
dGEqIGFsbG9jYXRlRGF0YSgpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lEYXRhKERhdGEqKTsK
KyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qg
b2Zmc2V0KTsKKworICAgIHZvaWQgaW5zdGFsbFNsb3coVk0mKTsKKyAgICBzdGF0aWMgdm9pZCBp
bnN0YWxsRGF0YShWTSYsIERhdGEqKTsKKyAgICAKKyAgICBMb2NhbEFsbG9jYXRvciYgYWxsb2Nh
dG9yU2xvdyhWTSYsIHNpemVfdCBvZmZzZXQpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ry
dWN0b3Iodm9pZCopOworICAgIAorICAgIC8vIFdoZW4gaW5zdGFsbGVkLCB3ZSByZWYoKSB0aGUg
Y2FjaGUuIFVuaW5zdGFsbGluZyBkZXJlZigpcyB0aGUgY2FjaGUuIFRMUyBkZXN0cnVjdGlvbiBk
ZXJlZigpcworICAgIC8vIHRoZSBjYWNoZS4gV2hlbiB0aGUgY2FjaGUgaXMgZGVzdHJ1Y3RlZCwg
aXQgbmVlZHMgdG8gcmV0dXJuIGFsbCBvZiBpdHMgc3RhdGUgdG8gdGhlIEdDLiBJCisgICAgLy8g
dGhpbmsgdGhhdCBqdXN0IG1lYW5zIHN0b3BBbGxvY2F0aW5nKCksIGJ1dCB3aXRoIHNvbWUgc2Vy
aW91c2x5IGhlYXZ5IGNhdmVhdHMgaGF2aW5nIHRvIGRvCisgICAgLy8gd2l0aCB3aGVuIGl0J3Mg
dmFsaWQgdG8gbWFrZSB0aGF0IGNhbGwuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIFJFTEVBU0Vf
QVNTRVJUIHRoYXQgdGhlIGNhY2hlCisgICAgLy8gaXMgZW1wdHkgd2hlbiB3ZSBkZXN0cnVjdCBp
dC4gVGhpcyBpcyBjb3JyZWN0IGZvciBjYWNoZXMgdGhhdCBhcmUga2VwdCBsaXZlIGJ5IEdDIG9i
amVjdHMgYW5kCisgICAgLy8gaXQncyBjb3JyZWN0IGZvciBpbW1vcnRhbCBjYWNoZXMuCisgICAg
SGVhcCYgbV9oZWFwOworICAgIERhdGEqIG1fZGF0YTsKKworI2lmIEVOQUJMRShGQVNUX1RMU19K
SVQpCisgICAgc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19L
RVk7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFRocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZtKQorewor
I2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGF0YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdCh0bHNLZXkp
KTsKKyNlbHNlCisgICAgcmV0dXJuIHZtLnRocmVhZExvY2FsQ2FjaGU7CisjZW5kaWYKK30KKwor
aW5saW5lIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpnZXQoVk0m
IHZtKQoreworICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsK
KyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPmNhY2hlOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitpbmxpbmUgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2
bSkKK3sKKyAgICBpZiAoZ2V0SW1wbCh2bSkgPT0gbV9kYXRhKQorICAgICAgICByZXR1cm47Cisg
ICAgaW5zdGFsbFNsb3codm0pOworfQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExv
Y2FsQ2FjaGU6OmFsbG9jYXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQpCit7CisgICAgVGhyZWFk
TG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOworICAgIGlmIChMSUtFTFkob2Zm
c2V0IDwgZGF0YS0+c2l6ZSkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3IoKmRhdGEsIG9mZnNl
dCk7CisgICAgcmV0dXJuIGRhdGEtPmNhY2hlLT5hbGxvY2F0b3JTbG93KHZtLCBvZmZzZXQpOwor
fQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihE
YXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PExv
Y2FsQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PGNoYXIqPigmZGF0YS5hbGxvY2F0b3JbMF0pICsg
b2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVM
YXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworI2luY2x1ZGUgIkJsb2NrRGlyZWN0
b3J5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpUaHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6flRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQoKQoreworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQ6OmFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIGRpcmVjdG9yeS0+bV90bGNPZmZzZXQg
PSBtX3NpemU7CisgICAgbV9zaXplICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcik7CisgICAgbV9k
aXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91
dDo6U25hcHNob3QgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6c25hcHNob3QoKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBTbmFwc2hvdCByZXN1bHQ7CisgICAg
cmVzdWx0LnNpemUgPSBtX3NpemU7CisgICAgcmVzdWx0LmRpcmVjdG9yaWVzID0gbV9kaXJlY3Rv
cmllczsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9ja0RpcmVjdG9yeSogVGhyZWFkTG9j
YWxDYWNoZUxheW91dDo6ZGlyZWN0b3J5KHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgcmV0dXJuIG1fZGlyZWN0b3JpZXNbb2Zmc2V0
IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV07Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OworCisvLyBFYWNoIEhlYXAg
aGFzIGEgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB0aGF0IGhlbHBzIHVzIGZpZ3VyZSBvdXQgaG93
IHRvIGFsbG9jYXRlIGEgVGhyZWFkTG9jYWxDYWNoZQorLy8gZm9yIHRoYXQgSGVhcC4KKworY2xh
c3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhy
ZWFkTG9jYWxDYWNoZUxheW91dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
CitwdWJsaWM6CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dCgpOworICAgIH5UaHJlYWRMb2Nh
bENhY2hlTGF5b3V0KCk7CisKKyAgICAvLyBCbG9ja0RpcmVjdG9yeSBjYWxscyB0aGlzIGR1cmlu
ZyBjcmVhdGlvbiBhbmQgdGhpcyBmaWxscyBpbiBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0LgorICAg
IHZvaWQgYWxsb2NhdGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqKTsKKyAgICAKKyAgICBzdHJ1Y3Qg
U25hcHNob3QgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgVmVjdG9yPEJsb2NrRGly
ZWN0b3J5Kj4gZGlyZWN0b3JpZXM7CisgICAgfTsKKyAgICAKKyAgICBTbmFwc2hvdCBzbmFwc2hv
dCgpOworICAgIAorICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkodW5zaWduZWQgb2Zmc2V0
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CisgICAgc2l6ZV90IG1fc2l6ZSB7
IDAgfTsKKyAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBtX2RpcmVjdG9yaWVzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4Miw2
ICs1ODIsOTcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTQogfQog
I2VuZGlmCiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFs
bG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxs
b2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAg
IC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBp
dCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCisgICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCisgICAg
ICAgIAorICAgIGlmIChPcHRpb25zOjpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIEp1bXAgcG9wUGF0aDsKKyAgICBKdW1wIGRvbmU7CisgICAgCisjaWYgRU5BQkxFKEZBU1Rf
VExTX0pJVCkKKyAgICBsb2FkRnJvbVRMU1B0cihmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9HQ19U
TENfS0VZKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgIGxvYWRQdHIoJnZtKCkudGhyZWFkTG9j
YWxDYWNoZURhdGEsIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgaWYgKGFsbG9jYXRvcikKKyAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0
QWxsb2NhdG9yKCkgKyBhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzY3JhdGNoR1BSLCBhbGxvY2F0b3JH
UFIpOworICAgIGVsc2UgeworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFRocmVhZExvY2Fs
Q2FjaGU6Om9mZnNldE9mRmlyc3RBbGxvY2F0b3IoKSksIGFsbG9jYXRvckdQUik7CisgICAgICAg
IGFkZFB0cihzY3JhdGNoR1BSLCBhbGxvY2F0b3JHUFIpOworICAgIH0KKworICAgIGxvYWQzMihB
ZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSAr
IEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICBwb3BQYXRo
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7CisgICAgaWYgKGFsbG9jYXRvcikKKyAg
ICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3IuY2VsbFNpemUodm0oKS5oZWFwKSks
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChpc1g4Nigp
KSB7CisgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2Vs
bFNpemUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6
ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdWIzMihyZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICB9CisgICAgfQorICAgIG5lZ1B0cihyZXN1bHRHUFIp
OworICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmco
KSkpOworICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwg
TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBh
eWxvYWRFbmQoKSk7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIGFkZFB0cihwYXlsb2FkRW5k
QWRkciwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5k
QWRkciwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIp
OworICAgIH0KKyAgICAgICAgCisgICAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgcG9w
UGF0aC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9y
R1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNl
dE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAg
ICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOworICAg
IGVsc2UgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAg
fQorICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwor
ICAgICAgICAKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdo
YXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0CisgICAgLy8gaXQncyBzdGlsbCBvbiB0
aGUgR0MncyBmcmVlIGxpc3QuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0
Y2hHUFIpOworICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBM
b2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2Ny
YW1ibGVkSGVhZCgpKSk7CisgICAgICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0
b3IgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQoreworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbTMyKC0xKSkp
OworICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQUiwgYWxsb2Nh
dG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKK30KKwordm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwg
Q29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVn
IHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sK
KyAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNl
OjpzaXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIg
b2YgdHdvLiIpOworICAgIAorICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJr
ZWRTcGFjZTo6c2l6ZVN0ZXApOworICAgIAorICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKKyAgICB1
cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIxKTsKKyAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1tMzIoTWFy
a2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBzY3JhdGNoR1BSMik7
CisgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIFRpbWVzRm91
ciksIHNjcmF0Y2hHUFIxKTsKKyAgICAKKyAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBBbGxv
Y2F0b3IoKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7Cit9CisKIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNiAr
NTksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJl
dHVybiBtX2NvZGVCbG9jazsgfQorICAgIFZNJiB2bSgpIHsgcmV0dXJuICptX2NvZGVCbG9jay0+
dm0oKTsgfQogICAgIEFzc2VtYmxlclR5cGVfVCYgYXNzZW1ibGVyKCkgeyByZXR1cm4gbV9hc3Nl
bWJsZXI7IH0KIAogICAgIHZvaWQgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKQpAQCAtMTQ5
MSw4MCArMTQ5MiwyMSBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cg
dGhhdCB0aGUgdmFsdWUgaGVsZCBpbiBhbGxvY2F0b3JHUFIgaXMgbm9uLW51bGwuIFRoaXMgRE9F
UyBOT1QgbWVhbgogICAgIC8vIHRoYXQgYWxsb2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3Ig
Y2FuIGJlIG51bGwgYXMgYSBzaWduYWwgdGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCi0gICAg
Ly8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5v
bk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRv
ciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93
UGF0aCkKLSAgICB7Ci0gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4g
c28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCi0gICAgICAg
IC8vIHJlZ2lzdGVyIHVzYWdlLgotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNl
R0NTbG93UGF0aHMoKSkgewotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEp1bXAgcG9w
UGF0aDsKLSAgICAgICAgSnVtcCBkb25lOwotICAgICAgICAKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBwb3BQYXRo
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChhbGxvY2F0b3Ip
Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSks
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYg
KGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICAgICAgc3ViMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0
b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0Rp
cmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgc3ViMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBuZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUz
MihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7Ci0gICAgICAg
IEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQo
KSk7Ci0gICAgICAgIGlmIChpc1g4NigpKQotICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRB
ZGRyLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRQdHIocGF5
bG9hZEVuZEFkZHIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIs
IHJlc3VsdEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvbmUgPSBqdW1wKCk7
Ci0gICAgICAgIAotICAgICAgICBwb3BQYXRoLmxpbmsodGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BS
KTsKLSAgICAgICAgaWYgKGlzWDg2KCkpCi0gICAgICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICB4b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgfQotICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIpKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUg
d2hhdCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKLSAgICAgICAgLy8gaXQncyBzdGls
bCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRH
UFIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICB9CisgICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLiBBZGRpdGlv
bmFsbHksIGlmIHRoZSBhbGxvY2F0b3IgaXMgbm90IG51bGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVl
ZAorICAgIC8vIHRvIHBvcHVsYXRlIGFsbG9jYXRvckdQUiAtIHRoaXMgY29kZSB3aWxsIGlnbm9y
ZSB0aGUgY29udGVudHMgb2YgYWxsb2NhdG9yR1BSLgorICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0
aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQWxsb2NhdG9yIGFsbG9jYXRvciwg
R1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0
aCk7CiAgICAgCi0gICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tE
aXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yKQot
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9y
R1BSKSk7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQ
UiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICB9
CisgICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgQWxsb2NhdG9yIGFsbG9j
YXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBz
bG93UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KLSAg
ICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVy
ZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRB
bGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBBbGxvY2F0b3IgYWxsb2NhdG9yLCBHUFJS
ZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hH
UFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZShyZXN1
bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAg
ICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhzdHJ1Y3R1cmUsIHJlc3VsdEdQ
Uiwgc2NyYXRjaEdQUik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cnVj
dHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4KLSAgICB2
b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5
KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJl
LCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwg
SnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVn
IHJlc3VsdEdQUiwgQWxsb2NhdG9yIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3Ry
dWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ss
IEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBl
bWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3Ry
dWN0dXJlLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRyKHN0b3JhZ2Us
IEFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKQEAgLTE1
NzYsMTIgKzE1MTgsMTEgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRH
UFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlw
ZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwg
SnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CisgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZt
KS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjEs
IHN0cnVjdHVyZSwgc3RvcmFnZSwgbWFzaywgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9
CiAgICAgCkBAIC0xNTkzLDIwICsxNTM0LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIGFsbG9j
YXRpb25TaXplIGNhbiBiZSBhbGlhc2VkIHdpdGggYW55IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJz
LiBJZiBpdCdzIG5vdCBhbGlhc2VkIHRoZW4gaXQKICAgICAvLyB3b24ndCBiZSBjbG9iYmVyZWQu
Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENv
bXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBz
Y3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi0gICAg
ewotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtl
ZFNwYWNlOjpzaXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEg
cG93ZXIgb2YgdHdvLiIpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0g
Z2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3RlcCk7Ci0gICAgICAgIAotICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSksIGFsbG9jYXRpb25TaXpl
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHVyc2hpZnQzMihUcnVzdGVkSW1tMzIoc3RlcFNoaWZ0
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUs
IHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0
ZXBTaGlmdCkpKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHN1YnNwYWNlLmFsbG9jYXRv
ckZvclNpemVTdGVwKCkgLSAxKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICBsb2FkUHRyKEJhc2VJ
bmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHRpbWVzUHRyKCkpLCBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgIAotICAgICAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBudWxscHRyLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKLSAgICB9CisgICAgdm9pZCBlbWl0QWxs
b2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1
YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVn
IHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KICAgICB2b2lkIGVtaXRB
bGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0
dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hH
UFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtNzksMjIgKzc5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5z
dHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxs
b2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJldHVyblZh
bHVlR1BSOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0
ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2Nh
dG9yKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBpZiAoYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93
Q2FzZShKdW1wKCkpOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMy
KDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgYWxsb2NhdG9yLCBhbGxv
Y2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3Jh
dGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzKTsKLSAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIHJlc3VsdFJlZyk7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgZWxzZSB7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAg
ICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBhdXRv
IG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtODU2LDkgKzg1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0
aW8KICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxlZVJlZywg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uVHlw
ZSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByYXJlRGF0YVJlZykpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcp
OworICAgIGxvYWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSks
IHN0cnVjdHVyZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxv
Y2F0b3JSZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgYWxsb2NhdG9yUmVn
LCBUcnVzdGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKGNh
Y2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlw
bGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZElt
bVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwpAQCAtODY4LDcgKzg2
OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwogICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBi
dXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVS
ZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBw
YXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODEsMjIgKzgxLDIzIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5z
dHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3Rl
cklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVn
VDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBpZiAoYWxsb2NhdG9yKQot
ICAgICAgICBhZGRTbG93Q2FzZShKdW1wKCkpOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNr
ID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
YWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVy
Zmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsK
KyAgICAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdChyZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
KyAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC03NjYsOSArNzY3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3Mo
Y2FsbGVlUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpT
RnVuY3Rpb25UeXBlKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rp
b246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJh
cmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFs
bG9jYXRvclJlZyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0
cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBh
bGxvY2F0b3JSZWcsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAg
IGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhh
c1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVn
LCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBA
IC03NzgsNyArNzc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rp
bwogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJ
bW1QdHIobnVsbHB0cik7CiAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgbnVsbHB0ciwgYWxsb2NhdG9yUmVnLCBzdHJ1
Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcs
IHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NyYXRjaFJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwg
c2NyYXRjaFJlZyk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJl
RGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAko
cmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIEFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRpbWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFs
U2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxs
cHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGVVbmluaQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVh
dGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5k
ZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBz
aXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBi
YXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAg
dm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9u
VmlydHVhbCh2bSwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5O
dWxsKTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsK
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJ
bmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVf
dCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogbmV3QmFzZSA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwg
bmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAg
ICBpZiAoIW5ld0Jhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBU
aGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjI2
ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50
czo6b3ZlcnJpZGVUaGluZ3MoVk0mCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlv
bigpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7
CiAgICAgCi0gICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZShtX21hcHBlZEFyZ3VtZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwobWFwcGVkQXJndW1l
bnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAg
dm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFy
Z3VtZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIG1hcHBlZEFyZ3VtZW50c1NpemUo
KSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIGJvb2wqIG92
ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVk
QXJndW1lbnRzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OmluaXRNb2RpZmllCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1
bWVudHNEZXNjcmlwdG9yKTsKIAogICAgIGlmIChhcmdzTGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQq
IGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3Vt
ZW50c0Rlc2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjw4PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpB
c3NlcnQpOworICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFy
eVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLmFsbG9jYXRlTm9uVmly
dHVhbCh2bSwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIGJvb2wqIG1vZGlmaWVk
QXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgICAgIG1f
bW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwgdGhpcywgbW9kaWZpZWRBcmd1bWVu
dHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcmdzTGVuZ3RoOyBpLS07KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAy
MjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwot
ICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBhbGxvY2F0aW9uU2l6ZSwg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYg
KCFkYXRhKSB7CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAbnlwb3AuY29tKQogICoKQEAgLTgxLDcgKzgxLDEwIEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhp
bmdUeXBlKSk7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5Ojpv
cHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwot
ICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2Us
IHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQq
IHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1
YWwoCisgICAgICAgICAgICB2bSwKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLAorICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC05OCw3ICsxMDEsMTAgQEAgSlNBcnJh
eSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAogICAgIH0gZWxzZSB7CiAgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEJpYXMgPSAwOwogICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFz
LCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6
dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwK
KyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3Rv
cmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLAorICAgICAg
ICAgICAgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhC
aWFzLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTM2OCw3ICszNzQsOCBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFNsb3dDYXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2Ug
PSBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxw
dHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIG5ld0FsbG9j
QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVh
bCgKKyAgICAgICAgICAgIHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFj
aXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC0yMzgsNiArMjM4LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNy
ZWF0ZShWTSYgdgogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6
b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGhIaW50
KTsKICAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIHZtLAogICAgICAgICAgICAgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksCiAgICAgICAgICAgICBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIXRlbXApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJh
eUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwog
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAg
ICAgaWYgKHNpemUpIHsKLSAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxs
cHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICAgICAgaWYg
KCF0ZW1wKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lv
biAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDUsMTQgKzE0NSwxNSBAQCBDb21wbGV0ZVN1YnNwYWNl
KiBKU0NlbGw6OnN1YnNwYWNlRm9yKFZNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQUxXQVlTX0lO
TElORSB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUs
IEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSBmYWlsdXJlTW9kZSkKIHsKKyAgICBWTSYgdm0gPSAqaGVhcC52bSgpOwogICAgIEFTU0VSVChk
ZWZlcnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQo
KSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0NlbGwqIHJlc3VsdCA9
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0
ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgIEpT
Q2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4odm0pLT5h
bGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUp
KTsKICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5O
dWxsICYmICFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2lmIEVOQUJMRShHQ19W
QUxJREFUSU9OKQotICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgp
KTsKLSAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6OmluZm8oKSk7
CisgICAgQVNTRVJUKCF2bS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAgICB2bS5zZXRJbml0
aWFsaXppbmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOwogI2VuZGlmCiAgICAgcmVzdWx0LT5jbGVh
clN0cnVjdHVyZSgpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjY4OTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBlbnF1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAotSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSkKK0pTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hl
KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV92bSh2bSkKICAgICAsIG1f
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdhdGNocG9pbnRT
ZXQoSXNXYXRjaGVkKSkpCkBAIC0zNjAsNiArMzYwLDcgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xv
YmFsT2JqZWN0KFZNJiB2bSwgUwogICAgICwgbV90ZW1wbGF0ZVJlZ2lzdHJ5KHZtKQogICAgICwg
bV9ydW50aW1lRmxhZ3MoKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxP
YmplY3RNZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUpCisgICAgLCBtX3RocmVhZExvY2FsQ2FjaGUodGhyZWFkTG9jYWxDYWNo
ZSA/IFdURk1vdmUodGhyZWFkTG9jYWxDYWNoZSkgOiB2bS5kZWZhdWx0VGhyZWFkTG9jYWxDYWNo
ZSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcg
QEAgcHVibGljOgogICAgIGNvbnN0IFJ1bnRpbWVGbGFncyYgcnVudGltZUZsYWdzKCkgY29uc3Qg
eyByZXR1cm4gbV9ydW50aW1lRmxhZ3M7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGlj
aXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogPSAwLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApAQCAtODkzLDYg
Kzg5Myw4IEBAIHB1YmxpYzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBwZXJNYXAoKSBjb25zdCB7
IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNldFdyYXBwZXJNYXAoSlNX
cmFwcGVyTWFwKiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAjZW5kaWYKKyAgICAKKyAg
ICBUaHJlYWRMb2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1cm4gKm1f
dGhyZWFkTG9jYWxDYWNoZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEdsb2Jh
bFByb3BlcnR5SW5mbyB7CkBAIC05MzAsNiArOTMyLDggQEAgcHJpdmF0ZToKICNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogICAgIFJldGFpblB0cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsK
ICNlbmRpZgorICAgIAorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2Fs
Q2FjaGU7CiB9OwogCiBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hY2hp
bmVTdGFja01hcmtlci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKKyNpbmNsdWRl
ICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFk
cy5oIgogI2luY2x1ZGUgPHRocmVhZD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0x
NDUsNyArMTQ2LDkgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKIAogICAgIG1fdm0t
PnNldExhc3RTdGFja1RvcCh0aHJlYWQuc2F2ZWRMYXN0U3RhY2tUb3AoKSk7CiAgICAgQVNTRVJU
KHRocmVhZC5zdGFjaygpLmNvbnRhaW5zKG1fdm0tPmxhc3RTdGFja1RvcCgpKSk7Ci0KKyAgICAK
KyAgICBtX3ZtLT5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZS0+aW5zdGFsbCgqbV92bSk7CisgICAg
CiAgICAgbV92bS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJl
YWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFz
eW5jSXRlcmF0aW9uID0gZmEKICAgICB2KGJvb2wsIGR1bXBTaXplQ2xhc3NlcywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQnVtcEFsbG9jYXRvciwgdHJ1ZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxs
b2NhdG9ycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB0cmFkZURlc3Ry
dWN0b3JCbG9ja3MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJs
eVVwZGF0ZVRvcENhbGxGcmFtZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KGJvb2wsIHVzZU9TUkVudHJ5VG9ERkcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0Fy
cmF5LmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBBTFdBWVNfSU5M
SU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKICAgICBib29sIGNyZWF0ZVVu
aW5pdGlhbGl6ZWQgPSBnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1
Y3R1cmUpOwotICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51
bGwpOworICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0ZU5vblZpcnR1YWwodm0sIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5O
dWxsKTsKICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwg
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw2ICsxMjEsNyBAQAogI2lu
Y2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlu
bGluZXMuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKQEAgLTMwNiw2ICszMDcsOSBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgdXBkYXRlU29m
dFJlc2VydmVkWm9uZVNpemUoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSk7CiAgICAg
c2V0TGFzdFN0YWNrVG9wKHN0YWNrLm9yaWdpbigpKTsKIAorICAgIGRlZmF1bHRUaHJlYWRMb2Nh
bENhY2hlID0gVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKGhlYXApOworICAgIGRlZmF1bHRUaHJl
YWRMb2NhbENhY2hlLT5pbnN0YWxsKCp0aGlzKTsKKwogICAgIC8vIE5lZWQgdG8gYmUgY2FyZWZ1
bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodGhpcyk7CiAgICAgQXRvbWljU3RyaW5nVGFibGUqIGV4aXN0aW5nRW50cnlBdG9taWNTdHJp
bmdUYWJsZSA9IFRocmVhZDo6Y3VycmVudCgpLnNldEN1cnJlbnRBdG9taWNTdHJpbmdUYWJsZSht
X2F0b21pY1N0cmluZ1RhYmxlKTsKQEAgLTM4Myw3ICszODcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAKICAgICBHaWdhY2FnZTo6YWRk
UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFj
aywgdGhpcyk7Ci0KKyAgICAKICAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAg
IAogICAgIExMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucygqdGhpcyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAK
ICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJWTUVudHJ5
UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2Fj
aGUuaCIKICNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
ICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY1Niw2ICs2NTcsMTEg
QEAgcHVibGljOgogCiAgICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmpl
Y3QgeyBudWxscHRyIH07CiAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0cmluZ1JlY3Vyc2lvbkNo
ZWNrVmlzaXRlZE9iamVjdHM7CisgICAgCisjaWYgIUVOQUJMRShGQVNUX1RMU19KSVQpCisgICAg
VGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogdGhyZWFkTG9jYWxDYWNoZURhdGE7CisjZW5kaWYKKyAg
ICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gZGVmYXVsdFRocmVhZExvY2FsQ2FjaGU7CiAKICAg
ICBMb2NhbFRpbWVPZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lv
biAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpc2FsbG93
Vk1SZWVudHJ5LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJv
ZmlsZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMu
aD4KQEAgLTQwLDYgKzQxLDcgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBK
U0dsbwogICAgIDogbV92bSh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkK
IHsKKyAgICBnbG9iYWxPYmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtKTsKICAg
ICBBU1NFUlQoIURpc2FsbG93Vk1SZWVudHJ5Ojppc0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkp
OwogICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJk
KCkpOwogICAgIGlmICghdm0uZW50cnlTY29wZSkgewpJbmRleDogU291cmNlL1dURi93dGYvQml0
bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2
ICsyMSw3IEBACiAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331848</attachid>
            <date>2018-01-20 14:47:50 -0800</date>
            <delta_ts>2018-01-20 16:43:36 -0800</delta_ts>
            <desc>passes JSC tests!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>165731</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDYg
KzQ2Niw3IEBAIGZ0bC9GVExUaHVua3MuY3BwCiBmdGwvRlRMVmFsdWVSYW5nZS5jcHAKIAogaGVh
cC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAoraGVhcC9BbGxvY2F0b3IuY3BwCiBoZWFwL0Js
b2NrRGlyZWN0b3J5LmNwcAogaGVhcC9DZWxsQXR0cmlidXRlcy5jcHAKIGhlYXAvQ2VsbENvbnRh
aW5lci5jcHAKQEAgLTUwMCw2ICs1MDEsNyBAQCBoZWFwL0lzb0NlbGxTZXQuY3BwCiBoZWFwL0lz
b1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhlYXAvTGFyZ2VBbGxv
Y2F0aW9uLmNwcAoraGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAogaGVhcC9NYXJrU3RhY2suY3BwCiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmNwcApAQCAtNTE4LDYgKzUyMCw4IEBAIGhlYXAvU3RvcElmTmVjZXNzYXJ5VGltZXIuY3Bw
CiBoZWFwL1N1YnNwYWNlLmNwcAogaGVhcC9TeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JT
Y2hlZHVsZXIuY3BwCiBoZWFwL1N5bmNocm9ub3VzbmVzcy5jcHAKK2hlYXAvVGhyZWFkTG9jYWxD
YWNoZS5jcHAKK2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAKIGhlYXAvVmlzaXRSYWNl
S2V5LmNwcAogaGVhcC9XZWFrLmNwcAogaGVhcC9XZWFrQmxvY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM4OSw2ICszODksMTMgQEAKIAkJMEY3MjVDQUExQzUwM0RFRDAwQUQ5NDNBIC8q
IEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oICovOyB9OwogCQkwRjcy
NUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQUUxQzUwNkQzQjAwQUQ5
NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsKIAkJMEY3NEI5M0IxRjg5NjE0ODAw
QjkzNUQzIC8qIFByb3RvdHlwZUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVB
MDVFMjAwRDI1RjYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRv
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLzsg
fTsKKwkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NzIwMEQyNUYw
MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjc1QTA2MjIwMEQyNjFEMDAzOEUyQ0YgLyogQWxsb2Nh
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLzsgfTsK
KwkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNG
IC8qIEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzVBMDY0MjAwRDI2MjgwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVBMDY2MjAxM0U0
RjEwMDM4RTJDRiAvKiBKSVRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDY1MjAxM0U0RUYwMDM4RTJDRiAvKiBKSVRBbGxvY2F0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
Rjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJBMTVBOENDMzQwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzY2RDJFMTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc2
NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNDIwLDYgKzI0MjcsMTcgQEAKIAkJMEY3MjVDQUQxQzUwNkQzQjAwQUQ5
NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNGb2xkUGF0aENvbnN0YW50cy5jcHA7IHBhdGggPSBiMy9CM0ZvbGRQYXRo
Q29uc3RhbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUUxQzUw
NkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNGb2xkUGF0aENvbnN0YW50cy5oOyBwYXRoID0gYjMvQjNGb2xkUGF0
aENvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc0QjkzQTFGODk2
MTQ1MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb3RvdHlwZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1
QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNzVBMDU2MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENh
Y2hlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRMb2Nh
bENhY2hlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1NzIw
MEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTG9jYWxBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNoZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDU5MjAwRDI1RjAwMDM4RTJDRiAvKiBM
b2NhbEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
b2NhbEFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDVB
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDVCMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2Nh
bENhY2hlTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjc1QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hlTGF5b3V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBB
bGxvY2F0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG9j
YXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNjUyMDEz
RTRFRjAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVRBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNzY2RDI2MTVBOENDMUIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91dGluZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRTdHViUm91dGluZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01NDQ5LDYgKzU0NjcsNyBAQAogCQkJCTE0MjlEOTJFMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQu
aCAqLywKIAkJCQlGRTEyMjAyNTFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNw
cCAqLywKIAkJCQlGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmgg
Ki8sCisJCQkJMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oICovLAog
CQkJCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCAqLywKIAkJ
CQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLywK
IAkJCQlGRTNBMDZBRDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCAq
LywKQEAgLTU1NDIsNiArNTU2MSwxNiBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY3
NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVEMjAw
RDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTkyMDBE
MjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1NzIwMEQy
NUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIwMEQyNUYw
MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNTgyMDBE
MjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuY3BwICovLAorCQkJCTBGNzVBMDU1MjAw
RDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8sCisJCQkJMEY3NUEwNTYyMDBE
MjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEw
NUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAorCQkJ
CTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8s
CiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEExREI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdT
Y29wZS5oICovLApAQCAtODA1MSw2ICs4MDgwLDcgQEAKIAkJCQkwRjJBQzU3MTFFOEVFNDU0MDAw
MUVFM0YgLyogQWlyRm9ybVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NzFCREFD
REM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzVBMDYxMjAwRDI2MTgwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdFMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLApAQCAtODIxNiw2ICs4
MjQ2LDcgQEAKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzRkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3
NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMzM4REYyMUJFOTNBRDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5NTg4MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNr
U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04Mzg1LDYgKzg0MTYsNyBA
QAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxMjFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTQxQUIzRDhC
RTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAv
KiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtODY2NSw2ICs4Njk3LDcgQEAKIAkJ
CQlGRUEwQzQwMzFDREQ3RDFEMDA0ODE5OTEgLyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkUyQ0FFMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fz
c2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVBMDYwMjAwRDI2MEIwMDM4RTJDRiAv
KiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMwMTVB
OERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCNDc2N0UxRDk5QUVBOTAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTg3NDksNiArODc4Miw3IEBACiAJCQkJMEZCN0YzOUExNUVEOEU0
NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVBMDYyMjAwRDI2MUQwMDM4RTJDRiAvKiBBbGxvY2F0
b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJGOTJCOTFGRDc2RkZGMDBBQzI4QTgg
LyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkY5MkJBMUZENzcw
MDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtODkzNSw2ICs4OTY5LDcgQEAKIAkJCQlFMzNGNTA3OTFCODQyMjU3MDA0MTM4
NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFCODQzN0EwMDA0MTM4NTYgLyogSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNUUyMDBE
MjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
M0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlw
dENhbGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5
NDAwQ0FFNjEzIC8qIEpTSm9iLmggaW4gSGVhZGVycyAqLywKQEAgLTk0MzQsNiArOTQ2OSw3IEBA
CiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEJFN0QzMzE3MTM1Q0Y0MDBEMTgwN0EgLyogV2Vha0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3Q0EzQUU0MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzVBMDY2MjAxM0U0RjEwMDM4RTJDRiAvKiBKSVRB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQTMyQkM3MUZDODMxNDcwMDdEN0U3NiAv
KiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5M0FERDgxRkU3MDJEMDAwMjJE
NjgxIC8qIFdlYWtNYXBJbXBsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYx
N0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIy
Njg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjc3LDYgKzEyNzcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgICAgICAgICBhcmcgPSB0bXAodmFs
dWUudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjogeworICAgICAgICAgICAgICAgIFRtcCBk
c3RUbXAgPSBtX2NvZGUubmV3VG1wKHZhbHVlLnZhbHVlKCktPnJlc3VsdEJhbmsoKSk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS52YWx1ZSgpLT50eXBl
KCkpLCBpbW1PclRtcCh2YWx1ZS52YWx1ZSgpKSwgZHN0VG1wKTsKKyAgICAgICAgICAgICAgICBh
cmcgPSBkc3RUbXA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6CiAgICAgICAgICAgICBjYXNlIFZh
bHVlUmVwOjpSZWdpc3RlcjoKICAgICAgICAgICAgICAgICBzdGFja21hcC0+ZWFybHlDbG9iYmVy
ZWQoKS5jbGVhcih2YWx1ZS5yZXAoKS5yZWcoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1p
dHNTdGFjayhJbnN0CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
OgorICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJl
dmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTAsNiArMTEwLDkgQEAgdm9pZCBTdGFja21h
cFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29u
c3RhbnQ6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlOwogICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2Ji
ZXI6CisgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6VXNlRGVmOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAg
ICAgICAgICAgIHJvbGUgPSBBcmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xMjgsNiArMTMxLDEwIEBAIHZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgK
ICAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gcmVjb3ZlciB0aGUgc3RhY2ttYXAgdmFsdWUuIFNv
LCBmb3JjZSBMYXRlQ29sZFVzZSB0byBwcmVzZXJ2ZSB0aGUKICAgICAgICAgICAgIC8vIG9yaWdp
bmFsIHN0YWNrbWFwIHZhbHVlIGFjcm9zcyB0aGUgU3BlY2lhbCBvcGVyYXRpb24uCiAgICAgICAg
ICAgICBpZiAoIUFyZzo6aXNMYXRlVXNlKHJvbGUpICYmIG9wdGlvbmFsRGVmQXJnV2lkdGggJiYg
Km9wdGlvbmFsRGVmQXJnV2lkdGggPCBjaGlsZC52YWx1ZSgpLT5yZXN1bHRXaWR0aCgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIHJvbGUgY2FuIG9ubHkgYmUgc29tZSBraW5kIG9mIGRlZiBp
ZiB3ZSBkaWQgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIsIHdoaWNoIGlzCisgICAgICAgICAgICAg
ICAgLy8gb25seSBhbGxvd2VkIGZvciBwYXRjaHBvaW50cy4gUGF0Y2hwb2ludHMgZG9uJ3QgdXNl
IHRoZSBkZWZBcmdXaWR0aCBmZWF0dXJlLgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFBcmc6OmlzQW55RGVmKHJvbGUpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSBB
cmc6OkxhdGVVc2U7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMjQ1LDYgKzI1Miw3IEBAIGJv
b2wgU3RhY2ttYXBTcGVjaWFsOjppc0FyZ1ZhbGlkRm9yUmVwKEEKICAgICAgICAgLy8gV2UgYWxy
ZWFkeSB2ZXJpZmllZCBieSBpc0FyZ1ZhbGlkRm9yVmFsdWUoKS4KICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgIGNhc2UgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJl
Z2lzdGVyOgogICAgICAgICByZXR1cm4gYXJnLmlzVG1wKCk7CiAgICAgY2FzZSBWYWx1ZVJlcDo6
TGF0ZVJlZ2lzdGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBWYWx1ZS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDYgKzUzLDExIEBAIHZvaWQg
U3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyKFYKICAgICBhcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwogfQogCit2b2lkIFN0YWNr
bWFwVmFsdWU6OmFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKFZhbHVlKiB2YWx1ZSkKK3sK
KyAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cldpdGhDbG9iYmVyKSk7Cit9CisKIHZvaWQgU3RhY2ttYXBWYWx1ZTo6c2V0Q29uc3RyYWluZWRD
aGlsZCh1bnNpZ25lZCBpbmRleCwgY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYgY29uc3RyYWluZWRW
YWx1ZSkKIHsKICAgICBjaGlsZChpbmRleCkgPSBjb25zdHJhaW5lZFZhbHVlLnZhbHVlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lv
biAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05OSw3ICs5OSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlz
IGEgaGVscGVyIGZvciBzb21ldGhpbmcgeW91IG1pZ2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2
YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25zdHJhaW5lZAogICAgIC8vIHRvIFNvbWVSZWdpc3Rlci4K
ICAgICB2b2lkIGFwcGVuZFNvbWVSZWdpc3RlcihWYWx1ZSopOwotCisgICAgdm9pZCBhcHBlbmRT
b21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihWYWx1ZSopOworICAgIAogICAgIGNvbnN0IFZlY3RvcjxW
YWx1ZVJlcD4mIHJlcHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KIAogICAgIC8vIFN0YWNr
bWFwcyBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIg
c29tZSByZWdpc3RlcnMuIENsb2JiZXJpbmcgYSByZWdpc3RlcgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsMjEg
KzQzMiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQo
KS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUtPnR5cGUoKSA9PSBWb2lkKQogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5yZXN1bHRDb25zdHJhaW50ID09IFZhbHVlUmVwOjpX
YXJtQW55LCAoIkF0ICIsICp2YWx1ZSkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3Vs
dENvbnN0cmFpbnQua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6
Oldhcm1Bbnk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURShmYWxzZSwgKCJBdCAiLCAqdmFsdWUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdGVTdGFja21hcENvbnN0cmFpbnQodmFsdWUsIENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQpLCBDb25zdHJhaW50
Um9sZTo6RGVmKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVT
dGFja21hcCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IENoZWNrQWRkOgpAQCAtNTcxLDE2ICs1NTgsMjQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IHN3aXRjaCAodmFsdWUucmVwKCkua2luZCgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6Oldh
cm1Bbnk6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbGRBbnk6Ci0gICAgICAgIGNhc2UgVmFs
dWVSZXA6OkxhdGVDb2xkQW55OgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6
CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CisgICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbGRBbnk6CisgICAgICAgICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRS
b2xlOjpVc2UsICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6Cisg
ICAgICAgICAgICBWQUxJREFURShyb2xlID09IENvbnN0cmFpbnRSb2xlOjpVc2UsICgiQXQgIiwg
KmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CisgICAgICAgICAgICBWQUxJREFURShjb250ZXh0LT5h
czxQYXRjaHBvaW50VmFsdWU+KCksICgiQXQgIiwgKmNvbnRleHQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAg
ICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OkRlZiwgKCJBdCAiLCAqY29udGV4
dCwgIjogIiwgdmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVl
UmVwOjpSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVyOgorICAg
ICAgICAgICAgaWYgKHZhbHVlLnJlcCgpLmtpbmQoKSA9PSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVy
KQorICAgICAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwg
KCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5y
ZXAoKS5yZWcoKS5pc0dQUigpKQogICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LnZhbHVlKCktPnR5cGUoKSksICgiQXQgIiwgKmNvbnRleHQsICI6ICIsIHZhbHVlKSk7CiAgICAg
ICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3Bw
CShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw3IEBAIHZvaWQgVmFsdWVSZXA6OmFk
ZFVzZWRSZWdpc3RlcnNUbyhSZWdpc3QKICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2FzZSBMYXRl
Q29sZEFueToKICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdpc3Rlcldp
dGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgY2FzZSBDb25zdGFu
dDoKICAgICAgICAgcmV0dXJuOwpAQCAtNzEsNiArNzIsNyBAQCB2b2lkIFZhbHVlUmVwOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvCiAgICAgY2FzZSBDb2xkQW55OgogICAgIGNhc2UgTGF0ZUNv
bGRBbnk6CiAgICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgY2FzZSBTb21lUmVnaXN0ZXJXaXRo
Q2xvYmJlcjoKICAgICBjYXNlIFNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBMYXRlUmVnaXN0ZXI6CkBAIC0xNzUsNiArMTc3LDkgQEAgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbAogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cjoKICAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgorICAgICAgICBvdXQu
cHJpbnQoIlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyIik7CisgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJTb21l
RWFybHlSZWdpc3RlciIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NSw2ICs2NSwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5z
IHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQogICAgICAg
ICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCiAgICAgICAgIFNvbWVS
ZWdpc3RlciwKKyAgICAgICAgCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciBidXQgdGhhdCB0
aGlzCisgICAgICAgIC8vIHJlZ2lzdGVyIGlzIHRoZW4gY29iYmVyZWQgd2l0aCBnYXJiYWdlLiBU
aGlzIG9ubHkgd29ya3MgZm9yIHBhdGNocG9pbnRzLgorICAgICAgICBTb21lUmVnaXN0ZXJXaXRo
Q2xvYmJlciwKIAogICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0
ZWxscyB1cyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIsIGJ1dCBpbXBsaWVzCiAg
ICAgICAgIC8vIHRoYXQgdGhlIGRlZiBoYXBwZW5zIGJlZm9yZSBhbnkgb2YgdGhlIGVmZmVjdHMg
b2YgdGhlIHN0YWNrbWFwLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yCkBAIC0xMDcsNyArMTExLDcg
QEAgcHVibGljOgogICAgIFZhbHVlUmVwKEtpbmQga2luZCkKICAgICAgICAgOiBtX2tpbmQoa2lu
ZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kID09IFdhcm1BbnkgfHwga2luZCA9PSBDb2xk
QW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRBbnkgfHwga2luZCA9PSBTb21lUmVnaXN0ZXIgfHwga2lu
ZCA9PSBTb21lRWFybHlSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChraW5kID09IFdhcm1Bbnkg
fHwga2luZCA9PSBDb2xkQW55IHx8IGtpbmQgPT0gTGF0ZUNvbGRBbnkgfHwga2luZCA9PSBTb21l
UmVnaXN0ZXIgfHwga2luZCA9PSBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciB8fCBraW5kID09IFNv
bWVFYXJseVJlZ2lzdGVyKTsKICAgICB9CiAKICAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyBy
ZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2Uu
Y3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTU1LDE1ICs5NTUsOSBAQCB2b2lkIEFjY2Vz
c0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6
ZSA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
OwogCiAgICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgICAg
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOworICAgICAgICAgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVl
R2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0
b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2sh
Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIGpp
dC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjMsIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0
Y2hHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIsIHNj
cmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNj
cmF0Y2hHUFIpOwogCiAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUNhcGFjaXR5
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLCBtX2lu
bGluZUNhcGFjaXR5KTsgfQogCiAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKQotICAgICAg
ICA6IG1fYWxsb2NhdG9yKDApCi0gICAgICAgICwgbV9pbmxpbmVDYXBhY2l0eSgwKQorICAgICAg
ICA6IG1faW5saW5lQ2FwYWNpdHkoMCkKICAgICB7CiAgICAgfQogCkBAIC02Myw3ICs2Miw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgbV9hbGxvY2F0b3Ig
PSBudWxscHRyOworICAgICAgICBtX2FsbG9jYXRvciA9IEFsbG9jYXRvcigpOwogICAgICAgICBt
X3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX2lubGluZUNhcGFjaXR5ID0gMDsKICAgICAg
ICAgQVNTRVJUKGlzTnVsbCgpKTsKQEAgLTc3LDcgKzc2LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50KFZNJiwgSlNPYmplY3Qq
IHByb3RvdHlwZSk7CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogbV9hbGxvY2F0b3I7IC8vIFByZWNv
bXB1dGVkIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCisgICAgQWxs
b2NhdG9yIG1fYWxsb2NhdG9yOyAvLyBQcmVjb21wdXRlZCB0byBtYWtlIHRoaW5ncyBlYXNpZXIg
Zm9yIGdlbmVyYXRlZCBjb2RlLgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0
dXJlOwogICAgIHVuc2lnbmVkIG1faW5saW5lQ2FwYWNpdHk7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZUlubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0
aW9uUHJvZmkKIAogICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjdXRhYmxl
LT5jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOwotICAg
ICAgICAgICAgbV9hbGxvY2F0b3IgPSBudWxscHRyOworICAgICAgICAgICAgbV9hbGxvY2F0b3Ig
PSBBbGxvY2F0b3IoKTsKICAgICAgICAgICAgIG1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0
cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2lubGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTksMTEgKzk5LDExIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmkKICAgICBBU1NFUlQoaW5saW5l
Q2FwYWNpdHkgPD0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSk7CiAKICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxp
bmVDYXBhY2l0eSk7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmNlbGxTcGFj
ZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpFbnN1cmVBbGxvY2F0b3IpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bS5jZWxsU3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6RW5zdXJlQWxsb2NhdG9yKTsKIAogICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlu
bGluZSBjYXBhY2l0eSBhdmFpbGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9j
YXRvcikgewotICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3ItPmNlbGxTaXplKCkgLSBh
bGxvY2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICAgICAg
c2l6ZV90IHNsb3AgPSAoYWxsb2NhdG9yLmNlbGxTaXplKHZtLmhlYXApIC0gYWxsb2NhdGlvblNp
emUpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CiAgICAgICAgIGlubGluZUNhcGFj
aXR5ICs9IHNsb3A7CiAgICAgICAgIGlmIChpbmxpbmVDYXBhY2l0eSA+IEpTRmluYWxPYmplY3Q6
Om1heElubGluZUNhcGFjaXR5KCkpCiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IEpTRmlu
YWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCk7CkBAIC0xMTMsNyArMTEzLDcgQEAgQUxXQVlT
X0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQogCiAgICAgaWYgKGlzUG9seVByb3Rv
KSB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKLSAgICAgICAg
bV9hbGxvY2F0b3IgPSBudWxscHRyOworICAgICAgICBtX2FsbG9jYXRvciA9IEFsbG9jYXRvcigp
OwogICAgICAgICBleGVjdXRhYmxlLT5zZXRDYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUodm0sIHN0
cnVjdHVyZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGV4ZWN1dGFibGUpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMyw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIoMCksIHN0b3JhZ2VHUFIpOwogCiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKSkgewotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRl
KHN0b3JhZ2VHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNl
cyk7CisgICAgICAgIGlmIChBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cykpIHsKKyAgICAgICAgICAgIG1faml0LmVt
aXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2ppdC5hZGRQdHIoCiAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG91dE9m
TGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
CkBAIC0xMjgsMTEgKzEyNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVS
YXdPYmplCiAgICAgfQogCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKLSAgICBpZiAoYWxsb2NhdG9yUHRyKSB7Ci0gICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBzY3JhdGNoR1BSKTsKKyAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkp
LT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgaWYgKGFsbG9jYXRvcikgewogICAgICAgICB1aW50
MzJfdCBtYXNrID0gV1RGOjpjb21wdXRlSW5kZXhpbmdNYXNrKHZlY3Rvckxlbmd0aCk7Ci0gICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIFRydXN0ZWRJbW0zMiht
YXNrKSwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIFRydXN0ZWRJbW0zMiht
YXNrKSwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgIG1faml0LmVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAg
LTQyMDgsOSArNDIwNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShO
b2QKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIEJsb2NrRGlyZWN0b3J5KiBibG9ja0Rp
cmVjdG9yeSA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGJsb2NrRGly
ZWN0b3J5KSwgYWxsb2NhdG9yR1BSKTsKLSAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BS
LCBibG9ja0RpcmVjdG9yeSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSks
IHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBz
dWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOworICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6
Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICAKICAgICBtX2ppdC5zdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpT
U3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtT3BHUFJzOyArK2kpCkBAIC04MzgzLDcgKzgzODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgCiAgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0
T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKLSAgICBCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9k
ZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewog
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
QEAgLTg0MDgsOSArODQwNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0
ZVByb3AKICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKICAgICAgICAgCi0gICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIx
LCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgIG1f
aml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxv
Y2F0b3IpLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICBtX2ppdC5h
ZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAKICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAw
OyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemUpOyBvZmZzZXQgKz0gc2l6ZW9m
KHZvaWQqKSkKQEAgLTg0MjgsNyArODQyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVSZWFsbG9jYXRlUHIKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVH
cm93dGhGYWN0b3I7CiAgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5u
ZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKICAgICAKLSAgICBC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IG1faml0
LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1
YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
aWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZl
SW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTg0NTYsOCArODQ1Miw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBzY3Jh
dGNoMy5ncHIoKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0g
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKLSAg
ICBtX2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hH
UFIxLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMywgc2xvd1BhdGgpOwogICAgIAogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQ
UjEpOwogICAgICAgICAKQEAgLTExNDE1LDE0ICsxMTQxMCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlVGhpcyhOCiAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihKU0Z1
bmN0aW9uVHlwZSkpKTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwog
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByYXJlRGF0YUdQUikpOwotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigp
KSwgYWxsb2NhdG9yR1BSKTsKKyAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwg
YWxsb2NhdG9yR1BSKTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJh
cmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0
cnVjdHVyZUdQUik7CiAKLSAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgYWxsb2NhdG9yR1BSKSk7CisgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYWxsb2NhdG9yR1BSLCBUcnVz
dGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CiAKICAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDAp
OwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgbnVsbHB0ciwgYWxsb2NhdG9y
R1BSLCBzdHJ1Y3R1cmVHUFIsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjp2YXJp
YWJsZSgpLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNrLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFH
UFIpOwogICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIGlubGluZUNh
cGFjaXR5R1BSKTsKQEAgLTExNDQ4LDE0ICsxMTQ0MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3T2JqZWN0KE5vCiAKICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxv
Y2F0b3JWYWx1ZSA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOwogCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRv
clB0ciksIGFsbG9jYXRvckdQUik7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRy
KG51bGxwdHIpOwotICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgYWxsb2NhdG9yR1BSLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1Bh
dGgpOwotICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2pp
dC52bSgpKTsKKyAgICBpZiAoIWFsbG9jYXRvclZhbHVlKQorICAgICAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIo
MCk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9y
Ojpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICAg
ICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCptX2ppdC52
bSgpKTsKKyAgICB9CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUpKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEyMCw3ICszMTIwLDcgQEAgcHVibGlj
OgogICAgIC8vIEFsbG9jYXRvciBmb3IgYSBjZWxsIG9mIGEgc3BlY2lmaWMgc2l6ZS4KICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gLy8gU3RydWN0dXJlVHlwZSBjYW4gYmUg
R1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbCgKLSAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRv
ckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIs
IGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1
Y3R1cmVUeXBlIHN0cnVjdHVyZSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2ppdC5lbWl0QWxs
b2NhdGVKU0NlbGwocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJl
LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkBAIC0zMTI5LDcgKzMxMjksNyBAQCBwdWJsaWM6CiAg
ICAgLy8gQWxsb2NhdG9yIGZvciBhbiBvYmplY3Qgb2YgYSBzcGVjaWZpYyBzaXplLgogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlw
ZW5hbWUgTWFza1R5cGU+IC8vIFN0cnVjdHVyZVR5cGUsIFN0b3JhZ2VUeXBlIGFuZCwgTWFza1R5
cGUgY2FuIGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdCgK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2Nh
dG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKICAgICAgICAgU3RvcmFnZVR5cGUgc3Rv
cmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGVKU09i
amVjdCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKICNk
ZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAgbWFjcm8o
QXJyYXlTdG9yYWdlX3ZlY3RvciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpIFwKLSAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2Fs
bG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZv
clNpemVTdGVwKCksIHNpemVvZihCbG9ja0RpcmVjdG9yeSopKSBcCisgICAgbWFjcm8oQ29tcGxl
dGVTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgQ29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0
T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpLCBzaXplb2YoQWxsb2NhdG9yKSkgXAogICAgIG1hY3Jv
KERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTTGV4aWNhbEVudmlyb25t
ZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCks
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXplb2YoV3JpdGVC
YXJyaWVyPEpTU3RyaW5nPikpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzMywx
MCArNTgzMywxMCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAK
LSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0
cmluZz4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyks
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4odm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0
ZUNlbGwoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCB2bSgpLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSwgc2xvd1BhdGgpOworICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCB2bSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSwgc2xv
d1BhdGgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuaW50UHRyWmVy
bywgcmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUtpZHM7ICsraSkKQEAgLTk4NjEsNyArOTg2MSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkp
IHsKICAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICAg
ICAgICAgIEJsb2NrRGlyZWN0b3J5KiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgICAgICAgICBBbGxv
Y2F0b3IgY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZtKCkpLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4aW5nSGVh
ZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhpbmdIZWFkZXJTaXplID0gMDsKQEAgLTk5MjAs
NyArOTkyMCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBMVmFsdWUgbWFzayA9IGNv
bXB1dGVCdXR0ZXJmbHlJbmRleGluZ01hc2sodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgICAg
ICBMVmFsdWUgZmFzdE9iamVjdFZhbHVlID0gYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGNlbGxBbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGZhc3RC
dXR0ZXJmbHlWYWx1ZSwgbWFzaywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKGNlbGxBbGxvY2F0b3Iub2Zmc2V0KCkpLCBzdHJ1Y3R1cmUsIGZhc3RCdXR0
ZXJmbHlWYWx1ZSwgbWFzaywgc2xvd1BhdGgpOwogCiAgICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdE9iamVjdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOwogICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFz
dEJ1dHRlcmZseVZhbHVlKTsKQEAgLTEwODkyLDggKzEwODkyLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xv
d1BhdGgpOwogCiAgICAgICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IHNpemVJblZhbHVlcyAqIHNp
emVvZihKU1ZhbHVlKTsKLSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtKCku
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
SW5CeXRlcywgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgICAgICBM
VmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRy
KGFsbG9jYXRvciksIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
KCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChz
aXplSW5CeXRlcywgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAg
ICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50
MzIoYWxsb2NhdG9yLm9mZnNldCgpKSwgc2xvd1BhdGgpOwogICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAogICAgICAgICAgICAgbV9vdXQuYWRkKG1f
b3V0LmNvbnN0SW50UHRyKHNpemVJbkJ5dGVzICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0
YXJ0T2ZTdG9yYWdlKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTEx
OTI1LDE2ICsxMTkyNSwyOCBAQCBwcml2YXRlOgogCiAgICAgTFZhbHVlIGFsbG9jYXRlSGVhcENl
bGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAgICAg
ICBCbG9ja0RpcmVjdG9yeSogYWN0dWFsQWxsb2NhdG9yID0gbnVsbHB0cjsKLSAgICAgICAgaWYg
KGFsbG9jYXRvci0+aGFzSW50UHRyKCkpCi0gICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBi
aXR3aXNlX2Nhc3Q8QmxvY2tEaXJlY3RvcnkqPihhbGxvY2F0b3ItPmFzSW50UHRyKCkpOworICAg
ICAgICBKSVRBbGxvY2F0b3IgYWN0dWFsQWxsb2NhdG9yOworICAgICAgICBpZiAoYWxsb2NhdG9y
LT5oYXNJbnQzMigpKQorICAgICAgICAgICAgYWN0dWFsQWxsb2NhdG9yID0gSklUQWxsb2NhdG9y
Ojpjb25zdGFudChBbGxvY2F0b3IoYWxsb2NhdG9yLT5hc0ludDMyKCkpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYWN0dWFsQWxsb2NhdG9yID0gSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgp
OwogICAgICAgICAKLSAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKKyAgICAgICAgaWYg
KGFjdHVhbEFsbG9jYXRvci5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlmICghYWN0dWFs
QWxsb2NhdG9yLmFsbG9jYXRvcigpKSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaGF2
ZUFsbG9jYXRvciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoaGF2ZUFsbG9jYXRvcik7
CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaGF2ZUFsbG9jYXRvciwgbGFzdE5leHQpOworICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5pbnRQdHJaZXJvOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGVpdGhlciB3ZSBrbm93IHRoYXQgdGhl
IGFsbG9jYXRvciBpcyBudWxsIG9yIHdlIGRvbid0IGtub3cgd2hhdCB0aGUKICAgICAgICAgICAg
IC8vIGFsbG9jYXRvciBpcy4gSW4gZWl0aGVyIGNhc2UsIHdlIG5lZWQgdGhlIG51bGwgY2hlY2su
CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBoYXZlQWxsb2NhdG9yID0gbV9vdXQubmV3QmxvY2so
KTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKGhhdmVBbGxvY2F0b3IpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGFsbG9j
YXRvciwgdXN1YWxseShoYXZlQWxsb2NhdG9yKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisgICAgICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoYWxsb2Nh
dG9yLCBtX291dC5jb25zdEludDMyKEFsbG9jYXRvcigpLm9mZnNldCgpKSksCisgICAgICAgICAg
ICAgICAgdXN1YWxseShoYXZlQWxsb2NhdG9yKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhoYXZlQWxsb2NhdG9yLCBsYXN0TmV4dCk7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0xMTk0NCw3ICsxMTk1NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChwb2lu
dGVyVHlwZSgpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy50ZXJtaW5hbCA9IHRydWU7
Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihhbGxvY2F0b3IpOworICAg
ICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHBhdGNo
cG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihhbGxvY2F0b3IpOwog
ICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgcGF0
Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjsK
ICAgICAgICAgCkBAIC0xMTk1NSw2ICsxMTk3MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGp1bXBUb1Ns
b3dQYXRoOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEdQUlJlZyBhbGxvY2F0
b3JHUFI7CisgICAgICAgICAgICAgICAgaWYgKGFjdHVhbEFsbG9jYXRvci5pc0NvbnN0YW50KCkp
CisgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JHUFIg
PSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8g
V2UgdXNlIGEgcGF0Y2hwb2ludCB0byBlbWl0IHRoZSBhbGxvY2F0aW9uIHBhdGggYmVjYXVzZSB3
aGVuZXZlciB3ZSBtZXNzIHdpdGgKICAgICAgICAgICAgICAgICAvLyBhbGxvY2F0aW9uIHBhdGhz
LCB3ZSBhbHJlYWR5IHJlYXNvbiBhYm91dCB0aGVtIGF0IHRoZSBtYWNoaW5lIGNvZGUgbGV2ZWwu
IFdlIGtub3cKICAgICAgICAgICAgICAgICAvLyBleGFjdGx5IHdoYXQgaW5zdHJ1Y3Rpb24gc2Vx
dWVuY2Ugd2Ugd2FudC4gV2UncmUgY29uZmlkZW50IHRoYXQgbm8gY29tcGlsZXIKQEAgLTExOTYy
LDcgKzExOTgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBBc3NlbWJseUhlbHBl
cnM6OmVtaXRBbGxvY2F0ZSgpLiBUaGF0IHdheSwgdGhlIHNhbWUgb3B0aW1pemVkIHBhdGggaXMg
c2hhcmVkIGJ5CiAgICAgICAgICAgICAgICAgLy8gYWxsIG9mIHRoZSBjb21waWxlciB0aWVycy4K
ICAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1swXS5ncHIoKSwgYWN0dWFsQWxsb2NhdG9yLCBwYXJh
bXNbMV0uZ3ByKCksIHBhcmFtcy5ncFNjcmF0Y2goMCksCisgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1swXS5ncHIoKSwgYWN0dWFsQWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHBhcmFtcy5ncFNj
cmF0Y2goMCksCiAgICAgICAgICAgICAgICAgICAgIGp1bXBUb1Nsb3dQYXRoKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcFRvU3VjY2Vz
czsKQEAgLTEyMDU0LDggKzEyMDc1LDggQEAgcHJpdmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVP
YmplY3QoCiAgICAgICAgIHNpemVfdCBzaXplLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgTFZh
bHVlIGJ1dHRlcmZseSwgTFZhbHVlIGluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CiAgICAgewotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVj
dChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5k
ZXhpbmdNYXNrLCBzbG93UGF0aCk7CisgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAgcmV0dXJuIGFsbG9j
YXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50MzIoYWxsb2NhdG9yLm9mZnNldCgpKSwgc3RydWN0dXJl
LCBidXR0ZXJmbHksIGluZGV4aW5nTWFzaywgc2xvd1BhdGgpOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+CkBAIC0x
MjA3NCwxNiArMTIwOTUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvbXBsZXRlU3Vic3Bh
Y2UqIGFjdHVhbFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PENvbXBsZXRlU3Vic3BhY2UqPihzdWJz
cGFjZS0+YXNJbnRQdHIoKSk7CiAgICAgICAgICAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IHNpemUt
PmFzSW50UHRyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBh
Y3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChh
Y3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAg
ICAgICBBbGxvY2F0b3IgYWN0dWFsQWxsb2NhdG9yID0gYWN0dWFsU3Vic3BhY2UtPmFsbG9jYXRv
ckZvck5vblZpcnR1YWwoYWN0dWFsU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwogICAgICAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVm
b3JlKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChzbG93UGF0aCk7
CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmludDMyWmVybzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKGFjdHVhbEFsbG9jYXRvcik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMihhY3R1YWxBbGxvY2F0b3Iub2Zmc2V0
KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBn
ZXRMU0JTZXQoTWFya2VkU3BhY2U6OnNpemVTdGVwKTsKQEAgLTEyMTAyLDcgKzEyMTIzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoCisgICAg
ICAgIHJldHVybiBtX291dC5sb2FkMzIoCiAgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgoCiAg
ICAgICAgICAgICAgICAgbV9oZWFwcy5Db21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVT
dGVwLAogICAgICAgICAgICAgICAgIHN1YnNwYWNlLCBtX291dC5zdWIoc2l6ZUNsYXNzSW5kZXgs
IG1fb3V0LmludFB0ck9uZSkpKTsKQEAgLTEyMTE3LDggKzEyMTM4LDcgQEAgcHJpdmF0ZToKICAg
ICBMVmFsdWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KAogICAgICAgICBMVmFsdWUgc2l6
ZSwgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExWYWx1
ZSBidXR0ZXJmbHlJbmRleGluZ01hc2ssIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAg
ICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCi0gICAgICAgICAgICAq
c3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgICAgICBM
VmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3BhY2VGb3I8Q2xhc3NUeXBl
Pih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3Qo
YWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgYnV0dGVyZmx5SW5kZXhpbmdNYXNrLCBz
bG93UGF0aCk7CiAgICAgfQogCkBAIC0xMjEyNiwxNSArMTIxNDYsMTQgQEAgcHJpdmF0ZToKICAg
ICBMVmFsdWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbCgKICAgICAgICAgTFZhbHVlIHNpemUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAg
ICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAotICAgICAgICAgICAgKnN1
YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSksIHNpemUsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZh
bHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoKnN1YnNwYWNlRm9yPENsYXNzVHlwZT4o
dm0oKSksIHNpemUsIHNsb3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlQ2VsbChhbGxv
Y2F0b3IsIHN0cnVjdHVyZSwgc2xvd1BhdGgpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgYWxs
b2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRv
ckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKKyAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpT
RmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgIAogICAgICAg
ICAvLyBGSVhNRTogSWYgdGhlIGFsbG9jYXRvciBpcyBudWxsLCB3ZSBjb3VsZCBzaW1wbHkgZW1p
dCBhIG5vcm1hbCBDIGNhbGwgdG8gdGhlIGFsbG9jYXRvcgogICAgICAgICAvLyBpbnN0ZWFkIG9m
IHB1dHRpbmcgaXQgb24gdGhlIHNsb3cgcGF0aC4KQEAgLTEyMTQ2LDcgKzEyMTY1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9j
a3NCZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgbV9v
dXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihh
bGxvY2F0b3Iub2Zmc2V0KCkpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIG1fb3V0Lmlu
dDMyWmVybywgc2xvd1BhdGgpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxv
Y2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9j
YXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBbGxvY2F0b3IuaCIKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJUaHJl
YWRMb2NhbENhY2hlTGF5b3V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1bnNpZ25lZCBBbGxv
Y2F0b3I6OmNlbGxTaXplKEhlYXAmIGhlYXApIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYXAudGhy
ZWFkTG9jYWxDYWNoZUxheW91dCgpLmRpcmVjdG9yeShtX29mZnNldCktPmNlbGxTaXplKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGxvY2F0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBH
Q0RlZmVycmFsQ29udGV4dDsKK2NsYXNzIEhlYXA7CitjbGFzcyBWTTsKKworY2xhc3MgQWxsb2Nh
dG9yIHsKK3B1YmxpYzoKKyAgICBBbGxvY2F0b3IoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBB
bGxvY2F0b3IodW5zaWduZWQgb2Zmc2V0KQorICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRl
eHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMgdmVy
c2lvbiBjYWxscyBGYWlsdXJlRnVuYyBpZiB3ZSBoYXZlIGEgbnVsbCBhbGxvY2F0b3Igb3IgaWYg
dGhlIFRMQyBoYXNuJ3QgYmVlbiByZXNpemVkCisgICAgLy8gdG8gaW5jbHVkZSB0aGlzIGFsbG9j
YXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGYWlsdXJlRnVuYz4KKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZShWTSYsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlLCBj
b25zdCBGYWlsdXJlRnVuYyYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGNlbGxTaXplKEhl
YXAmKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBbGxvY2F0b3ImIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5vZmZzZXQoKTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBBbGxvY2F0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAqdGhpcyAhPSBBbGxvY2F0b3IoKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX29mZnNldCB7IFVJTlRfTUFYIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvcklubGluZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2lubGluZSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiB2bSwgR0NEZWZlcnJhbENv
bnRleHQqIGNvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlKSBjb25zdAoreworICAg
IHJldHVybiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3Iodm0sIG1fb2Zmc2V0KS5hbGxvY2F0
ZShjb250ZXh0LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRmFpbHVyZUZ1bmM+Cit2
b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQqIGNv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlLCBjb25zdCBGYWlsdXJlRnVuYyYgZmFp
bHVyZUZ1bmMpIGNvbnN0Cit7CisgICAgdm9pZCogcmVzdWx0OworICAgIFRocmVhZExvY2FsQ2Fj
aGU6OnRyeUdldEFsbG9jYXRvcigKKyAgICAgICAgdm0sIG1fb2Zmc2V0LAorICAgICAgICBbJl0g
KExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9j
YXRvci5hbGxvY2F0ZShjb250ZXh0LCBtb2RlKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdICgp
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhaWx1cmVGdW5jKCk7CisgICAgICAgIH0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAyMjY4
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJCbG9ja0RpcmVjdG9yeS5oIgogCi0jaW5jbHVkZSAiQWxsb2NhdGluZ1Njb3BlLmgiCiAj
aW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMzksMTUgKzM4LDExIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1zdGF0aWMgY29uc3RleHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tz
ID0gdHJ1ZTsKLQogQmxvY2tEaXJlY3Rvcnk6OkJsb2NrRGlyZWN0b3J5KEhlYXAqIGhlYXAsIHNp
emVfdCBjZWxsU2l6ZSkKLSAgICA6IG1fZnJlZUxpc3QoY2VsbFNpemUpCi0gICAgLCBtX2N1cnJl
bnRCbG9jaygwKQotICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKLSAgICAsIG1fY2VsbFNpemUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKKyAgICA6IG1fY2VsbFNpemUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKICAgICAsIG1faGVhcChoZWFwKQogeworICAgIGhl
YXAtPnRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKS5hbGxvY2F0ZU9mZnNldCh0aGlzKTsKIH0KIAog
dm9pZCBCbG9ja0RpcmVjdG9yeTo6c2V0U3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQpAQCAt
ODEsMTQzICs3NiwxNCBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6Zmlu
CiAgICAgcmV0dXJuIG1fYmxvY2tzW21fZW1wdHlDdXJzb3JdOwogfQogCi12b2lkIEJsb2NrRGly
ZWN0b3J5OjpkaWRDb25zdW1lRnJlZUxpc3QoKQotewotICAgIGlmIChtX2N1cnJlbnRCbG9jaykK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIAotICAg
IG1fZnJlZUxpc3QuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci19Ci0K
LXZvaWQqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCkKK01h
cmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9u
KCkKIHsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0g
ICAgCi0gICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7Ci0gICAgQVNTRVJUKG1fZnJlZUxpc3Qu
YWxsb2NhdGlvbldpbGxGYWlsKCkpOwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgbV9h
bGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZp
bmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKLSAgICAgICAgaWYgKG1fYWxsb2NhdGlv
bkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Ci0gICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nhcnks
IG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOwotCi0gICAgICAgIGlmICh2b2lkKiByZXN1bHQg
PSB0cnlBbGxvY2F0ZUluKG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNvcl0pKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnN0ZWFsRW1w
dHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKLSAgICAgICAgJiYgKHRyYWRlRGVzdHJ1Y3Rv
ckJsb2NrcyB8fCAhbmVlZHNEZXN0cnVjdGlvbigpKSkgewotICAgICAgICBpZiAoTWFya2VkQmxv
Y2s6OkhhbmRsZSogYmxvY2sgPSBtX3N1YnNwYWNlLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkg
ewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKSA9PSBtX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90
RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKLSAgICAgICAgICAgIC8vIGJlY2F1c2Ug
dGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFs
bG9jYXRlQnV0Tm90RW1wdHkKLSAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNh
bWUgdGltZS4KLSAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7Ci0gICAg
ICAgICAgICBhZGRCbG9jayhibG9jayk7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbihi
bG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LXZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJs
b2NrKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4oYmxvY2spOwotICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogQmxv
Y2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi17
Ci0gICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
Ci0gICAgCi0gICAgYmxvY2stPnN3ZWVwKCZtX2ZyZWVMaXN0KTsKLSAgICAKLSAgICAvLyBJdCdz
IHBvc3NpYmxlIHRvIHN0dW1ibGUgb24gYSBjb21wbGV0ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcg
dHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBidXQKLSAgICAvLyB0aGF0IGFsZ29yaXRobSBpcyByYWN5
IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0IHNvbWV0aW1lcy4KLSAgICBpZiAobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSkgewotICAgICAgICBBU1NFUlQoYmxvY2stPmlzRnJlZUxpc3Rl
ZCgpKTsKLSAgICAgICAgYmxvY2stPnVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpOwotICAg
ICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghaXNF
bXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7Ci0gICAgICAgIEFTU0VSVCghaXNDYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICBtX2Fs
bG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmlu
ZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOworICAgIGlmIChtX2FsbG9jYXRpb25DdXJz
b3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0g
ICAgCi0gICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQg
PSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogewotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB9KTsKLSAgICBzZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5
LCBtX2N1cnJlbnRCbG9jaywgdHJ1ZSk7Ci0gICAgbWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUlu
QmxvY2sobV9jdXJyZW50QmxvY2spOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBCbG9ja0RpcmVjdG9yeTo6ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQotewotICAgIGlmICghT3B0aW9uczo6c2xv
d1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpYyB1
bnNpZ25lZCBhbGxvY2F0aW9uQ291bnQgPSAwOwotICAgIGlmICghYWxsb2NhdGlvbkNvdW50KSB7
Ci0gICAgICAgIGlmICghbV9oZWFwLT5pc0RlZmVycmVkKCkpIHsKLSAgICAgICAgICAgIGlmIChk
ZWZlcnJhbENvbnRleHQpCi0gICAgICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LT5tX3Nob3Vs
ZEdDID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2hlYXAtPmNv
bGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAoKythbGxvY2F0aW9uQ291bnQgPj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3
ZWVuR0NzKCkpCi0gICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7Ci19Ci0KLXZvaWQqIEJsb2Nr
RGlyZWN0b3J5OjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKLXsKLSAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgQVNTRVJUKG1faGVhcC0+
dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgZG9UZXN0Q29sbGVj
dGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOwotCi0gICAgQVNTRVJUKCFtYXJrZWRTcGFj
ZSgpLmlzSXRlcmF0aW5nKCkpOwotICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5v
cmlnaW5hbFNpemUoKSk7Ci0gICAgCi0gICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0gICAgCi0g
ICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFwKCptX2hlYXApOwotCi0gICAgbV9oZWFwLT5j
b2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCi0gICAgLy8g
R29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMg
ZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5Ci0gICAgLy8gaGFwcGVucyB3
aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRo
ZSBHQydzIGZpbmFsaXphdGlvbi4KLSAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQot
ICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0g
ICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwot
ICAgIAotICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9j
aygpOwotICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICByZXN1bHQgPSBhbGxvY2F0ZUluKGJsb2Nr
KTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHNldElzQ2Fu
QWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIG1fYWxsb2NhdGlvbkN1cnNv
ciwgZmFsc2UpOworICAgIHJldHVybiBtX2Jsb2Nrc1ttX2FsbG9jYXRpb25DdXJzb3JdOwogfQog
CiBzdGF0aWMgc2l6ZV90IGJsb2NrSGVhZGVyU2l6ZSgpCkBAIC0zMTMsMjQgKzE3OSwxOSBAQCB2
b2lkIEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZygpCiB7CiAgICAgaWYgKGZhbHNlKQog
ICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IEJsb2NrRGlyZWN0b3J5OjpzdG9w
QWxsb2NhdGluZyFcbiIpOwotICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwotICAgIGlm
ICghbV9jdXJyZW50QmxvY2spIHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlv
bldpbGxGYWlsKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fY3VycmVu
dEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKLSAgICBtX2xhc3RBY3RpdmVCbG9j
ayA9IG1fY3VycmVudEJsb2NrOwotICAgIG1fY3VycmVudEJsb2NrID0gMDsKLSAgICBtX2ZyZWVM
aXN0LmNsZWFyKCk7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZd
IChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnN0
b3BBbGxvY2F0aW5nKCk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpw
cmVwYXJlRm9yQWxsb2NhdGlvbigpCiB7Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRy
OwotICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7
Ci0KKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2FsQWxs
b2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+cHJlcGFyZUZvckFs
bG9jYXRpb24oKTsKKyAgICAgICAgfSk7CisgICAgCiAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0g
MDsKICAgICBtX2VtcHR5Q3Vyc29yID0gMDsKICAgICBtX3Vuc3dlcHRDdXJzb3IgPSAwOwpAQCAt
MzQ0LDYgKzIwNSwyMSBAQCB2b2lkIEJsb2NrRGlyZWN0b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlv
CiAgICAgfQogfQogCit2b2lkIEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZ0Zvckdvb2Qo
KQoreworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAi
OiBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmdGb3JHb29kIVxuIik7CisgICAgCisgICAg
bV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciog
YWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnN0b3BBbGxvY2F0aW5nRm9yR29v
ZCgpOworICAgICAgICB9KTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NhbEFs
bG9jYXRvcnNMb2NrKTsKKyAgICB3aGlsZSAoIW1fbG9jYWxBbGxvY2F0b3JzLmlzRW1wdHkoKSkK
KyAgICAgICAgbV9sb2NhbEFsbG9jYXRvcnMuYmVnaW4oKS0+cmVtb3ZlKCk7Cit9CisKIHZvaWQg
QmxvY2tEaXJlY3Rvcnk6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKIHsKICAgICBmb3JFYWNoQmxv
Y2soCkBAIC0zNTQsMTIgKzIzMCwxMCBAQCB2b2lkIEJsb2NrRGlyZWN0b3J5OjpsYXN0Q2hhbmNl
VG9GaW5hbGl6CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmcoKQogewot
ICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFz
dEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1fY3VycmVu
dEJsb2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxs
cHRyOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAoTG9jYWxB
bGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5yZXN1bWVBbGxv
Y2F0aW5nKCk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpiZWdpbk1h
cmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpCkBAIC0zNzksNyArMjUzLDcgQEAgdm9pZCBCbG9ja0Rp
cmVjdG9yeTo6ZW5kTWFya2luZygpCiAgICAgLy8ga25vdyB3aGF0IGtpbmQgb2YgY29sbGVjdGlv
biBpdCBpcy4gVGhhdCBrbm93bGVkZ2UgaXMgYWxyZWFkeSBlbmNvZGVkIGluIHRoZSBtX21hcmtp
bmdYWVoKICAgICAvLyB2ZWN0b3JzLgogICAgIAotICAgIGlmICghdHJhZGVEZXN0cnVjdG9yQmxv
Y2tzICYmIG5lZWRzRGVzdHJ1Y3Rpb24oKSkgeworICAgIGlmICghT3B0aW9uczo6dHJhZGVEZXN0
cnVjdG9yQmxvY2tzKCkgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CiAgICAgICAgIEFTU0VSVCht
X2VtcHR5LmlzRW1wdHkoKSk7CiAgICAgICAgIG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSA9IG1f
bGl2ZSAmIH5tX21hcmtpbmdSZXRpcmVkOwogICAgIH0gZWxzZSB7CkBAIC01MTIsNSArMzg2LDE1
IEBAIE1hcmtlZFNwYWNlJiBCbG9ja0RpcmVjdG9yeTo6bWFya2VkU3BhY2UKICAgICByZXR1cm4g
bV9zdWJzcGFjZS0+c3BhY2UoKTsKIH0KIAorYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlz
dGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
KyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2FsQWxsb2Nh
dG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBhbGxvY2F0b3ItPmlzRnJl
ZUxpc3RlZENlbGwodGFyZ2V0KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Jsb2NrRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQmxvY2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYs
MTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgi
CisjaW5jbHVkZSAiQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ2VsbEF0dHJpYnV0ZXMuaCIKICNp
bmNsdWRlICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0
Zi9GYXN0Qml0VmVjdG9yLmg+CkBAIC00MSw2ICs0Myw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBJ
c29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogCiAjZGVmaW5lIEZPUl9FQUNIX0JM
T0NLX0RJUkVDVE9SWV9CSVQobWFjcm8pIFwKICAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUg
c2V0IG9mIGJsb2NrIGluZGljZXMgdGhhdCBoYXZlIGFjdHVhbCBibG9ja3MuICovXApAQCAtNzYs
MTQgKzc5LDEyIEBAIGNsYXNzIEJsb2NrRGlyZWN0b3J5IHsKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkZyZWVMaXN0KCk7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7
Ci0KICAgICBCbG9ja0RpcmVjdG9yeShIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKICAgICB2b2lk
IHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgp
OwogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICB2b2lkIHN0b3BBbGxvY2F0
aW5nKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKICAgICB2b2lkIHJlc3Vt
ZUFsbG9jYXRpbmcoKTsKICAgICB2b2lkIGJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCk7
CiAgICAgdm9pZCBlbmRNYXJraW5nKCk7CkBAIC05NywxMCArOTgsOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3Ry
dWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247IH0KICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KICAgICBI
ZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxs
S2luZDsgfQotICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CiAKLSAg
ICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKKyAgICBi
b29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNv
bnN0IEZ1bmN0b3ImKTsKQEAgLTE1NywyNCArMTU3LDIwIEBAIHB1YmxpYzoKICAgICBTdWJzcGFj
ZSogc3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1YnNwYWNlOyB9CiAgICAgTWFya2VkU3Bh
Y2UmIG1hcmtlZFNwYWNlKCkgY29uc3Q7CiAgICAgCi0gICAgY29uc3QgRnJlZUxpc3QmIGZyZWVM
aXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmVlTGlzdDsgfQorICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IoKSBjb25zdCB7IHJldHVybiBBbGxvY2F0b3IobV90bGNPZmZzZXQpOyB9CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0
cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgTG9jYWxBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJp
ZW5kIGNsYXNzIE1hcmtlZEJsb2NrOworICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hl
TGF5b3V0OwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nh
c2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
OwotICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZygpOwotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9jYXRl
QmxvY2soKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
LSAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCop
OworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKICAg
ICAKLSAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRy
eUFsbG9jYXRlQmxvY2soKTsKICAgICAKICAgICBWZWN0b3I8TWFya2VkQmxvY2s6OkhhbmRsZSo+
IG1fYmxvY2tzOwogICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mcmVlQmxvY2tJbmRpY2VzOwpAQCAt
MTkzLDEwICsxODksNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9
OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgZW1w
dHkgYWxsb2NhdGlvbiAoYWxsb2NhdGluZyBpbiBlbXB0eSBibG9ja3MpLgogICAgIHNpemVfdCBt
X3Vuc3dlcHRDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlz
IGEgY2FuZGlkYXRlIGZvciBpbmNyZW1lbnRhbCBzd2VlcGluZy4KICAgICAKLSAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBtX2N1cnJlbnRCbG9jazsKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBt
X2xhc3RBY3RpdmVCbG9jazsKLQotICAgIExvY2sgbV9sb2NrOwogICAgIHVuc2lnbmVkIG1fY2Vs
bFNpemU7CiAgICAgQ2VsbEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIC8vIEZJWE1FOiBB
bGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5jZXMuCkBAIC0yMDYsMTYgKzE5
OCwxMCBAQCBwcml2YXRlOgogICAgIEJsb2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnkgeyBu
dWxscHRyIH07CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9yeUluU3Vic3BhY2Ug
eyBudWxscHRyIH07CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9yeUluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBMb2NrIG1fbG9jYWxBbGxv
Y2F0b3JzTG9jazsKKyAgICBzaXplX3QgbV90bGNPZmZzZXQ7CisgICAgU2VudGluZWxMaW5rZWRM
aXN0PExvY2FsQWxsb2NhdG9yLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4+
IG1fbG9jYWxBbGxvY2F0b3JzOwogfTsKIAotaW5saW5lIHB0cmRpZmZfdCBCbG9ja0RpcmVjdG9y
eTo6b2Zmc2V0T2ZGcmVlTGlzdCgpCi17Ci0gICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihCbG9j
a0RpcmVjdG9yeSwgbV9mcmVlTGlzdCk7Ci19Ci0KLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUoKQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
QmxvY2tEaXJlY3RvcnksIG1fY2VsbFNpemUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5s
aW5lcy5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9C
bG9ja0RpcmVjdG9yeUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIEJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVM
aXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmVl
TGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKLX0KLQotQUxX
QVlTX0lOTElORSB2b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQot
ewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkgLT4gSGVh
cENlbGwqIHsKLSAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2Fz
ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7Ci0gICAgICAgIH0pOwotfQotCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmZvckVh
Y2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIG1fbGl2ZS5mb3JFYWNoU2V0
Qml0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJz
cGFjZS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbXBsZXRlU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDExICsyNiwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAKKyNpbmNsdWRlICJBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9ySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9j
a0lubGluZXMuaCIKICNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVk
ZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM4LDQwICs0MiwzOCBAQCBDb21wbGV0ZVN1YnNw
YWNlOjpDb21wbGV0ZVN1YnNwYWNlKENTdHJpCiAgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQog
ewogICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzOyBpLS07KQot
ICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2ldID0gbnVsbHB0cjsKIH0KIAogQ29tcGxl
dGVTdWJzcGFjZTo6fkNvbXBsZXRlU3Vic3BhY2UoKQogewogfQogCi1CbG9ja0RpcmVjdG9yeSog
Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JN
b2RlIG1vZGUpCitBbGxvY2F0b3IgQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVf
dCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJuIGFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRlKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0ZShWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgcmV0
dXJuIGFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2Rl
KTsKKyAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBkZWZlcnJhbENvbnRl
eHQsIGZhaWx1cmVNb2RlKTsKIH0KIAotdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBDb21wbGV0ZVN1YnNw
YWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQogewotICAgIHZvaWQgKnJlc3VsdDsKLSAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxs
b2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwotICAgIHJldHVy
biByZXN1bHQ7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIHJldHVy
biBhbGxvY2F0b3IudHJ5QWxsb2NhdGUoCisgICAgICAgIHZtLCBkZWZlcnJhbENvbnRleHQsIGZh
aWx1cmVNb2RlLAorICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
U2xvdyh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgICAgIH0p
OwogfQogCi1CbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2xv
dyhzaXplX3Qgc2l6ZSkKK0FsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JT
bG93KHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXpl
Q2xhc3NUb0luZGV4KHNpemUpOwogICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6
c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF07CiAgICAgaWYgKCFzaXplQ2xhc3MpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQWxsb2NhdG9yKCk7CiAgICAgCiAg
ICAgLy8gVGhpcyBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUg
SklUIHRocmVhZHMgdG8gZW5kIHVwIGhlcmUgaWYgdGhleSB3YW50CiAgICAgLy8gdG8gZ2VuZXJh
dGUgY29kZSB0aGF0IHVzZXMgc29tZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHll
dC4gTm90ZSB0aGF0IGEgcG9zc2libHktCkBAIC04Miw3ICs4NCw3IEBAIEJsb2NrRGlyZWN0b3J5
KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAgICAvLyB0aGF0IGFueSAiZm9yRWFjaEFsbG9j
YXRvciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVyIGl0J3Mg
aW5pdGlhbGl6ZWQKICAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fc3BhY2UuZGlyZWN0b3J5TG9jaygpKTsKLSAgICBpZiAoQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQorICAgIGlm
IChBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0pCiAg
ICAgICAgIHJldHVybiBhbGxvY2F0b3I7CiAKICAgICBpZiAoZmFsc2UpCkBAIC05OCw3ICsxMDAs
NyBAQCBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgICAgIGlm
IChNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNz
KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtp
bmRleF0gPSBkaXJlY3Rvcnk7CisgICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhd
ID0gZGlyZWN0b3J5LT5hbGxvY2F0b3IoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaW5kZXgt
LSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA3LDIzICsxMDksMjMgQEAgQmxvY2tEaXJlY3Rv
cnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci0+cmVnaXN0ZXJEaXJlY3RvcnkoZGlyZWN0b3J5KTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwogICAgIG1fZmlyc3REaXJlY3RvcnkgPSBkaXJlY3Rvcnk7Ci0gICAgcmV0dXJuIGRpcmVj
dG9yeTsKKyAgICByZXR1cm4gZGlyZWN0b3J5LT5hbGxvY2F0b3IoKTsKIH0KIAotdm9pZCogQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coVk0mIHZtLCBzaXplX3Qgc2l6ZSwg
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKQogewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhzaXpl
LCBkZWZlcnJhbENvbnRleHQpOworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyh2
bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0KTsKICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxs
b2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
KQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KFZNJiB2bSwgc2l6ZV90
IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7Ci0gICAgc2FuaXRp
emVTdGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgpKTsKKyAgICBzYW5pdGl6ZVN0YWNrRm9y
Vk0oJnZtKTsKICAgICAKLSAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IGFsbG9j
YXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpKQotICAgICAg
ICByZXR1cm4gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKSkKKyAg
ICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSh2bSwgZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIAogICAgIGlmIChzaXplIDw9IE9w
dGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCiAgICAgICAgICYmIHNpemUgPD0gTWFya2Vk
U3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CkBAIC0xMzIsMTUgKzEzNCwxNSBAQCB2b2lkKiBDb21wbGV0
ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgdm0uaGVhcC5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CiAgICAgCiAgICAgc2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOwotICAgIExhcmdl
QWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX3Nw
YWNlLm1faGVhcCwgc2l6ZSwgdGhpcyk7CisgICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
ID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUodm0uaGVhcCwgc2l6ZSwgdGhpcyk7CiAgICAg
aWYgKCFhbGxvY2F0aW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBtX3Nw
YWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7Ci0gICAgbV9zcGFjZS5t
X2hlYXAtPmRpZEFsbG9jYXRlKHNpemUpOworICAgIHZtLmhlYXAuZGlkQWxsb2NhdGUoc2l6ZSk7
CiAgICAgbV9zcGFjZS5tX2NhcGFjaXR5ICs9IHNpemU7CiAgICAgCiAgICAgbV9sYXJnZUFsbG9j
YXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksMzEgKzM5LDMxIEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHN1
YnNwYWNlcyBzcGVhayBvZiBCbG9ja0RpcmVjdG9yaWVzIGFzICJhbGxvY2F0b3JzIiwgYnV0IHRo
YXQncyB0ZW1wb3JhcnkuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MTU1OQotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBB
bGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOworICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKKyAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwog
ICAgIAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQq
IGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDb21wbGV0ZVN1YnNwYWNlLCBtX2FsbG9jYXRvckZvclNpemVTdGVwKTsgfQogICAgIAot
ICAgIEJsb2NrRGlyZWN0b3J5KiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9h
bGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQorICAgIEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2l6
ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQogCiBwcml2YXRl
OgotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKICAgICAKICAgICAvLyBUaGVzZSBzbG93
IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgYWxsb2NhdG9y
IGNyZWF0aW9uLgotICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZVNsb3co
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOworICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhWTSYs
IHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAg
IHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqKTsK
ICAgICAKLSAgICBzdGQ6OmFycmF5PEJsb2NrRGlyZWN0b3J5KiwgTWFya2VkU3BhY2U6Om51bVNp
emVDbGFzc2VzPiBtX2FsbG9jYXRvckZvclNpemVTdGVwOworICAgIHN0ZDo6YXJyYXk8QWxsb2Nh
dG9yLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7
CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCbG9ja0RpcmVjdG9yeT4+IG1fZGlyZWN0b3Jp
ZXM7CiB9OwogCi1BTFdBWVNfSU5MSU5FIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1v
ZGUpCitBTFdBWVNfSU5MSU5FIEFsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAg
aWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7Ci0gICAgICAgIEJsb2NrRGly
ZWN0b3J5KiByZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXpl
Q2xhc3NUb0luZGV4KHNpemUpXTsKKyAgICAgICAgQWxsb2NhdG9yIHJlc3VsdCA9IG1fYWxsb2Nh
dG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOwogICAg
ICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgY2FzZSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0
QWxyZWFkeUhhdmVBbGxvY2F0b3I6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQp
OwpAQCAtNzgsNyArNzgsNyBAQCBBTFdBWVNfSU5MSU5FIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0
ZVN1CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUKG1v
ZGUgIT0gQWxsb2NhdG9yRm9yTW9kZTo6TXVzdEFscmVhZHlIYXZlQWxsb2NhdG9yKTsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQWxsb2NhdG9yKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lv
biAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw2IEBAIHN0cnVjdCBGcmVlQ2VsbCB7CiB9OwogCiBjbGFz
cyBGcmVlTGlzdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJlZUxpc3QpOwotICAgIAog
cHVibGljOgogICAgIEZyZWVMaXN0KHVuc2lnbmVkIGNlbGxTaXplKTsKICAgICB+RnJlZUxpc3Qo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENvbnRl
eHQuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NE
ZWZlcnJhbENvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMCArMjksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEhlYXA7CiBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKK2NsYXNzIExvY2Fs
QWxsb2NhdG9yOwogCiBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dCB7CiAgICAgZnJpZW5kIGNsYXNz
IEhlYXA7CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworICAgIGZyaWVuZCBjbGFz
cyBMb2NhbEFsbG9jYXRvcjsKIHB1YmxpYzoKICAgICBpbmxpbmUgR0NEZWZlcnJhbENvbnRleHQo
SGVhcCYpOwogICAgIGlubGluZSB+R0NEZWZlcnJhbENvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQAog
I2luY2x1ZGUgIlN0b3BJZk5lY2Vzc2FyeVRpbWVyLmgiCiAjaW5jbHVkZSAiU3dlZXBpbmdTY29w
ZS5oIgogI2luY2x1ZGUgIlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9jay5oIgpAQCAtMzEyLDYgKzMxMyw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAsIG1faGVscGVyQ2xpZW50KCZoZWFwSGVscGVyUG9vbCgpKQog
ICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCiAgICAgLCBtX3RocmVhZENv
bmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQorICAgICwgbV90aHJl
YWRMb2NhbENhY2hlTGF5b3V0KHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkTG9jYWxDYWNoZUxheW91
dD4oKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3RvcmUoMCk7CiAKQEAgLTQ0Niw3ICs0NDgsNyBA
QCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKICAgICAgICAgZGF0YUxvZygiNSAi
KTsKICAgICAKICAgICBtX2FycmF5QnVmZmVycy5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwotICAg
IG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICBtX29iamVjdFNwYWNlLnN0b3BB
bGxvY2F0aW5nRm9yR29vZCgpOwogICAgIG1fb2JqZWN0U3BhY2UubGFzdENoYW5jZVRvRmluYWxp
emUoKTsKICAgICByZWxlYXNlRGVsYXllZFJlbGVhc2VkT2JqZWN0cygpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgY2xh
c3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwogY2xhc3Mg
U3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBTd2VlcGluZ1Njb3BlOworY2xhc3MgVGhyZWFk
TG9jYWxDYWNoZUxheW91dDsKIGNsYXNzIFZNOwogY2xhc3MgV2Vha0dDTWFwQmFzZTsKIHN0cnVj
dCBDdXJyZW50VGhyZWFkU3RhdGU7CkBAIC0zNzIsNiArMzczLDggQEAgcHVibGljOgogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hTbG90VmlzaXRvcihjb25z
dCBGdW5jJik7CisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dCYgdGhyZWFkTG9jYWxD
YWNoZUxheW91dCgpIHsgcmV0dXJuICptX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQ7IH0KIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwpAQCAtNzE0LDYgKzcxNyw4
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQ3VycmVudFRocmVhZFN0YXRlKiBtX2N1cnJlbnRUaHJl
YWRTdGF0ZSB7IG51bGxwdHIgfTsKICAgICBXVEY6OlRocmVhZCogbV9jdXJyZW50VGhyZWFkIHsg
bnVsbHB0ciB9OyAvLyBJdCdzIE9LIGlmIHRoaXMgYmVjb21lcyBhIGRhbmdsaW5nIHBvaW50ZXIu
CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ+IG1fdGhy
ZWFkTG9jYWxDYWNoZUxheW91dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw5ICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Db25jdXJyZW50VmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2Vu
dGluZWxMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJJc29TdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQWxsb2Nh
dG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2luY2x1
ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRv
cklubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtMzUsNiArMzgsNyBAQCBJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2Uo
Q1N0cmluZyBuYW1lLCBICiAgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQogICAgICwgbV9zaXpl
KHNpemUpCiAgICAgLCBtX2RpcmVjdG9yeSgmaGVhcCwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkpCisgICAgLCBtX2FsbG9jYXRvcihtX2RpcmVj
dG9yeS5hbGxvY2F0b3IoKSkKICAgICAsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihzdGQ6
Om1ha2VfdW5pcXVlPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCiB7CiAgICAgaW5pdGlh
bGl6ZShoZWFwQ2VsbFR5cGUsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5nZXQoKSk7CkBA
IC01MCwyMCArNTQsMjAgQEAgSXNvU3Vic3BhY2U6On5Jc29TdWJzcGFjZSgpCiB7CiB9CiAKLUJs
b2NrRGlyZWN0b3J5KiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxv
Y2F0b3JGb3JNb2RlIG1vZGUpCitBbGxvY2F0b3IgSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihz
aXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1vZGUpOwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxv
Y2F0ZShWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgcmV0dXJuIGFs
bG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAg
ICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZh
aWx1cmVNb2RlKTsKIH0KIAotdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChz
aXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9u
VmlydHVhbChWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOwotICAgIHZvaWQqIHJlc3VsdCA9IG1fZGly
ZWN0b3J5LmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHZvaWQq
IHJlc3VsdCA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0
MSwxMSBAQCBwdWJsaWM6CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogCi0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRv
ckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOworICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CiAKLSAgICB2
b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlKSBvdmVycmlkZTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5v
blZpcnR1YWwoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSXNv
Q2VsbFNldDsKQEAgLTU2LDE0ICs1NiwxNSBAQCBwcml2YXRlOgogICAgIAogICAgIHNpemVfdCBt
X3NpemU7CiAgICAgQmxvY2tEaXJlY3RvcnkgbV9kaXJlY3Rvcnk7CisgICAgQWxsb2NhdG9yIG1f
YWxsb2NhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
PiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PElz
b0NlbGxTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+PiBtX2NlbGxTZXRzOwog
fTsKIAotaW5saW5lIEJsb2NrRGlyZWN0b3J5KiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9u
VmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKK2lubGluZSBBbGxvY2F0b3Ig
SXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRv
ckZvck1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOwot
ICAgIHJldHVybiAmbV9kaXJlY3Rvcnk7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogfQogCiAj
ZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBDZWxsVHlwZSwgdHlwZSkgKCJJc29s
YXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcCksIChoZWFwQ2VsbFR5cGUpLCBzaXplb2YodHlw
ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3Iu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIKKworI2luY2x1ZGUgIkFsbG9jYXRpbmdTY29wZS5o
IgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0xvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihC
bG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQorICAgIDogbV9kaXJlY3RvcnkoZGlyZWN0b3J5KQor
ICAgICwgbV9jZWxsU2l6ZShkaXJlY3RvcnktPm1fY2VsbFNpemUpCisgICAgLCBtX2ZyZWVMaXN0
KG1fY2VsbFNpemUpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhkaXJlY3RvcnktPm1f
bG9jYWxBbGxvY2F0b3JzTG9jayk7CisgICAgZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9ycy5h
cHBlbmQodGhpcyk7Cit9CisKK0xvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihMb2NhbEFs
bG9jYXRvciYmIG90aGVyKQorICAgIDogbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCisg
ICAgLCBtX2NlbGxTaXplKG90aGVyLm1fY2VsbFNpemUpCisgICAgLCBtX2ZyZWVMaXN0KFdURk1v
dmUob3RoZXIubV9mcmVlTGlzdCkpCisgICAgLCBtX2N1cnJlbnRCbG9jayhvdGhlci5tX2N1cnJl
bnRCbG9jaykKKyAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKG90aGVyLm1fbGFzdEFjdGl2ZUJsb2Nr
KQoreworICAgIG90aGVyLnJlc2V0KCk7CisgICAgaWYgKG90aGVyLmlzT25MaXN0KCkpIHsKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRv
cnNMb2NrKTsKKyAgICAgICAgb3RoZXIucmVtb3ZlKCk7CisgICAgICAgIG1fZGlyZWN0b3J5LT5t
X2xvY2FsQWxsb2NhdG9ycy5hcHBlbmQodGhpcyk7CisgICAgfQorfQorCit2b2lkIExvY2FsQWxs
b2NhdG9yOjpyZXNldCgpCit7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVu
dEJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9CisK
K0xvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IoKQoreworICAgIGlmIChpc09uTGlzdCgp
KSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9kaXJlY3RvcnktPm1fbG9jYWxB
bGxvY2F0b3JzTG9jayk7CisgICAgICAgIHJlbW92ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBB
c3NlcnQgdGhhdCB0aGlzIGFsbG9jYXRvciBpc24ndCBob2xkaW5nIG9udG8gYW55IG1lbW9yeS4g
VGhpcyBpcyBhIHZhbGlkIGFzc2VydGlvbiBmb3IgdGhlCisgICAgLy8gZm9sbG93aW5nIHR3byB1
c2UgY2FzZXM6CisgICAgLy8gCisgICAgLy8gLSBJbW1vcnRhbCBUTEMuIFRob3NlIGRlc3RydWN0
IGFmdGVyIHRoZSBoZWFwIGlzIGRvbmUgZGVzdHJ1Y3RpbmcsIHNvIHRoZXkgc2hvdWxkIG5vdCBo
YXZlCisgICAgLy8gICBhbnkgc3RhdGUgbGVmdCBpbiB0aGVtLgorICAgIC8vCisgICAgLy8gLSBU
TEMgb3duZWQgYnkgYW4gb2JqZWN0LiBTdWNoIGEgVExDIGdldHMgZGVzdHJveWVkIGFmdGVyIGEg
R0MgZmxpcCBkdXJpbmcgd2hpY2ggd2UgcHJvdmVkCisgICAgLy8gICB0aGF0IGl0IGlzIG5vdCBy
ZWFjaGFibGUuIFRoZXJlZm9yZSwgdGhlIFRMQyBzaG91bGQgc3RpbGwgYmUgaW4gYSBmdWxseSBy
ZXNldCBzdGF0ZSBhdCB0aGUKKyAgICAvLyAgIHRpbWUgb2YgZGVzdHJ1Y3Rpb24gYmVjYXVzZSBm
b3IgaXQgdG8gZ2V0IGludG8gYW55IG90aGVyIHN0YXRlLCBzb21lb25lIG11c3QgaGF2ZSBhbGxv
Y2F0ZWQKKyAgICAvLyAgIGluIGl0ICh3aGljaCBpcyBpbXBvc3NpYmxlIGJlY2F1c2UgaXQncyBz
dXBwb3NlZGx5IHVucmVhY2hhYmxlKS4KKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBpZiAoIW1f
ZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgZGF0YUxvZygiRkFUQUw6
ICIsIFJhd1BvaW50ZXIodGhpcyksICItPn5Mb2NhbEFsbG9jYXRvciBoYXMgbm9uLWVtcHR5IGZy
ZWUtbGlzdC5cbiIpOworICAgICAgICBvayA9IGZhbHNlOworICAgIH0KKyAgICBpZiAobV9jdXJy
ZW50QmxvY2spIHsKKyAgICAgICAgZGF0YUxvZygiRkFUQUw6ICIsIFJhd1BvaW50ZXIodGhpcyks
ICItPn5Mb2NhbEFsbG9jYXRvciBoYXMgbm9uLW51bGwgY3VycmVudCBibG9jay5cbiIpOworICAg
ICAgICBvayA9IGZhbHNlOworICAgIH0KKyAgICBpZiAobV9sYXN0QWN0aXZlQmxvY2spIHsKKyAg
ICAgICAgZGF0YUxvZygiRkFUQUw6ICIsIFJhd1BvaW50ZXIodGhpcyksICItPn5Mb2NhbEFsbG9j
YXRvciBoYXMgbm9uLW51bGwgbGFzdCBhY3RpdmUgYmxvY2suXG4iKTsKKyAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQob2spOworfQorCit2b2lkIExvY2FsQWxs
b2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCit7CisgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9j
ayk7CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBBU1NFUlQobV9mcmVlTGlz
dC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fbGFz
dEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxs
cHRyOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6
cmVzdW1lQWxsb2NhdGluZygpCit7CisgICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9m
cmVlTGlzdCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKKyAgICBt
X2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnBy
ZXBhcmVGb3JBbGxvY2F0aW9uKCkKK3sKKyAgICByZXNldCgpOworfQorCit2b2lkIExvY2FsQWxs
b2NhdG9yOjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKQoreworICAgIHN0b3BBbGxvY2F0aW5nKCk7
CisgICAgcmVzZXQoKTsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nh
c2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKKyAgICBIZWFwJiBoZWFwID0gKm1fZGlyZWN0b3J5LT5tX2hlYXA7CisgICAg
QVNTRVJUKGhlYXAudm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAg
ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOworCisgICAgQVNTRVJU
KCFtX2RpcmVjdG9yeS0+bWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKKyAgICBoZWFwLmRp
ZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOworICAgIAorICAgIGRpZENvbnN1
bWVGcmVlTGlzdCgpOworICAgIAorICAgIEFsbG9jYXRpbmdTY29wZSBoZWxwaW5nSGVhcChoZWFw
KTsKKworICAgIGhlYXAuY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQp
OworICAgIAorICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJh
Y2sgYW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQor
ICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEg
Y2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCisgICAgaWYgKFVOTElLRUxZKG1f
Y3VycmVudEJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwg
ZmFpbHVyZU1vZGUpOworICAgIAorICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmcoKTsKKyAgICAKKyAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9
IG1fZGlyZWN0b3J5LT50cnlBbGxvY2F0ZUJsb2NrKCk7CisgICAgaWYgKCFibG9jaykgeworICAg
ICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgbV9kaXJlY3RvcnktPmFkZEJs
b2NrKGJsb2NrKTsKKyAgICByZXN1bHQgPSBhbGxvY2F0ZUluKGJsb2NrKTsKKyAgICBBU1NFUlQo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIExvY2FsQWxsb2NhdG9yOjpk
aWRDb25zdW1lRnJlZUxpc3QoKQoreworICAgIGlmIChtX2N1cnJlbnRCbG9jaykKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgIAorICAgIG1fZnJlZUxp
c3QuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Cit9CisKK3ZvaWQqIExv
Y2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCkKK3sKKyAgICAvLyBG
SVhNRTogSWYgd2Ugd2FudGVkIHRoaXMgdG8gYmUgdXNlZCBmb3IgcmVhbCBtdWx0aS10aHJlYWRl
ZCBhbGxvY2F0aW9ucyB0aGVuIHdlIHdvdWxkIGhhdmUgdG8KKyAgICAvLyBjb21lIHVwIHdpdGgg
c29tZSBjb25jdXJyZW5jeSBwcm90b2NvbCBoZXJlLiBUaGF0IHByb3RvY29sIHdvdWxkIG5lZWQg
dG8gYmUgYWJsZSB0byBoYW5kbGU6CisgICAgLy8KKyAgICAvLyAtIFRoZSBiYXNpYyBjYXNlIG9m
IG11bHRpcGxlIExvY2FsQWxsb2NhdG9ycyB0cnlpbmcgdG8gZG8gYW4gYWxsb2NhdGlvbkN1cnNv
ciBzZWFyY2ggb24gdGhlCisgICAgLy8gICBzYW1lIGJpdHZlY3Rvci4gVGhhdCBwcm9iYWJseSBu
ZWVkcyB0aGUgYml0dmVjdG9yIGxvY2sgYXQgbGVhc3QuCisgICAgLy8KKyAgICAvLyAtIFRoZSBo
YXJkZXIgY2FzZSBvZiBzb21lIExvY2FsQWxsb2NhdG9yIHRyaWdnZXJpbmcgYSBzdGVhbCBmcm9t
IGEgZGlmZmVyZW50IEJsb2NrRGlyZWN0b3J5CisgICAgLy8gICB2aWEgYSBzZWFyY2ggaW4gdGhl
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IncyBsaXN0LiBXaG8ga25vd3Mgd2hhdCBsb2NrcyB0aGF0
IG5lZWRzLgorICAgIC8vIAorICAgIC8vIE9uZSB3YXkgdG8gbWFrZSB0aGlzIHdvcmsgaXMgdG8g
aGF2ZSBhIHNpbmdsZSBwZXItSGVhcCBsb2NrIHRoYXQgcHJvdGVjdHMgYWxsIG11dGF0b3IgbG9j
aworICAgIC8vIGFsbG9jYXRpb24gc2xvdyBwYXRocy4gVGhhdCB3b3VsZCBwcm9iYWJseSBiZSBz
Y2FsYWJsZSBlbm91Z2ggZm9yIHllYXJzLiBJdCB3b3VsZCBjZXJ0YWlubHkgYmUKKyAgICAvLyBm
b3IgZm9yIHVzaW5nIFRMQyBhbGxvY2F0aW9uIGZyb20gSklUIHRocmVhZHMuCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTYzNQorICAgIAorICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAKKyAgICBBU1NF
UlQoIW1fY3VycmVudEJsb2NrKTsKKyAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2ls
bEZhaWwoKSk7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBibG9jayA9IG1fZGlyZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CisgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodm9pZCog
cmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jaykpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhl
ckFsbG9jYXRvcnMoKQorICAgICAgICAmJiAoT3B0aW9uczo6dHJhZGVEZXN0cnVjdG9yQmxvY2tz
KCkgfHwgIW1fZGlyZWN0b3J5LT5uZWVkc0Rlc3RydWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5maW5k
RW1wdHlCbG9ja1RvU3RlYWwoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2st
PmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSA9PSBtX2RpcmVjdG9yeS0+bV9zdWJzcGFjZS0+YWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxvY2st
PnN3ZWVwKG51bGxwdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJdCdzIGdvb2Qg
dGhhdCB0aGlzIGNsZWFycyBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90
aGVyIGJpdHMsCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5j
ZSB0aGF0IGEgYmxvY2sgbWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CisgICAg
ICAgICAgICAvLyBhbmQgZW1wdHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICBi
bG9jay0+cmVtb3ZlRnJvbURpcmVjdG9yeSgpOworICAgICAgICAgICAgbV9kaXJlY3RvcnktPmFk
ZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCogTG9j
YWxBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7Cisg
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jayk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKK3sKKyAgICBBU1NF
UlQoYmxvY2spOworICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAKKyAg
ICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUg
dG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFya2luZyB0cmllcyB0byBy
ZXRpcmUgdGhlc2UsIGJ1dAorICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlzIHJhY3kgYW5kIG1heSBm
b3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgorICAgIGlmIChtX2ZyZWVMaXN0LmFsbG9jYXRpb25X
aWxsRmFpbCgpKSB7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAg
ICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CisgICAgICAgIEFTU0VS
VCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2RpcmVjdG9yeS0+
aXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7CisgICAgICAgIEFTU0VSVCghbV9k
aXJlY3RvcnktPmlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJs
b2NrKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBtX2N1cnJl
bnRCbG9jayA9IGJsb2NrOworICAgIAorICAgIHZvaWQqIHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxs
b2NhdGUoCisgICAgICAgIFtdICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0pOworICAgIG1fZGlyZWN0b3J5LT5zZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBt
X2N1cnJlbnRCbG9jaywgdHJ1ZSk7CisgICAgbV9kaXJlY3RvcnktPm1hcmtlZFNwYWNlKCkuZGlk
QWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIExvY2FsQWxsb2NhdG9yOjpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7CisgICAgaWYgKCFPcHRpb25zOjpzbG93UGF0
aEFsbG9jc0JldHdlZW5HQ3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljIHVuc2ln
bmVkIGFsbG9jYXRpb25Db3VudCA9IDA7CisgICAgaWYgKCFhbGxvY2F0aW9uQ291bnQpIHsKKyAg
ICAgICAgaWYgKCFtX2RpcmVjdG9yeS0+bV9oZWFwLT5pc0RlZmVycmVkKCkpIHsKKyAgICAgICAg
ICAgIGlmIChkZWZlcnJhbENvbnRleHQpCisgICAgICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0
LT5tX3Nob3VsZEdDID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X2RpcmVjdG9yeS0+bV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVs
bCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCsrYWxsb2NhdGlvbkNvdW50ID49IE9wdGlv
bnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICBhbGxvY2F0aW9uQ291bnQg
PSAwOworfQorCitib29sIExvY2FsQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZv
aWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGFib21pbmF0aW9uIGV4aXN0cyB0byBk
ZXRlY3Qgd2hlbiBhbiBvYmplY3QgaXMgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0
YXRlLgorICAgIC8vIFRoZXJlZm9yZSwgaXQncyBub3QgZXZlbiBjbGVhciB0aGF0IHRoaXMgbmVl
ZHMgdG8gZG8gYW55dGhpbmcgYmV5b25kIHJldHVybmluZyAiZmFsc2UiLCBzaW5jZQorICAgIC8v
IGlmIHdlIGtub3cgdGhhdCB0aGUgYmxvY2sgb3duaW5nIHRoZSBvYmplY3QgaXMgZnJlZS1saXN0
ZWQsIHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBhbnkKKyAgICAvLyBvYmplY3RzIHRvIGJlIGlu
IHRoZSBkZWFkLWJ1dC1ub3QtZGVzdHJ1Y3RlZCBzdGF0ZS4KKyAgICAvLyBGSVhNRTogR2V0IHJp
ZCBvZiB0aGlzIGFib21pbmF0aW9uLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgxNjU1CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4odGFyZ2V0KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNp
bmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CitjbGFzcyBHQ0RlZmVycmFs
Q29udGV4dDsKKworY2xhc3MgTG9jYWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5l
bE5vZGU8TG9jYWxBbGxvY2F0b3I+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbEFs
bG9jYXRvcik7CisgICAgCitwdWJsaWM6CisgICAgTG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3Rv
cnkqKTsKKyAgICBMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYmKTsKKyAgICB+TG9jYWxB
bGxvY2F0b3IoKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisKKyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7Cisg
ICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgIHZvaWQgcmVzdW1lQWxsb2NhdGlu
ZygpOworICAgIHZvaWQgc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CisgICAgCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNlbGxTaXplKCk7CisgICAgCisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZv
aWQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CisgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxp
c3QoKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CisgICAgdm9p
ZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCogYWxsb2Nh
dGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVz
dENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKworICAgIEJsb2NrRGly
ZWN0b3J5KiBtX2RpcmVjdG9yeTsKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplOworICAgIEZyZWVM
aXN0IG1fZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sg
eyBudWxscHRyIH07CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sg
eyBudWxscHRyIH07Cit9OworCitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxsb2NhdG9yOjpvZmZz
ZXRPZkZyZWVMaXN0KCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvY2FsQWxsb2Nh
dG9yLCBtX2ZyZWVMaXN0KTsKK30KKworaW5saW5lIHB0cmRpZmZfdCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZDZWxsU2l6ZSgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2NhbEFs
bG9jYXRvciwgbV9jZWxsU2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9j
YXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBy
ZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7
CisgICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9kaXJlY3RvcnktPmhlYXAoKS0+dm0o
KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNs
b3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKKyAgICAgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw2ICszMDIsMTYg
QEAgdm9pZCBNYXJrZWRTcGFjZTo6c3RvcEFsbG9jYXRpbmcoKQogICAgICAgICB9KTsKIH0KIAor
dm9pZCBNYXJrZWRTcGFjZTo6c3RvcEFsbG9jYXRpbmdGb3JHb29kKCkKK3sKKyAgICBBU1NFUlQo
IWlzSXRlcmF0aW5nKCkpOworICAgIGZvckVhY2hEaXJlY3RvcnkoCisgICAgICAgIFsmXSAoQmxv
Y2tEaXJlY3RvcnkmIGRpcmVjdG9yeSkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAg
IGRpcmVjdG9yeS5zdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
dGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKK30KKwogdm9pZCBNYXJrZWRT
cGFjZTo6cHJlcGFyZUZvckNvbnNlcnZhdGl2ZVNjYW4oKQogewogICAgIG1fbGFyZ2VBbGxvY2F0
aW9uc0ZvclRoaXNDb2xsZWN0aW9uQmVnaW4gPSBtX2xhcmdlQWxsb2NhdGlvbnMuYmVnaW4oKSAr
IG1fbGFyZ2VBbGxvY2F0aW9uc09mZnNldEZvclRoaXNDb2xsZWN0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFwOyB9CiAgICAgCi0gICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOyAv
LyBZb3UgbXVzdCBjYWxsIHN0b3BBbGxvY2F0aW5nIGJlZm9yZSB5b3UgY2FsbCB0aGlzLgorICAg
IHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsgLy8gTXVzdCBjYWxsIHN0b3BBbGxvY2F0aW5n
Rm9yR29vZCBmaXJzdC4KICAgICB2b2lkIGZyZWVNZW1vcnkoKTsKIAogICAgIHN0YXRpYyBzaXpl
X3Qgb3B0aW1hbFNpemVGb3Ioc2l6ZV90KTsKQEAgLTExMSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRGaW5pc2hJdGVyYXRpbmcoKTsKIAogICAgIHZvaWQgc3RvcEFsbG9jYXRpbmco
KTsKKyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOwogICAgIHZvaWQgcmVzdW1lQWxs
b2NhdGluZygpOyAvLyBJZiB3ZSBqdXN0IHN0b3BwZWQgYWxsb2NhdGlvbiBidXQgd2UgZGlkbid0
IGRvIGEgY29sbGVjdGlvbiwgd2UgbmVlZCB0byByZXN1bWUgYWxsb2NhdGlvbi4KICAgICAKICAg
ICB2b2lkIHByZXBhcmVGb3JNYXJraW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtpbmdDb25zdHJhaW50U29sdmVyLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RvcElmTmVjZXNz
YXJ5VGltZXIuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlZpc2l0UmFjZUtl
eS5oIgogI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJl
ZFRhc2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDAsNiArNDEsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBI
ZWFwU25hcHNob3RCdWlsZGVyOwogY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29u
c3RyYWludDsKIGNsYXNzIE1hcmtpbmdDb25zdHJhaW50U29sdmVyOwogY2xhc3MgVW5jb25kaXRp
b25hbEZpbmFsaXplcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1
ZGUgIkFsbG9jYXRvckZvck1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgpAQCAtNTYsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5p
c2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICB2b2lkIGRlc3Ry
b3koVk0mLCBKU0NlbGwqKTsKIAotICAgIHZpcnR1YWwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRv
ckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
ID0gMDsKKyAgICB2aXJ0dWFsIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0
b3JGb3JNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwg
R0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKICAgICAKICAg
ICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9j
YWxDYWNoZS5oIgorCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKKyNpbmNs
dWRlICJUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVh
ZExvY2FsQ2FjaGU6OmNyZWF0ZShIZWFwJiBoZWFwKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGhyZWFkTG9jYWxDYWNoZShoZWFwKSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGU6OlRocmVh
ZExvY2FsQ2FjaGUoSGVhcCYgaGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQoreworICAgIG1fZGF0
YSA9IGFsbG9jYXRlRGF0YSgpOworfQorCitUaHJlYWRMb2NhbENhY2hlOjp+VGhyZWFkTG9jYWxD
YWNoZSgpCit7CisgICAgZGVzdHJveURhdGEobV9kYXRhKTsKK30KKworVGhyZWFkTG9jYWxDYWNo
ZTo6RGF0YSogVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdGVEYXRhKCkKK3sKKyAgICBzaXplX3Qg
b2xkU2l6ZSA9IG1fZGF0YSA/IG1fZGF0YS0+c2l6ZSA6IDA7CisgICAgVGhyZWFkTG9jYWxDYWNo
ZUxheW91dDo6U25hcHNob3QgbGF5b3V0ID0gbV9oZWFwLnRocmVhZExvY2FsQ2FjaGVMYXlvdXQo
KS5zbmFwc2hvdCgpOworICAgIAorICAgIERhdGEqIHJlc3VsdCA9IHN0YXRpY19jYXN0PERhdGEq
PihmYXN0TWFsbG9jKE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpICsgbGF5b3V0LnNp
emUpKTsKKyAgICByZXN1bHQtPnNpemUgPSBsYXlvdXQuc2l6ZTsKKyAgICByZXN1bHQtPmNhY2hl
ID0gdGhpczsKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBv
ZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9y
KCpyZXN1bHQsIG9mZnNldCkpIExvY2FsQWxsb2NhdG9yKFdURk1vdmUoYWxsb2NhdG9yKCptX2Rh
dGEsIG9mZnNldCkpKTsKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQg
PCBsYXlvdXQuc2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAg
IG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihsYXlvdXQu
ZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV0pOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJveURhdGEoRGF0YSog
ZGF0YSkKK3sKKyAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBkYXRhLT5zaXpl
OyBvZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgYWxsb2NhdG9yKCpk
YXRhLCBvZmZzZXQpLn5Mb2NhbEFsbG9jYXRvcigpOworICAgIGZhc3RGcmVlKGRhdGEpOworfQor
Cit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSkKK3sKKyNpZiBFTkFC
TEUoRkFTVF9UTFNfSklUKQorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAg
ICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZUZsYWcsCisgICAgICAgIFtdICgpIHsKKyAg
ICAgICAgICAgIHB0aHJlYWRfa2V5X2luaXRfbnAodGxzS2V5LCBkZXN0cnVjdG9yKTsKKyAgICAg
ICAgfSk7CisjZW5kaWYKKyAgICAKKyAgICByZWYoKTsKKyAgICAKKyAgICBpZiAoUmVmUHRyPFRo
cmVhZExvY2FsQ2FjaGU+IG9sZENhY2hlID0gZ2V0KHZtKSkKKyAgICAgICAgb2xkQ2FjaGUtPmRl
cmVmKCk7CisgICAgCisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7Cit9CisKK3ZvaWQgVGhy
ZWFkTG9jYWxDYWNoZTo6aW5zdGFsbERhdGEoVk0mIHZtLCBEYXRhKiBkYXRhKQoreworI2lmIEVO
QUJMRShGQVNUX1RMU19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBfcHRocmVhZF9z
ZXRzcGVjaWZpY19kaXJlY3QodGxzS2V5LCBkYXRhKTsKKyNlbHNlCisgICAgdm0udGhyZWFkTG9j
YWxDYWNoZSA9IGRhdGE7CisjZW5kaWYKK30KKworTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2Fs
Q2FjaGU6OmFsbG9jYXRvclNsb3coVk0mIHZtLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIERhdGEq
IG9sZERhdGEgPSBtX2RhdGE7CisgICAgbV9kYXRhID0gYWxsb2NhdGVEYXRhKCk7CisgICAgZGVz
dHJveURhdGEob2xkRGF0YSk7CisgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7CisgICAgUkVM
RUFTRV9BU1NFUlQob2Zmc2V0IDwgbV9kYXRhLT5zaXplKTsKKyAgICByZXR1cm4gYWxsb2NhdG9y
KCptX2RhdGEsIG9mZnNldCk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rv
cih2b2lkKiBhcmcpCit7CisgICAgaWYgKCFhcmcpCisgICAgICAgIHJldHVybjsKKyAgICBEYXRh
KiBkYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KGFyZyk7CisgICAgZGF0YS0+Y2FjaGUtPmRlcmVm
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvRmFzdFRMUy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxUaHJlYWRMb2NhbENhY2hlPiB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVGhyZWFkTG9jYWxDYWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgCitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUo
SGVhcCYpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UaHJlYWRMb2NhbENhY2hlKCk7
CisKKyAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGdldChWTSYpOworICAgIAor
ICAgIC8vIFRoaXMgaXMgZGVzaWduZWQgdG8gYmUgZmFzdCBlbm91Z2ggdGhhdCB5b3UgY291bGQg
ZXZlbiBjYWxsIGl0IGJlZm9yZSBldmVyeSBhbGxvY2F0aW9uLCBieQorICAgIC8vIG9wdGltaXpp
bmcgZm9yIHRoZSBjYXNlIHRoYXQgeW91J3JlIGp1c3QgaW5zdGFsbGluZyB0aGUgY2FjaGUgdGhh
dCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gVGhpcworICAgIC8vIGFzc3VtZXMgYSByZWxhdGl2ZWx5
IHNtYWxsIG51bWJlciBvZiBjYWNoZXMgb3IgbG93IGNoYW5jZSBvZiBhY3R1YWwgY29udGV4dCBz
d2l0Y2ggY29tYmluZWQKKyAgICAvLyB3aXRoIHBvc3NpYmx5IGhpZ2ggcmF0ZSBvZiAiSSBtYXkg
aGF2ZSBjb250ZXh0IHN3aXRjaGVkIiBzaXRlcyB0aGF0IGNhbGwgdGhpcyBvdXQgb2YgcGFyYW5v
aWEuCisgICAgdm9pZCBpbnN0YWxsKFZNJik7CisgICAgCisgICAgc3RhdGljIExvY2FsQWxsb2Nh
dG9yJiBhbGxvY2F0b3IoVk0mLCBzaXplX3Qgb2Zmc2V0KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBTdWNjZXNzRnVuYywgdHlwZW5hbWUgRmFpbHVyZUZ1bmM+CisgICAgc3RhdGljIHZv
aWQgdHJ5R2V0QWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCwgY29uc3QgU3VjY2Vzc0Z1bmMm
LCBjb25zdCBGYWlsdXJlRnVuYyYpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERhdGEsIHNpemUpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QWxsb2NhdG9yKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKERhdGEsIGFsbG9jYXRvcik7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVGhyZWFkTG9j
YWxDYWNoZShIZWFwJik7CisgICAgCisgICAgc3RydWN0IERhdGEgeworICAgICAgICBzaXplX3Qg
c2l6ZTsKKyAgICAgICAgVGhyZWFkTG9jYWxDYWNoZSogY2FjaGU7CisgICAgICAgIExvY2FsQWxs
b2NhdG9yIGFsbG9jYXRvclsxXTsKKyAgICB9OworCisgICAgc3RhdGljIERhdGEqIGdldEltcGwo
Vk0mKTsKKyAgICAKKyAgICBEYXRhKiBhbGxvY2F0ZURhdGEoKTsKKyAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95RGF0YShEYXRhKik7CisgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3Io
RGF0YSYgZGF0YSwgc2l6ZV90IG9mZnNldCk7CisKKyAgICB2b2lkIGluc3RhbGxTbG93KFZNJik7
CisgICAgc3RhdGljIHZvaWQgaW5zdGFsbERhdGEoVk0mLCBEYXRhKik7CisgICAgCisgICAgTG9j
YWxBbGxvY2F0b3ImIGFsbG9jYXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0KTsKKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cnVjdG9yKHZvaWQqKTsKKyAgICAKKyAgICAvLyBXaGVuIGluc3Rh
bGxlZCwgd2UgcmVmKCkgdGhlIGNhY2hlLiBVbmluc3RhbGxpbmcgZGVyZWYoKXMgdGhlIGNhY2hl
LiBUTFMgZGVzdHJ1Y3Rpb24gZGVyZWYoKXMKKyAgICAvLyB0aGUgY2FjaGUuIFdoZW4gdGhlIGNh
Y2hlIGlzIGRlc3RydWN0ZWQsIGl0IG5lZWRzIHRvIHJldHVybiBhbGwgb2YgaXRzIHN0YXRlIHRv
IHRoZSBHQy4gSQorICAgIC8vIHRoaW5rIHRoYXQganVzdCBtZWFucyBzdG9wQWxsb2NhdGluZygp
LCBidXQgd2l0aCBzb21lIHNlcmlvdXNseSBoZWF2eSBjYXZlYXRzIGhhdmluZyB0byBkbworICAg
IC8vIHdpdGggd2hlbiBpdCdzIHZhbGlkIHRvIG1ha2UgdGhhdCBjYWxsLiBBbHRlcm5hdGl2ZWx5
LCB3ZSBjb3VsZCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZSBjYWNoZQorICAgIC8vIGlzIGVtcHR5
IHdoZW4gd2UgZGVzdHJ1Y3QgaXQuIFRoaXMgaXMgY29ycmVjdCBmb3IgY2FjaGVzIHRoYXQgYXJl
IGtlcHQgbGl2ZSBieSBHQyBvYmplY3RzIGFuZAorICAgIC8vIGl0J3MgY29ycmVjdCBmb3IgaW1t
b3J0YWwgY2FjaGVzLgorICAgIEhlYXAmIG1faGVhcDsKKyAgICBEYXRhKiBtX2RhdGEgeyBudWxs
cHRyIH07CisKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIHN0YXRpYyBjb25zdCBwdGhy
ZWFkX2tleV90IHRsc0tleSA9IFdURl9HQ19UTENfS0VZOworI2VuZGlmCit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRM
b2NhbENhY2hlOjpnZXRJbXBsKFZNJiB2bSkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQor
ICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGEqPihfcHRo
cmVhZF9nZXRzcGVjaWZpY19kaXJlY3QodGxzS2V5KSk7CisjZWxzZQorICAgIHJldHVybiB2bS50
aHJlYWRMb2NhbENhY2hlOworI2VuZGlmCit9CisKK2lubGluZSBSZWZQdHI8VGhyZWFkTG9jYWxD
YWNoZT4gVGhyZWFkTG9jYWxDYWNoZTo6Z2V0KFZNJiB2bSkKK3sKKyAgICBUaHJlYWRMb2NhbENh
Y2hlOjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJl
dHVybiBkYXRhLT5jYWNoZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworaW5saW5lIHZvaWQg
VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbChWTSYgdm0pCit7CisgICAgaWYgKGdldEltcGwodm0p
ID09IG1fZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGluc3RhbGxTbG93KHZtKTsKK30KKwor
aW5saW5lIExvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoVk0mIHZt
LCBzaXplX3Qgb2Zmc2V0KQoreworICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBn
ZXRJbXBsKHZtKTsKKyAgICBpZiAoTElLRUxZKG9mZnNldCA8IGRhdGEtPnNpemUpKQorICAgICAg
ICByZXR1cm4gYWxsb2NhdG9yKCpkYXRhLCBvZmZzZXQpOworICAgIHJldHVybiBkYXRhLT5jYWNo
ZS0+YWxsb2NhdG9yU2xvdyh2bSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3Vj
Y2Vzc0Z1bmMsIHR5cGVuYW1lIEZhaWx1cmVGdW5jPgordm9pZCBUaHJlYWRMb2NhbENhY2hlOjp0
cnlHZXRBbGxvY2F0b3IoVk0mIHZtLCBzaXplX3Qgb2Zmc2V0LCBjb25zdCBTdWNjZXNzRnVuYyYg
c3VjY2Vzc0Z1bmMsIGNvbnN0IEZhaWx1cmVGdW5jJiBmYWlsdXJlRnVuYykKK3sKKyAgICBUaHJl
YWRMb2NhbENhY2hlOjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKExJS0VMWShv
ZmZzZXQgPCBkYXRhLT5zaXplKSkKKyAgICAgICAgc3VjY2Vzc0Z1bmMoYWxsb2NhdG9yKCpkYXRh
LCBvZmZzZXQpKTsKKyAgICBlbHNlCisgICAgICAgIGZhaWx1cmVGdW5jKCk7Cit9CisKK2lubGlu
ZSBMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yKERhdGEmIGRhdGEs
IHNpemVfdCBvZmZzZXQpCit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8TG9jYWxBbGxvY2F0
b3IqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZkYXRhLmFsbG9jYXRvclswXSkgKyBvZmZzZXQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhy
ZWFkTG9jYWxDYWNoZUxheW91dC5oIgorCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQoKQoreworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhyZWFkTG9jYWxD
YWNoZUxheW91dCgpCit7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6YWxsb2Nh
dGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgZGlyZWN0b3J5LT5tX3RsY09mZnNldCA9IG1fc2l6ZTsK
KyAgICBtX3NpemUgKz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKTsKKyAgICBtX2RpcmVjdG9yaWVz
LmFwcGVuZChkaXJlY3RvcnkpOworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpTbmFwc2hv
dCBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpzbmFwc2hvdCgpCit7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2spOworICAgIFNuYXBzaG90IHJlc3VsdDsKKyAgICByZXN1bHQuc2l6
ZSA9IG1fc2l6ZTsKKyAgICByZXN1bHQuZGlyZWN0b3JpZXMgPSBtX2RpcmVjdG9yaWVzOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2NrRGlyZWN0b3J5KiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0OjpkaXJlY3RvcnkodW5zaWduZWQgb2Zmc2V0KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICByZXR1cm4gbV9kaXJlY3Rvcmllc1tvZmZzZXQgLyBzaXplb2Yo
TG9jYWxBbGxvY2F0b3IpXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxD
YWNoZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisKKy8vIEVhY2ggSGVhcCBoYXMgYSBUaHJl
YWRMb2NhbENhY2hlTGF5b3V0IHRoYXQgaGVscHMgdXMgZmlndXJlIG91dCBob3cgdG8gYWxsb2Nh
dGUgYSBUaHJlYWRMb2NhbENhY2hlCisvLyBmb3IgdGhhdCBIZWFwLgorCitjbGFzcyBUaHJlYWRM
b2NhbENhY2hlTGF5b3V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1YmxpYzoK
KyAgICBUaHJlYWRMb2NhbENhY2hlTGF5b3V0KCk7CisgICAgflRocmVhZExvY2FsQ2FjaGVMYXlv
dXQoKTsKKworICAgIC8vIEJsb2NrRGlyZWN0b3J5IGNhbGxzIHRoaXMgZHVyaW5nIGNyZWF0aW9u
IGFuZCB0aGlzIGZpbGxzIGluIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXQuCisgICAgdm9pZCBhbGxv
Y2F0ZU9mZnNldChCbG9ja0RpcmVjdG9yeSopOworICAgIAorICAgIHN0cnVjdCBTbmFwc2hvdCB7
CisgICAgICAgIHNpemVfdCBzaXplOworICAgICAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBk
aXJlY3RvcmllczsKKyAgICB9OworICAgIAorICAgIFNuYXBzaG90IHNuYXBzaG90KCk7CisgICAg
CisgICAgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSh1bnNpZ25lZCBvZmZzZXQpOworICAgIAor
cHJpdmF0ZToKKyAgICBMb2NrIG1fbG9jazsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworICAg
IFZlY3RvcjxCbG9ja0RpcmVjdG9yeSo+IG1fZGlyZWN0b3JpZXM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgyLDYgKzU4MiwxMDMg
QEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTQogfQogI2VuZGlmCiAK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihH
UFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sKKyAg
ICAvLyBOT1RFOiBUaGlzIGlzIGNhcmVmdWxseSB3cml0dGVuIHNvIHRoYXQgd2UgY2FuIGNhbGwg
aXQgd2hpbGUgd2UgZGlzYWxsb3cgc2NyYXRjaAorICAgIC8vIHJlZ2lzdGVyIHVzYWdlLgorICAg
ICAgICAKKyAgICBpZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChqdW1wKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IEp1bXAgcG9wUGF0aDsKKyAgICBKdW1wIGRvbmU7CisgICAgCisjaWYgRU5BQkxFKEZBU1RfVExT
X0pJVCkKKyAgICBsb2FkRnJvbVRMU1B0cihmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9HQ19UTENf
S0VZKSwgc2NyYXRjaEdQUik7CisjZWxzZQorICAgIGxvYWRQdHIoJnZtKCkudGhyZWFkTG9jYWxD
YWNoZURhdGEsIHNjcmF0Y2hHUFIpOworI2VuZGlmCisgICAgaWYgKGFsbG9jYXRvci5pc0NvbnN0
YW50KCkpIHsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
QWRkcmVzcyhzY3JhdGNoR1BSLCBUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZlNpemUoKSksIFRy
dXN0ZWRJbW0zMihhbGxvY2F0b3IuYWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CisgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoVGhyZWFkTG9jYWxDYWNoZTo6b2Zmc2V0T2ZGaXJzdEFsbG9jYXRv
cigpICsgYWxsb2NhdG9yLmFsbG9jYXRvcigpLm9mZnNldCgpKSwgc2NyYXRjaEdQUiwgYWxsb2Nh
dG9yR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIo
QmVsb3dPckVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNl
dE9mU2l6ZSgpKSwgYWxsb2NhdG9yR1BSKSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
VGhyZWFkTG9jYWxDYWNoZTo6b2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BS
KTsKKyAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIGFsbG9jYXRvckdQUik7CisgICAgfQorCisg
ICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOwor
ICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKKyAgICBpZiAoYWxs
b2NhdG9yLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0
b3IuYWxsb2NhdG9yKCkuY2VsbFNpemUodm0oKS5oZWFwKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBtb3Zl
KHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdWIzMihBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9y
R1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBzdWIzMihyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAg
ICAgICB9CisgICAgfQorICAgIG5lZ1B0cihyZXN1bHRHUFIpOworICAgIHN0b3JlMzIoc2NyYXRj
aEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVM
aXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkpOworICAgIEFkZHJlc3MgcGF5
bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CisgICAgaWYg
KGlzWDg2KCkpCisgICAgICAgIGFkZFB0cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5kQWRkciwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgIH0KKyAgICAgICAgCisg
ICAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgCisgICAgcG9wUGF0aC5saW5rKHRoaXMpOworICAg
ICAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwg
cmVzdWx0R1BSKTsKKyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOworICAgIGVsc2UgeworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
eG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgfQorICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOworICAgICAgICAKKyAgICAvLyBUaGUg
b2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZyZXNo
IG9iamVjdCwgYnV0CisgICAgLy8gaXQncyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOworICAgIHN0b3JlUHRy
KHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CisgICAg
ICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRv
ciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93
UGF0aCkKK3sKKyAgICBpZiAoYWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAo
IWFsbG9jYXRvci5hbGxvY2F0b3IoKSkgeworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZW1pdEFs
bG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNw
YWNlJiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEs
IEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIHN0YXRpY19h
c3NlcnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0g
MSkpLCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Cisg
ICAgCisgICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXpl
U3RlcCk7CisgICAgCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpzaXplU3Rl
cCAtIDEpLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEpOworICAgIHVyc2hpZnQzMihUcnVz
dGVkSW1tMzIoc3RlcFNoaWZ0KSwgc2NyYXRjaEdQUjEpOworICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6bGFy
Z2VDdXRvZmYgPj4gc3RlcFNoaWZ0KSkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdWJzcGFj
ZS5hbGxvY2F0b3JGb3JTaXplU3RlcCgpIC0gMSksIHNjcmF0Y2hHUFIyKTsKKyAgICBsb2FkMzIo
QmFzZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgVGltZXNGb3VyKSwgc2NyYXRjaEdQ
UjEpOworICAgIAorICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6dmFy
aWFibGUoKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7Cit9CisKIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVk
ZSAiSW5saW5lQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSklUQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiTWFy
a2VkU3BhY2UuaCIKQEAgLTU5LDYgKzYwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICBWTSYgdm0oKSB7
IHJldHVybiAqbV9jb2RlQmxvY2stPnZtKCk7IH0KICAgICBBc3NlbWJsZXJUeXBlX1QmIGFzc2Vt
YmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9CiAKICAgICB2b2lkIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCkKQEAgLTE0ODgsODMgKzE0OTAsMjQgQEAgcHVibGljOgogICAgIHZvaWQg
ZW1pdFJhbmRvbVRodW5rKEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgRlBSUmVnIHJlc3VsdCk7CiAgICAgdm9pZCBlbWl0
UmFuZG9tVGh1bmsoVk0mLCBHUFJSZWcgc2NyYXRjaDAsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyLCBHUFJSZWcgc2NyYXRjaDMsIEZQUlJlZyByZXN1bHQpOwogI2VuZGlmCi0KKyAg
ICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgdmFsdWUgaGVsZCBpbiBh
bGxvY2F0b3JHUFIgaXMgbm9uLW51bGwuIFRoaXMgRE9FUyBOT1QgbWVhbgogICAgIC8vIHRoYXQg
YWxsb2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3IgY2FuIGJlIG51bGwgYXMgYSBzaWduYWwg
dGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCi0gICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BS
IGlzLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJl
c3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIC8v
IE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3
aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCi0gICAgICAgIC8vIHJlZ2lzdGVyIHVzYWdlLgotICAg
ICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMoKSkgewotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIEp1bXAgcG9wUGF0aDsKLSAgICAgICAgSnVtcCBkb25l
OwotICAgICAgICAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0Rp
cmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5n
KCkpLCByZXN1bHRHUFIpOwotICAgICAgICBwb3BQYXRoID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
c3VsdEdQUik7Ci0gICAgICAgIGlmIChhbGxvY2F0b3IpCi0gICAgICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKLSAgICAgICAgICAg
ICAgICBtb3ZlKHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3ViMzIo
QWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6
ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3ViMzIocmVzdWx0R1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBu
ZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFs
bG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0
OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7Ci0gICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIg
PSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7Ci0gICAgICAgIGlmIChpc1g4Nigp
KQotICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRQdHIocGF5bG9hZEVuZEFkZHIsIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGRvbmUgPSBqdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBwb3BQ
YXRoLmxpbmsodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2Nh
dG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9m
ZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGlzWDg2KCkp
Ci0gICAgICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5
OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9j
YXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0Ojpv
ZmZzZXRPZlNlY3JldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB4b3JQdHIoc2NyYXRj
aEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgfQotICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBv
YmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2gg
b2JqZWN0LCBidXQKLSAgICAgICAgLy8gaXQncyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3Qu
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0
b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFk
KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluayh0aGlzKTsKLSAgICB9CisgICAgLy8g
dmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLiBBZGRpdGlvbmFsbHksIGlmIHRoZSBhbGxvY2F0b3Ig
aXMgbm90IG51bGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZAorICAgIC8vIHRvIHBvcHVsYXRlIGFs
bG9jYXRvckdQUiAtIHRoaXMgY29kZSB3aWxsIGlnbm9yZSB0aGUgY29udGVudHMgb2YgYWxsb2Nh
dG9yR1BSLgorICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVn
IHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0
b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpOwogICAgIAotICAg
IHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYg
c2xvd1BhdGgpCi0gICAgewotICAgICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvckdQUikpOwotICAgICAg
ICBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihyZXN1bHRHUFIsIGFsbG9jYXRvciwg
YWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Ci0gICAgfQorICAgIHZvaWQgZW1p
dEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9y
LCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQ
YXRoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgotICAgIHZv
aWQgZW1pdEFsbG9jYXRlSlNDZWxsKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBH
UFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9j
YXRlSlNDZWxsKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9y
LCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIHNj
cmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0
ZShyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CiAgICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhzdHJ1Y3R1cmUsIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4K
LSAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3Ry
dWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRj
aEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
R1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBh
bGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdl
LCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQog
ICAgIHsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBh
bGxvY2F0b3JHUFIsIHN0cnVjdHVyZSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBz
dG9yZVB0cihzdG9yYWdlLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSk7CkBAIC0xNTc2LDEzICsxNTE5LDggQEAgcHVibGljOgogICAgICAgICBWTSYgdm0s
IEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBz
dG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0g
ICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+
KHZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yKSB7Ci0gICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjEpOwotICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQ
UjEsIHN0cnVjdHVyZSwgc3RvcmFnZSwgbWFzaywgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAg
ICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxv
Y2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIxLCBzdHJ1Y3R1cmUsIHN0b3Jh
Z2UsIG1hc2ssIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUg
U3RvcmFnZVR5cGUsIHR5cGVuYW1lIE1hc2tUeXBlPgpAQCAtMTU5MywyMCArMTUzMSw3IEBAIHB1
YmxpYzoKICAgICAKICAgICAvLyBhbGxvY2F0aW9uU2l6ZSBjYW4gYmUgYWxpYXNlZCB3aXRoIGFu
eSBvZiB0aGUgb3RoZXIgaW5wdXQgR1BScy4gSWYgaXQncyBub3QgYWxpYXNlZCB0aGVuIGl0CiAg
ICAgLy8gd29uJ3QgYmUgY2xvYmJlcmVkLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVT
aXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwgR1BSUmVn
IGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwg
SnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtl
ZFNwYWNlOjpzaXplU3RlcCAmIChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAxKSksICJNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKLSAgICAgICAgCi0gICAg
ICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAp
OwotICAgICAgICAKLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpzaXpl
U3RlcCAtIDEpLCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEpOwotICAgICAgICB1cnNoaWZ0
MzIoVHJ1c3RlZEltbTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSMSwgVHJ1c3RlZEltbTMyKE1hcmtl
ZFNwYWNlOjpsYXJnZUN1dG9mZiA+PiBzdGVwU2hpZnQpKSk7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihzdWJzcGFjZS5hbGxvY2F0b3JGb3JTaXplU3RlcCgpIC0gMSksIHNjcmF0Y2hHUFIy
KTsKLSAgICAgICAgbG9hZFB0cihCYXNlSW5kZXgoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCB0
aW1lc1B0cigpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAKLSAgICAgICAgZW1pdEFsbG9jYXRl
KHJlc3VsdEdQUiwgbnVsbHB0ciwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7
Ci0gICAgfQorICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0
R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBH
UFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRo
KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVj
dHVyZVR5cGU+CiAgICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbChWTSYgdm0s
IEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgYWxsb2Nh
dGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlz
dCYgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FA
cGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc5LDIyICs3OSwyMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+
c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9y
PEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0
ZXJJRCByZXN1bHRSZWcgPSByZXR1cm5WYWx1ZUdQUjsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRv
clJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIGFsbG9jYXRvclJlZyk7Ci0gICAgaWYgKGFs
bG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoSnVtcCgpKTsKLSAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAg
IGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFN0b3JlQ2VsbChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOworICAgIGlmICghYWxsb2Nh
dG9yKQorICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0
cihudWxscHRyKTsKKyAgICAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQo
YWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRl
cmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdFN0b3JlQ2VsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOworICAgIH0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTg1Niw5
ICs4NTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhjYWxsZWVSZWcsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0
YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
cmFyZURhdGFSZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9m
QWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0
YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1
cmVSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVn
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbTMyKEFsbG9jYXRvcigpLm9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihjYWNoZWRGdW5j
dGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVl
cyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlND
ZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKQEAgLTg2OCw3ICs4NjksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAg
ICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBudWxscHRyLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5
LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVj
dHVyZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFy
b2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04MSwyMiArODEsMjMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUtPnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQmxv
Y2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3Zt
KS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFj
ZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJl
Z2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcg
PSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcpOwotICAgIGlmIChhbGxvY2F0
b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBhdXRv
IG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBhbGxvY2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBi
dXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgaWYgKCFhbGxvY2F0b3IpCisg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgZWxzZSB7CisgICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOworICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0
b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBt
YXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGlu
ZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTc2Niw5ICs3NjcsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhjYWxsZWVSZWcsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFy
ZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFS
ZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkMzIoQWRk
cmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9y
KCkpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVSZWcpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbTMyKEFs
bG9jYXRvcigpLm9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2Fj
aGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5j
aFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVu
TXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKQEAgLTc3OCw3ICs3NzksNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwog
ICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1h
c2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBudWxscHRyLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBz
Y3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJl
ZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywg
YnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaFJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2NyYXRjaFJlZyk7CiAg
ICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI2ODkx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0
dGVyZmx5OjpvcHRpbWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0
aWFsaXplZChWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6QXNzZXJ0KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShi
YXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVV
bmluaQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0Nl
bGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
c0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRv
dGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogYmFzZSA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6
ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAo
IWJhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAtMTY1LDcg
KzE2NSw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAgICB2
b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xk
U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0gdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbmV3U2l6ZSwgbnVsbHB0
ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIW5ld0Jhc2Up
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNo
b3VsZG4ndCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGlu
Z3MoVk0mCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2Fs
bGVlLmdldCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJv
bCwgZ2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgdm9p
ZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3Vt
ZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwobWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxs
cHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgdm9pZCogYmFja2luZ1N0
b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5kKS5h
bGxvY2F0ZU5vblZpcnR1YWwodm0sIG1hcHBlZEFyZ3VtZW50c1NpemUoKSwgbnVsbHB0ciwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRp
Y19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVkQXJndW1lbnRzLnNldCh2
bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0t
OykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmluaXRN
b2RpZmllCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9y
KTsKIAogICAgIGlmIChhcmdzTGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9
IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iu
a2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4Pihhcmdz
TGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOworICAgICAg
ICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZp
ZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIGJvb2wqIG1vZGlmaWVkQXJndW1lbnRzID0gc3Rh
dGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgICAgIG1fbW9kaWZpZWRBcmd1bWVu
dHNEZXNjcmlwdG9yLnNldCh2bSwgdGhpcywgbW9kaWZpZWRBcmd1bWVudHMpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBhcmdzTGVuZ3RoOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBk
YXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51
bGwpOworICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBhbGxvY2F0aW9uU2l6ZSwgbnVsbHB0ciwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkocmV2aXNpb24gMjI2ODkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQog
ICoKQEAgLTgxLDcgKzgxLDEwIEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CiAKICAg
ICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91
c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0
ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAg
ICB2bSwKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3Jh
Z2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLAorICAgICAg
ICAgICAgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgb3V0
T2ZMaW5lU3RvcmFnZSk7CkBAIC05OCw3ICsxMDEsMTAgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBpbmRleEJpYXMgPSAwOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBB
cnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUsIGlu
aXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4
Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rv
ckxlbmd0aCkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJu
TnVsbCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwKKyAgICAgICAgICAgIEJ1
dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLAorICAgICAgICAgICAgZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAo
VU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVT
dG9yYWdlKTsKQEAgLTM2OCw3ICszNzQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9
IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2Fw
YWNpdHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAg
IHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwp
OwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjI2ODkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMzgs
NiArMjM4LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYgdgogCiAg
ICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3Vv
dXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGhIaW50KTsKICAgICAgICAgdm9p
ZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmly
dHVhbCgKKyAgICAgICAgICAgIHZtLAogICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksCiAgICAgICAgICAgICBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOwogICAgICAgICBpZiAoIXRlbXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyMjY4
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNv
bnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAgICAgICBzaXplX3Qg
c2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAgaWYgKHNpemUpIHsK
LSAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDUsMTQgKzE0NSwxNSBAQCBDb21wbGV0ZVN1YnNwYWNlKiBKU0NlbGw6OnN1YnNw
YWNlRm9yKFZNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSB2b2lkKiB0cnlB
bGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
IHsKKyAgICBWTSYgdm0gPSAqaGVhcC52bSgpOwogICAgIEFTU0VSVChkZWZlcnJhbENvbnRleHQg
fHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJU
KHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6
ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgIEpTQ2VsbCogcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4odm0pLT5hbGxvY2F0ZU5vblZpcnR1
YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKICAgICBpZiAoZmFp
bHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsICYmICFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAg
IEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLSAgICBoZWFwLnZt
KCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6OmluZm8oKSk7CisgICAgQVNTRVJUKCF2
bS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAgICB2bS5zZXRJbml0aWFsaXppbmdPYmplY3RD
bGFzcyhUOjppbmZvKCkpOwogI2VuZGlmCiAgICAgcmVzdWx0LT5jbGVhclN0cnVjdHVyZSgpOwog
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0Miw3ICszNDIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlbnF1
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNHbG9i
YWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK0pT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUs
IFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKQogICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV92bSh2bSkKICAgICAsIG1fbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSkp
CkBAIC0zNjAsNiArMzYwLDcgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2
bSwgUwogICAgICwgbV90ZW1wbGF0ZVJlZ2lzdHJ5KHZtKQogICAgICwgbV9ydW50aW1lRmxhZ3Mo
KQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUp
CisgICAgLCBtX3RocmVhZExvY2FsQ2FjaGUodGhyZWFkTG9jYWxDYWNoZSA/IFdURk1vdmUodGhy
ZWFkTG9jYWxDYWNoZSkgOiB2bS5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZSkKIHsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAyMjY4OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFJ1bnRpbWVGbGFncyYgcnVudGltZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9ydW50
aW1lRmxhZ3M7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0
IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmpl
Y3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwLCBS
ZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApAQCAtODkzLDYgKzg5Myw4IEBAIHB1Ymxp
YzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBwZXJNYXAoKSBjb25zdCB7IHJldHVybiBtX3dyYXBw
ZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNldFdyYXBwZXJNYXAoSlNXcmFwcGVyTWFwKiBtYXAp
IHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAjZW5kaWYKKyAgICAKKyAgICBUaHJlYWRMb2NhbENh
Y2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNo
ZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEdsb2JhbFByb3BlcnR5SW5mbyB7
CkBAIC05MzAsNiArOTMyLDggQEAgcHJpdmF0ZToKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAog
ICAgIFJldGFpblB0cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKICNlbmRpZgorICAgIAor
ICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2FsQ2FjaGU7CiB9OwogCiBK
U0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5o
IgogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENh
Y2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xNDUsNyArMTQ2LDkgQEAg
dm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKIAogICAgIG1fdm0tPnNldExhc3RTdGFja1Rv
cCh0aHJlYWQuc2F2ZWRMYXN0U3RhY2tUb3AoKSk7CiAgICAgQVNTRVJUKHRocmVhZC5zdGFjaygp
LmNvbnRhaW5zKG1fdm0tPmxhc3RTdGFja1RvcCgpKSk7Ci0KKyAgICAKKyAgICBtX3ZtLT5kZWZh
dWx0VGhyZWFkTG9jYWxDYWNoZS0+aW5zdGFsbCgqbV92bSk7CisgICAgCiAgICAgbV92bS0+aGVh
cC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIyNjg5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM2LDYgKzIzNiw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5jSXRlcmF0aW9uID0g
ZmEKICAgICB2KGJvb2wsIGR1bXBTaXplQ2xhc3NlcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgdXNlQnVtcEFsbG9jYXRvciwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCBzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycywgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB0cmFkZURlc3RydWN0b3JCbG9ja3MsIHRy
dWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJseVVwZGF0ZVRvcENhbGxG
cmFtZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZU9T
UkVudHJ5VG9ERkcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9u
IDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBBTFdBWVNfSU5MSU5FIEpTQXJyYXkqIHRy
eUNyZWF0ZVVuaW5pdGlhCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKICAgICBib29sIGNyZWF0ZVVuaW5pdGlhbGl6ZWQgPSBn
bG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwotICAgIHZv
aWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZp
cnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgIHZvaWQq
IHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1
YWwodm0sIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRlZmVy
cmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAo
VU5MSUtFTFkoIXRlbXApKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw2ICsxMjEsNyBAQAogI2luY2x1ZGUgIlN0cm9uZ0lu
bGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGVzdFJ1
bm5lclV0aWxzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNs
dWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNs
dWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKQEAgLTMwNiw2ICszMDcsOSBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgdXBkYXRlU29mdFJlc2VydmVkWm9uZVNp
emUoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSk7CiAgICAgc2V0TGFzdFN0YWNrVG9w
KHN0YWNrLm9yaWdpbigpKTsKIAorICAgIGRlZmF1bHRUaHJlYWRMb2NhbENhY2hlID0gVGhyZWFk
TG9jYWxDYWNoZTo6Y3JlYXRlKGhlYXApOworICAgIGRlZmF1bHRUaHJlYWRMb2NhbENhY2hlLT5p
bnN0YWxsKCp0aGlzKTsKKwogICAgIC8vIE5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVwIGV2ZXJ5
dGhpbmcgY29uc2lzdGVudCBoZXJlCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodGhpcyk7CiAgICAg
QXRvbWljU3RyaW5nVGFibGUqIGV4aXN0aW5nRW50cnlBdG9taWNTdHJpbmdUYWJsZSA9IFRocmVh
ZDo6Y3VycmVudCgpLnNldEN1cnJlbnRBdG9taWNTdHJpbmdUYWJsZShtX2F0b21pY1N0cmluZ1Rh
YmxlKTsKQEAgLTM4Myw3ICszODcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAjZW5kaWYKICAgICAKICAgICBHaWdhY2FnZTo6YWRkUHJpbWl0aXZlRGlzYWJs
ZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7Ci0KKyAg
ICAKICAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAgIAogICAgIExMSW50OjpE
YXRhOjpwZXJmb3JtQXNzZXJ0aW9ucygqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJUZW1w
bGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5j
bHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKICNpbmNsdWRl
ICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYv
QnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY1Niw2ICs2NTcsMTEgQEAgcHVibGljOgogCiAg
ICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07
CiAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRlZE9iamVj
dHM7CisgICAgCisjaWYgIUVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVGhyZWFkTG9jYWxDYWNo
ZTo6RGF0YSogdGhyZWFkTG9jYWxDYWNoZURhdGE7CisjZW5kaWYKKyAgICBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gZGVmYXVsdFRocmVhZExvY2FsQ2FjaGU7CiAKICAgICBMb2NhbFRpbWVPZmZz
ZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAyMjY4OTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpc2FsbG93Vk1SZWVudHJ5LmgiCiAj
aW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKKyNpbmNs
dWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KQEAgLTQwLDYgKzQx
LDcgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAgIDogbV92
bSh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKKyAgICBnbG9iYWxP
YmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtKTsKICAgICBBU1NFUlQoIURpc2Fs
bG93Vk1SZWVudHJ5Ojppc0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChU
aHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAgIGlmICgh
dm0uZW50cnlTY29wZSkgewpJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDIyNjg5MSkKKysrIFNvdXJj
ZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAKICNp
bmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHN0ZGludC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331850</attachid>
            <date>2018-01-20 16:43:36 -0800</date>
            <delta_ts>2018-01-20 16:54:12 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>177169</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxOC0wMS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBHQyBzaG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwgY2FjaGVzKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlz
IGEgYmlnIHN0ZXAgdG93YXJkcyBvYmplY3QgZGlzdGFuY2luZyBieSBzaXRlIG9yaWdpbi4gVGhp
cyBwYXRjaCBpbXBsZW1lbnRzIFRMQ3MsIG9yCisgICAgICAgIHRocmVhZC1sb2NhbCBjYWNoZXMs
IHdoaWNoIGFsbG93IGVhY2ggdGhyZWFkIHRvIGFsbG9jYXRlIGZyb20gaXRzIG93biBmcmVlIGxp
c3RzLiBJdCBhbHNvCisgICAgICAgIG1lYW5zIHRoYXQgYW55IGdpdmVuIHRocmVhZCBjYW4gY29u
dGV4dC1zd2l0Y2ggVExDcy4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGRvIHNlcGFyYXRlCisgICAg
ICAgIGFsbG9jYXRpb24gZm9yIHNlcGFyYXRlIHNpdGUgb3JpZ2lucy4gRXZlbnR1YWxseSwgb25j
ZSB3ZSByZXNoYXBlIGhvdyBNYXJrZWRCbG9jayBsb29rcywgdGhpcworICAgICAgICB3aWxsIGFs
bG93IHVzIHRvIGhhdmUgYSBoYXJkIGRpc3RhbmNpbmcgY29uc3RyYWludCBiZXR3ZWVuIG9iamVj
dHMgZnJvbSBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRTcGVjaWFs
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6
CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAoSlNDOjpCMzo6
U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBW
YWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6CisgICAg
ICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5oOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlND
OjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6Y2xlYXIpOgorICAgICAgICAqIGJ5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRB
bGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlSlNDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aFNpemVJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVIZWFwQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFsbG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdG9yRm9yU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgorICAgICAgICAqIGhlYXAv
QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6Y2VsbFNpemUg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6b2Zmc2V0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWxsb2NhdG9yOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRv
cklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6YWxsb2NhdGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlIGNvbnN0KToKKyAgICAg
ICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OkJsb2NrRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZpbmRC
bG9ja0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFs
bG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmdGb3JH
b29kKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmcpOgor
ICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6QmxvY2tE
aXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJs
b2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OmNlbGxLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OmFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmcmVl
TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpvZmZz
ZXRPZkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om9m
ZnNldE9mQ2VsbFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjpDb21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6Q29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxv
Y2F0b3JGb3JTbG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVT
bG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KToK
KyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlNDOjpDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0ZyZWVM
aXN0Lmg6CisgICAgICAgICogaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRocmVhZExvY2FsQ2FjaGVMYXlvdXQpOgorICAgICAgICAqIGhlYXAv
SXNvQ2VsbFNldC5oOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOgorICAgICAgICAo
SlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbCk6CisgICAgICAg
ICogaGVhcC9Jc29TdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IpOgorICAg
ICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpMb2NhbEFs
bG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnJlc3VtZUFs
bG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmdGb3JH
b29kKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAg
ICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgor
ICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbik6CisgICAgICAgIChKU0M6
OkxvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxv
Y2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpMb2NhbEFs
bG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFs
bG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6
ZSk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zv
ckdvb2QpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1Ns
b3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICog
aGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6
VGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlNDOjpUaHJl
YWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENh
Y2hlOjpkZXN0cm95RGF0YSk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6Omluc3Rh
bGxTbG93KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbERhdGEpOgor
ICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KToKKyAgICAgICAg
KEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcik6CisgICAgICAgICogaGVhcC9UaHJl
YWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpv
ZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZp
cnN0QWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpnZXRJbXBsKToKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9j
YWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnRyeUdldEFsbG9jYXRvcik6
CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQp
OgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhyZWFkTG9jYWxDYWNo
ZUxheW91dCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmFsbG9jYXRl
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZUxheW91dDo6c25hcHNob3Qp
OgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3RvcnkpOgorICAg
ICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oOiBBZGRlZC4KKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dm0pOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFi
bGVTaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik6
CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlNDOjpIYXNoTWFw
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZXN0cmljdGVkKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnRyeUFsbG9j
YXRlQ2VsbEhlbHBlcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
dGhyZWFkTG9jYWxDYWNoZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgor
ICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAg
ICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwOgorICAg
ICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6CisKIDIwMTgtMDEtMjAgIENh
aW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIE51bWJlclBy
b3RvdHlwZTo6ZXh0cmFjdFJhZGl4RnJvbUFyZ3MgaW5jb3JyZWN0bHkgY2FzdCBkb3VibGUgdG8g
aW50MzJfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI3Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC00NjYsNiArNDY2LDcgQEAgZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNw
cAogCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCitoZWFwL0FsbG9jYXRvci5jcHAK
IGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCiBoZWFwL0NlbGxBdHRyaWJ1dGVzLmNwcAogaGVhcC9D
ZWxsQ29udGFpbmVyLmNwcApAQCAtNTAwLDYgKzUwMSw3IEBAIGhlYXAvSXNvQ2VsbFNldC5jcHAK
IGhlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogaGVhcC9M
YXJnZUFsbG9jYXRpb24uY3BwCitoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAogaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCiBoZWFwL01hcmtTdGFjay5jcHAKIGhlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuY3BwCkBAIC01MTgsNiArNTIwLDggQEAgaGVhcC9TdG9wSWZOZWNlc3NhcnlU
aW1lci5jcHAKIGhlYXAvU3Vic3BhY2UuY3BwCiBoZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3luY2hyb25vdXNuZXNzLmNwcAoraGVhcC9UaHJl
YWRMb2NhbENhY2hlLmNwcAoraGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAogaGVhcC9W
aXNpdFJhY2VLZXkuY3BwCiBoZWFwL1dlYWsuY3BwCiBoZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSwxMyBAQAogCQkwRjcyNUNBQTFDNTAzREVEMDBB
RDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggKi87IH07
CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBRTFDNTA2
RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkwRjc0QjkzQjFG
ODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMgLyogUHJvdG90
eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU1MjAwRDI1RUYw
MDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjAyMDBEMjYwQjAwMzhFMkNGIC8qIExvY2Fs
QWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5l
cy5oICovOyB9OworCQkwRjc1QTA2MTIwMEQyNjE4MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU3
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVBMDYyMjAwRDI2MUQwMDM4RTJDRiAv
KiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5o
ICovOyB9OworCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NDIwMEQyNUVG
MDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEw
NjYyMDEzRTRGMTAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8qIEpJ
VEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8q
IEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHVi
Um91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0MTksNiArMjQyNiwxNyBAQAogCQkwRjcyNUNBRDFDNTA2
RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0Iz
Rm9sZFBhdGhDb25zdGFudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcy
NUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9C
M0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzRC
OTNBMUY4OTYxNDUwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNzVBMDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRo
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBEMjVGMDAwMzhF
MkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExvY2FsQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBEMjVGMTAwMzhF
MkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1
QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0
aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU0NDcsNiArNTQ2NSw3IEBACiAJCQkJMTQyOUQ5MkUwRUQyMkQ3MDAwQjg5NjE5
IC8qIEpJVC5oICovLAogCQkJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuY3BwICovLAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuaCAqLywKKwkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9y
LmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3Bw
ICovLAogCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQu
Y3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0
b3IuY3BwICovLApAQCAtNTU0MCw2ICs1NTU5LDE2IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFG
QURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCisJCQkJMEY3
NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1
QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVB
MDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVB
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1
QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY3
NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkwRjc1
QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKKwkJ
CQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAg
Ki8sCisJCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxs
b2NhdGluZ1Njb3BlLmggKi8sCkBAIC04MDQ4LDYgKzgwNzcsNyBAQAogCQkJCTBGMkFDNTcxMUU4
RUU0NTQwMDAxRUUzRiAvKiBBaXJGb3JtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0Ux
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjEzLDYgKzgyNDMsNyBAQAogCQkJCTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNh
bGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUwMDMyM0Y2NyAv
KiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjc1QTA2NDIwMEQyNjI4MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2tt
YXBWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8q
IEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTgzODIsNiAr
ODQxMyw3IEBACiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9z
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODEyMUFCM0Q4QkUwMEJCQjhFOCAvKiBE
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgx
NDFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjQ4NTMyMjE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjYyLDYgKzg2OTQs
NyBAQAogCQkJCUZFQTBDNDAzMUNERDdEMUQwMDQ4MTk5MSAvKiBGdW5jdGlvbldoaXRlbGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVBQTAwMDU5M0FE
IC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjAyMDBEMjYwQjAw
MzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENv
bnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtODc0Niw2ICs4Nzc5LDcgQEAKIAkJCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDM4NkE3OTFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhl
Y3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjIyMDBEMjYxRDAwMzhFMkNGIC8q
IEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkY5MkI5MUZENzZGRkYw
MEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjky
QkExRkQ3NzAwNDAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC04OTMxLDYgKzg5NjUsNyBAQAogCQkJCUUzM0Y1MDc5MUI4NDIy
NTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc1
QTA1RTIwMEQyNUY2MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4
QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBpbiBIZWFkZXJzICovLApAQCAtOTQzMCw2ICs5
NDY1LDcgQEAKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0QkU3RDMzMTcxMzVDRjQwMEQxODA3QSAvKiBXZWFrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjYyMDEzRTRGMTAwMzhFMkNG
IC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAw
N0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkzQUREODFGRTcw
MkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNiArMTI3NywxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9
IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CisgICAgICAgICAgICAg
ICAgVG1wIGRzdFRtcCA9IG1fY29kZS5uZXdUbXAodmFsdWUudmFsdWUoKS0+cmVzdWx0QmFuaygp
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKHZhbHVlLnZhbHVl
KCktPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBkc3RUbXApOworICAgICAgICAg
ICAgICAgIGFyZyA9IGRzdFRtcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKICAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5lYXJs
eUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHJldmlzaW9uIDIy
NzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBAIGJvb2wgUGF0Y2hwb2ludFNwZWNp
YWw6OmFkbWl0c1N0YWNrKEluc3QKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVu
dDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVy
OgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3Rl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw2ICsxMTAsOSBAQCB2b2lk
IFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgICAgICBjYXNlIFZhbHVl
UmVwOjpDb25zdGFudDoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2U7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJX
aXRoQ2xvYmJlcjoKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2VEZWY7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6
CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTEyOCw2ICsxMzEsMTAgQEAgdm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hB
cmdJbXBsKAogICAgICAgICAgICAgLy8gYmUgYWJsZSB0byByZWNvdmVyIHRoZSBzdGFja21hcCB2
YWx1ZS4gU28sIGZvcmNlIExhdGVDb2xkVXNlIHRvIHByZXNlcnZlIHRoZQogICAgICAgICAgICAg
Ly8gb3JpZ2luYWwgc3RhY2ttYXAgdmFsdWUgYWNyb3NzIHRoZSBTcGVjaWFsIG9wZXJhdGlvbi4K
ICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgb3B0aW9uYWxEZWZBcmdX
aWR0aCAmJiAqb3B0aW9uYWxEZWZBcmdXaWR0aCA8IGNoaWxkLnZhbHVlKCktPnJlc3VsdFdpZHRo
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcm9sZSBjYW4gb25seSBiZSBzb21lIGtpbmQg
b2YgZGVmIGlmIHdlIGRpZCBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwgd2hpY2ggaXMKKyAgICAg
ICAgICAgICAgICAvLyBvbmx5IGFsbG93ZWQgZm9yIHBhdGNocG9pbnRzLiBQYXRjaHBvaW50cyBk
b24ndCB1c2UgdGhlIGRlZkFyZ1dpZHRoIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIUFyZzo6aXNBbnlEZWYocm9sZSkpOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAg
cm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0yNDUsNiArMjUy
LDcgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQQogICAgICAgICAv
LyBXZSBhbHJlYWR5IHZlcmlmaWVkIGJ5IGlzQXJnVmFsaWRGb3JWYWx1ZSgpLgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgY2FzZSBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBhcmcuaXNUbXAoKTsKICAgICBjYXNlIFZh
bHVlUmVwOjpMYXRlUmVnaXN0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMTEg
QEAgdm9pZCBTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVnaXN0ZXIoVgogICAgIGFwcGVuZChD
b25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiB9CiAKK3Zv
aWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIoVmFsdWUqIHZh
bHVlKQoreworICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyV2l0aENsb2JiZXIpKTsKK30KKwogdm9pZCBTdGFja21hcFZhbHVlOjpzZXRDb25z
dHJhaW5lZENoaWxkKHVuc2lnbmVkIGluZGV4LCBjb25zdCBDb25zdHJhaW5lZFZhbHVlJiBjb25z
dHJhaW5lZFZhbHVlKQogewogICAgIGNoaWxkKGluZGV4KSA9IGNvbnN0cmFpbmVkVmFsdWUudmFs
dWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDcgKzk5LDggQEAgcHVibGljOgogICAgIC8v
IFRoaXMgaXMgYSBoZWxwZXIgZm9yIHNvbWV0aGluZyB5b3UgbWlnaHQgZG8gYSBsb3Qgb2Y6IGFw
cGVuZCBhIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGNvbnN0cmFpbmVkCiAgICAgLy8gdG8gU29tZVJl
Z2lzdGVyLgogICAgIHZvaWQgYXBwZW5kU29tZVJlZ2lzdGVyKFZhbHVlKik7Ci0KKyAgICB2b2lk
IGFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKFZhbHVlKik7CisgICAgCiAgICAgY29uc3Qg
VmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQogCiAgICAg
Ly8gU3RhY2ttYXBzIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoYXQgdGhlIG9wZXJhdGlvbiBtYXkg
Y2xvYmJlciBzb21lIHJlZ2lzdGVycy4gQ2xvYmJlcmluZyBhIHJlZ2lzdGVyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzMiwyMSArNDMyLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1
ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IFZvaWQpCiAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQgPT0gVmFs
dWVSZXA6Oldhcm1BbnksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4o
KS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6V2FybUFueToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICp2YWx1ZSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0ZVN0YWNrbWFwQ29uc3RyYWludCh2YWx1ZSwgQ29uc3RyYWluZWRWYWx1ZSh2
YWx1ZSwgdmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludCksIENv
bnN0cmFpbnRSb2xlOjpEZWYpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2
YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tBZGQ6CkBAIC01NzEsMTYgKzU1OCwyNCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsKICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6V2FybUFueToKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKLSAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToKKyAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29u
c3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xv
YmJlcjoKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwg
KCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAgICAgICAgIFZBTElEQVRFKGNv
bnRleHQtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKSwgKCJBdCAiLCAqY29udGV4dCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgog
ICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6RGVmLCAoIkF0ICIs
ICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0
ZXI6CisgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkua2luZCgpID09IFZhbHVlUmVwOjpMYXRl
UmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9s
ZTo6VXNlLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgaWYg
KHZhbHVlLnJlcCgpLnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJ
bnQodmFsdWUudmFsdWUoKS0+dHlwZSgpKSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUp
KTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZVJlcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAgdm9pZCBWYWx1
ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvKFJlZ2lzdAogICAgIGNhc2UgQ29sZEFueToKICAgICBj
YXNlIExhdGVDb2xkQW55OgogICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgIGNhc2UgU29tZVJl
Z2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBTb21lRWFybHlSZWdpc3RlcjoKICAgICBjYXNl
IENvbnN0YW50OgogICAgICAgICByZXR1cm47CkBAIC03MSw2ICs3Miw3IEBAIHZvaWQgVmFsdWVS
ZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2Fz
ZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIExhdGVSZWdpc3RlcjoKQEAgLTE3NSw2ICsxNzcsOSBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAg
ICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIiKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJp
bnQoIlNvbWVFYXJseVJlZ2lzdGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY1
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBh
CiAgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKICAgICAg
ICAgU29tZVJlZ2lzdGVyLAorICAgICAgICAKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVz
ZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyIGJ1
dCB0aGF0IHRoaXMKKyAgICAgICAgLy8gcmVnaXN0ZXIgaXMgdGhlbiBjb2JiZXJlZCB3aXRoIGdh
cmJhZ2UuIFRoaXMgb25seSB3b3JrcyBmb3IgcGF0Y2hwb2ludHMuCisgICAgICAgIFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyLAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGlt
cGxpZXMKICAgICAgICAgLy8gdGhhdCB0aGUgZGVmIGhhcHBlbnMgYmVmb3JlIGFueSBvZiB0aGUg
ZWZmZWN0cyBvZiB0aGUgc3RhY2ttYXAuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IKQEAgLTEwNyw3
ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWVSZXAoS2luZCBraW5kKQogICAgICAgICA6IG1f
a2luZChraW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFueSB8fCBraW5k
ID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNvbWVSZWdpc3Rl
ciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0g
V2FybUFueSB8fCBraW5kID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5k
ID09IFNvbWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyIHx8IGtp
bmQgPT0gU29tZUVhcmx5UmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZVJlcCBy
ZWcoUmVnIHJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NTUsMTUgKzk1NSw5IEBAIHZv
aWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVf
dCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IWFsbG9jYXRvcikgewotICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291
bGQgc3VjayEKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5qdW1wKCkp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAg
ICAgICAgaml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2Nh
dGUoc2NyYXRjaEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9j
YXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw4ICs0Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
Ci0gICAgICAgIDogbV9hbGxvY2F0b3IoMCkKLSAgICAgICAgLCBtX2lubGluZUNhcGFjaXR5KDAp
CisgICAgICAgIDogbV9pbmxpbmVDYXBhY2l0eSgwKQogICAgIHsKICAgICB9CiAKQEAgLTYzLDcg
KzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBtX2Fs
bG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxsb2NhdG9yKCk7CiAg
ICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSAw
OwogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwpAQCAtNzcsNyArNzYsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQoVk0mLCBK
U09iamVjdCogcHJvdG90eXBlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBtX2FsbG9jYXRvcjsg
Ly8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4K
KyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdz
IGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9zdHJ1Y3R1cmU7CiAgICAgdW5zaWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVj
dEFsbG9jYXRpb25Qcm9maQogCiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4
ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEZpbmFsT2JqZWN0VHlw
ZSk7Ci0gICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2Fs
bG9jYXRvciA9IEFsbG9jYXRvcigpOwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05OSwxMSArOTks
MTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQogICAgIEFTU0VS
VChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsK
IAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0u
Y2VsbFNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcik7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
LmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2Yg
ZXh0cmEgaW5saW5lIGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KICAgICBp
ZiAoYWxsb2NhdG9yKSB7Ci0gICAgICAgIHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci0+Y2VsbFNp
emUoKSAtIGFsbG9jYXRpb25TaXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwor
ICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3IuY2VsbFNpemUodm0uaGVhcCkgLSBhbGxv
Y2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICAgICAgaW5s
aW5lQ2FwYWNpdHkgKz0gc2xvcDsKICAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5ID4gSlNGaW5h
bE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgIGlubGluZUNhcGFjaXR5
ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKQEAgLTExMyw3ICsxMTMsNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAKICAgICBpZiAoaXNQ
b2x5UHJvdG8pIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzUG9seVByb3RvKCkpOwot
ICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxs
b2NhdG9yKCk7CiAgICAgICAgIGV4ZWN1dGFibGUtPnNldENhY2hlZFBvbHlQcm90b1N0cnVjdHVy
ZSh2bSwgc3RydWN0dXJlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXhlY3V0YWJsZSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEzLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBp
ZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0
QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgp
LT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgeworICAgICAgICAgICAg
bV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1faml0LmFkZFB0cigKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1t
MzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSwKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRB
bGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKLSAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9q
aXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2NhdG9yKSB7CiAgICAg
ICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2sodmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIs
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3Rl
ZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3Rl
ZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1p
dEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwpAQCAtNDIwOCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1h
a2VSb3BlKE5vZAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAK
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tEaXJlY3Rvcnkq
IGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9qaXQudm0oKSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
YmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChy
ZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JW
YWx1ZSA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgSklUQWxs
b2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZElt
bVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgIG1f
aml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyArODM4MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGlu
aXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRv
ciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwpAQCAtODQwOCw5ICs4NDA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAgICAKLSAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc2Ny
YXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7
CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwogICAg
IG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgIAogICAgIGZvciAocHRyZGlmZl90IG9m
ZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNldCAr
PSBzaXplb2Yodm9pZCopKQpAQCAtODQyOCw3ICs4NDI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91
dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAg
IAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ1Niw4ICs4NDUyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIEdQUlJlZyBzY3JhdGNoR1BS
MyA9IHNjcmF0Y2gzLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
UGF0aDsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIpOwotICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgYWxsb2NhdG9yLCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5lbWl0QWxsb2NhdGUo
c2NyYXRjaEdQUjEsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CiAgICAgICAgIApAQCAtMTE0NDEsMTQgKzExNDM2LDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE4KICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0
YUdQUik7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxs
b2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2Nh
dG9yKCkpLCBhbGxvY2F0b3JHUFIpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpKSwgc3RydWN0dXJlR1BSKTsKIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhbGxvY2F0b3JH
UFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVk
SW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBh
bGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBz
bG93UGF0aCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0
b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHksIG1h
c2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBy
YXJlRGF0YUdQUik7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVE
YXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwg
aW5saW5lQ2FwYWNpdHlHUFIpOwpAQCAtMTE0NzQsMTQgKzExNDY5LDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNG
aW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRp
b25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvclZhbHVlID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZt
KCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
YWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JH
UFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BS
LCBzbG93UGF0aCk7Ci0gICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBtX2ppdC5tdXRhdG9yRmVu
Y2UoKm1faml0LnZtKCkpOworICAgIGlmICghYWxsb2NhdG9yVmFsdWUpCisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFzayA9IFRydXN0
ZWRJbW0zMigwKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
Km1faml0LnZtKCkpOworICAgIH0KIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVj
dHVyZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTQxLDcgKzMxNDEsNyBA
QCBwdWJsaWM6CiAgICAgLy8gQWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVjaWZpYyBzaXpl
LgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBl
IGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKAotICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JH
UFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBz
dHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTMxNTAsNyArMzE1MCw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNpZmljIHNpemUu
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VU
eXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFnZVR5cGUgYW5k
LCBNYXNrVHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJl
ZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdl
VHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAg
ICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vi
c3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxs
b2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKKyAgICBtYWNy
byhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNl
OjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCiAg
ICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2Fs
RW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01ODU3LDEwICs1ODU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAg
ICAgICAgIAotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3Bl
U3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciks
IHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdl
dCgpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5p
bnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQpAQCAtOTg4NSw3ICs5ODg1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAg
ICAgIEFsbG9jYXRvciBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
dm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwpA
QCAtOTk0NCw3ICs5OTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBt
YXNrID0gY29tcHV0ZUJ1dHRlcmZseUluZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwogICAgICAg
ICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY2VsbEFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoY2VsbEFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFu
Y2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOwpAQCAtMTA5MzEsOCArMTA5MzEsOCBAQCBwcml2YXRl
OgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShzbG93UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFs
dWVzICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0g
ICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29u
c3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xvd1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQu
Y29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291
dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwpAQCAtMTE5NjQsMTYgKzExOTY0LDI4IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2Nh
dGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOwotICAg
ICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJbnRQdHIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9j
YXRvciA9IGJpdHdpc2VfY2FzdDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIo
KSk7CisgICAgICAgIEpJVEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3I7CisgICAgICAgIGlmIChh
bGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KEFsbG9jYXRvcihhbGxvY2F0b3ItPmFzSW50MzIoKSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRBbGxvY2F0b3I6OnZh
cmlhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgeworICAg
ICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYg
KCFhY3R1YWxBbGxvY2F0b3IuYWxsb2NhdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBoYXZlQWxsb2NhdG9yID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZlQWxs
b2NhdG9yKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNsb3dQYXRoKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhoYXZlQWxsb2NhdG9yLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZWl0aGVyIHdlIGtub3cg
dGhhdCB0aGUgYWxsb2NhdG9yIGlzIG51bGwgb3Igd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQogICAg
ICAgICAgICAgLy8gYWxsb2NhdG9yIGlzLiBJbiBlaXRoZXIgY2FzZSwgd2UgbmVlZCB0aGUgbnVs
bCBjaGVjay4KICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhhdmVBbGxvY2F0b3IgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoaGF2ZUFsbG9jYXRvcik7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goYWxsb2NhdG9yLCB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xvd1BhdGgpKTsK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVh
bChhbGxvY2F0b3IsIG1fb3V0LmNvbnN0SW50MzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSwKKyAg
ICAgICAgICAgICAgICB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xvd1BhdGgpKTsK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhdmVBbGxvY2F0b3IsIGxhc3ROZXh0KTsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTExOTgzLDcgKzExOTk1LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KHBvaW50ZXJUeXBlKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnRlcm1pbmFs
ID0gdHJ1ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFsbG9jYXRv
cik7CisgICAgICAgIGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKGFsbG9j
YXRvcik7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOwogICAg
ICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OlNvbWVFYXJseVJl
Z2lzdGVyOwogICAgICAgICAKQEAgLTExOTk0LDYgKzEyMDA5LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
anVtcFRvU2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVn
IGFsbG9jYXRvckdQUjsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2Ny
YXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRpb24gcGF0aCBi
ZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRp
b24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1hY2hpbmUgY29k
ZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hhdCBpbnN0cnVj
dGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBjb21waWxlcgpA
QCAtMTIwMDEsNyArMTIwMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBvcHRpbWl6ZWQg
cGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGNvbXBpbGVy
IHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9j
YXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0
b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgcGFy
YW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xvd1BhdGgpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1w
VG9TdWNjZXNzOwpAQCAtMTIwOTMsOCArMTIxMTQsOCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBh
bGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwo
c2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICByZXR1
cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlw
ZT4KQEAgLTEyMTEzLDE2ICsxMjEzNCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29tcGxl
dGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFj
ZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXpl
ID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
KyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdC
bG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNs
b3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0dWFsQWxsb2Nh
dG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVhbEFsbG9jYXRv
ci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHN0ZXBT
aGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIxNDEsNyArMTIx
NjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0
cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9y
Rm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1YihzaXplQ2xh
c3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxNTYsOCArMTIxNzcsNyBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAgICAgICAgIExW
YWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAg
ICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKLSAgICAg
ICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7Cisg
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJzcGFjZUZvcjxD
bGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJmbHlJbmRleGlu
Z01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTY1LDE1ICsxMjE4NSwxNCBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAgICAgICBMVmFs
dWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAg
IHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCi0gICAgICAg
ICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOworICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3BhY2VGb3I8Q2xh
c3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVD
ZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIExW
YWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7
CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRp
b25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNp
bXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGlu
c3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxODUsNyArMTIyMDQs
NyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJa
ZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywg
bV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1
ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Vuc2ln
bmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0KS0+Y2VsbFNp
emUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZNOworCitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAgIAorICAgIGV4
cGxpY2l0IEFsbG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgLy8g
VGhpcyB2ZXJzaW9uIGNhbGxzIEZhaWx1cmVGdW5jIGlmIHdlIGhhdmUgYSBudWxsIGFsbG9jYXRv
ciBvciBpZiB0aGUgVExDIGhhc24ndCBiZWVuIHJlc2l6ZWQKKyAgICAvLyB0byBpbmNsdWRlIHRo
aXMgYWxsb2NhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZhaWx1cmVGdW5jPgorICAgIHZv
aWQqIHRyeUFsbG9jYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUsIGNvbnN0IEZhaWx1cmVGdW5jJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgY2Vs
bFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFsbG9j
YXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldCgpOyB9
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRv
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworaW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoVk0mIHZtLCBHQ0Rl
ZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcih2bSwgbV9vZmZzZXQp
LmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGYWlsdXJl
RnVuYz4KK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoVk0mIHZtLCBHQ0RlZmVycmFsQ29u
dGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUsIGNvbnN0IEZhaWx1cmVG
dW5jJiBmYWlsdXJlRnVuYykgY29uc3QKK3sKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgVGhyZWFk
TG9jYWxDYWNoZTo6dHJ5R2V0QWxsb2NhdG9yKAorICAgICAgICB2bSwgbV9vZmZzZXQsCisgICAg
ICAgIFsmXSAoTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0
ID0gYWxsb2NhdG9yLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworICAgICAgICB9LAorICAgICAg
ICBbJl0gKCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFpbHVyZUZ1bmMoKTsKKyAgICAgICAg
fSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlz
aW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAKLSNpbmNsdWRlICJBbGxvY2F0aW5nU2Nv
cGUuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0zOSwxNSArMzgsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0
b3JCbG9ja3MgPSB0cnVlOwotCiBCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCog
aGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKLSAgICAs
IG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQotICAgICwgbV9j
ZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQorICAgIDogbV9jZWxsU2l6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9oZWFwKGhlYXApCiB7
CisgICAgaGVhcC0+dGhyZWFkTG9jYWxDYWNoZUxheW91dCgpLmFsbG9jYXRlT2Zmc2V0KHRoaXMp
OwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpzZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3Bh
Y2UpCkBAIC04MSwxNDMgKzc2LDE0IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0
b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1cnNvcl07CiB9CiAKLXZvaWQg
QmxvY2tEaXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCgpCi17Ci0gICAgaWYgKG1fY3VycmVu
dEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0g
ICAgCi0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0
cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmcoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0ZvckFs
bG9jYXRpb24oKQogewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKLSAgICAKLSAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQobV9m
cmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAg
ICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9l
bXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgICAgICBpZiAobV9h
bGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKLSAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAoT3B0aW9uczo6
c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQotICAgICAgICAmJiAodHJhZGVE
ZXN0cnVjdG9yQmxvY2tzIHx8ICFuZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAgICAgIGlmIChN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9T
dGVhbCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpID09IG1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2Nh
dGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAgICAgICAgLy8g
YmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJv
dGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBh
dCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3Rvcnko
KTsKLSAgICAgICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZUluKGJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2spCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jayk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jaykKLXsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxp
c3RlZCgpKTsKLSAgICAKLSAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwotICAgIAotICAg
IC8vIEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4g
TWFya2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAotICAgIC8vIHRoYXQgYWxnb3JpdGht
IGlzIHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmIChtX2Zy
ZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7Ci0gICAgICAgIEFTU0VSVChibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwotICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVk
KCk7Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAgICAgICAgQVNT
RVJUKCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKLSAgICAgICAgQVNTRVJU
KCFpc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwor
ICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2Vt
cHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fYWxsb2Nh
dGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAgIHZvaWQq
IHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhlYXBDZWxs
KiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0pOwotICAgIHNldElzRWRlbihOb0xvY2tpbmdO
ZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKLSAgICBtYXJrZWRTcGFjZSgpLmRpZEFs
bG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVl
ZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgaWYgKCFPcHRp
b25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7Ci0gICAgaWYgKCFhbGxvY2F0aW9u
Q291bnQpIHsKLSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgewotICAgICAgICAg
ICAgaWYgKGRlZmVycmFsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQt
Pm1fc2hvdWxkR0MgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
aGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFs
bG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKLX0KLQotdm9p
ZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NFUlQo
bV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBkb1Rl
c3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQoIW1h
cmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2Zy
ZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsK
LSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAgICBt
X2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAK
LSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBu
b3cgdGhpcyBkaXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAvLyBo
YXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNr
IGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRC
bG9jaykpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxv
Y2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFpbHVyZU1vZGUg
PT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9jYXRl
SW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
c2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0
aW9uQ3Vyc29yLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNv
cl07CiB9CiAKIHN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKQEAgLTMxMywyNCArMTc5
LDE5IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAgICBpZiAo
ZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJlY3Rv
cnk6OnN0b3BBbGxvY2F0aW5nIVxuIik7Ci0gICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7
Ci0gICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
bV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAg
IG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAg
ICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9j
YXRvci0+c3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBtX2xhc3RBY3RpdmVCbG9jayA9
IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotICAgIG1fZnJlZUxpc3Qu
Y2xlYXIoKTsKLQorICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAo
TG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5wcmVw
YXJlRm9yQWxsb2NhdGlvbigpOworICAgICAgICB9KTsKKyAgICAKICAgICBtX2FsbG9jYXRpb25D
dXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1fdW5zd2VwdEN1cnNvciA9
IDA7CkBAIC0zNDQsNiArMjA1LDIxIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW8KICAgICB9CiB9CiAKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5n
Rm9yR29vZCgpCit7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
dGhpcyksICI6IEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QhXG4iKTsKKyAg
ICAKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2FsQWxs
b2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+c3RvcEFsbG9jYXRp
bmdGb3JHb29kKCk7CisgICAgICAgIH0pOworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgIHdoaWxlICghbV9sb2NhbEFsbG9jYXRvcnMuaXNF
bXB0eSgpKQorICAgICAgICBtX2xvY2FsQWxsb2NhdG9ycy5iZWdpbigpLT5yZW1vdmUoKTsKK30K
Kwogdm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogewogICAgIGZv
ckVhY2hCbG9jaygKQEAgLTM1NCwxMiArMjMwLDEwIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6Omxh
c3RDaGFuY2VUb0ZpbmFsaXoKIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2NhdGlu
ZygpCiB7Ci0gICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAg
bV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RBY3RpdmVCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZd
IChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnJl
c3VtZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKQEAgLTM3OSw3ICsyNTMsNyBAQCB2b2lk
IEJsb2NrRGlyZWN0b3J5OjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBvZiBj
b2xsZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhl
IG1fbWFya2luZ1hZWgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgaWYgKCF0cmFkZURlc3Ry
dWN0b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgaWYgKCFPcHRpb25zOjp0
cmFkZURlc3RydWN0b3JCbG9ja3MoKSAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsKICAgICAgICAg
QVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKICAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVt
cHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CiAgICAgfSBlbHNlIHsKQEAgLTUxMiw1
ICszODYsMTUgQEAgTWFya2VkU3BhY2UmIEJsb2NrRGlyZWN0b3J5OjptYXJrZWRTcGFjZQogICAg
IHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQogCitib29sIEJsb2NrRGlyZWN0b3J5Ojpp
c0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkKK3sKKyAgICBib29sIHJlc3VsdCA9
IGZhbHNlOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAoTG9j
YWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0IHw9IGFsbG9jYXRv
ci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDZWxsQXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQzLDcgQEAgY2xhc3MgSGVhcDsK
IGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUgRk9S
X0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxpdmUsIExpdmUp
IC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4gKi9c
CkBAIC03NiwxNCArNzksMTIgQEAgY2xhc3MgQmxvY2tEaXJlY3RvcnkgewogICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mRnJlZUxpc3QoKTsKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2Vs
bFNpemUoKTsKLQogICAgIEJsb2NrRGlyZWN0b3J5KEhlYXAqLCBzaXplX3QgY2VsbFNpemUpOwog
ICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsKICAgICB2b2lkIGxhc3RDaGFuY2VUb0Zp
bmFsaXplKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIHZvaWQgc3Rv
cEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOwogICAgIHZv
aWQgcmVzdW1lQWxsb2NhdGluZygpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nRm9yRnVsbENvbGxl
Y3Rpb24oKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKQEAgLTk3LDEwICs5OCw5IEBAIHB1Ymxp
YzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsg
fQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7
IH0KIAotICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0
OworICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5
QmxvY2soY29uc3QgRnVuY3RvciYpOwpAQCAtMTU3LDI0ICsxNTcsMjAgQEAgcHVibGljOgogICAg
IFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KICAgICBN
YXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKICAgICAKLSAgICBjb25zdCBGcmVlTGlz
dCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CisgICAgQWxsb2NhdG9y
IGFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIEFsbG9jYXRvcihtX3RsY09mZnNldCk7IH0KICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBCaXRz
KFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiBwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsK
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZExv
Y2FsQ2FjaGVMYXlvdXQ7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSk7Ci0gICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICB2b2lkKiB0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5
QWxsb2NhdGVCbG9jaygpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSopOwotICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxD
b250ZXh0Kik7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlv
bigpOwogICAgIAotICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6
SGFuZGxlKj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGlj
ZXM7CkBAIC0xOTMsMTAgKzE4OSw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZW1wdHlDdXJz
b3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRl
IGZvciBlbXB0eSBhbGxvY2F0aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCiAgICAg
c2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2Nr
IHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgogICAgIAotICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrOwotICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrOwotCi0gICAgTG9jayBtX2xvY2s7CiAgICAgdW5zaWdu
ZWQgbV9jZWxsU2l6ZTsKICAgICBDZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8g
RklYTUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KQEAgLTIw
NiwxNiArMTk4LDEwIEBAIHByaXZhdGU6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVj
dG9yeSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5T
dWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OworICAgIAorICAgIExvY2sgbV9s
b2NhbEFsbG9jYXRvcnNMb2NrOworICAgIHNpemVfdCBtX3RsY09mZnNldDsKKyAgICBTZW50aW5l
bExpbmtlZExpc3Q8TG9jYWxBbGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxs
b2NhdG9yPj4gbV9sb2NhbEFsbG9jYXRvcnM7CiB9OwogCi1pbmxpbmUgcHRyZGlmZl90IEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEJsb2NrRGlyZWN0b3J5LCBtX2ZyZWVMaXN0KTsKLX0KLQotaW5saW5lIHB0cmRpZmZfdCBC
bG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCi17Ci0gICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJl
Y3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCAr
MzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgQmxvY2tEaXJlY3Rvcnk6
OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVy
biBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOwot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpCi17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFsmXSAo
KSAtPiBIZWFwQ2VsbCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+
dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKLSAgICAgICAgfSk7Ci19
Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBCbG9ja0RpcmVjdG9y
eTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgbV9saXZlLmZv
ckVhY2hTZXRCaXQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21w
bGV0ZVN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDE1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKIAorI2luY2x1
ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1h
cmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzgsNDAgKzQyLDM4IEBAIENvbXBs
ZXRlU3Vic3BhY2U6OkNvbXBsZXRlU3Vic3BhY2UoQ1N0cmkKICAgICA6IFN1YnNwYWNlKG5hbWUs
IGhlYXApCiB7CiAgICAgaW5pdGlhbGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM7
IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOwogfQog
CiBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAKLUJsb2NrRGly
ZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9j
YXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JG
b3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9pZCogQ29tcGxldGVTdWJz
cGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsK
LSAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFp
bHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBs
ZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCiB7Ci0gICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cykpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2Nh
dGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0gICAgZWxzZQotICAgICAgICByZXN1
bHQgPSBhbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Cisg
ICAgcmV0dXJuIGFsbG9jYXRvci50cnlBbGxvY2F0ZSgKKyAgICAgICAgdm0sIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUsCisgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAg
ICAgICAgfSk7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKICAgICBpZiAoIXNpemVDbGFz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBBbGxvY2F0b3IoKTsK
ICAgICAKICAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sg
Zm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKICAgICAvLyB0
byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVu
IHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0KQEAgLTgyLDcgKzg0LDcgQEAgQmxvY2tE
aXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQgYW55ICJmb3JF
YWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0
ZXIgaXQncyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwotICAgIGlmIChC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0p
CisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2lu
ZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKQEAgLTk4
LDcgKzEwMCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAg
ICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBz
aXplQ2xhc3MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX2FsbG9jYXRvckZvclNp
emVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtpbmRleF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpbmRleC0tKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsMjMgKzEwOSwyMyBAQCBCbG9j
a0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9maXJzdERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICByZXR1
cm4gZGlyZWN0b3J5OworICAgIHJldHVybiBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogfQogCi12
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVT
bG93KHNpemUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9
PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZt
LCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIHNhbml0aXpl
U3RhY2tGb3JWTSgmdm0pOwogICAgIAotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikp
Ci0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0
b3IpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgCiAgICAgaWYgKHNp
emUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8
PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKQEAgLTEzMiwxNSArMTM0LDE1IEBAIHZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0g
ICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVh
dGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFs
bG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlz
KTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBt
X3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0
ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xh
cmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJy
ZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMi
LCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihz
aXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9y
TW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9
CiAgICAgCi0gICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0
dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAK
IHByaXZhdGU6Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsK
KyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAogICAgIC8vIFRo
ZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBh
bGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVT
bG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29u
dGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFj
ZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgc3RkOjphcnJh
eTxBbGxvY2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0b3J5Pj4gbV9k
aXJlY3RvcmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZv
ck1vZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkK
IHsKICAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXpl
KV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1v
ZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9B
U1NFUlQobW9kZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3Ip
OwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07
CiAKIGNsYXNzIEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7
Ci0gICAgCiBwdWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5G
cmVlTGlzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVy
cmFsQ29udGV4dC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworY2xh
c3MgTG9jYWxBbGxvY2F0b3I7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKICAgICBmcmll
bmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgZnJp
ZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVycmFs
Q29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2
OCw3IEBACiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJTd2Vl
cGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6SGVhcChWTSog
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQ
b29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1f
dGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCisgICAg
LCBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApAQCAtNDQ2LDcg
KzQ0OCw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogICAgICAgICBkYXRh
TG9nKCI1ICIpOwogICAgIAogICAgIG1fYXJyYXlCdWZmZXJzLmxhc3RDaGFuY2VUb0ZpbmFsaXpl
KCk7Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1fb2JqZWN0U3Bh
Y2Uuc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgbV9vYmplY3RTcGFjZS5sYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogICAgIHJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
NyBAQCBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7
CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CitjbGFz
cyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogY2xhc3MgVk07CiBjbGFzcyBXZWFrR0NNYXBCYXNl
Owogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKQEAgLTM3Miw2ICszNzMsOCBAQCBwdWJsaWM6
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNsb3RWaXNp
dG9yKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlTGF5b3V0JiB0aHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNoZUxheW91dDsg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC03MTQs
NiArNzE3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBDdXJyZW50VGhyZWFkU3RhdGUqIG1fY3Vy
cmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9OwogICAgIFdURjo6VGhyZWFkKiBtX2N1cnJlbnRU
aHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3MgT0sgaWYgdGhpcyBiZWNvbWVzIGEgZGFuZ2xpbmcg
cG9pbnRlci4KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkTG9jYWxDYWNoZUxheW91
dD4gbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDkgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCiAKKyNpbmNsdWRl
ICJBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkxvY2Fs
QWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSw2ICszOCw3IEBAIElzb1N1YnNwYWNlOjpJc29T
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEgKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAg
LCBtX3NpemUoc2l6ZSkKICAgICAsIG1fZGlyZWN0b3J5KCZoZWFwLCBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKKyAgICAsIG1fYWxsb2NhdG9y
KG1fZGlyZWN0b3J5LmFsbG9jYXRvcigpKQogICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKHN0ZDo6bWFrZV91bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKIHsKICAg
ICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmdl
dCgpKTsKQEAgLTUwLDIwICs1NCwyMCBAQCBJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKIHsK
IH0KIAotQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNp
emUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJu
IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1YnNw
YWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogSXNvU3Vic3Bh
Y2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAgICBy
ZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25W
aXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgdm9pZCogcmVzdWx0
ID0gbV9kaXJlY3RvcnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cisg
ICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4
dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTEgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwg
QWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsK
IAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFs
bG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBJc29DZWxsU2V0OwpAQCAtNTYsMTQgKzU2LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
c2l6ZV90IG1fc2l6ZTsKICAgICBCbG9ja0RpcmVjdG9yeSBtX2RpcmVjdG9yeTsKKyAgICBBbGxv
Y2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAgICBTZW50aW5lbExpbmtl
ZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2Vs
bFNldHM7CiB9OwogCi1pbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQoraW5saW5lIEFs
bG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNp
emUoKSk7Ci0gICAgcmV0dXJuICZtX2RpcmVjdG9yeTsKKyAgICByZXR1cm4gbV9hbGxvY2F0b3I7
CiB9CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENlbGxUeXBlLCB0eXBl
KSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhlYXBDZWxsVHlwZSksIHNp
emVvZih0eXBlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiQWxsb2NhdGlu
Z1Njb3BlLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
T3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxs
b2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBtX2RpcmVjdG9yeShkaXJl
Y3RvcnkpCisgICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKKyAgICAsIG1f
ZnJlZUxpc3QobV9jZWxsU2l6ZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpcmVj
dG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fbG9jYWxBbGxv
Y2F0b3JzLmFwcGVuZCh0aGlzKTsKK30KKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9y
KExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCisgICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVj
dG9yeSkKKyAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKKyAgICAsIG1fZnJlZUxp
c3QoV1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKKyAgICAsIG1fY3VycmVudEJsb2NrKG90aGVy
Lm1fY3VycmVudEJsb2NrKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIubV9sYXN0QWN0
aXZlQmxvY2spCit7CisgICAgb3RoZXIucmVzZXQoKTsKKyAgICBpZiAob3RoZXIuaXNPbkxpc3Qo
KSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2Fs
QWxsb2NhdG9yc0xvY2spOworICAgICAgICBvdGhlci5yZW1vdmUoKTsKKyAgICAgICAgbV9kaXJl
Y3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKK30KKworTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCit7CisgICAgaWYgKGlz
T25MaXN0KCkpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2RpcmVjdG9yeS0+
bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICAgICAgcmVtb3ZlKCk7CisgICAgfQorICAgIAor
ICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0IGhvbGRpbmcgb250byBhbnkg
bWVtb3J5LiBUaGlzIGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0aGUKKyAgICAvLyBmb2xsb3dp
bmcgdHdvIHVzZSBjYXNlczoKKyAgICAvLyAKKyAgICAvLyAtIEltbW9ydGFsIFRMQy4gVGhvc2Ug
ZGVzdHJ1Y3QgYWZ0ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVjdGluZywgc28gdGhleSBzaG91
bGQgbm90IGhhdmUKKyAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGluIHRoZW0uCisgICAgLy8KKyAg
ICAvLyAtIFRMQyBvd25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBUTEMgZ2V0cyBkZXN0cm95ZWQg
YWZ0ZXIgYSBHQyBmbGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQKKyAgICAvLyAgIHRoYXQgaXQg
aXMgbm90IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBh
IGZ1bGx5IHJlc2V0IHN0YXRlIGF0IHRoZQorICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBi
ZWNhdXNlIGZvciBpdCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBo
YXZlIGFsbG9jYXRlZAorICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVz
ZSBpdCdzIHN1cHBvc2VkbHkgdW5yZWFjaGFibGUpLgorICAgIGJvb2wgb2sgPSB0cnVlOworICAg
IGlmICghbV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgICAgICBkYXRhTG9n
KCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24t
ZW1wdHkgZnJlZS1saXN0LlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRl
cih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBjdXJyZW50IGJsb2NrLlxu
Iik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2xhc3RBY3RpdmVCbG9j
aykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxv
Y2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBsYXN0IGFjdGl2ZSBibG9jay5cbiIpOworICAgICAg
ICBvayA9IGZhbHNlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fbGFzdEFj
dGl2ZUJsb2NrKTsKKyAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgIEFTU0VSVCht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Cisg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworfQorCit2b2lkIExvY2FsQWxs
b2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKK3sKKyAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2Nr
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2Nh
dGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2Nr
OworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbEFsbG9j
YXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpCit7CisgICAgc3RvcEFsbG9j
YXRpbmcoKTsKKyAgICByZXNldCgpOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOworICAgIEhlYXAmIGhlYXAgPSAqbV9kaXJlY3RvcnktPm1faGVh
cDsKKyAgICBBU1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
KTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CisKKyAg
ICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOworICAg
IGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7CisgICAgCisgICAg
ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdI
ZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFs
Q29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQg
YSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRCbG9jay4gVGhp
cyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBp
bmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5M
SUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxD
b250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDAp
KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxvY2soKTsKKyAgICBpZiAoIWJsb2Nr
KSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBtX2RpcmVjdG9y
eS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOworICAg
IEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxv
Y2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVudEJsb2NrKQor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAg
bV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKK30KKwor
dm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQorewor
ICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2VkIGZvciByZWFsIG11bHRp
LXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0bworICAgIC8vIGNvbWUg
dXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRoYXQgcHJvdG9jb2wgd291
bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAvLworICAgIC8vIC0gVGhlIGJhc2lj
IGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRyeWluZyB0byBkbyBhbiBhbGxvY2F0
aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNhbWUgYml0dmVjdG9yLiBUaGF0IHBy
b2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBsZWFzdC4KKyAgICAvLworICAgIC8v
IC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxvY2F0b3IgdHJpZ2dlcmluZyBhIHN0
ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkKKyAgICAvLyAgIHZpYSBhIHNlYXJj
aCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxpc3QuIFdobyBrbm93cyB3aGF0IGxv
Y2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25lIHdheSB0byBtYWtlIHRoaXMgd29y
ayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sgdGhhdCBwcm90ZWN0cyBhbGwgbXV0
YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBhdGhzLiBUaGF0IHdvdWxkIHByb2Jh
Ymx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0IHdvdWxkIGNlcnRhaW5seSBiZQor
ICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24gZnJvbSBKSVQgdGhyZWFkcy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjM1CisgICAg
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAor
ICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9j
YXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9ja0ZvckFsbG9jYXRpb24o
KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
ICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tz
RnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmIChPcHRpb25zOjp0cmFkZURlc3RydWN0
b3JCbG9ja3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKKyAgICAg
ICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPm1fc3Vic3Bh
Y2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fZGlyZWN0b3J5LT5tX3N1YnNw
YWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0
J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBh
cyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1v
dGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1w
dHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAg
ICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAgICBtX2RpcmVj
dG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxv
Y2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCit2
b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
aykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIExvY2Fs
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQorewor
ICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwor
ICAgIAorICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7CisgICAgCisgICAgLy8gSXQncyBw
b3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRy
aWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CisgICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBh
bmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCisgICAgaWYgKG1fZnJlZUxpc3QuYWxs
b2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQo
KSk7CisgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICAg
ICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICBBU1NFUlQoIW1fZGly
ZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgQVNT
RVJUKCFtX2RpcmVjdG9yeS0+aXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vz
c2FyeSwgYmxvY2spKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAg
IG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVl
TGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfSk7CisgICAgbV9kaXJlY3RvcnktPnNldElzRWRlbihOb0xvY2tpbmdOZWNl
c3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKKyAgICBtX2RpcmVjdG9yeS0+bWFya2VkU3Bh
Y2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6
OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKKyAgICBpZiAoIWFsbG9jYXRpb25Db3Vu
dCkgeworICAgICAgICBpZiAoIW1fZGlyZWN0b3J5LT5tX2hlYXAtPmlzRGVmZXJyZWQoKSkgewor
ICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJh
bENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fZGlyZWN0b3J5LT5tX2hlYXAtPmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNj
b3BlOjpGdWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKythbGxvY2F0aW9uQ291bnQg
Pj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgICAgIGFsbG9jYXRp
b25Db3VudCA9IDA7Cit9CisKK2Jvb2wgTG9jYWxBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIC8vIFRoaXMgYWJvbWluYXRpb24gZXhp
c3RzIHRvIGRldGVjdCB3aGVuIGFuIG9iamVjdCBpcyBpbiB0aGUgZGVhZC1idXQtbm90LWRlc3Ry
dWN0ZWQgc3RhdGUuCisgICAgLy8gVGhlcmVmb3JlLCBpdCdzIG5vdCBldmVuIGNsZWFyIHRoYXQg
dGhpcyBuZWVkcyB0byBkbyBhbnl0aGluZyBiZXlvbmQgcmV0dXJuaW5nICJmYWxzZSIsIHNpbmNl
CisgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25pbmcgdGhlIG9iamVjdCBpcyBm
cmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFueQorICAgIC8vIG9iamVjdHMg
dG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0YXRlLgorICAgIC8vIEZJWE1F
OiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODE2NTUKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlz
dC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKK2NsYXNzIEdD
RGVmZXJyYWxDb250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KExvY2FsQWxsb2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAgICBMb2NhbEFsbG9jYXRvcihCbG9j
a0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOworICAg
IH5Mb2NhbEFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQgc3RvcEFsbG9jYXRp
bmcoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgdm9pZCByZXN1bWVB
bGxvY2F0aW5nKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQ2VsbFNpemUoKTsKKyAgICAKKyAgICBib29sIGlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCopIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXQoKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICB2b2lk
KiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOworCisgICAg
QmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OworICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Cisg
ICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3Rp
dmVCbG9jayB7IG51bGxwdHIgfTsKK307CisKK2lubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQoreworICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9j
YWxBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQorCitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KExvY2FsQWxsb2NhdG9yLCBtX2NlbGxTaXplKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQUxX
QVlTX0lOTElORSB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQor
eworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVh
cENlbGwqIHsKKyAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShtX2RpcmVjdG9yeS0+aGVh
cCgpLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFs
bG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgICAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYg
KzMwMiwxNiBAQCB2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZygpCiAgICAgICAgIH0p
OwogfQogCit2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKQoreworICAg
IEFTU0VSVCghaXNJdGVyYXRpbmcoKSk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAg
WyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAg
ICAgICAgICAgZGlyZWN0b3J5LnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOworICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOworfQorCiB2b2lk
IE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpCiB7CiAgICAgbV9sYXJn
ZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxlY3Rpb25CZWdpbiA9IG1fbGFyZ2VBbGxvY2F0aW9ucy5i
ZWdpbigpICsgbV9sYXJnZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rpb247CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNzI3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgIAogICAgIEhlYXAqIGhlYXAoKSBj
b25zdCB7IHJldHVybiBtX2hlYXA7IH0KICAgICAKLSAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFs
aXplKCk7IC8vIFlvdSBtdXN0IGNhbGwgc3RvcEFsbG9jYXRpbmcgYmVmb3JlIHlvdSBjYWxsIHRo
aXMuCisgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOyAvLyBNdXN0IGNhbGwgc3RvcEFs
bG9jYXRpbmdGb3JHb29kIGZpcnN0LgogICAgIHZvaWQgZnJlZU1lbW9yeSgpOwogCiAgICAgc3Rh
dGljIHNpemVfdCBvcHRpbWFsU2l6ZUZvcihzaXplX3QpOwpAQCAtMTExLDYgKzExMSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygpOwogCiAgICAgdm9pZCBzdG9wQWxs
b2NhdGluZygpOworICAgIHZvaWQgc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgdm9pZCBy
ZXN1bWVBbGxvY2F0aW5nKCk7IC8vIElmIHdlIGp1c3Qgc3RvcHBlZCBhbGxvY2F0aW9uIGJ1dCB3
ZSBkaWRuJ3QgZG8gYSBjb2xsZWN0aW9uLCB3ZSBuZWVkIHRvIHJlc3VtZSBhbGxvY2F0aW9uLgog
ICAgIAogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdG9w
SWZOZWNlc3NhcnlUaW1lci5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQxLDYgKzQyLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxs
OwogY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRlcjsKIGNsYXNzIE1hcmtlZEJsb2NrOworY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKIGNsYXNz
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUu
aCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTU2LDggKzU3LDggQEAgcHVibGljOgogICAg
IHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIEJsb2NrRGlyZWN0b3J5
KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoVk0m
LCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7
CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRocmVhZExvY2FsQ2FjaGUuaCIKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZlB0cjxUaHJlYWRMb2NhbENh
Y2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworfQorCitUaHJlYWRMb2NhbENh
Y2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKK3sK
KyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6flRo
cmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Cit9CisKK1RocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCit7Cisg
ICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOworICAgIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENh
Y2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAgICBEYXRhKiByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxEYXRhKj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2NhdG9yKSAr
IGxheW91dC5zaXplKSk7CisgICAgcmVzdWx0LT5zaXplID0gbGF5b3V0LnNpemU7CisgICAgcmVz
dWx0LT5jYWNoZSA9IHRoaXM7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
b2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAo
JmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9j
YXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6
ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3Ip
KQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0
b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lE
YXRhKERhdGEqIGRhdGEpCit7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
ZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIGFs
bG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBmYXN0RnJlZShk
YXRhKTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0pCit7
CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2VGbGFnLAorICAgICAgICBb
XSAoKSB7CisgICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwgZGVzdHJ1Y3Rv
cik7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgCisgICAgcmVmKCk7CisgICAgCisgICAgaWYg
KFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSkpCisgICAgICAgIG9s
ZENhY2hlLT5kZXJlZigpOworICAgIAorICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEpOworfQor
Cit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxEYXRhKFZNJiB2bSwgRGF0YSogZGF0YSkK
K3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAg
X3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSwgZGF0YSk7CisjZWxzZQorICAgIHZt
LnRocmVhZExvY2FsQ2FjaGUgPSBkYXRhOworI2VuZGlmCit9CisKK0xvY2FsQWxsb2NhdG9yJiBU
aHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sK
KyAgICBEYXRhKiBvbGREYXRhID0gbV9kYXRhOworICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgp
OworICAgIGRlc3Ryb3lEYXRhKG9sZERhdGEpOworICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEp
OworICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA8IG1fZGF0YS0+c2l6ZSk7CisgICAgcmV0dXJu
IGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6
OmRlc3RydWN0b3Iodm9pZCogYXJnKQoreworICAgIGlmICghYXJnKQorICAgICAgICByZXR1cm47
CisgICAgRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihhcmcpOworICAgIGRhdGEtPmNh
Y2hlLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGUgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkTG9jYWxDYWNoZT4geworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRocmVhZExvY2FsQ2FjaGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNo
ZT4gY3JlYXRlKEhlYXAmKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+VGhyZWFkTG9j
YWxDYWNoZSgpOworCisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBnZXQoVk0m
KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGZhc3QgZW5vdWdoIHRoYXQg
eW91IGNvdWxkIGV2ZW4gY2FsbCBpdCBiZWZvcmUgZXZlcnkgYWxsb2NhdGlvbiwgYnkKKyAgICAv
LyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcgdGhl
IGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFRoaXMKKyAgICAvLyBhc3N1bWVzIGEg
cmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2FjaGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0dWFs
IGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCisgICAgLy8gd2l0aCBwb3NzaWJseSBoaWdoIHJhdGUg
b2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hlZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMgb3V0
IG9mIHBhcmFub2lhLgorICAgIHZvaWQgaW5zdGFsbChWTSYpOworICAgIAorICAgIHN0YXRpYyBM
b2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCk7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc0Z1bmMsIHR5cGVuYW1lIEZhaWx1cmVGdW5jPgorICAg
IHN0YXRpYyB2b2lkIHRyeUdldEFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQsIGNvbnN0IFN1
Y2Nlc3NGdW5jJiwgY29uc3QgRmFpbHVyZUZ1bmMmKTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBzaXplKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpOyB9CisgICAgCitwcml2YXRlOgorICAg
IFRocmVhZExvY2FsQ2FjaGUoSGVhcCYpOworICAgIAorICAgIHN0cnVjdCBEYXRhIHsKKyAgICAg
ICAgc2l6ZV90IHNpemU7CisgICAgICAgIFRocmVhZExvY2FsQ2FjaGUqIGNhY2hlOworICAgICAg
ICBMb2NhbEFsbG9jYXRvciBhbGxvY2F0b3JbMV07CisgICAgfTsKKworICAgIHN0YXRpYyBEYXRh
KiBnZXRJbXBsKFZNJik7CisgICAgCisgICAgRGF0YSogYWxsb2NhdGVEYXRhKCk7CisgICAgc3Rh
dGljIHZvaWQgZGVzdHJveURhdGEoRGF0YSopOworICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYg
YWxsb2NhdG9yKERhdGEmIGRhdGEsIHNpemVfdCBvZmZzZXQpOworCisgICAgdm9pZCBpbnN0YWxs
U2xvdyhWTSYpOworICAgIHN0YXRpYyB2b2lkIGluc3RhbGxEYXRhKFZNJiwgRGF0YSopOworICAg
IAorICAgIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3JTbG93KFZNJiwgc2l6ZV90IG9mZnNldCk7
CisgICAgCisgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Rvcih2b2lkKik7CisgICAgCisgICAgLy8g
V2hlbiBpbnN0YWxsZWQsIHdlIHJlZigpIHRoZSBjYWNoZS4gVW5pbnN0YWxsaW5nIGRlcmVmKClz
IHRoZSBjYWNoZS4gVExTIGRlc3RydWN0aW9uIGRlcmVmKClzCisgICAgLy8gdGhlIGNhY2hlLiBX
aGVuIHRoZSBjYWNoZSBpcyBkZXN0cnVjdGVkLCBpdCBuZWVkcyB0byByZXR1cm4gYWxsIG9mIGl0
cyBzdGF0ZSB0byB0aGUgR0MuIEkKKyAgICAvLyB0aGluayB0aGF0IGp1c3QgbWVhbnMgc3RvcEFs
bG9jYXRpbmcoKSwgYnV0IHdpdGggc29tZSBzZXJpb3VzbHkgaGVhdnkgY2F2ZWF0cyBoYXZpbmcg
dG8gZG8KKyAgICAvLyB3aXRoIHdoZW4gaXQncyB2YWxpZCB0byBtYWtlIHRoYXQgY2FsbC4gQWx0
ZXJuYXRpdmVseSwgd2UgY291bGQgUkVMRUFTRV9BU1NFUlQgdGhhdCB0aGUgY2FjaGUKKyAgICAv
LyBpcyBlbXB0eSB3aGVuIHdlIGRlc3RydWN0IGl0LiBUaGlzIGlzIGNvcnJlY3QgZm9yIGNhY2hl
cyB0aGF0IGFyZSBrZXB0IGxpdmUgYnkgR0Mgb2JqZWN0cyBhbmQKKyAgICAvLyBpdCdzIGNvcnJl
Y3QgZm9yIGltbW9ydGFsIGNhY2hlcy4KKyAgICBIZWFwJiBtX2hlYXA7CisgICAgRGF0YSogbV9k
YXRhIHsgbnVsbHB0ciB9OworCisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMg
Y29uc3QgcHRocmVhZF9rZXlfdCB0bHNLZXkgPSBXVEZfR0NfVExDX0tFWTsKKyNlbmRpZgorfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENh
Y2hlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgVGhyZWFkTG9jYWxDYWNoZTo6RGF0
YSogVGhyZWFkTG9jYWxDYWNoZTo6Z2V0SW1wbChWTSYgdm0pCit7CisjaWYgRU5BQkxFKEZBU1Rf
VExTX0pJVCkKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
YXRhKj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSkpOworI2Vsc2UKKyAgICBy
ZXR1cm4gdm0udGhyZWFkTG9jYWxDYWNoZTsKKyNlbmRpZgorfQorCitpbmxpbmUgUmVmUHRyPFRo
cmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmdldChWTSYgdm0pCit7CisgICAgVGhy
ZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOworICAgIGlmIChkYXRhKQor
ICAgICAgICByZXR1cm4gZGF0YS0+Y2FjaGU7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2lu
bGluZSB2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGwoVk0mIHZtKQoreworICAgIGlmIChn
ZXRJbXBsKHZtKSA9PSBtX2RhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpbnN0YWxsU2xvdyh2
bSk7Cit9CisKK2lubGluZSBMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2Nh
dG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRh
KiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKExJS0VMWShvZmZzZXQgPCBkYXRhLT5zaXpl
KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KTsKKyAgICByZXR1cm4g
ZGF0YS0+Y2FjaGUtPmFsbG9jYXRvclNsb3codm0sIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFN1Y2Nlc3NGdW5jLCB0eXBlbmFtZSBGYWlsdXJlRnVuYz4KK3ZvaWQgVGhyZWFkTG9j
YWxDYWNoZTo6dHJ5R2V0QWxsb2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCwgY29uc3QgU3Vj
Y2Vzc0Z1bmMmIHN1Y2Nlc3NGdW5jLCBjb25zdCBGYWlsdXJlRnVuYyYgZmFpbHVyZUZ1bmMpCit7
CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOworICAgIGlm
IChMSUtFTFkob2Zmc2V0IDwgZGF0YS0+c2l6ZSkpCisgICAgICAgIHN1Y2Nlc3NGdW5jKGFsbG9j
YXRvcigqZGF0YSwgb2Zmc2V0KSk7CisgICAgZWxzZQorICAgICAgICBmYWlsdXJlRnVuYygpOwor
fQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihE
YXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PExv
Y2FsQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PGNoYXIqPigmZGF0YS5hbGxvY2F0b3JbMF0pICsg
b2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVM
YXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworI2luY2x1ZGUgIkJsb2NrRGlyZWN0
b3J5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpUaHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6flRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQoKQoreworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQ6OmFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIGRpcmVjdG9yeS0+bV90bGNPZmZzZXQg
PSBtX3NpemU7CisgICAgbV9zaXplICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcik7CisgICAgbV9k
aXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKK30KKworVGhyZWFkTG9jYWxDYWNoZUxheW91
dDo6U25hcHNob3QgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6c25hcHNob3QoKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBTbmFwc2hvdCByZXN1bHQ7CisgICAg
cmVzdWx0LnNpemUgPSBtX3NpemU7CisgICAgcmVzdWx0LmRpcmVjdG9yaWVzID0gbV9kaXJlY3Rv
cmllczsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9ja0RpcmVjdG9yeSogVGhyZWFkTG9j
YWxDYWNoZUxheW91dDo6ZGlyZWN0b3J5KHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgcmV0dXJuIG1fZGlyZWN0b3JpZXNbb2Zmc2V0
IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV07Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJsb2NrRGlyZWN0b3J5OworCisvLyBFYWNoIEhlYXAg
aGFzIGEgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB0aGF0IGhlbHBzIHVzIGZpZ3VyZSBvdXQgaG93
IHRvIGFsbG9jYXRlIGEgVGhyZWFkTG9jYWxDYWNoZQorLy8gZm9yIHRoYXQgSGVhcC4KKworY2xh
c3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGhy
ZWFkTG9jYWxDYWNoZUxheW91dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
CitwdWJsaWM6CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dCgpOworICAgIH5UaHJlYWRMb2Nh
bENhY2hlTGF5b3V0KCk7CisKKyAgICAvLyBCbG9ja0RpcmVjdG9yeSBjYWxscyB0aGlzIGR1cmlu
ZyBjcmVhdGlvbiBhbmQgdGhpcyBmaWxscyBpbiBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0LgorICAg
IHZvaWQgYWxsb2NhdGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqKTsKKyAgICAKKyAgICBzdHJ1Y3Qg
U25hcHNob3QgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgVmVjdG9yPEJsb2NrRGly
ZWN0b3J5Kj4gZGlyZWN0b3JpZXM7CisgICAgfTsKKyAgICAKKyAgICBTbmFwc2hvdCBzbmFwc2hv
dCgpOworICAgIAorICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkodW5zaWduZWQgb2Zmc2V0
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CisgICAgc2l6ZV90IG1fc2l6ZSB7
IDAgfTsKKyAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBtX2RpcmVjdG9yaWVzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4Miw2
ICs1ODIsMTAzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0KIH0K
ICNlbmRpZgogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxB
bGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3Is
IEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1Bh
dGgpCit7CisgICAgLy8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3JpdHRlbiBzbyB0aGF0IHdl
IGNhbiBjYWxsIGl0IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKKyAgICAvLyByZWdpc3RlciB1
c2FnZS4KKyAgICAgICAgCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMoKSkgewor
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBKdW1wIHBvcFBhdGg7CisgICAgSnVtcCBkb25lOworICAgIAorI2lmIEVOQUJM
RShGQVNUX1RMU19KSVQpCisgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRMU09mZnNldEZvcktleShX
VEZfR0NfVExDX0tFWSksIHNjcmF0Y2hHUFIpOworI2Vsc2UKKyAgICBsb2FkUHRyKCZ2bSgpLnRo
cmVhZExvY2FsQ2FjaGVEYXRhLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgorICAgIGlmIChhbGxvY2F0
b3IuaXNDb25zdGFudCgpKSB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihCZWxv
d09yRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgVGhyZWFkTG9jYWxDYWNoZTo6b2Zmc2V0T2ZT
aXplKCkpLCBUcnVzdGVkSW1tMzIoYWxsb2NhdG9yLmFsbG9jYXRvcigpLm9mZnNldCgpKSkpOwor
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mRmly
c3RBbGxvY2F0b3IoKSArIGFsbG9jYXRvci5hbGxvY2F0b3IoKS5vZmZzZXQoKSksIHNjcmF0Y2hH
UFIsIGFsbG9jYXRvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBUaHJlYWRMb2NhbENh
Y2hlOjpvZmZzZXRPZlNpemUoKSksIGFsbG9jYXRvckdQUikpOworICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mRmlyc3RBbGxvY2F0b3IoKSksIGFs
bG9jYXRvckdQUik7CisgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCBhbGxvY2F0b3JHUFIpOwor
ICAgIH0KKworICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVz
dWx0R1BSKTsKKyAgICBwb3BQYXRoID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7Cisg
ICAgaWYgKGFsbG9jYXRvci5pc0NvbnN0YW50KCkpCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigtYWxsb2NhdG9yLmFsbG9jYXRvcigpLmNlbGxTaXplKHZtKCkuaGVhcCkpLCByZXN1bHRHUFIs
IHNjcmF0Y2hHUFIpOworICAgIGVsc2UgeworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAg
ICAgICAgbW92ZShyZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3ViMzIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgc3ViMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZWdQdHIocmVzdWx0R1BSKTsKKyAgICBzdG9y
ZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKKyAgICBB
ZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2Nh
dG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKCkp
OworICAgIGlmIChpc1g4NigpKQorICAgICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIsIHJlc3Vs
dEdQUik7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEVuZEFkZHIsIHNjcmF0
Y2hHUFIpOworICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAgIHBvcFBhdGgubGluayh0
aGlzKTsKKyAgICAgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxl
ZEhlYWQoKSksIHJlc3VsdEdQUik7CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIHhvclB0cihB
ZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSAr
IEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHhvclB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgIH0KKyAgICBzbG93
UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgCisg
ICAgLy8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cg
aXMgYSBmcmVzaCBvYmplY3QsIGJ1dAorICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJl
ZSBsaXN0LgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKKyAg
ICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQo
KSkpOworICAgICAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9y
JiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1w
TGlzdCYgc2xvd1BhdGgpCit7CisgICAgaWYgKGFsbG9jYXRvci5pc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgaWYgKCFhbGxvY2F0b3IuYWxsb2NhdG9yKCkpIHsKKyAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQUiwgYWxsb2NhdG9y
LCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKK30KKwordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29t
cGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNj
cmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sKKyAg
ICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNlOjpz
aXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2Yg
dHdvLiIpOworICAgIAorICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXApOworICAgIAorICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRTcGFj
ZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKKyAgICB1cnNo
aWZ0MzIoVHJ1c3RlZEltbTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIxKTsKKyAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1tMzIoTWFya2Vk
U3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBzY3JhdGNoR1BSMik7Cisg
ICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIFRpbWVzRm91ciks
IHNjcmF0Y2hHUFIxKTsKKyAgICAKKyAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBKSVRBbGxv
Y2F0b3I6OnZhcmlhYmxlKCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwor
fQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkKIHsKICNpZiBO
VU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkpJVEFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2lu
Y2x1ZGUgIk1hcmtlZFNwYWNlLmgiCkBAIC01OSw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CisgICAg
Vk0mIHZtKCkgeyByZXR1cm4gKm1fY29kZUJsb2NrLT52bSgpOyB9CiAgICAgQXNzZW1ibGVyVHlw
ZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQogCiAgICAgdm9pZCBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpCkBAIC0xNDg4LDgzICsxNDkwLDI0IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGVtaXRSYW5kb21UaHVuayhKU0dsb2JhbE9iamVjdCosIEdQUlJlZyBzY3JhdGNo
MCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIEZQUlJlZyByZXN1bHQpOwogICAg
IHZvaWQgZW1pdFJhbmRvbVRodW5rKFZNJiwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY3JhdGNoMiwgR1BSUmVnIHNjcmF0Y2gzLCBGUFJSZWcgcmVzdWx0KTsKICNl
bmRpZgotCisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIHZhbHVl
IGhlbGQgaW4gYWxsb2NhdG9yR1BSIGlzIG5vbi1udWxsLiBUaGlzIERPRVMgTk9UIG1lYW4KICAg
ICAvLyB0aGF0IGFsbG9jYXRvciBpcyBub24tbnVsbDsgYWxsb2NhdG9yIGNhbiBiZSBudWxsIGFz
IGEgc2lnbmFsIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQotICAgIC8vIHZhbHVlIG9mIGFs
bG9jYXRvckdQUiBpcy4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9y
KEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxv
Y2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi0gICAgewot
ICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGNhcmVmdWxseSB3cml0dGVuIHNvIHRoYXQgd2UgY2Fu
IGNhbGwgaXQgd2hpbGUgd2UgZGlzYWxsb3cgc2NyYXRjaAotICAgICAgICAvLyByZWdpc3RlciB1
c2FnZS4KLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpmb3JjZUdDU2xvd1BhdGhzKCkp
IHsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKdW1wIHBvcFBhdGg7Ci0gICAgICAg
IEp1bXAgZG9uZTsKLSAgICAgICAgCi0gICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQ
UiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
ZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3Qz
MihaZXJvLCByZXN1bHRHUFIpOwotICAgICAgICBpZiAoYWxsb2NhdG9yKQotICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkpLCByZXN1bHRHUFIsIHNj
cmF0Y2hHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc1g4NigpKSB7Ci0g
ICAgICAgICAgICAgICAgbW92ZShyZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgIHN1YjMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZD
ZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNl
dE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHN1YjMyKHJlc3Vs
dEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgbmVnUHRyKHJlc3VsdEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwg
QWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkg
KyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkpOwotICAgICAgICBBZGRyZXNzIHBheWxv
YWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKCkpOwotICAgICAgICBp
ZiAoaXNYODYoKSkKLSAgICAgICAgICAgIGFkZFB0cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BS
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsb2FkUHRyKHBheWxvYWRFbmRBZGRyLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb25lID0ganVtcCgpOwotICAgICAgICAKLSAg
ICAgICAgcG9wUGF0aC5saW5rKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGlm
IChpc1g4NigpKQotICAgICAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9j
a0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0
KCkpLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgeG9y
UHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBp
cyBhIGZyZXNoIG9iamVjdCwgYnV0Ci0gICAgICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3Mg
ZnJlZSBsaXN0LgotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBC
bG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2Ny
YW1ibGVkSGVhZCgpKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
fQorICAgIC8vIHZhbHVlIG9mIGFsbG9jYXRvckdQUiBpcy4gQWRkaXRpb25hbGx5LCBpZiB0aGUg
YWxsb2NhdG9yIGlzIG5vdCBudWxsLCB0aGVuIHRoZXJlIGlzIG5vIG5lZWQKKyAgICAvLyB0byBw
b3B1bGF0ZSBhbGxvY2F0b3JHUFIgLSB0aGlzIGNvZGUgd2lsbCBpZ25vcmUgdGhlIGNvbnRlbnRz
IG9mIGFsbG9jYXRvckdQUi4KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2Nh
dG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJS
ZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsK
ICAgICAKLSAgICB2b2lkIGVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVj
dG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwg
SnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxvY2F0b3JHUFIp
KTsKLSAgICAgICAgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBh
bGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwotICAgIH0KKyAg
ICB2b2lkIGVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3Im
IGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBM
aXN0JiBzbG93UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlw
ZT4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0
cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lk
IGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3Im
IGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUs
IEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBl
bWl0QWxsb2NhdGUocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2NyYXRjaEdQ
Uiwgc2xvd1BhdGgpOwogICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oc3Ry
dWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUg
TWFza1R5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChHUFJSZWcgcmVzdWx0R1BS
LCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1
cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BS
UmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9y
LCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5
cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBz
bG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFs
bG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsK
ICAgICAgICAgc3RvcmVQdHIoc3RvcmFnZSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtMTU3NiwxMyArMTUxOSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3Rv
cmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIxLAogICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCwgc2l6ZV90IHNpemUp
CiAgICAgewotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgICAgICBpZiAoIWFsbG9jYXRvcikgewotICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3Is
IHNjcmF0Y2hHUFIxLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIG1hc2ssIHNjcmF0Y2hHUFIyLCBzbG93
UGF0aCk7CisgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5
cGU+KHZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQ
UiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMSwgc3RydWN0
dXJlLCBzdG9yYWdlLCBtYXNrLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUs
IHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4KQEAgLTE1OTMsMjAgKzE1
MzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gYWxsb2NhdGlvblNpemUgY2FuIGJlIGFsaWFz
ZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGlucHV0IEdQUnMuIElmIGl0J3Mgbm90IGFsaWFzZWQg
dGhlbiBpdAogICAgIC8vIHdvbid0IGJlIGNsb2JiZXJlZC4KLSAgICB2b2lkIGVtaXRBbGxvY2F0
ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3Bh
Y2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkp
LCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBnZXRMU0JTZXQoTWFya2VkU3BhY2U6
OnNpemVTdGVwKTsKLSAgICAgICAgCi0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRT
cGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMihzdGVwU2hpZnQpLCBzY3JhdGNoR1BSMSk7Ci0gICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihBYm92ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJ
bW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYgPj4gc3RlcFNoaWZ0KSkpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBz
Y3JhdGNoR1BSMik7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMSwgdGltZXNQdHIoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgCi0gICAgICAgIGVt
aXRBbGxvY2F0ZShyZXN1bHRHUFIsIG51bGxwdHIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwg
c2xvd1BhdGgpOwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BS
UmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0
aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0
JiBzbG93UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBl
bmFtZSBTdHJ1Y3R1cmVUeXBlPgogICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENl
bGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BS
UmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BS
MiwgSnVtcExpc3QmIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03OSwyMiArNzksMjMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+
KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwo
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7CiAgICAgUmVnaXN0ZXJJ
RCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdU
MzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcpOwot
ICAgIGlmIChhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7Ci0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxs
cHRyKTsKLSAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBhbGxvY2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0g
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRTdG9y
ZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICBp
ZiAoIWFsbG9jYXRvcikKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigw
KTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgICAgIGVt
aXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRT
dG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CkBAIC04NTYsOSArODU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1
Y3RpbwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MoY2FsbGVlUmVn
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25U
eXBlKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNl
dE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJl
Zyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgp
KSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFs
bG9jYXRvclJlZykpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGxvYWRQdHIo
Y2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0
aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVk
SW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBAIC04NjgsNyAr
ODY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVs
bHB0cik7CiAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0KHJlc3VsdFJlZywgbnVsbHB0ciwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcs
IGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9y
UmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIGVtaXRTdG9yZUNlbGwoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5z
dGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODEsMjIgKzgx
LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9j
YXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2Jq
ZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxs
b2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBp
ZiAoYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShKdW1wKCkpOwotICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGVt
aXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIGlmICghYWxs
b2NhdG9yKQorICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgIGVsc2UgeworICAgICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZElt
bVB0cihudWxscHRyKTsKKyAgICAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdEluaXRp
YWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICB9CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC03NjYs
OSArNzY3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MoY2FsbGVlUmVnLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURh
dGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJhcmVEYXRhUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAg
bG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURh
dGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0
dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJl
ZykpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBhbGxvY2F0b3JSZWcsIFRydXN0
ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGxvYWRQdHIoY2FjaGVkRnVu
Y3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxl
ZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpT
Q2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBAIC03NzgsNyArNzc5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAg
ICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgbnVsbHB0ciwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZs
eSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVj
dChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1
Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgc2NyYXRjaFJlZyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHNjcmF0
Y2hSZWcpOwogICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hSZWcsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBzY3JhdGNoUmVnKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlz
aW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBBTFdBWVNfSU5MSU5FIHVu
c2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgbnVsbHB0ciwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CkBAIC04Nyw3ICs4Nyw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlVW5pbmkKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dHJ5Q3JlYXRlKFZN
JiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgc2l6ZV90
IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogYmFzZSA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXpl
LCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgIHZvaWQq
IGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1
YWwodm0sIHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7
CiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsK
QEAgLTE2NSw3ICsxNjUsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJh
eVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAg
c2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhp
bmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3
U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIG5ld1Np
emUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYg
KCFuZXdCYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhNRTogVGhpcyBw
cm9iYWJseSBzaG91bGRuJ3QgYmUgYSBtZW1jcHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIyNzI3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92
ZXJyaWRlVGhpbmdzKFZNJgogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2Fs
bGVlLCBtX2NhbGxlZS5nZXQoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRl
cmF0b3JTeW1ib2wsIGdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAg
IAotICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9t
YXBwZWRBcmd1bWVudHMua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKG1hcHBlZEFyZ3VtZW50c1Np
emUoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOworICAgIHZvaWQq
IGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVu
dHMua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBtYXBwZWRBcmd1bWVudHNTaXplKCksIG51
bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICBib29sKiBvdmVycmlk
ZXMgPSBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICBtX21hcHBlZEFyZ3Vt
ZW50cy5zZXQodm0sIHRoaXMsIG92ZXJyaWRlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
ZW5ndGg7IGktLTspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5
cGU+Ojppbml0TW9kaWZpZQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRz
RGVzY3JpcHRvcik7CiAKICAgICBpZiAoYXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNr
aW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNE
ZXNjcmlwdG9yLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbChXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8OD4oYXJnc0xlbmd0aCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0
KTsKKyAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZShtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwo
dm0sIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICBib29sKiBtb2RpZmllZEFyZ3Vt
ZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgICAgICBtX21vZGlm
aWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJnc0xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjI3Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIwNyw3ICsyMDcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKLSAgICAg
ICAgdm9pZCogZGF0YSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCogZGF0YSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgYWxsb2NhdGlvblNpemUsIG51bGxw
dHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmICghZGF0
YSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55
cG9wLmNvbSkKICAqCkBAIC04MSw3ICs4MSwxMCBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkCiAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlw
ZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1h
bENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVl
LCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiB0ZW1w
ID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAor
ICAgICAgICAgICAgdm0sCisgICAgICAgICAgICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRP
ZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwKKyAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyArMTAxLDEwIEBAIEpTQXJyYXkqIEpT
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICB9IGVsc2UgewogICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW5kZXhCaWFzID0gMDsKICAgICAgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gQXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9yTGVuZ3RoKGluZGV4Qmlhcywgc3Ry
dWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFs
U2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sCisgICAg
ICAgICAgICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2Us
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwKKyAgICAgICAgICAg
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIGluZGV4Qmlhcywg
b3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC0zNjgsNyArMzc0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRTbG93Q2FzZShjb25zdAogICAgICAgICBhbGxvY2F0ZWROZXdTdG9yYWdlID0gZmFs
c2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
ZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICBuZXdBbGxvY0Jhc2Ug
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisg
ICAgICAgICAgICB2bSwgbmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIy
NzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjM4LDYgKzIzOCw3IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUo
Vk0mIHYKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGlt
YWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoSGludCk7CiAg
ICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwKICAgICAgICAgICAgIEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLAogICAgICAgICAgICAgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCF0ZW1wKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2
aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIEpTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICAgICAgdm9pZCogdGVtcDsKICAgICAg
ICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CiAgICAgICAgIGlm
IChzaXplKSB7Ci0gICAgICAgICAgICB0ZW1wID0gdm0ucHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgbnVsbHB0ciwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgICAgIGlmICghdGVt
cCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjI3
MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTQ1LDE0ICsxNDUsMTUgQEAgQ29tcGxldGVTdWJzcGFjZSogSlND
ZWxsOjpzdWJzcGFjZUZvcihWTQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUg
dm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCiB7CisgICAgVk0mIHZtID0gKmhlYXAudm0oKTsKICAgICBBU1NFUlQoZGVmZXJy
YWxDb250ZXh0IHx8ICFEaXNhbGxvd0dDOjppc0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwog
ICAgIEFTU0VSVChzaXplID49IHNpemVvZihUKSk7Ci0gICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0
aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+YWxsb2NhdGVOb25W
aXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKKyAgICBKU0NlbGwq
IHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KHZtKS0+YWxsb2Nh
dGVOb25WaXJ0dWFsKHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CiAg
ICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCAm
JiAhcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNpZiBFTkFCTEUoR0NfVkFMSURB
VElPTikKLSAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7Ci0g
ICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOworICAg
IEFTU0VSVCghdm0uaXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgdm0uc2V0SW5pdGlhbGl6
aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKICNlbmRpZgogICAgIHJlc3VsdC0+Y2xlYXJTdHJ1
Y3R1cmUoKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzUsNyArMzM1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZW5xdQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLUpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUpCitKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gdGhyZWFkTG9jYWxDYWNoZSkKICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgMCkKICAgICAsIG1fdm0odm0pCiAgICAgLCBtX21hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElz
V2F0Y2hlZCkpKQpAQCAtMzUzLDYgKzM1Myw3IEBAIEpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9i
amVjdChWTSYgdm0sIFMKICAgICAsIG1fdGVtcGxhdGVSZWdpc3RyeSh2bSkKICAgICAsIG1fcnVu
dGltZUZsYWdzKCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKQorICAgICwgbV90aHJlYWRMb2NhbENhY2hlKHRocmVhZExvY2FsQ2FjaGUgPyBX
VEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUpIDogdm0uZGVmYXVsdFRocmVhZExvY2FsQ2FjaGUpCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBSdW50aW1lRmxhZ3MmIHJ1bnRpbWVGbGFncygpIGNvbnN0IHsgcmV0
dXJuIG1fcnVudGltZUZsYWdzOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKiA9IDApOworICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpT
R2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUqID0gMCwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+ID0gbnVsbHB0cik7CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKQEAgLTg5Myw2ICs4OTMs
OCBAQCBwdWJsaWM6CiAgICAgSlNXcmFwcGVyTWFwKiB3cmFwcGVyTWFwKCkgY29uc3QgeyByZXR1
cm4gbV93cmFwcGVyTWFwLmdldCgpOyB9CiAgICAgdm9pZCBzZXRXcmFwcGVyTWFwKEpTV3JhcHBl
ck1hcCogbWFwKSB7IG1fd3JhcHBlck1hcCA9IG1hcDsgfQogI2VuZGlmCisgICAgCisgICAgVGhy
ZWFkTG9jYWxDYWNoZSYgdGhyZWFkTG9jYWxDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICptX3RocmVh
ZExvY2FsQ2FjaGUuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHN0cnVjdCBHbG9iYWxQcm9w
ZXJ0eUluZm8gewpAQCAtOTI0LDYgKzkyNiw4IEBAIHByaXZhdGU6CiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKICAgICBSZXRhaW5QdHI8SlNXcmFwcGVyTWFwPiBtX3dyYXBwZXJNYXA7CiAjZW5k
aWYKKyAgICAKKyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gbV90aHJlYWRMb2NhbENhY2hl
OwogfTsKIAogSlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2JqZWN0KEpTVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCShyZXZpc2lvbiAyMjcyNzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYWNoaW5lU3Rh
Y2tNYXJrZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCisjaW5jbHVkZSAiVGhy
ZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIK
ICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMTQ1LDcg
KzE0Niw5IEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1aXJlTG9jaygpCiAKICAgICBtX3ZtLT5zZXRM
YXN0U3RhY2tUb3AodGhyZWFkLnNhdmVkTGFzdFN0YWNrVG9wKCkpOwogICAgIEFTU0VSVCh0aHJl
YWQuc3RhY2soKS5jb250YWlucyhtX3ZtLT5sYXN0U3RhY2tUb3AoKSkpOwotCisgICAgCisgICAg
bV92bS0+ZGVmYXVsdFRocmVhZExvY2FsQ2FjaGUtPmluc3RhbGwoKm1fdm0pOworICAgIAogICAg
IG1fdm0tPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJyZW50VGhyZWFkKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAy
MjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNiw2ICsyMzYsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVBc3luY0l0
ZXJhdGlvbiA9IGZhCiAgICAgdihib29sLCBkdW1wU2l6ZUNsYXNzZXMsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUJ1bXBBbGxvY2F0b3IsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgc3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRv
cnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdHJhZGVEZXN0cnVjdG9y
QmxvY2tzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVhZ2VybHlVcGRh
dGVUb3BDYWxsRnJhbWUsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihi
b29sLCB1c2VPU1JFbnRyeVRvREZHLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5o
CShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDcgKzQyLDcgQEAgQUxXQVlTX0lOTElORSBK
U0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgYm9vbCBjcmVhdGVVbmluaXRp
YWxpemVkID0gZ2xvYmFsT2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJl
KTsKLSAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsK
KyAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKHZtLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7
CiAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjEsNiArMTIxLDcgQEAKICNpbmNsdWRl
ICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1
ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVy
LmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCkBAIC0zMDYsNiArMzA3LDkgQEAgVk06
OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHVwZGF0ZVNvZnRSZXNl
cnZlZFpvbmVTaXplKE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVTaXplKCkpOwogICAgIHNldExh
c3RTdGFja1RvcChzdGFjay5vcmlnaW4oKSk7CiAKKyAgICBkZWZhdWx0VGhyZWFkTG9jYWxDYWNo
ZSA9IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShoZWFwKTsKKyAgICBkZWZhdWx0VGhyZWFkTG9j
YWxDYWNoZS0+aW5zdGFsbCgqdGhpcyk7CisKICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8g
a2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQogICAgIEpTTG9ja0hvbGRlciBsb2NrKHRo
aXMpOwogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBleGlzdGluZ0VudHJ5QXRvbWljU3RyaW5nVGFi
bGUgPSBUaHJlYWQ6OmN1cnJlbnQoKS5zZXRDdXJyZW50QXRvbWljU3RyaW5nVGFibGUobV9hdG9t
aWNTdHJpbmdUYWJsZSk7CkBAIC0zODMsNyArMzg3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogI2VuZGlmCiAgICAgCiAgICAgR2lnYWNhZ2U6OmFkZFByaW1p
dGl2ZURpc2FibGVDYWxsYmFjayhwcmltaXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJhY2ssIHRo
aXMpOwotCisgICAgCiAgICAgaGVhcC5ub3RpZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICAKICAg
ICBMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoKnRoaXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5j
bHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29y
ZC5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgi
CiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5j
bHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBAIC02NTYsNiArNjU3LDExIEBAIHB1
YmxpYzoKIAogICAgIEpTT2JqZWN0KiBzdHJpbmdSZWN1cnNpb25DaGVja0ZpcnN0T2JqZWN0IHsg
bnVsbHB0ciB9OwogICAgIEhhc2hTZXQ8SlNPYmplY3QqPiBzdHJpbmdSZWN1cnNpb25DaGVja1Zp
c2l0ZWRPYmplY3RzOworICAgIAorI2lmICFFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIFRocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIHRocmVhZExvY2FsQ2FjaGVEYXRhOworI2VuZGlmCisgICAgUmVm
UHRyPFRocmVhZExvY2FsQ2FjaGU+IGRlZmF1bHRUaHJlYWRMb2NhbENhY2hlOwogCiAgICAgTG9j
YWxUaW1lT2Zmc2V0Q2FjaGUgbG9jYWxUaW1lT2Zmc2V0Q2FjaGU7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkocmV2aXNpb24gMjI3
MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEaXNhbGxvd1ZNUmVl
bnRyeS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVy
LmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5o
IgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+CkBA
IC00MCw2ICs0MSw3IEBAIFZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKFZNJiB2bSwgSlNHbG8K
ICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCiB7Cisg
ICAgZ2xvYmFsT2JqZWN0LT50aHJlYWRMb2NhbENhY2hlKCkuaW5zdGFsbCh2bSk7CiAgICAgQVNT
RVJUKCFEaXNhbGxvd1ZNUmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsKICAg
ICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsK
ICAgICBpZiAoIXZtLmVudHJ5U2NvcGUpIHsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjcyNzMpCisrKyBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE4
LTAxLTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIEdD
IHNob3VsZCBzdXBwb3J0IFRMQ3MgKHRocmVhZCBsb2NhbCBjYWNoZXMpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE1NTkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDogSnVzdCBm
aXhpbmcgYSBjb21waWxlIGVycm9yLgorCiAyMDE4LTAxLTE5ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGpzYy1vbmx5IGJ1aWxkCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CaXRtYXAuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGFycmF5PgogI2lu
Y2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVk
ZSA8c3RyaW5nLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331851</attachid>
            <date>2018-01-20 16:54:12 -0800</date>
            <delta_ts>2018-01-20 17:34:27 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>177224</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxOC0wMS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBHQyBzaG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwgY2FjaGVzKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlz
IGEgYmlnIHN0ZXAgdG93YXJkcyBvYmplY3QgZGlzdGFuY2luZyBieSBzaXRlIG9yaWdpbi4gVGhp
cyBwYXRjaCBpbXBsZW1lbnRzIFRMQ3MsIG9yCisgICAgICAgIHRocmVhZC1sb2NhbCBjYWNoZXMs
IHdoaWNoIGFsbG93IGVhY2ggdGhyZWFkIHRvIGFsbG9jYXRlIGZyb20gaXRzIG93biBmcmVlIGxp
c3RzLiBJdCBhbHNvCisgICAgICAgIG1lYW5zIHRoYXQgYW55IGdpdmVuIHRocmVhZCBjYW4gY29u
dGV4dC1zd2l0Y2ggVExDcy4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGRvIHNlcGFyYXRlCisgICAg
ICAgIGFsbG9jYXRpb24gZm9yIHNlcGFyYXRlIHNpdGUgb3JpZ2lucy4gRXZlbnR1YWxseSwgb25j
ZSB3ZSByZXNoYXBlIGhvdyBNYXJrZWRCbG9jayBsb29rcywgdGhpcworICAgICAgICB3aWxsIGFs
bG93IHVzIHRvIGhhdmUgYSBoYXJkIGRpc3RhbmNpbmcgY29uc3RyYWludCBiZXR3ZWVuIG9iamVj
dHMgZnJvbSBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRTcGVjaWFs
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6
CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAoSlNDOjpCMzo6
U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBW
YWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6CisgICAg
ICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5oOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlND
OjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6Y2xlYXIpOgorICAgICAgICAqIGJ5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRB
bGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlSlNDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aFNpemVJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVIZWFwQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFsbG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdG9yRm9yU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgorICAgICAgICAqIGhlYXAv
QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6Y2VsbFNpemUg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6b2Zmc2V0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWxsb2NhdG9yOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRv
cklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6YWxsb2NhdGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlIGNvbnN0KToKKyAgICAg
ICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OkJsb2NrRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZpbmRC
bG9ja0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFs
bG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmdGb3JH
b29kKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmcpOgor
ICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6QmxvY2tE
aXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJs
b2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OmNlbGxLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OmFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmcmVl
TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpvZmZz
ZXRPZkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om9m
ZnNldE9mQ2VsbFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjpDb21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6Q29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxv
Y2F0b3JGb3JTbG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVT
bG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KToK
KyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlNDOjpDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0ZyZWVM
aXN0Lmg6CisgICAgICAgICogaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRocmVhZExvY2FsQ2FjaGVMYXlvdXQpOgorICAgICAgICAqIGhlYXAv
SXNvQ2VsbFNldC5oOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOgorICAgICAgICAo
SlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbCk6CisgICAgICAg
ICogaGVhcC9Jc29TdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IpOgorICAg
ICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpMb2NhbEFs
bG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnJlc3VtZUFs
bG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmdGb3JH
b29kKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAg
ICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgor
ICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbik6CisgICAgICAgIChKU0M6
OkxvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxv
Y2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpMb2NhbEFs
bG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFs
bG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6
ZSk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zv
ckdvb2QpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1Ns
b3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICog
aGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6
VGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlNDOjpUaHJl
YWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENh
Y2hlOjpkZXN0cm95RGF0YSk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6Omluc3Rh
bGxTbG93KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbERhdGEpOgor
ICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KToKKyAgICAgICAg
KEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcik6CisgICAgICAgICogaGVhcC9UaHJl
YWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpv
ZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZp
cnN0QWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpnZXRJbXBsKToKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9j
YWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnRyeUdldEFsbG9jYXRvcik6
CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQp
OgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhyZWFkTG9jYWxDYWNo
ZUxheW91dCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmFsbG9jYXRl
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZUxheW91dDo6c25hcHNob3Qp
OgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3RvcnkpOgorICAg
ICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oOiBBZGRlZC4KKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dm0pOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFi
bGVTaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik6
CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlNDOjpIYXNoTWFw
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZXN0cmljdGVkKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnRyeUFsbG9j
YXRlQ2VsbEhlbHBlcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
dGhyZWFkTG9jYWxDYWNoZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgor
ICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAg
ICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwOgorICAg
ICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6CisKIDIwMTgtMDEtMjAgIENh
aW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIE51bWJlclBy
b3RvdHlwZTo6ZXh0cmFjdFJhZGl4RnJvbUFyZ3MgaW5jb3JyZWN0bHkgY2FzdCBkb3VibGUgdG8g
aW50MzJfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI3Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC00NjYsNiArNDY2LDcgQEAgZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNw
cAogCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCitoZWFwL0FsbG9jYXRvci5jcHAK
IGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCiBoZWFwL0NlbGxBdHRyaWJ1dGVzLmNwcAogaGVhcC9D
ZWxsQ29udGFpbmVyLmNwcApAQCAtNTAwLDYgKzUwMSw3IEBAIGhlYXAvSXNvQ2VsbFNldC5jcHAK
IGhlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogaGVhcC9M
YXJnZUFsbG9jYXRpb24uY3BwCitoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAogaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCiBoZWFwL01hcmtTdGFjay5jcHAKIGhlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuY3BwCkBAIC01MTgsNiArNTIwLDggQEAgaGVhcC9TdG9wSWZOZWNlc3NhcnlU
aW1lci5jcHAKIGhlYXAvU3Vic3BhY2UuY3BwCiBoZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3luY2hyb25vdXNuZXNzLmNwcAoraGVhcC9UaHJl
YWRMb2NhbENhY2hlLmNwcAoraGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAogaGVhcC9W
aXNpdFJhY2VLZXkuY3BwCiBoZWFwL1dlYWsuY3BwCiBoZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSwxMyBAQAogCQkwRjcyNUNBQTFDNTAzREVEMDBB
RDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggKi87IH07
CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBRTFDNTA2
RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkwRjc0QjkzQjFG
ODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMgLyogUHJvdG90
eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU1MjAwRDI1RUYw
MDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjAyMDBEMjYwQjAwMzhFMkNGIC8qIExvY2Fs
QWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5l
cy5oICovOyB9OworCQkwRjc1QTA2MTIwMEQyNjE4MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU3
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVBMDYyMjAwRDI2MUQwMDM4RTJDRiAv
KiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5o
ICovOyB9OworCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NDIwMEQyNUVG
MDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEw
NjYyMDEzRTRGMTAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8qIEpJ
VEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8q
IEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHVi
Um91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0MTksNiArMjQyNiwxNyBAQAogCQkwRjcyNUNBRDFDNTA2
RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0Iz
Rm9sZFBhdGhDb25zdGFudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcy
NUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9C
M0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzRC
OTNBMUY4OTYxNDUwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNzVBMDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRo
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBEMjVGMDAwMzhF
MkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExvY2FsQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBEMjVGMTAwMzhF
MkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1
QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0
aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU0NDcsNiArNTQ2NSw3IEBACiAJCQkJMTQyOUQ5MkUwRUQyMkQ3MDAwQjg5NjE5
IC8qIEpJVC5oICovLAogCQkJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuY3BwICovLAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuaCAqLywKKwkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9y
LmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3Bw
ICovLAogCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQu
Y3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0
b3IuY3BwICovLApAQCAtNTU0MCw2ICs1NTU5LDE2IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFG
QURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCisJCQkJMEY3
NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1
QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVB
MDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVB
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1
QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY3
NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkwRjc1
QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKKwkJ
CQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAg
Ki8sCisJCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxs
b2NhdGluZ1Njb3BlLmggKi8sCkBAIC04MDQ4LDYgKzgwNzcsNyBAQAogCQkJCTBGMkFDNTcxMUU4
RUU0NTQwMDAxRUUzRiAvKiBBaXJGb3JtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0Ux
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjEzLDYgKzgyNDMsNyBAQAogCQkJCTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNh
bGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUwMDMyM0Y2NyAv
KiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjc1QTA2NDIwMEQyNjI4MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2tt
YXBWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8q
IEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTgzODIsNiAr
ODQxMyw3IEBACiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9z
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODEyMUFCM0Q4QkUwMEJCQjhFOCAvKiBE
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgx
NDFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjQ4NTMyMjE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjYyLDYgKzg2OTQs
NyBAQAogCQkJCUZFQTBDNDAzMUNERDdEMUQwMDQ4MTk5MSAvKiBGdW5jdGlvbldoaXRlbGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVBQTAwMDU5M0FE
IC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjAyMDBEMjYwQjAw
MzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENv
bnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtODc0Niw2ICs4Nzc5LDcgQEAKIAkJCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDM4NkE3OTFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhl
Y3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjIyMDBEMjYxRDAwMzhFMkNGIC8q
IEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkY5MkI5MUZENzZGRkYw
MEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjky
QkExRkQ3NzAwNDAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC04OTMxLDYgKzg5NjUsNyBAQAogCQkJCUUzM0Y1MDc5MUI4NDIy
NTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc1
QTA1RTIwMEQyNUY2MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4
QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBpbiBIZWFkZXJzICovLApAQCAtOTQzMCw2ICs5
NDY1LDcgQEAKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0QkU3RDMzMTcxMzVDRjQwMEQxODA3QSAvKiBXZWFrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjYyMDEzRTRGMTAwMzhFMkNG
IC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAw
N0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkzQUREODFGRTcw
MkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNiArMTI3NywxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9
IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CisgICAgICAgICAgICAg
ICAgVG1wIGRzdFRtcCA9IG1fY29kZS5uZXdUbXAodmFsdWUudmFsdWUoKS0+cmVzdWx0QmFuaygp
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKHZhbHVlLnZhbHVl
KCktPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBkc3RUbXApOworICAgICAgICAg
ICAgICAgIGFyZyA9IGRzdFRtcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKICAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5lYXJs
eUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHJldmlzaW9uIDIy
NzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBAIGJvb2wgUGF0Y2hwb2ludFNwZWNp
YWw6OmFkbWl0c1N0YWNrKEluc3QKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVu
dDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVy
OgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3Rl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw2ICsxMTAsOSBAQCB2b2lk
IFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgICAgICBjYXNlIFZhbHVl
UmVwOjpDb25zdGFudDoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2U7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJX
aXRoQ2xvYmJlcjoKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2VEZWY7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6
CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTEyOCw2ICsxMzEsMTAgQEAgdm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hB
cmdJbXBsKAogICAgICAgICAgICAgLy8gYmUgYWJsZSB0byByZWNvdmVyIHRoZSBzdGFja21hcCB2
YWx1ZS4gU28sIGZvcmNlIExhdGVDb2xkVXNlIHRvIHByZXNlcnZlIHRoZQogICAgICAgICAgICAg
Ly8gb3JpZ2luYWwgc3RhY2ttYXAgdmFsdWUgYWNyb3NzIHRoZSBTcGVjaWFsIG9wZXJhdGlvbi4K
ICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgb3B0aW9uYWxEZWZBcmdX
aWR0aCAmJiAqb3B0aW9uYWxEZWZBcmdXaWR0aCA8IGNoaWxkLnZhbHVlKCktPnJlc3VsdFdpZHRo
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcm9sZSBjYW4gb25seSBiZSBzb21lIGtpbmQg
b2YgZGVmIGlmIHdlIGRpZCBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwgd2hpY2ggaXMKKyAgICAg
ICAgICAgICAgICAvLyBvbmx5IGFsbG93ZWQgZm9yIHBhdGNocG9pbnRzLiBQYXRjaHBvaW50cyBk
b24ndCB1c2UgdGhlIGRlZkFyZ1dpZHRoIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIUFyZzo6aXNBbnlEZWYocm9sZSkpOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAg
cm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0yNDUsNiArMjUy
LDcgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQQogICAgICAgICAv
LyBXZSBhbHJlYWR5IHZlcmlmaWVkIGJ5IGlzQXJnVmFsaWRGb3JWYWx1ZSgpLgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgY2FzZSBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBhcmcuaXNUbXAoKTsKICAgICBjYXNlIFZh
bHVlUmVwOjpMYXRlUmVnaXN0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMTEg
QEAgdm9pZCBTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVnaXN0ZXIoVgogICAgIGFwcGVuZChD
b25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiB9CiAKK3Zv
aWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIoVmFsdWUqIHZh
bHVlKQoreworICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyV2l0aENsb2JiZXIpKTsKK30KKwogdm9pZCBTdGFja21hcFZhbHVlOjpzZXRDb25z
dHJhaW5lZENoaWxkKHVuc2lnbmVkIGluZGV4LCBjb25zdCBDb25zdHJhaW5lZFZhbHVlJiBjb25z
dHJhaW5lZFZhbHVlKQogewogICAgIGNoaWxkKGluZGV4KSA9IGNvbnN0cmFpbmVkVmFsdWUudmFs
dWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDcgKzk5LDggQEAgcHVibGljOgogICAgIC8v
IFRoaXMgaXMgYSBoZWxwZXIgZm9yIHNvbWV0aGluZyB5b3UgbWlnaHQgZG8gYSBsb3Qgb2Y6IGFw
cGVuZCBhIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGNvbnN0cmFpbmVkCiAgICAgLy8gdG8gU29tZVJl
Z2lzdGVyLgogICAgIHZvaWQgYXBwZW5kU29tZVJlZ2lzdGVyKFZhbHVlKik7Ci0KKyAgICB2b2lk
IGFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKFZhbHVlKik7CisgICAgCiAgICAgY29uc3Qg
VmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQogCiAgICAg
Ly8gU3RhY2ttYXBzIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoYXQgdGhlIG9wZXJhdGlvbiBtYXkg
Y2xvYmJlciBzb21lIHJlZ2lzdGVycy4gQ2xvYmJlcmluZyBhIHJlZ2lzdGVyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzMiwyMSArNDMyLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1
ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IFZvaWQpCiAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQgPT0gVmFs
dWVSZXA6Oldhcm1BbnksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4o
KS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6V2FybUFueToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICp2YWx1ZSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0ZVN0YWNrbWFwQ29uc3RyYWludCh2YWx1ZSwgQ29uc3RyYWluZWRWYWx1ZSh2
YWx1ZSwgdmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludCksIENv
bnN0cmFpbnRSb2xlOjpEZWYpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2
YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tBZGQ6CkBAIC01NzEsMTYgKzU1OCwyNCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsKICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6V2FybUFueToKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKLSAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToKKyAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29u
c3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xv
YmJlcjoKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwg
KCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAgICAgICAgIFZBTElEQVRFKGNv
bnRleHQtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKSwgKCJBdCAiLCAqY29udGV4dCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgog
ICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6RGVmLCAoIkF0ICIs
ICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0
ZXI6CisgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkua2luZCgpID09IFZhbHVlUmVwOjpMYXRl
UmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9s
ZTo6VXNlLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgaWYg
KHZhbHVlLnJlcCgpLnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJ
bnQodmFsdWUudmFsdWUoKS0+dHlwZSgpKSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUp
KTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZVJlcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAgdm9pZCBWYWx1
ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvKFJlZ2lzdAogICAgIGNhc2UgQ29sZEFueToKICAgICBj
YXNlIExhdGVDb2xkQW55OgogICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgIGNhc2UgU29tZVJl
Z2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBTb21lRWFybHlSZWdpc3RlcjoKICAgICBjYXNl
IENvbnN0YW50OgogICAgICAgICByZXR1cm47CkBAIC03MSw2ICs3Miw3IEBAIHZvaWQgVmFsdWVS
ZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2Fz
ZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIExhdGVSZWdpc3RlcjoKQEAgLTE3NSw2ICsxNzcsOSBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAg
ICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIiKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJp
bnQoIlNvbWVFYXJseVJlZ2lzdGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY1
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBh
CiAgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKICAgICAg
ICAgU29tZVJlZ2lzdGVyLAorICAgICAgICAKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVz
ZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyIGJ1
dCB0aGF0IHRoaXMKKyAgICAgICAgLy8gcmVnaXN0ZXIgaXMgdGhlbiBjb2JiZXJlZCB3aXRoIGdh
cmJhZ2UuIFRoaXMgb25seSB3b3JrcyBmb3IgcGF0Y2hwb2ludHMuCisgICAgICAgIFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyLAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGlt
cGxpZXMKICAgICAgICAgLy8gdGhhdCB0aGUgZGVmIGhhcHBlbnMgYmVmb3JlIGFueSBvZiB0aGUg
ZWZmZWN0cyBvZiB0aGUgc3RhY2ttYXAuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IKQEAgLTEwNyw3
ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWVSZXAoS2luZCBraW5kKQogICAgICAgICA6IG1f
a2luZChraW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFueSB8fCBraW5k
ID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNvbWVSZWdpc3Rl
ciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0g
V2FybUFueSB8fCBraW5kID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5k
ID09IFNvbWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyIHx8IGtp
bmQgPT0gU29tZUVhcmx5UmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZVJlcCBy
ZWcoUmVnIHJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NTUsMTUgKzk1NSw5IEBAIHZv
aWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVf
dCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IWFsbG9jYXRvcikgewotICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291
bGQgc3VjayEKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5qdW1wKCkp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAg
ICAgICAgaml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2Nh
dGUoc2NyYXRjaEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9j
YXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw4ICs0Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
Ci0gICAgICAgIDogbV9hbGxvY2F0b3IoMCkKLSAgICAgICAgLCBtX2lubGluZUNhcGFjaXR5KDAp
CisgICAgICAgIDogbV9pbmxpbmVDYXBhY2l0eSgwKQogICAgIHsKICAgICB9CiAKQEAgLTYzLDcg
KzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBtX2Fs
bG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxsb2NhdG9yKCk7CiAg
ICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSAw
OwogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwpAQCAtNzcsNyArNzYsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQoVk0mLCBK
U09iamVjdCogcHJvdG90eXBlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBtX2FsbG9jYXRvcjsg
Ly8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4K
KyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdz
IGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9zdHJ1Y3R1cmU7CiAgICAgdW5zaWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVj
dEFsbG9jYXRpb25Qcm9maQogCiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4
ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEZpbmFsT2JqZWN0VHlw
ZSk7Ci0gICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2Fs
bG9jYXRvciA9IEFsbG9jYXRvcigpOwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05OSwxMSArOTks
MTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQogICAgIEFTU0VS
VChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsK
IAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0u
Y2VsbFNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcik7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
LmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2Yg
ZXh0cmEgaW5saW5lIGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KICAgICBp
ZiAoYWxsb2NhdG9yKSB7Ci0gICAgICAgIHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci0+Y2VsbFNp
emUoKSAtIGFsbG9jYXRpb25TaXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwor
ICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3IuY2VsbFNpemUodm0uaGVhcCkgLSBhbGxv
Y2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICAgICAgaW5s
aW5lQ2FwYWNpdHkgKz0gc2xvcDsKICAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5ID4gSlNGaW5h
bE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgIGlubGluZUNhcGFjaXR5
ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKQEAgLTExMyw3ICsxMTMsNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAKICAgICBpZiAoaXNQ
b2x5UHJvdG8pIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzUG9seVByb3RvKCkpOwot
ICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxs
b2NhdG9yKCk7CiAgICAgICAgIGV4ZWN1dGFibGUtPnNldENhY2hlZFBvbHlQcm90b1N0cnVjdHVy
ZSh2bSwgc3RydWN0dXJlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXhlY3V0YWJsZSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEzLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBp
ZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0
QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgp
LT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgeworICAgICAgICAgICAg
bV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1faml0LmFkZFB0cigKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1t
MzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSwKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRB
bGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKLSAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9q
aXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2NhdG9yKSB7CiAgICAg
ICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2sodmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIs
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3Rl
ZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3Rl
ZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1p
dEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwpAQCAtNDIwOCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1h
a2VSb3BlKE5vZAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAK
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tEaXJlY3Rvcnkq
IGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9qaXQudm0oKSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
YmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChy
ZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JW
YWx1ZSA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgSklUQWxs
b2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZElt
bVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgIG1f
aml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyArODM4MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGlu
aXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRv
ciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwpAQCAtODQwOCw5ICs4NDA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAgICAKLSAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc2Ny
YXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7
CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwogICAg
IG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgIAogICAgIGZvciAocHRyZGlmZl90IG9m
ZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNldCAr
PSBzaXplb2Yodm9pZCopKQpAQCAtODQyOCw3ICs4NDI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91
dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAg
IAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ1Niw4ICs4NDUyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIEdQUlJlZyBzY3JhdGNoR1BS
MyA9IHNjcmF0Y2gzLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
UGF0aDsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIpOwotICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgYWxsb2NhdG9yLCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5lbWl0QWxsb2NhdGUo
c2NyYXRjaEdQUjEsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CiAgICAgICAgIApAQCAtMTE0NDEsMTQgKzExNDM2LDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE4KICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0
YUdQUik7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxs
b2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2Nh
dG9yKCkpLCBhbGxvY2F0b3JHUFIpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpKSwgc3RydWN0dXJlR1BSKTsKIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhbGxvY2F0b3JH
UFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVk
SW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBh
bGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBz
bG93UGF0aCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0
b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHksIG1h
c2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBy
YXJlRGF0YUdQUik7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVE
YXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwg
aW5saW5lQ2FwYWNpdHlHUFIpOwpAQCAtMTE0NzQsMTQgKzExNDY5LDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNG
aW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRp
b25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvclZhbHVlID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZt
KCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
YWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JH
UFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BS
LCBzbG93UGF0aCk7Ci0gICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBtX2ppdC5tdXRhdG9yRmVu
Y2UoKm1faml0LnZtKCkpOworICAgIGlmICghYWxsb2NhdG9yVmFsdWUpCisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFzayA9IFRydXN0
ZWRJbW0zMigwKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
Km1faml0LnZtKCkpOworICAgIH0KIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVj
dHVyZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTQxLDcgKzMxNDEsNyBA
QCBwdWJsaWM6CiAgICAgLy8gQWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVjaWZpYyBzaXpl
LgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBl
IGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKAotICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JH
UFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBz
dHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTMxNTAsNyArMzE1MCw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNpZmljIHNpemUu
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VU
eXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFnZVR5cGUgYW5k
LCBNYXNrVHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJl
ZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdl
VHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAg
ICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vi
c3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxs
b2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKKyAgICBtYWNy
byhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNl
OjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCiAg
ICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2Fs
RW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01ODU3LDEwICs1ODU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAg
ICAgICAgIAotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3Bl
U3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciks
IHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdl
dCgpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5p
bnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQpAQCAtOTg4NSw3ICs5ODg1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAg
ICAgIEFsbG9jYXRvciBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
dm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwpA
QCAtOTk0NCw3ICs5OTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBt
YXNrID0gY29tcHV0ZUJ1dHRlcmZseUluZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwogICAgICAg
ICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY2VsbEFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoY2VsbEFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFu
Y2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOwpAQCAtMTA5MzEsOCArMTA5MzEsOCBAQCBwcml2YXRl
OgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShzbG93UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFs
dWVzICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0g
ICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29u
c3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xvd1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQu
Y29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291
dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwpAQCAtMTE5NjQsMTYgKzExOTY0LDI4IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2Nh
dGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOwotICAg
ICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJbnRQdHIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9j
YXRvciA9IGJpdHdpc2VfY2FzdDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIo
KSk7CisgICAgICAgIEpJVEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3I7CisgICAgICAgIGlmIChh
bGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KEFsbG9jYXRvcihhbGxvY2F0b3ItPmFzSW50MzIoKSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRBbGxvY2F0b3I6OnZh
cmlhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgeworICAg
ICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYg
KCFhY3R1YWxBbGxvY2F0b3IuYWxsb2NhdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBoYXZlQWxsb2NhdG9yID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZlQWxs
b2NhdG9yKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNsb3dQYXRoKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhoYXZlQWxsb2NhdG9yLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZWl0aGVyIHdlIGtub3cg
dGhhdCB0aGUgYWxsb2NhdG9yIGlzIG51bGwgb3Igd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQogICAg
ICAgICAgICAgLy8gYWxsb2NhdG9yIGlzLiBJbiBlaXRoZXIgY2FzZSwgd2UgbmVlZCB0aGUgbnVs
bCBjaGVjay4KICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhhdmVBbGxvY2F0b3IgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoaGF2ZUFsbG9jYXRvcik7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goYWxsb2NhdG9yLCB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xvd1BhdGgpKTsK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVh
bChhbGxvY2F0b3IsIG1fb3V0LmNvbnN0SW50MzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSwKKyAg
ICAgICAgICAgICAgICB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xvd1BhdGgpKTsK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhdmVBbGxvY2F0b3IsIGxhc3ROZXh0KTsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTExOTgzLDcgKzExOTk1LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KHBvaW50ZXJUeXBlKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnRlcm1pbmFs
ID0gdHJ1ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFsbG9jYXRv
cik7CisgICAgICAgIGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKGFsbG9j
YXRvcik7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOwogICAg
ICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OlNvbWVFYXJseVJl
Z2lzdGVyOwogICAgICAgICAKQEAgLTExOTk0LDYgKzEyMDA5LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
anVtcFRvU2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVn
IGFsbG9jYXRvckdQUjsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2Ny
YXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRpb24gcGF0aCBi
ZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRp
b24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1hY2hpbmUgY29k
ZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hhdCBpbnN0cnVj
dGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBjb21waWxlcgpA
QCAtMTIwMDEsNyArMTIwMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBvcHRpbWl6ZWQg
cGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGNvbXBpbGVy
IHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9j
YXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0
b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgcGFy
YW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xvd1BhdGgpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1w
VG9TdWNjZXNzOwpAQCAtMTIwOTMsOCArMTIxMTQsOCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBh
bGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwo
c2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICByZXR1
cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlw
ZT4KQEAgLTEyMTEzLDE2ICsxMjEzNCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29tcGxl
dGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFj
ZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXpl
ID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
KyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdC
bG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNs
b3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0dWFsQWxsb2Nh
dG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVhbEFsbG9jYXRv
ci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHN0ZXBT
aGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIxNDEsNyArMTIx
NjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0
cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9y
Rm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1YihzaXplQ2xh
c3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxNTYsOCArMTIxNzcsNyBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAgICAgICAgIExW
YWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAg
ICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKLSAgICAg
ICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7Cisg
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJzcGFjZUZvcjxD
bGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJmbHlJbmRleGlu
Z01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTY1LDE1ICsxMjE4NSwxNCBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAgICAgICBMVmFs
dWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAg
IHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCi0gICAgICAg
ICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOworICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3BhY2VGb3I8Q2xh
c3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVD
ZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIExW
YWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7
CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRp
b25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNp
bXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGlu
c3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxODUsNyArMTIyMDQs
NyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJa
ZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywg
bV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1
ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Vuc2ln
bmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0KS0+Y2VsbFNp
emUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZNOworCitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAgIAorICAgIGV4
cGxpY2l0IEFsbG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgLy8g
VGhpcyB2ZXJzaW9uIGNhbGxzIEZhaWx1cmVGdW5jIGlmIHdlIGhhdmUgYSBudWxsIGFsbG9jYXRv
ciBvciBpZiB0aGUgVExDIGhhc24ndCBiZWVuIHJlc2l6ZWQKKyAgICAvLyB0byBpbmNsdWRlIHRo
aXMgYWxsb2NhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZhaWx1cmVGdW5jPgorICAgIHZv
aWQqIHRyeUFsbG9jYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUsIGNvbnN0IEZhaWx1cmVGdW5jJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgY2Vs
bFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFsbG9j
YXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldCgpOyB9
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRv
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworaW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoVk0mIHZtLCBHQ0Rl
ZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcih2bSwgbV9vZmZzZXQp
LmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGYWlsdXJl
RnVuYz4KK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoVk0mIHZtLCBHQ0RlZmVycmFsQ29u
dGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUsIGNvbnN0IEZhaWx1cmVG
dW5jJiBmYWlsdXJlRnVuYykgY29uc3QKK3sKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgVGhyZWFk
TG9jYWxDYWNoZTo6dHJ5R2V0QWxsb2NhdG9yKAorICAgICAgICB2bSwgbV9vZmZzZXQsCisgICAg
ICAgIFsmXSAoTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0
ID0gYWxsb2NhdG9yLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworICAgICAgICB9LAorICAgICAg
ICBbJl0gKCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFpbHVyZUZ1bmMoKTsKKyAgICAgICAg
fSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlz
aW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAKLSNpbmNsdWRlICJBbGxvY2F0aW5nU2Nv
cGUuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0zOSwxNSArMzgsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0
b3JCbG9ja3MgPSB0cnVlOwotCiBCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCog
aGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKLSAgICAs
IG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQotICAgICwgbV9j
ZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQorICAgIDogbV9jZWxsU2l6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9oZWFwKGhlYXApCiB7
CisgICAgaGVhcC0+dGhyZWFkTG9jYWxDYWNoZUxheW91dCgpLmFsbG9jYXRlT2Zmc2V0KHRoaXMp
OwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpzZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3Bh
Y2UpCkBAIC04MSwxNDMgKzc2LDE0IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0
b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1cnNvcl07CiB9CiAKLXZvaWQg
QmxvY2tEaXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCgpCi17Ci0gICAgaWYgKG1fY3VycmVu
dEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0g
ICAgCi0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0
cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmcoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0ZvckFs
bG9jYXRpb24oKQogewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKLSAgICAKLSAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQobV9m
cmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAg
ICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9l
bXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgICAgICBpZiAobV9h
bGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKLSAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAoT3B0aW9uczo6
c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQotICAgICAgICAmJiAodHJhZGVE
ZXN0cnVjdG9yQmxvY2tzIHx8ICFuZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAgICAgIGlmIChN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9T
dGVhbCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpID09IG1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2Nh
dGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAgICAgICAgLy8g
YmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJv
dGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBh
dCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3Rvcnko
KTsKLSAgICAgICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZUluKGJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2spCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jayk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jaykKLXsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxp
c3RlZCgpKTsKLSAgICAKLSAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwotICAgIAotICAg
IC8vIEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4g
TWFya2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAotICAgIC8vIHRoYXQgYWxnb3JpdGht
IGlzIHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmIChtX2Zy
ZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7Ci0gICAgICAgIEFTU0VSVChibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwotICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVk
KCk7Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAgICAgICAgQVNT
RVJUKCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKLSAgICAgICAgQVNTRVJU
KCFpc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwor
ICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2Vt
cHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fYWxsb2Nh
dGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAgIHZvaWQq
IHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhlYXBDZWxs
KiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0pOwotICAgIHNldElzRWRlbihOb0xvY2tpbmdO
ZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKLSAgICBtYXJrZWRTcGFjZSgpLmRpZEFs
bG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVl
ZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgaWYgKCFPcHRp
b25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7Ci0gICAgaWYgKCFhbGxvY2F0aW9u
Q291bnQpIHsKLSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgewotICAgICAgICAg
ICAgaWYgKGRlZmVycmFsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQt
Pm1fc2hvdWxkR0MgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
aGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFs
bG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKLX0KLQotdm9p
ZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NFUlQo
bV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBkb1Rl
c3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQoIW1h
cmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2Zy
ZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsK
LSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAgICBt
X2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAK
LSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBu
b3cgdGhpcyBkaXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAvLyBo
YXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNr
IGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRC
bG9jaykpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxv
Y2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFpbHVyZU1vZGUg
PT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9jYXRl
SW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
c2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0
aW9uQ3Vyc29yLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNv
cl07CiB9CiAKIHN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKQEAgLTMxMywyNCArMTc5
LDE5IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAgICBpZiAo
ZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJlY3Rv
cnk6OnN0b3BBbGxvY2F0aW5nIVxuIik7Ci0gICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7
Ci0gICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
bV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAg
IG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAg
ICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9j
YXRvci0+c3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBtX2xhc3RBY3RpdmVCbG9jayA9
IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotICAgIG1fZnJlZUxpc3Qu
Y2xlYXIoKTsKLQorICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAo
TG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5wcmVw
YXJlRm9yQWxsb2NhdGlvbigpOworICAgICAgICB9KTsKKyAgICAKICAgICBtX2FsbG9jYXRpb25D
dXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1fdW5zd2VwdEN1cnNvciA9
IDA7CkBAIC0zNDQsNiArMjA1LDIxIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW8KICAgICB9CiB9CiAKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5n
Rm9yR29vZCgpCit7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
dGhpcyksICI6IEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QhXG4iKTsKKyAg
ICAKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2FsQWxs
b2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+c3RvcEFsbG9jYXRp
bmdGb3JHb29kKCk7CisgICAgICAgIH0pOworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgIHdoaWxlICghbV9sb2NhbEFsbG9jYXRvcnMuaXNF
bXB0eSgpKQorICAgICAgICBtX2xvY2FsQWxsb2NhdG9ycy5iZWdpbigpLT5yZW1vdmUoKTsKK30K
Kwogdm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogewogICAgIGZv
ckVhY2hCbG9jaygKQEAgLTM1NCwxMiArMjMwLDEwIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6Omxh
c3RDaGFuY2VUb0ZpbmFsaXoKIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2NhdGlu
ZygpCiB7Ci0gICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAg
bV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RBY3RpdmVCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZd
IChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnJl
c3VtZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKQEAgLTM3OSw3ICsyNTMsNyBAQCB2b2lk
IEJsb2NrRGlyZWN0b3J5OjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBvZiBj
b2xsZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhl
IG1fbWFya2luZ1hZWgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgaWYgKCF0cmFkZURlc3Ry
dWN0b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgaWYgKCFPcHRpb25zOjp0
cmFkZURlc3RydWN0b3JCbG9ja3MoKSAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsKICAgICAgICAg
QVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKICAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVt
cHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CiAgICAgfSBlbHNlIHsKQEAgLTUxMiw1
ICszODYsMTUgQEAgTWFya2VkU3BhY2UmIEJsb2NrRGlyZWN0b3J5OjptYXJrZWRTcGFjZQogICAg
IHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQogCitib29sIEJsb2NrRGlyZWN0b3J5Ojpp
c0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkKK3sKKyAgICBib29sIHJlc3VsdCA9
IGZhbHNlOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAoTG9j
YWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0IHw9IGFsbG9jYXRv
ci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDZWxsQXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQzLDcgQEAgY2xhc3MgSGVhcDsK
IGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUgRk9S
X0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxpdmUsIExpdmUp
IC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4gKi9c
CkBAIC03NiwxNCArNzksMTIgQEAgY2xhc3MgQmxvY2tEaXJlY3RvcnkgewogICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mRnJlZUxpc3QoKTsKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2Vs
bFNpemUoKTsKLQogICAgIEJsb2NrRGlyZWN0b3J5KEhlYXAqLCBzaXplX3QgY2VsbFNpemUpOwog
ICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsKICAgICB2b2lkIGxhc3RDaGFuY2VUb0Zp
bmFsaXplKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIHZvaWQgc3Rv
cEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOwogICAgIHZv
aWQgcmVzdW1lQWxsb2NhdGluZygpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nRm9yRnVsbENvbGxl
Y3Rpb24oKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKQEAgLTk3LDEwICs5OCw5IEBAIHB1Ymxp
YzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsg
fQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7
IH0KIAotICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0
OworICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5
QmxvY2soY29uc3QgRnVuY3RvciYpOwpAQCAtMTU3LDI0ICsxNTcsMjAgQEAgcHVibGljOgogICAg
IFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KICAgICBN
YXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKICAgICAKLSAgICBjb25zdCBGcmVlTGlz
dCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CisgICAgQWxsb2NhdG9y
IGFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIEFsbG9jYXRvcihtX3RsY09mZnNldCk7IH0KICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBCaXRz
KFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiBwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsK
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZExv
Y2FsQ2FjaGVMYXlvdXQ7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSk7Ci0gICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICB2b2lkKiB0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5
QWxsb2NhdGVCbG9jaygpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSopOwotICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxD
b250ZXh0Kik7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlv
bigpOwogICAgIAotICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6
SGFuZGxlKj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGlj
ZXM7CkBAIC0xOTMsMTAgKzE4OSw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZW1wdHlDdXJz
b3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRl
IGZvciBlbXB0eSBhbGxvY2F0aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCiAgICAg
c2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2Nr
IHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgogICAgIAotICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrOwotICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrOwotCi0gICAgTG9jayBtX2xvY2s7CiAgICAgdW5zaWdu
ZWQgbV9jZWxsU2l6ZTsKICAgICBDZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8g
RklYTUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KQEAgLTIw
NiwxNiArMTk4LDEwIEBAIHByaXZhdGU6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVj
dG9yeSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5T
dWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OworICAgIAorICAgIExvY2sgbV9s
b2NhbEFsbG9jYXRvcnNMb2NrOworICAgIHNpemVfdCBtX3RsY09mZnNldDsKKyAgICBTZW50aW5l
bExpbmtlZExpc3Q8TG9jYWxBbGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxs
b2NhdG9yPj4gbV9sb2NhbEFsbG9jYXRvcnM7CiB9OwogCi1pbmxpbmUgcHRyZGlmZl90IEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEJsb2NrRGlyZWN0b3J5LCBtX2ZyZWVMaXN0KTsKLX0KLQotaW5saW5lIHB0cmRpZmZfdCBC
bG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCi17Ci0gICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJl
Y3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCAr
MzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgQmxvY2tEaXJlY3Rvcnk6
OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVy
biBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOwot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpCi17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFsmXSAo
KSAtPiBIZWFwQ2VsbCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+
dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKLSAgICAgICAgfSk7Ci19
Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBCbG9ja0RpcmVjdG9y
eTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgbV9saXZlLmZv
ckVhY2hTZXRCaXQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21w
bGV0ZVN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDE1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKIAorI2luY2x1
ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1h
cmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzgsNDAgKzQyLDM4IEBAIENvbXBs
ZXRlU3Vic3BhY2U6OkNvbXBsZXRlU3Vic3BhY2UoQ1N0cmkKICAgICA6IFN1YnNwYWNlKG5hbWUs
IGhlYXApCiB7CiAgICAgaW5pdGlhbGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM7
IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOwogfQog
CiBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAKLUJsb2NrRGly
ZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9j
YXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JG
b3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9pZCogQ29tcGxldGVTdWJz
cGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsK
LSAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFp
bHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBs
ZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCiB7Ci0gICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cykpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2Nh
dGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0gICAgZWxzZQotICAgICAgICByZXN1
bHQgPSBhbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Cisg
ICAgcmV0dXJuIGFsbG9jYXRvci50cnlBbGxvY2F0ZSgKKyAgICAgICAgdm0sIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUsCisgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAg
ICAgICAgfSk7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKICAgICBpZiAoIXNpemVDbGFz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBBbGxvY2F0b3IoKTsK
ICAgICAKICAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sg
Zm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKICAgICAvLyB0
byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVu
IHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0KQEAgLTgyLDcgKzg0LDcgQEAgQmxvY2tE
aXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQgYW55ICJmb3JF
YWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0
ZXIgaXQncyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwotICAgIGlmIChC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0p
CisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2lu
ZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKQEAgLTk4
LDcgKzEwMCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAg
ICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBz
aXplQ2xhc3MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX2FsbG9jYXRvckZvclNp
emVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtpbmRleF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpbmRleC0tKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsMjMgKzEwOSwyMyBAQCBCbG9j
a0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9maXJzdERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICByZXR1
cm4gZGlyZWN0b3J5OworICAgIHJldHVybiBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogfQogCi12
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVT
bG93KHNpemUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9
PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZt
LCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIHNhbml0aXpl
U3RhY2tGb3JWTSgmdm0pOwogICAgIAotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikp
Ci0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0
b3IpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgCiAgICAgaWYgKHNp
emUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8
PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKQEAgLTEzMiwxNSArMTM0LDE1IEBAIHZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0g
ICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVh
dGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFs
bG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlz
KTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBt
X3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0
ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xh
cmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJy
ZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMi
LCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihz
aXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9y
TW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9
CiAgICAgCi0gICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0
dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAK
IHByaXZhdGU6Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsK
KyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAogICAgIC8vIFRo
ZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBh
bGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVT
bG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29u
dGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFj
ZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgc3RkOjphcnJh
eTxBbGxvY2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0b3J5Pj4gbV9k
aXJlY3RvcmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZv
ck1vZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkK
IHsKICAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXpl
KV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1v
ZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9B
U1NFUlQobW9kZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3Ip
OwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07
CiAKIGNsYXNzIEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7
Ci0gICAgCiBwdWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5G
cmVlTGlzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVy
cmFsQ29udGV4dC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworY2xh
c3MgTG9jYWxBbGxvY2F0b3I7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKICAgICBmcmll
bmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgZnJp
ZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVycmFs
Q29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2
OCw3IEBACiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJTd2Vl
cGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6SGVhcChWTSog
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQ
b29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1f
dGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCisgICAg
LCBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApAQCAtNDQ2LDcg
KzQ0OCw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogICAgICAgICBkYXRh
TG9nKCI1ICIpOwogICAgIAogICAgIG1fYXJyYXlCdWZmZXJzLmxhc3RDaGFuY2VUb0ZpbmFsaXpl
KCk7Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1fb2JqZWN0U3Bh
Y2Uuc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgbV9vYmplY3RTcGFjZS5sYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogICAgIHJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
NyBAQCBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7
CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CitjbGFz
cyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogY2xhc3MgVk07CiBjbGFzcyBXZWFrR0NNYXBCYXNl
Owogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKQEAgLTM3Miw2ICszNzMsOCBAQCBwdWJsaWM6
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNsb3RWaXNp
dG9yKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlTGF5b3V0JiB0aHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNoZUxheW91dDsg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC03MTQs
NiArNzE3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBDdXJyZW50VGhyZWFkU3RhdGUqIG1fY3Vy
cmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9OwogICAgIFdURjo6VGhyZWFkKiBtX2N1cnJlbnRU
aHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3MgT0sgaWYgdGhpcyBiZWNvbWVzIGEgZGFuZ2xpbmcg
cG9pbnRlci4KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkTG9jYWxDYWNoZUxheW91
dD4gbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDkgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCiAKKyNpbmNsdWRl
ICJBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkxvY2Fs
QWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSw2ICszOCw3IEBAIElzb1N1YnNwYWNlOjpJc29T
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEgKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAg
LCBtX3NpemUoc2l6ZSkKICAgICAsIG1fZGlyZWN0b3J5KCZoZWFwLCBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKKyAgICAsIG1fYWxsb2NhdG9y
KG1fZGlyZWN0b3J5LmFsbG9jYXRvcigpKQogICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKHN0ZDo6bWFrZV91bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKIHsKICAg
ICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmdl
dCgpKTsKQEAgLTUwLDIwICs1NCwyMCBAQCBJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKIHsK
IH0KIAotQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNp
emUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJu
IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1YnNw
YWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogSXNvU3Vic3Bh
Y2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAgICBy
ZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25W
aXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgdm9pZCogcmVzdWx0
ID0gbV9kaXJlY3RvcnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cisg
ICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4
dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTEgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwg
QWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsK
IAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFs
bG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBJc29DZWxsU2V0OwpAQCAtNTYsMTQgKzU2LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
c2l6ZV90IG1fc2l6ZTsKICAgICBCbG9ja0RpcmVjdG9yeSBtX2RpcmVjdG9yeTsKKyAgICBBbGxv
Y2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAgICBTZW50aW5lbExpbmtl
ZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2Vs
bFNldHM7CiB9OwogCi1pbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQoraW5saW5lIEFs
bG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNp
emUoKSk7Ci0gICAgcmV0dXJuICZtX2RpcmVjdG9yeTsKKyAgICByZXR1cm4gbV9hbGxvY2F0b3I7
CiB9CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENlbGxUeXBlLCB0eXBl
KSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhlYXBDZWxsVHlwZSksIHNp
emVvZih0eXBlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiQWxsb2NhdGlu
Z1Njb3BlLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
T3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxs
b2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBtX2RpcmVjdG9yeShkaXJl
Y3RvcnkpCisgICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKKyAgICAsIG1f
ZnJlZUxpc3QobV9jZWxsU2l6ZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpcmVj
dG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fbG9jYWxBbGxv
Y2F0b3JzLmFwcGVuZCh0aGlzKTsKK30KKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9y
KExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCisgICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVj
dG9yeSkKKyAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKKyAgICAsIG1fZnJlZUxp
c3QoV1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKKyAgICAsIG1fY3VycmVudEJsb2NrKG90aGVy
Lm1fY3VycmVudEJsb2NrKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIubV9sYXN0QWN0
aXZlQmxvY2spCit7CisgICAgb3RoZXIucmVzZXQoKTsKKyAgICBpZiAob3RoZXIuaXNPbkxpc3Qo
KSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2Fs
QWxsb2NhdG9yc0xvY2spOworICAgICAgICBvdGhlci5yZW1vdmUoKTsKKyAgICAgICAgbV9kaXJl
Y3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKK30KKworTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCit7CisgICAgaWYgKGlz
T25MaXN0KCkpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2RpcmVjdG9yeS0+
bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICAgICAgcmVtb3ZlKCk7CisgICAgfQorICAgIAor
ICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0IGhvbGRpbmcgb250byBhbnkg
bWVtb3J5LiBUaGlzIGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0aGUKKyAgICAvLyBmb2xsb3dp
bmcgdHdvIHVzZSBjYXNlczoKKyAgICAvLyAKKyAgICAvLyAtIEltbW9ydGFsIFRMQy4gVGhvc2Ug
ZGVzdHJ1Y3QgYWZ0ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVjdGluZywgc28gdGhleSBzaG91
bGQgbm90IGhhdmUKKyAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGluIHRoZW0uCisgICAgLy8KKyAg
ICAvLyAtIFRMQyBvd25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBUTEMgZ2V0cyBkZXN0cm95ZWQg
YWZ0ZXIgYSBHQyBmbGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQKKyAgICAvLyAgIHRoYXQgaXQg
aXMgbm90IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBh
IGZ1bGx5IHJlc2V0IHN0YXRlIGF0IHRoZQorICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBi
ZWNhdXNlIGZvciBpdCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBo
YXZlIGFsbG9jYXRlZAorICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVz
ZSBpdCdzIHN1cHBvc2VkbHkgdW5yZWFjaGFibGUpLgorICAgIGJvb2wgb2sgPSB0cnVlOworICAg
IGlmICghbV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgICAgICBkYXRhTG9n
KCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24t
ZW1wdHkgZnJlZS1saXN0LlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRl
cih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBjdXJyZW50IGJsb2NrLlxu
Iik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2xhc3RBY3RpdmVCbG9j
aykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxv
Y2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBsYXN0IGFjdGl2ZSBibG9jay5cbiIpOworICAgICAg
ICBvayA9IGZhbHNlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fbGFzdEFj
dGl2ZUJsb2NrKTsKKyAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgIEFTU0VSVCht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Cisg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworfQorCit2b2lkIExvY2FsQWxs
b2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKK3sKKyAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2Nr
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2Nh
dGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2Nr
OworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbEFsbG9j
YXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpCit7CisgICAgc3RvcEFsbG9j
YXRpbmcoKTsKKyAgICByZXNldCgpOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOworICAgIEhlYXAmIGhlYXAgPSAqbV9kaXJlY3RvcnktPm1faGVh
cDsKKyAgICBBU1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
KTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CisKKyAg
ICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOworICAg
IGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7CisgICAgCisgICAg
ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdI
ZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFs
Q29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQg
YSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRCbG9jay4gVGhp
cyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBp
bmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5M
SUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxD
b250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDAp
KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxvY2soKTsKKyAgICBpZiAoIWJsb2Nr
KSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBtX2RpcmVjdG9y
eS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOworICAg
IEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxv
Y2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVudEJsb2NrKQor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAg
bV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKK30KKwor
dm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQorewor
ICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2VkIGZvciByZWFsIG11bHRp
LXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0bworICAgIC8vIGNvbWUg
dXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRoYXQgcHJvdG9jb2wgd291
bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAvLworICAgIC8vIC0gVGhlIGJhc2lj
IGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRyeWluZyB0byBkbyBhbiBhbGxvY2F0
aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNhbWUgYml0dmVjdG9yLiBUaGF0IHBy
b2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBsZWFzdC4KKyAgICAvLworICAgIC8v
IC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxvY2F0b3IgdHJpZ2dlcmluZyBhIHN0
ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkKKyAgICAvLyAgIHZpYSBhIHNlYXJj
aCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxpc3QuIFdobyBrbm93cyB3aGF0IGxv
Y2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25lIHdheSB0byBtYWtlIHRoaXMgd29y
ayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sgdGhhdCBwcm90ZWN0cyBhbGwgbXV0
YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBhdGhzLiBUaGF0IHdvdWxkIHByb2Jh
Ymx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0IHdvdWxkIGNlcnRhaW5seSBiZQor
ICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24gZnJvbSBKSVQgdGhyZWFkcy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjM1CisgICAg
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAor
ICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9j
YXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9ja0ZvckFsbG9jYXRpb24o
KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
ICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tz
RnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmIChPcHRpb25zOjp0cmFkZURlc3RydWN0
b3JCbG9ja3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKKyAgICAg
ICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPm1fc3Vic3Bh
Y2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fZGlyZWN0b3J5LT5tX3N1YnNw
YWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0
J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBh
cyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1v
dGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1w
dHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAg
ICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAgICBtX2RpcmVj
dG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxv
Y2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCit2
b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
aykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIExvY2Fs
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQorewor
ICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwor
ICAgIAorICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7CisgICAgCisgICAgLy8gSXQncyBw
b3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRy
aWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CisgICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBh
bmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCisgICAgaWYgKG1fZnJlZUxpc3QuYWxs
b2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQo
KSk7CisgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICAg
ICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICBBU1NFUlQoIW1fZGly
ZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgQVNT
RVJUKCFtX2RpcmVjdG9yeS0+aXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vz
c2FyeSwgYmxvY2spKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAg
IG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVl
TGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfSk7CisgICAgbV9kaXJlY3RvcnktPnNldElzRWRlbihOb0xvY2tpbmdOZWNl
c3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKKyAgICBtX2RpcmVjdG9yeS0+bWFya2VkU3Bh
Y2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6
OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKKyAgICBpZiAoIWFsbG9jYXRpb25Db3Vu
dCkgeworICAgICAgICBpZiAoIW1fZGlyZWN0b3J5LT5tX2hlYXAtPmlzRGVmZXJyZWQoKSkgewor
ICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJh
bENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fZGlyZWN0b3J5LT5tX2hlYXAtPmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNj
b3BlOjpGdWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKythbGxvY2F0aW9uQ291bnQg
Pj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgICAgIGFsbG9jYXRp
b25Db3VudCA9IDA7Cit9CisKK2Jvb2wgTG9jYWxBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIC8vIFRoaXMgYWJvbWluYXRpb24gZXhp
c3RzIHRvIGRldGVjdCB3aGVuIGFuIG9iamVjdCBpcyBpbiB0aGUgZGVhZC1idXQtbm90LWRlc3Ry
dWN0ZWQgc3RhdGUuCisgICAgLy8gVGhlcmVmb3JlLCBpdCdzIG5vdCBldmVuIGNsZWFyIHRoYXQg
dGhpcyBuZWVkcyB0byBkbyBhbnl0aGluZyBiZXlvbmQgcmV0dXJuaW5nICJmYWxzZSIsIHNpbmNl
CisgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25pbmcgdGhlIG9iamVjdCBpcyBm
cmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFueQorICAgIC8vIG9iamVjdHMg
dG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0YXRlLgorICAgIC8vIEZJWE1F
OiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODE2NTUKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlz
dC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKK2NsYXNzIEdD
RGVmZXJyYWxDb250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KExvY2FsQWxsb2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAgICBMb2NhbEFsbG9jYXRvcihCbG9j
a0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOworICAg
IH5Mb2NhbEFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQgc3RvcEFsbG9jYXRp
bmcoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgdm9pZCByZXN1bWVB
bGxvY2F0aW5nKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQ2VsbFNpemUoKTsKKyAgICAKKyAgICBib29sIGlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCopIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXQoKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICB2b2lk
KiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOworCisgICAg
QmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OworICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Cisg
ICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3Rp
dmVCbG9jayB7IG51bGxwdHIgfTsKK307CisKK2lubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQoreworICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9j
YWxBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQorCitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KExvY2FsQWxsb2NhdG9yLCBtX2NlbGxTaXplKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQUxX
QVlTX0lOTElORSB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQor
eworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVh
cENlbGwqIHsKKyAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShtX2RpcmVjdG9yeS0+aGVh
cCgpLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFs
bG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgICAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYg
KzMwMiwxNiBAQCB2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZygpCiAgICAgICAgIH0p
OwogfQogCit2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKQoreworICAg
IEFTU0VSVCghaXNJdGVyYXRpbmcoKSk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAg
WyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAg
ICAgICAgICAgZGlyZWN0b3J5LnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOworICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOworfQorCiB2b2lk
IE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpCiB7CiAgICAgbV9sYXJn
ZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxlY3Rpb25CZWdpbiA9IG1fbGFyZ2VBbGxvY2F0aW9ucy5i
ZWdpbigpICsgbV9sYXJnZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rpb247CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNzI3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgIAogICAgIEhlYXAqIGhlYXAoKSBj
b25zdCB7IHJldHVybiBtX2hlYXA7IH0KICAgICAKLSAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFs
aXplKCk7IC8vIFlvdSBtdXN0IGNhbGwgc3RvcEFsbG9jYXRpbmcgYmVmb3JlIHlvdSBjYWxsIHRo
aXMuCisgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOyAvLyBNdXN0IGNhbGwgc3RvcEFs
bG9jYXRpbmdGb3JHb29kIGZpcnN0LgogICAgIHZvaWQgZnJlZU1lbW9yeSgpOwogCiAgICAgc3Rh
dGljIHNpemVfdCBvcHRpbWFsU2l6ZUZvcihzaXplX3QpOwpAQCAtMTExLDYgKzExMSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygpOwogCiAgICAgdm9pZCBzdG9wQWxs
b2NhdGluZygpOworICAgIHZvaWQgc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgdm9pZCBy
ZXN1bWVBbGxvY2F0aW5nKCk7IC8vIElmIHdlIGp1c3Qgc3RvcHBlZCBhbGxvY2F0aW9uIGJ1dCB3
ZSBkaWRuJ3QgZG8gYSBjb2xsZWN0aW9uLCB3ZSBuZWVkIHRvIHJlc3VtZSBhbGxvY2F0aW9uLgog
ICAgIAogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdG9w
SWZOZWNlc3NhcnlUaW1lci5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQxLDYgKzQyLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxs
OwogY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRlcjsKIGNsYXNzIE1hcmtlZEJsb2NrOworY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKIGNsYXNz
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUu
aCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTU2LDggKzU3LDggQEAgcHVibGljOgogICAg
IHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIEJsb2NrRGlyZWN0b3J5
KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoVk0m
LCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7
CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRocmVhZExvY2FsQ2FjaGUuaCIKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZlB0cjxUaHJlYWRMb2NhbENh
Y2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworfQorCitUaHJlYWRMb2NhbENh
Y2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKK3sK
KyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6flRo
cmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Cit9CisKK1RocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCit7Cisg
ICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOworICAgIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENh
Y2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAgICBEYXRhKiByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxEYXRhKj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2NhdG9yKSAr
IGxheW91dC5zaXplKSk7CisgICAgcmVzdWx0LT5zaXplID0gbGF5b3V0LnNpemU7CisgICAgcmVz
dWx0LT5jYWNoZSA9IHRoaXM7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
b2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAo
JmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9j
YXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6
ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3Ip
KQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0
b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lE
YXRhKERhdGEqIGRhdGEpCit7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
ZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIGFs
bG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBmYXN0RnJlZShk
YXRhKTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0pCit7
CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2VGbGFnLAorICAgICAgICBb
XSAoKSB7CisgICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwgZGVzdHJ1Y3Rv
cik7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgCisgICAgcmVmKCk7CisgICAgCisgICAgaWYg
KFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSkpCisgICAgICAgIG9s
ZENhY2hlLT5kZXJlZigpOworICAgIAorICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEpOworfQor
Cit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxEYXRhKFZNJiB2bSwgRGF0YSogZGF0YSkK
K3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAg
X3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSwgZGF0YSk7CisjZWxzZQorICAgIHZt
LnRocmVhZExvY2FsQ2FjaGUgPSBkYXRhOworI2VuZGlmCit9CisKK0xvY2FsQWxsb2NhdG9yJiBU
aHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sK
KyAgICBEYXRhKiBvbGREYXRhID0gbV9kYXRhOworICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgp
OworICAgIGRlc3Ryb3lEYXRhKG9sZERhdGEpOworICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEp
OworICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA8IG1fZGF0YS0+c2l6ZSk7CisgICAgcmV0dXJu
IGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6
OmRlc3RydWN0b3Iodm9pZCogYXJnKQoreworICAgIGlmICghYXJnKQorICAgICAgICByZXR1cm47
CisgICAgRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihhcmcpOworICAgIGRhdGEtPmNh
Y2hlLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgVk07CisK
K2NsYXNzIFRocmVhZExvY2FsQ2FjaGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhy
ZWFkTG9jYWxDYWNoZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZExvY2FsQ2Fj
aGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmKTsKKyAgICAKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB+VGhyZWFkTG9jYWxDYWNoZSgpOworCisgICAgc3RhdGljIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBnZXQoVk0mKTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGRlc2ln
bmVkIHRvIGJlIGZhc3QgZW5vdWdoIHRoYXQgeW91IGNvdWxkIGV2ZW4gY2FsbCBpdCBiZWZvcmUg
ZXZlcnkgYWxsb2NhdGlvbiwgYnkKKyAgICAvLyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0
IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcgdGhlIGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxs
ZWQuIFRoaXMKKyAgICAvLyBhc3N1bWVzIGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2Fj
aGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0dWFsIGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCisgICAg
Ly8gd2l0aCBwb3NzaWJseSBoaWdoIHJhdGUgb2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hl
ZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMgb3V0IG9mIHBhcmFub2lhLgorICAgIHZvaWQgaW5zdGFs
bChWTSYpOworICAgIAorICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKFZNJiwg
c2l6ZV90IG9mZnNldCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc0Z1bmMs
IHR5cGVuYW1lIEZhaWx1cmVGdW5jPgorICAgIHN0YXRpYyB2b2lkIHRyeUdldEFsbG9jYXRvcihW
TSYsIHNpemVfdCBvZmZzZXQsIGNvbnN0IFN1Y2Nlc3NGdW5jJiwgY29uc3QgRmFpbHVyZUZ1bmMm
KTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihEYXRhLCBzaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGaXJzdEFsbG9jYXRvcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0
b3IpOyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICAKKyAgICBU
aHJlYWRMb2NhbENhY2hlKEhlYXAmKTsKKyAgICAKKyAgICBzdHJ1Y3QgRGF0YSB7CisgICAgICAg
IHNpemVfdCBzaXplOworICAgICAgICBUaHJlYWRMb2NhbENhY2hlKiBjYWNoZTsKKyAgICAgICAg
TG9jYWxBbGxvY2F0b3IgYWxsb2NhdG9yWzFdOworICAgIH07CisKKyAgICBzdGF0aWMgRGF0YSog
Z2V0SW1wbChWTSYpOworICAgIAorICAgIERhdGEqIGFsbG9jYXRlRGF0YSgpOworICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3lEYXRhKERhdGEqKTsKKyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFs
bG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgIHZvaWQgaW5zdGFsbFNs
b3coVk0mKTsKKyAgICBzdGF0aWMgdm9pZCBpbnN0YWxsRGF0YShWTSYsIERhdGEqKTsKKyAgICAK
KyAgICBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yU2xvdyhWTSYsIHNpemVfdCBvZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0b3Iodm9pZCopOworICAgIAorICAgIC8vIFdo
ZW4gaW5zdGFsbGVkLCB3ZSByZWYoKSB0aGUgY2FjaGUuIFVuaW5zdGFsbGluZyBkZXJlZigpcyB0
aGUgY2FjaGUuIFRMUyBkZXN0cnVjdGlvbiBkZXJlZigpcworICAgIC8vIHRoZSBjYWNoZS4gV2hl
biB0aGUgY2FjaGUgaXMgZGVzdHJ1Y3RlZCwgaXQgbmVlZHMgdG8gcmV0dXJuIGFsbCBvZiBpdHMg
c3RhdGUgdG8gdGhlIEdDLiBJCisgICAgLy8gdGhpbmsgdGhhdCBqdXN0IG1lYW5zIHN0b3BBbGxv
Y2F0aW5nKCksIGJ1dCB3aXRoIHNvbWUgc2VyaW91c2x5IGhlYXZ5IGNhdmVhdHMgaGF2aW5nIHRv
IGRvCisgICAgLy8gd2l0aCB3aGVuIGl0J3MgdmFsaWQgdG8gbWFrZSB0aGF0IGNhbGwuIEFsdGVy
bmF0aXZlbHksIHdlIGNvdWxkIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlIGNhY2hlCisgICAgLy8g
aXMgZW1wdHkgd2hlbiB3ZSBkZXN0cnVjdCBpdC4gVGhpcyBpcyBjb3JyZWN0IGZvciBjYWNoZXMg
dGhhdCBhcmUga2VwdCBsaXZlIGJ5IEdDIG9iamVjdHMgYW5kCisgICAgLy8gaXQncyBjb3JyZWN0
IGZvciBpbW1vcnRhbCBjYWNoZXMuCisgICAgSGVhcCYgbV9oZWFwOworICAgIERhdGEqIG1fZGF0
YSB7IG51bGxwdHIgfTsKKworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgc3RhdGljIGNv
bnN0IHB0aHJlYWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19LRVk7CisjZW5kaWYKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9U
aHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNo
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEq
IFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZtKQoreworI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0
YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdCh0bHNLZXkpKTsKKyNlbHNlCisgICAgcmV0
dXJuIHZtLnRocmVhZExvY2FsQ2FjaGU7CisjZW5kaWYKK30KKworaW5saW5lIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpnZXQoVk0mIHZtKQoreworICAgIFRocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsKKyAgICBpZiAoZGF0YSkKKyAg
ICAgICAgcmV0dXJuIGRhdGEtPmNhY2hlOworICAgIHJldHVybiBudWxscHRyOworfQorCitpbmxp
bmUgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSkKK3sKKyAgICBpZiAoZ2V0
SW1wbCh2bSkgPT0gbV9kYXRhKQorICAgICAgICByZXR1cm47CisgICAgaW5zdGFsbFNsb3codm0p
OworfQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRv
cihWTSYgdm0sIHNpemVfdCBvZmZzZXQpCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSog
ZGF0YSA9IGdldEltcGwodm0pOworICAgIGlmIChMSUtFTFkob2Zmc2V0IDwgZGF0YS0+c2l6ZSkp
CisgICAgICAgIHJldHVybiBhbGxvY2F0b3IoKmRhdGEsIG9mZnNldCk7CisgICAgcmV0dXJuIGRh
dGEtPmNhY2hlLT5hbGxvY2F0b3JTbG93KHZtLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBTdWNjZXNzRnVuYywgdHlwZW5hbWUgRmFpbHVyZUZ1bmM+Cit2b2lkIFRocmVhZExvY2Fs
Q2FjaGU6OnRyeUdldEFsbG9jYXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQsIGNvbnN0IFN1Y2Nl
c3NGdW5jJiBzdWNjZXNzRnVuYywgY29uc3QgRmFpbHVyZUZ1bmMmIGZhaWx1cmVGdW5jKQorewor
ICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsKKyAgICBpZiAo
TElLRUxZKG9mZnNldCA8IGRhdGEtPnNpemUpKQorICAgICAgICBzdWNjZXNzRnVuYyhhbGxvY2F0
b3IoKmRhdGEsIG9mZnNldCkpOworICAgIGVsc2UKKyAgICAgICAgZmFpbHVyZUZ1bmMoKTsKK30K
KworaW5saW5lIExvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoRGF0
YSYgZGF0YSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxMb2Nh
bEFsbG9jYXRvcio+KGJpdHdpc2VfY2FzdDxjaGFyKj4oJmRhdGEuYWxsb2NhdG9yWzBdKSArIG9m
ZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgiCisKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9y
eS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6VGhyZWFk
TG9jYWxDYWNoZUxheW91dCgpCit7Cit9CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6On5UaHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlTGF5b3V0
OjphbGxvY2F0ZU9mZnNldChCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fdGxjT2Zmc2V0ID0g
bV9zaXplOworICAgIG1fc2l6ZSArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpOworICAgIG1fZGly
ZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6
OlNuYXBzaG90IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OnNuYXBzaG90KCkKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgU25hcHNob3QgcmVzdWx0OworICAgIHJl
c3VsdC5zaXplID0gbV9zaXplOworICAgIHJlc3VsdC5kaXJlY3RvcmllcyA9IG1fZGlyZWN0b3Jp
ZXM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQmxvY2tEaXJlY3RvcnkqIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQ6OmRpcmVjdG9yeSh1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIHJldHVybiBtX2RpcmVjdG9yaWVzW29mZnNldCAv
IHNpemVvZihMb2NhbEFsbG9jYXRvcildOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVM
YXlvdXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJl
YWRMb2NhbENhY2hlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKKworLy8gRWFjaCBIZWFwIGhh
cyBhIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQgdGhhdCBoZWxwcyB1cyBmaWd1cmUgb3V0IGhvdyB0
byBhbGxvY2F0ZSBhIFRocmVhZExvY2FsQ2FjaGUKKy8vIGZvciB0aGF0IEhlYXAuCisKK2NsYXNz
IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAor
cHVibGljOgorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKTsKKyAgICB+VGhyZWFkTG9jYWxD
YWNoZUxheW91dCgpOworCisgICAgLy8gQmxvY2tEaXJlY3RvcnkgY2FsbHMgdGhpcyBkdXJpbmcg
Y3JlYXRpb24gYW5kIHRoaXMgZmlsbHMgaW4gQmxvY2tEaXJlY3Rvcnk6Om9mZnNldC4KKyAgICB2
b2lkIGFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5Kik7CisgICAgCisgICAgc3RydWN0IFNu
YXBzaG90IHsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIFZlY3RvcjxCbG9ja0RpcmVj
dG9yeSo+IGRpcmVjdG9yaWVzOworICAgIH07CisgICAgCisgICAgU25hcHNob3Qgc25hcHNob3Qo
KTsKKyAgICAKKyAgICBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KHVuc2lnbmVkIG9mZnNldCk7
CisgICAgCitwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOworICAgIHNpemVfdCBtX3NpemUgeyAw
IH07CisgICAgVmVjdG9yPEJsb2NrRGlyZWN0b3J5Kj4gbV9kaXJlY3RvcmllczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01ODIsNiAr
NTgyLDEwMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNCiB9CiAj
ZW5kaWYKIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxs
b2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBH
UFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQoreworICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBj
YW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCisgICAgLy8gcmVnaXN0ZXIgdXNh
Z2UuCisgICAgICAgIAorICAgIGlmIChPcHRpb25zOjpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgSnVtcCBwb3BQYXRoOworICAgIEp1bXAgZG9uZTsKKyAgICAKKyNpZiBFTkFCTEUo
RkFTVF9UTFNfSklUKQorICAgIGxvYWRGcm9tVExTUHRyKGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RG
X0dDX1RMQ19LRVkpLCBzY3JhdGNoR1BSKTsKKyNlbHNlCisgICAgbG9hZFB0cigmdm0oKS50aHJl
YWRMb2NhbENhY2hlRGF0YSwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICBpZiAoYWxsb2NhdG9y
LmlzQ29uc3RhbnQoKSkgeworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQmVsb3dP
ckVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mU2l6
ZSgpKSwgVHJ1c3RlZEltbTMyKGFsbG9jYXRvci5hbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKKyAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0
QWxsb2NhdG9yKCkgKyBhbGxvY2F0b3IuYWxsb2NhdG9yKCkub2Zmc2V0KCkpLCBzY3JhdGNoR1BS
LCBhbGxvY2F0b3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2gzMihCZWxvd09yRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgVGhyZWFkTG9jYWxDYWNo
ZTo6b2Zmc2V0T2ZTaXplKCkpLCBhbGxvY2F0b3JHUFIpKTsKKyAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9yKCkpLCBhbGxv
Y2F0b3JHUFIpOworICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgYWxsb2NhdG9yR1BSKTsKKyAg
ICB9CisKKyAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3Vs
dEdQUik7CisgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOworICAg
IGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
LWFsbG9jYXRvci5hbGxvY2F0b3IoKS5jZWxsU2l6ZSh2bSgpLmhlYXApKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
ICAgIG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN1YjMyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIH0KKyAgICB9CisgICAgbmVnUHRyKHJlc3VsdEdQUik7CisgICAgc3RvcmUz
MihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7CisgICAgQWRk
cmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsK
KyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRH
UFIpOworICAgIGVsc2UgeworICAgICAgICBsb2FkUHRyKHBheWxvYWRFbmRBZGRyLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgfQorICAg
ICAgICAKKyAgICBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICBwb3BQYXRoLmxpbmsodGhp
cyk7CisgICAgICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRI
ZWFkKCkpLCByZXN1bHRHUFIpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICB4b3JQdHIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CisgICAgZWxzZSB7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICB4b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CisgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIAorICAg
IC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlz
IGEgZnJlc2ggb2JqZWN0LCBidXQKKyAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUg
bGlzdC4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CisgICAg
c3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkp
KTsKKyAgICAgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCit2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYg
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExp
c3QmIHNsb3dQYXRoKQoreworICAgIGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKSB7CisgICAg
ICAgIGlmICghYWxsb2NhdG9yLmFsbG9jYXRvcigpKSB7CisgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihyZXN1bHRHUFIsIGFsbG9jYXRvciwg
YWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Cit9CisKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBs
ZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3Jh
dGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCit7CisgICAg
c3RhdGljX2Fzc2VydCghKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAmIChNYXJrZWRTcGFjZTo6c2l6
ZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3
by4iKTsKKyAgICAKKyAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBnZXRMU0JTZXQoTWFya2VkU3Bh
Y2U6OnNpemVTdGVwKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6
OnNpemVTdGVwIC0gMSksIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSk7CisgICAgdXJzaGlm
dDMyKFRydXN0ZWRJbW0zMihzdGVwU2hpZnQpLCBzY3JhdGNoR1BSMSk7CisgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSMSwgVHJ1c3RlZEltbTMyKE1hcmtlZFNw
YWNlOjpsYXJnZUN1dG9mZiA+PiBzdGVwU2hpZnQpKSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KHN1YnNwYWNlLmFsbG9jYXRvckZvclNpemVTdGVwKCkgLSAxKSwgc2NyYXRjaEdQUjIpOworICAg
IGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBUaW1lc0ZvdXIpLCBz
Y3JhdGNoR1BSMSk7CisgICAgCisgICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQUiwgSklUQWxsb2Nh
dG9yOjp2YXJpYWJsZSgpLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKK30K
Kwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUpCiB7CiAjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkhlYXAuaCIK
ICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKSVRBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNs
dWRlICJNYXJrZWRTcGFjZS5oIgpAQCAtNTksNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQorICAgIFZN
JiB2bSgpIHsgcmV0dXJuICptX2NvZGVCbG9jay0+dm0oKTsgfQogICAgIEFzc2VtYmxlclR5cGVf
VCYgYXNzZW1ibGVyKCkgeyByZXR1cm4gbV9hc3NlbWJsZXI7IH0KIAogICAgIHZvaWQgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKQpAQCAtMTQ4OCw4MyArMTQ5MCwyNCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBlbWl0UmFuZG9tVGh1bmsoSlNHbG9iYWxPYmplY3QqLCBHUFJSZWcgc2NyYXRjaDAs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBGUFJSZWcgcmVzdWx0KTsKICAgICB2
b2lkIGVtaXRSYW5kb21UaHVuayhWTSYsIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gx
LCBHUFJSZWcgc2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCk7CiAjZW5k
aWYKLQorICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBo
ZWxkIGluIGFsbG9jYXRvckdQUiBpcyBub24tbnVsbC4gVGhpcyBET0VTIE5PVCBtZWFuCiAgICAg
Ly8gdGhhdCBhbGxvY2F0b3IgaXMgbm9uLW51bGw7IGFsbG9jYXRvciBjYW4gYmUgbnVsbCBhcyBh
IHNpZ25hbCB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUKLSAgICAvLyB2YWx1ZSBvZiBhbGxv
Y2F0b3JHUFIgaXMuCi0gICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihH
UFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2Nh
dG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAg
ICAgICAgLy8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3JpdHRlbiBzbyB0aGF0IHdlIGNhbiBj
YWxsIGl0IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKLSAgICAgICAgLy8gcmVnaXN0ZXIgdXNh
Z2UuCi0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSnVtcCBwb3BQYXRoOwotICAgICAgICBK
dW1wIGRvbmU7Ci0gICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIs
IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZS
ZW1haW5pbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIo
WmVybywgcmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGFsbG9jYXRvcikKLSAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNYODYoKSkgewotICAg
ICAgICAgICAgICAgIG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2Vs
bFNpemUoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIzMihyZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFk
ZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsg
RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKLSAgICAgICAgQWRkcmVzcyBwYXlsb2Fk
RW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKLSAgICAgICAgaWYg
KGlzWDg2KCkpCi0gICAgICAgICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIsIHJlc3VsdEdQUik7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5kQWRkciwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG9uZSA9IGp1bXAoKTsKLSAgICAgICAgCi0gICAg
ICAgIHBvcFBhdGgubGluayh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVl
TGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBpZiAo
aXNYODYoKSkKLSAgICAgICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tE
aXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgp
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHhvclB0
cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICB9Ci0gICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICAKLSAgICAgICAg
Ly8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMg
YSBmcmVzaCBvYmplY3QsIGJ1dAotICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZy
ZWUgbGlzdC4KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIp
OwotICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxv
Y2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFt
YmxlZEhlYWQoKSkpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIH0K
KyAgICAvLyB2YWx1ZSBvZiBhbGxvY2F0b3JHUFIgaXMuIEFkZGl0aW9uYWxseSwgaWYgdGhlIGFs
bG9jYXRvciBpcyBub3QgbnVsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkCisgICAgLy8gdG8gcG9w
dWxhdGUgYWxsb2NhdG9yR1BSIC0gdGhpcyBjb2RlIHdpbGwgaWdub3JlIHRoZSBjb250ZW50cyBv
ZiBhbGxvY2F0b3JHUFIuCisgICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRv
cihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVn
IGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7CiAg
ICAgCi0gICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1
bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yKQotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yR1BSKSk7
Ci0gICAgICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQUiwgYWxs
b2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICB9CisgICAg
dm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlz
dCYgc2xvd1BhdGgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+
Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBl
bWl0QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBH
UFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgZW1p
dEFsbG9jYXRlKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIs
IHNsb3dQYXRoKTsKICAgICAgICAgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKHN0cnVj
dHVyZSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUsIHR5cGVuYW1lIE1h
c2tUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJl
VHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJl
ZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVK
U09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwg
R1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBl
IHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpCiAgICAgewogICAgICAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBhbGxv
Y2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAg
ICAgICAgIHN0b3JlUHRyKHN0b3JhZ2UsIEFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKQEAgLTE1NzYsMTMgKzE1MTksOCBAQCBwdWJsaWM6CiAgICAgICAg
IFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3Jh
Z2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSMSwKICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXplKQog
ICAgIHsKLSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENs
YXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKLSAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBz
Y3JhdGNoR1BSMSwgc3RydWN0dXJlLCBzdG9yYWdlLCBtYXNrLCBzY3JhdGNoR1BSMiwgc2xvd1Bh
dGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBl
Pih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOworICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjEsIHN0cnVjdHVy
ZSwgc3RvcmFnZSwgbWFzaywgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0
eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUgTWFza1R5cGU+CkBAIC0xNTkzLDIwICsxNTMx
LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIGFsbG9jYXRpb25TaXplIGNhbiBiZSBhbGlhc2Vk
IHdpdGggYW55IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJZiBpdCdzIG5vdCBhbGlhc2VkIHRo
ZW4gaXQKICAgICAvLyB3b24ndCBiZSBjbG9iYmVyZWQuCi0gICAgdm9pZCBlbWl0QWxsb2NhdGVW
YXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNl
LCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0
Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0
KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpKSwg
Ik1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwotICAgICAg
ICAKLSAgICAgICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpz
aXplU3RlcCk7Ci0gICAgICAgIAotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoTWFya2VkU3Bh
Y2U6OnNpemVTdGVwIC0gMSksIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
IHVyc2hpZnQzMihUcnVzdGVkSW1tMzIoc3RlcFNoaWZ0KSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1t
MzIoTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHN1YnNwYWNlLmFsbG9jYXRvckZvclNpemVTdGVwKCkgLSAxKSwgc2Ny
YXRjaEdQUjIpOwotICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjEsIHRpbWVzUHRyKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIAotICAgICAgICBlbWl0
QWxsb2NhdGUocmVzdWx0R1BSLCBudWxscHRyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNs
b3dQYXRoKTsKLSAgICB9CisgICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJl
ZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlv
blNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYg
c2xvd1BhdGgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5h
bWUgU3RydWN0dXJlVHlwZT4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxs
KFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJl
ZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIs
IEp1bXBMaXN0JiBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIg
PHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzksMjIgKzc5LDIzIEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pigq
bV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFs
bG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAg
ICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJldHVyblZhbHVlR1BSOwogICAgIFJlZ2lzdGVySUQg
YWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnKTsKLSAg
ICBpZiAoYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShKdW1wKCkpOwotICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0
cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5l
Q2FwYWNpdHkoKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CisgICAgaWYg
KCFhbGxvY2F0b3IpCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7
CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0U3Rv
cmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CisgICAg
fQogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtODU2LDkgKzg1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0
aW8KICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxlZVJlZywg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uVHlw
ZSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByYXJlRGF0YVJlZykpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcp
OworICAgIGxvYWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSks
IHN0cnVjdHVyZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxv
Y2F0b3JSZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgYWxsb2NhdG9yUmVn
LCBUcnVzdGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKGNh
Y2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlw
bGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZElt
bVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwpAQCAtODY4LDcgKzg2
OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwogICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBi
dXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJl
Zywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3Rl
cmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTgxLDIyICs4MSwy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVj
dD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVh
bChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwog
CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9j
YXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIGFsbG9jYXRvclJlZyk7Ci0gICAgaWYg
KGFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoSnVtcCgpKTsKLSAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwot
ICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxsb2NhdGVKU09iamVj
dChyZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBpZiAoIWFsbG9j
YXRvcikKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKKyAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50
KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0
ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNzY2LDkg
Kzc2Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxlZVJlZywgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uVHlwZSkpKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRh
KCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBy
YXJlRGF0YVJlZykpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOworICAgIGxv
YWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZB
bGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRh
UmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVy
ZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxvY2F0b3JSZWcp
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0
aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVz
ID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0Nl
bGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwpAQCAtNzc4LDcgKzc3OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwogICAg
IGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHks
IG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0
dXJlUmVnLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHNjcmF0Y2hSZWcpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhzY3JhdGNoUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBzY3JhdGNo
UmVnKTsKICAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lv
biAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBCdXR0ZXJmbHk6Om9wdGltYQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpOworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZy
b21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtODcsNyArODcsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnRyeUNyZWF0ZShWTSYg
dm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNpemVfdCBz
aXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGlu
Z0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICB2b2lkKiBi
YXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KHZtLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwog
ICAgIGlmICghYmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CkBA
IC0xNjUsNyArMTY1LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlS
aQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNp
emVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5n
SGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1Np
emUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBuZXdTaXpl
LCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICgh
bmV3QmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgcHJv
YmFibHkgc2hvdWxkbid0IGJlIGEgbWVtY3B5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVy
cmlkZVRoaW5ncyhWTSYKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
ZSwgbV9jYWxsZWUuZ2V0KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yU3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICAK
LSAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbWFw
cGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbChtYXBwZWRBcmd1bWVudHNTaXpl
KCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICB2b2lkKiBi
YWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRz
LmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxs
cHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgYm9vbCogb3ZlcnJpZGVz
ID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVu
dHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVu
Z3RoOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYzLDcgKzI2Myw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6aW5pdE1vZGlmaWUKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tb2RpZmllZEFyZ3VtZW50c0Rl
c2NyaXB0b3IpOwogCiAgICAgaWYgKGFyZ3NMZW5ndGgpIHsKLSAgICAgICAgdm9pZCogYmFja2lu
Z1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvci5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PDg+KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7
CisgICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uo
bV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKHZt
LCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCksIG51bGxwdHIsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgYm9vbCogbW9kaWZpZWRBcmd1bWVu
dHMgPSBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAgICAgICAgbV9tb2RpZmll
ZEFyZ3VtZW50c0Rlc2NyaXB0b3Iuc2V0KHZtLCB0aGlzLCBtb2RpZmllZEFyZ3VtZW50cyk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFyZ3NMZW5ndGg7IGktLTspCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDIyNzI3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBIYXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSk7Ci0gICAgICAg
IHZvaWQqIGRhdGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwoYWxsb2NhdGlvblNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIGRhdGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIGFsbG9jYXRpb25TaXplLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIWRhdGEp
IHsKICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBv
cC5jb20pCiAgKgpAQCAtODEsNyArODEsMTAgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZAogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUp
KTsKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxD
b250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAg
IHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwg
dmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRlZmVycmFsQ29udGV4dCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCogdGVtcCA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAg
ICAgICAgICAgIHZtLAorICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZM
aW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
CisgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTk4LDcgKzEwMSwxMCBAQCBKU0FycmF5KiBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aChpbmRleEJpYXMsIHN0cnVj
dHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNp
emUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IodmVjdG9yTGVuZ3RoKSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIHZtLAorICAgICAg
ICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksCisgICAgICAgICAgICBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCBpbmRleEJpYXMsIG91
dE9mTGluZVN0b3JhZ2UpOwpAQCAtMzY4LDcgKzM3NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50U2xvd0Nhc2UoY29uc3QKICAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IGZhbHNl
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRl
c2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6ZSwgbnVsbHB0ciwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgbmV3QWxsb2NCYXNlID0g
dm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAg
ICAgICAgICAgdm0sIG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgICAgIGlmICghbmV3QWxsb2NCYXNlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTIzOCw2ICsyMzgsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlKFZN
JiB2CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFs
Q29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aEhpbnQpOwogICAg
ICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sCiAgICAgICAgICAgICBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwKICAgICAgICAgICAgIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmICghdGVtcCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlz
aW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU0FycmF5QnVmZmVy
Vmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgICAgIHZvaWQqIHRlbXA7CiAgICAgICAg
IHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOwogICAgICAgICBpZiAo
c2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgICAgICB0ZW1wID0gdm0ucHJpbWl0aXZlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgICAgICBpZiAoIXRlbXAp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0NSwxNCArMTQ1LDE1IEBAIENvbXBsZXRlU3Vic3BhY2UqIEpTQ2Vs
bDo6c3Vic3BhY2VGb3IoVk0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBBTFdBWVNfSU5MSU5FIHZv
aWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1
cmVNb2RlKQogeworICAgIFZNJiB2bSA9ICpoZWFwLnZtKCk7CiAgICAgQVNTRVJUKGRlZmVycmFs
Q29udGV4dCB8fCAhRGlzYWxsb3dHQzo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsKICAg
ICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwotICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlTm9uVmly
dHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CisgICAgSlNDZWxsKiBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPih2bSktPmFsbG9jYXRl
Tm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOwogICAg
IGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwgJiYg
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pCi0gICAgQVNTRVJUKCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwotICAg
IGhlYXAudm0oKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKKyAgICBB
U1NFUlQoIXZtLmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgIHZtLnNldEluaXRpYWxpemlu
Z09iamVjdENsYXNzKFQ6OmluZm8oKSk7CiAjZW5kaWYKICAgICByZXN1bHQtPmNsZWFyU3RydWN0
dXJlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzM1LDcgKzMzNSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGVucXUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQog
Ci1KU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKQorSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IHRocmVhZExvY2FsQ2FjaGUpCiAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIDApCiAgICAgLCBtX3ZtKHZtKQogICAgICwgbV9tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJc1dh
dGNoZWQpKSkKQEAgLTM1Myw2ICszNTMsNyBAQCBKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmpl
Y3QoVk0mIHZtLCBTCiAgICAgLCBtX3RlbXBsYXRlUmVnaXN0cnkodm0pCiAgICAgLCBtX3J1bnRp
bWVGbGFncygpCiAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSkKKyAgICAsIG1fdGhyZWFkTG9jYWxDYWNoZSh0aHJlYWRMb2NhbENhY2hlID8gV1RG
TW92ZSh0aHJlYWRMb2NhbENhY2hlKSA6IHZtLmRlZmF1bHRUaHJlYWRMb2NhbENhY2hlKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1lRmxhZ3MoKSBjb25zdCB7IHJldHVy
biBtX3J1bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
ZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSogPSAwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0ds
b2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KiA9IDAsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiA9IG51bGxwdHIpOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCkBAIC04OTMsNiArODkzLDgg
QEAgcHVibGljOgogICAgIEpTV3JhcHBlck1hcCogd3JhcHBlck1hcCgpIGNvbnN0IHsgcmV0dXJu
IG1fd3JhcHBlck1hcC5nZXQoKTsgfQogICAgIHZvaWQgc2V0V3JhcHBlck1hcChKU1dyYXBwZXJN
YXAqIG1hcCkgeyBtX3dyYXBwZXJNYXAgPSBtYXA7IH0KICNlbmRpZgorICAgIAorICAgIFRocmVh
ZExvY2FsQ2FjaGUmIHRocmVhZExvY2FsQ2FjaGUoKSBjb25zdCB7IHJldHVybiAqbV90aHJlYWRM
b2NhbENhY2hlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVy
dHlJbmZvIHsKQEAgLTkyNCw2ICs5MjYsOCBAQCBwcml2YXRlOgogI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECiAgICAgUmV0YWluUHRyPEpTV3JhcHBlck1hcD4gbV93cmFwcGVyTWFwOwogI2VuZGlm
CisgICAgCisgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG1fdGhyZWFkTG9jYWxDYWNoZTsK
IH07CiAKIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1ZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24gMjI3MjczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFjaGluZVN0YWNr
TWFya2VyLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgorI2luY2x1ZGUgIlRocmVh
ZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAj
aW5jbHVkZSA8dGhyZWFkPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTE0NSw3ICsx
NDYsOSBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogCiAgICAgbV92bS0+c2V0TGFz
dFN0YWNrVG9wKHRocmVhZC5zYXZlZExhc3RTdGFja1RvcCgpKTsKICAgICBBU1NFUlQodGhyZWFk
LnN0YWNrKCkuY29udGFpbnMobV92bS0+bGFzdFN0YWNrVG9wKCkpKTsKLQorICAgIAorICAgIG1f
dm0tPmRlZmF1bHRUaHJlYWRMb2NhbENhY2hlLT5pbnN0YWxsKCptX3ZtKTsKKyAgICAKICAgICBt
X3ZtLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgpOwogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3VycmVudFRocmVhZCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjI3
MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzYsNiArMjM2LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlQXN5bmNJdGVy
YXRpb24gPSBmYQogICAgIHYoYm9vbCwgZHVtcFNpemVDbGFzc2VzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCB1c2VCdW1wQWxsb2NhdG9yLCB0cnVlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3Jz
LCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHRyYWRlRGVzdHJ1Y3RvckJs
b2NrcywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBlYWdlcmx5VXBkYXRl
VG9wQ2FsbEZyYW1lLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9v
bCwgdXNlT1NSRW50cnlUb0RGRywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAko
cmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENv
cHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Miw3ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNB
cnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFs
aXplZCA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7Cisg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbCh2bSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwog
ICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw3IEBACiAjaW5jbHVkZSAi
U3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRl
ICJUZXN0UnVubmVyVXRpbHMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5o
IgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5o
IgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgpAQCAtMzA2LDYgKzMwNyw5IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1cGRhdGVTb2Z0UmVzZXJ2
ZWRab25lU2l6ZShPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgpKTsKICAgICBzZXRMYXN0
U3RhY2tUb3Aoc3RhY2sub3JpZ2luKCkpOwogCisgICAgZGVmYXVsdFRocmVhZExvY2FsQ2FjaGUg
PSBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoaGVhcCk7CisgICAgZGVmYXVsdFRocmVhZExvY2Fs
Q2FjaGUtPmluc3RhbGwoKnRoaXMpOworCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtl
ZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUKICAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlz
KTsKICAgICBBdG9taWNTdHJpbmdUYWJsZSogZXhpc3RpbmdFbnRyeUF0b21pY1N0cmluZ1RhYmxl
ID0gVGhyZWFkOjpjdXJyZW50KCkuc2V0Q3VycmVudEF0b21pY1N0cmluZ1RhYmxlKG1fYXRvbWlj
U3RyaW5nVGFibGUpOwpAQCAtMzgzLDcgKzM4Nyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgIAogICAgIEdpZ2FjYWdlOjphZGRQcmltaXRp
dmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxlZENhbGxiYWNrLCB0aGlz
KTsKLQorICAgIAogICAgIGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgCiAgICAg
TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1
ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQu
aCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgog
I2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1
ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgpAQCAtNjU2LDYgKzY1NywxMSBAQCBwdWJs
aWM6CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51
bGxwdHIgfTsKICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNp
dGVkT2JqZWN0czsKKyAgICAKKyNpZiAhRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBUaHJlYWRM
b2NhbENhY2hlOjpEYXRhKiB0aHJlYWRMb2NhbENhY2hlRGF0YTsKKyNlbmRpZgorICAgIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBkZWZhdWx0VGhyZWFkTG9jYWxDYWNoZTsKIAogICAgIExvY2Fs
VGltZU9mZnNldENhY2hlIGxvY2FsVGltZU9mZnNldENhY2hlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyNzI3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGlzYWxsb3dWTVJlZW50
cnkuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAt
NDAsNiArNDEsNyBAQCBWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAg
ICAgOiBtX3ZtKHZtKQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAg
IGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxDYWNoZSgpLmluc3RhbGwodm0pOwogICAgIEFTU0VS
VCghRGlzYWxsb3dWTVJlZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAg
QVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAg
ICAgaWYgKCF2bS5lbnRyeVNjb3BlKSB7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MjczKQorKysgU291
cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxOC0w
MS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBHQyBz
aG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwgY2FjaGVzKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6IEp1c3QgZml4
aW5nIGEgY29tcGlsZSBlcnJvci4KKwogMjAxOC0wMS0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBqc2Mtb25seSBidWlsZApJbmRl
eDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Qml0bWFwLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUg
PHN0cmluZy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331853</attachid>
            <date>2018-01-20 17:34:27 -0800</date>
            <delta_ts>2018-01-22 13:46:30 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>180129</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxOC0wMS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBHQyBzaG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwgY2FjaGVzKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlz
IGEgYmlnIHN0ZXAgdG93YXJkcyBvYmplY3QgZGlzdGFuY2luZyBieSBzaXRlIG9yaWdpbi4gVGhp
cyBwYXRjaCBpbXBsZW1lbnRzIFRMQ3MsIG9yCisgICAgICAgIHRocmVhZC1sb2NhbCBjYWNoZXMs
IHdoaWNoIGFsbG93IGVhY2ggdGhyZWFkIHRvIGFsbG9jYXRlIGZyb20gaXRzIG93biBmcmVlIGxp
c3RzLiBJdCBhbHNvCisgICAgICAgIG1lYW5zIHRoYXQgYW55IGdpdmVuIHRocmVhZCBjYW4gY29u
dGV4dC1zd2l0Y2ggVExDcy4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGRvIHNlcGFyYXRlCisgICAg
ICAgIGFsbG9jYXRpb24gZm9yIHNlcGFyYXRlIHNpdGUgb3JpZ2lucy4gRXZlbnR1YWxseSwgb25j
ZSB3ZSByZXNoYXBlIGhvdyBNYXJrZWRCbG9jayBsb29rcywgdGhpcworICAgICAgICB3aWxsIGFs
bG93IHVzIHRvIGhhdmUgYSBoYXJkIGRpc3RhbmNpbmcgY29uc3RyYWludCBiZXR3ZWVuIG9iamVj
dHMgZnJvbSBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRTcGVjaWFs
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6
CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAoSlNDOjpCMzo6
U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBW
YWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVn
aXN0ZXJXaXRoQ2xvYmJlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6CisgICAg
ICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5oOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlND
OjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6Y2xlYXIpOgorICAgICAgICAqIGJ5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRB
bGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlSlNDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aFNpemVJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdGVIZWFwQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFsbG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
YWxsb2NhdG9yRm9yU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgorICAgICAgICAqIGhlYXAv
QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6Y2VsbFNpemUg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6b2Zmc2V0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWxsb2NhdG9yOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0FsbG9jYXRv
cklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6YWxsb2NhdGUgY29u
c3QpOgorICAgICAgICAoSlNDOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlIGNvbnN0KToKKyAgICAg
ICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OkJsb2NrRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZpbmRC
bG9ja0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFs
bG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmdGb3JH
b29kKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9jYXRpbmcpOgor
ICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6
OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6QmxvY2tE
aXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJs
b2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OmNlbGxLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OmFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmcmVl
TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpvZmZz
ZXRPZkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6Om9m
ZnNldE9mQ2VsbFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjpDb21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6Q29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxv
Y2F0b3JGb3JTbG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVT
bG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KToK
KyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlNDOjpDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBoZWFwL0ZyZWVM
aXN0Lmg6CisgICAgICAgICogaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpI
ZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OnRocmVhZExvY2FsQ2FjaGVMYXlvdXQpOgorICAgICAgICAqIGhlYXAv
SXNvQ2VsbFNldC5oOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOgorICAgICAgICAo
SlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbCk6CisgICAgICAg
ICogaGVhcC9Jc29TdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IpOgorICAg
ICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpMb2NhbEFs
bG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnJlc3VtZUFs
bG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmdGb3JH
b29kKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAg
ICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgor
ICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbik6CisgICAgICAgIChKU0M6
OkxvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxv
Y2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpMb2NhbEFs
bG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFs
bG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6
ZSk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zv
ckdvb2QpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKiBoZWFwL1Ns
b3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICog
aGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6
VGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlNDOjpUaHJl
YWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENh
Y2hlOjpkZXN0cm95RGF0YSk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6Omluc3Rh
bGxTbG93KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbERhdGEpOgor
ICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KToKKyAgICAgICAg
KEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcik6CisgICAgICAgICogaGVhcC9UaHJl
YWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpv
ZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZp
cnN0QWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpnZXRJbXBsKToKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9j
YWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnRyeUdldEFsbG9jYXRvcik6
CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQp
OgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhyZWFkTG9jYWxDYWNo
ZUxheW91dCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmFsbG9jYXRl
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZUxheW91dDo6c25hcHNob3Qp
OgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3RvcnkpOgorICAg
ICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oOiBBZGRlZC4KKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dm0pOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFi
bGVTaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0cnlDcmVhdGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik6
CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlNDOjpIYXNoTWFw
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZXN0cmljdGVkKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnRyeUFsbG9j
YXRlQ2VsbEhlbHBlcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
dGhyZWFkTG9jYWxDYWNoZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgor
ICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAg
ICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwOgorICAg
ICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6CisKIDIwMTgtMDEtMjAgIENh
aW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIE51bWJlclBy
b3RvdHlwZTo6ZXh0cmFjdFJhZGl4RnJvbUFyZ3MgaW5jb3JyZWN0bHkgY2FzdCBkb3VibGUgdG8g
aW50MzJfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI3Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC00NjYsNiArNDY2LDcgQEAgZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1ZVJhbmdlLmNw
cAogCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCitoZWFwL0FsbG9jYXRvci5jcHAK
IGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCiBoZWFwL0NlbGxBdHRyaWJ1dGVzLmNwcAogaGVhcC9D
ZWxsQ29udGFpbmVyLmNwcApAQCAtNTAwLDYgKzUwMSw3IEBAIGhlYXAvSXNvQ2VsbFNldC5jcHAK
IGhlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogaGVhcC9M
YXJnZUFsbG9jYXRpb24uY3BwCitoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAogaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCiBoZWFwL01hcmtTdGFjay5jcHAKIGhlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuY3BwCkBAIC01MTgsNiArNTIwLDggQEAgaGVhcC9TdG9wSWZOZWNlc3NhcnlU
aW1lci5jcHAKIGhlYXAvU3Vic3BhY2UuY3BwCiBoZWFwL1N5bmNocm9ub3VzU3RvcFRoZVdvcmxk
TXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3luY2hyb25vdXNuZXNzLmNwcAoraGVhcC9UaHJl
YWRMb2NhbENhY2hlLmNwcAoraGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAogaGVhcC9W
aXNpdFJhY2VLZXkuY3BwCiBoZWFwL1dlYWsuY3BwCiBoZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSwxMyBAQAogCQkwRjcyNUNBQTFDNTAzREVEMDBB
RDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggKi87IH07
CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBRTFDNTA2
RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkwRjc0QjkzQjFG
ODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMgLyogUHJvdG90
eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU1MjAwRDI1RUYw
MDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjAyMDBEMjYwQjAwMzhFMkNGIC8qIExvY2Fs
QWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5l
cy5oICovOyB9OworCQkwRjc1QTA2MTIwMEQyNjE4MDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU3
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVBMDYyMjAwRDI2MUQwMDM4RTJDRiAv
KiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5o
ICovOyB9OworCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1NDIwMEQyNUVG
MDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEw
NjYyMDEzRTRGMTAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8qIEpJ
VEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkExNUE4
Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8q
IEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHVi
Um91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0MTksNiArMjQyNiwxNyBAQAogCQkwRjcyNUNBRDFDNTA2
RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0aCA9IGIzL0Iz
Rm9sZFBhdGhDb25zdGFudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcy
NUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBhdGggPSBiMy9C
M0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzRC
OTNBMUY4OTYxNDUwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNzVBMDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRo
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBEMjVGMDAwMzhF
MkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExvY2FsQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBEMjVGMTAwMzhF
MkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc1
QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0
aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjkxNUE4Q0MzNDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU0NDcsNiArNTQ2NSw3IEBACiAJCQkJMTQyOUQ5MkUwRUQyMkQ3MDAwQjg5NjE5
IC8qIEpJVC5oICovLAogCQkJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuY3BwICovLAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuaCAqLywKKwkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9y
LmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3Bw
ICovLAogCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQu
Y3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0
b3IuY3BwICovLApAQCAtNTU0MCw2ICs1NTU5LDE2IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFG
QURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCisJCQkJMEY3
NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1
QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVB
MDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVB
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjc1
QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY3
NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkwRjc1
QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKKwkJ
CQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAg
Ki8sCisJCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxs
b2NhdGluZ1Njb3BlLmggKi8sCkBAIC04MDQ4LDYgKzgwNzcsNyBAQAogCQkJCTBGMkFDNTcxMUU4
RUU0NTQwMDAxRUUzRiAvKiBBaXJGb3JtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0Ux
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MjEzLDYgKzgyNDMsNyBAQAogCQkJCTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNh
bGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUwMDMyM0Y2NyAv
KiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjc1QTA2NDIwMEQyNjI4MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2tt
YXBWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAwNDEzQTQ4IC8q
IEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTgzODIsNiAr
ODQxMyw3IEBACiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9z
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODEyMUFCM0Q4QkUwMEJCQjhFOCAvKiBE
RkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgx
NDFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjQ4NTMyMjE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAw
NkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjYyLDYgKzg2OTQs
NyBAQAogCQkJCUZFQTBDNDAzMUNERDdEMUQwMDQ4MTk5MSAvKiBGdW5jdGlvbldoaXRlbGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVBQTAwMDU5M0FE
IC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjAyMDBEMjYwQjAw
MzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NEZWZlcnJhbENv
bnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtODc0Niw2ICs4Nzc5LDcgQEAKIAkJCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDM4NkE3OTFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhl
Y3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjIyMDBEMjYxRDAwMzhFMkNGIC8q
IEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkY5MkI5MUZENzZGRkYw
MEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjky
QkExRkQ3NzAwNDAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC04OTMxLDYgKzg5NjUsNyBAQAogCQkJCUUzM0Y1MDc5MUI4NDIy
NTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3QTAwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc1
QTA1RTIwMEQyNUY2MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBGMTQgLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDEzQ0E4
QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBpbiBIZWFkZXJzICovLApAQCAtOTQzMCw2ICs5
NDY1LDcgQEAKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0QkU3RDMzMTcxMzVDRjQwMEQxODA3QSAvKiBXZWFrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjYyMDEzRTRGMTAwMzhFMkNG
IC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAw
N0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkzQUREODFGRTcw
MkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNiArMTI3NywxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIGFyZyA9
IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CisgICAgICAgICAgICAg
ICAgVG1wIGRzdFRtcCA9IG1fY29kZS5uZXdUbXAodmFsdWUudmFsdWUoKS0+cmVzdWx0QmFuaygp
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKHZhbHVlLnZhbHVl
KCktPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBkc3RUbXApOworICAgICAgICAg
ICAgICAgIGFyZyA9IGRzdFRtcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKICAgICAgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5lYXJs
eUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHJldmlzaW9uIDIy
NzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBAIGJvb2wgUGF0Y2hwb2ludFNwZWNp
YWw6OmFkbWl0c1N0YWNrKEluc3QKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVu
dDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVy
OgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3Rl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw2ICsxMTAsOSBAQCB2b2lk
IFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgICAgICBjYXNlIFZhbHVl
UmVwOjpDb25zdGFudDoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2U7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJX
aXRoQ2xvYmJlcjoKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2VEZWY7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6
CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTEyOCw2ICsxMzEsMTAgQEAgdm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hB
cmdJbXBsKAogICAgICAgICAgICAgLy8gYmUgYWJsZSB0byByZWNvdmVyIHRoZSBzdGFja21hcCB2
YWx1ZS4gU28sIGZvcmNlIExhdGVDb2xkVXNlIHRvIHByZXNlcnZlIHRoZQogICAgICAgICAgICAg
Ly8gb3JpZ2luYWwgc3RhY2ttYXAgdmFsdWUgYWNyb3NzIHRoZSBTcGVjaWFsIG9wZXJhdGlvbi4K
ICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgb3B0aW9uYWxEZWZBcmdX
aWR0aCAmJiAqb3B0aW9uYWxEZWZBcmdXaWR0aCA8IGNoaWxkLnZhbHVlKCktPnJlc3VsdFdpZHRo
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcm9sZSBjYW4gb25seSBiZSBzb21lIGtpbmQg
b2YgZGVmIGlmIHdlIGRpZCBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwgd2hpY2ggaXMKKyAgICAg
ICAgICAgICAgICAvLyBvbmx5IGFsbG93ZWQgZm9yIHBhdGNocG9pbnRzLiBQYXRjaHBvaW50cyBk
b24ndCB1c2UgdGhlIGRlZkFyZ1dpZHRoIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIUFyZzo6aXNBbnlEZWYocm9sZSkpOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAg
cm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0yNDUsNiArMjUy
LDcgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQQogICAgICAgICAv
LyBXZSBhbHJlYWR5IHZlcmlmaWVkIGJ5IGlzQXJnVmFsaWRGb3JWYWx1ZSgpLgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgY2FzZSBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBhcmcuaXNUbXAoKTsKICAgICBjYXNlIFZh
bHVlUmVwOjpMYXRlUmVnaXN0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMTEg
QEAgdm9pZCBTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVnaXN0ZXIoVgogICAgIGFwcGVuZChD
b25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CiB9CiAKK3Zv
aWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIoVmFsdWUqIHZh
bHVlKQoreworICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyV2l0aENsb2JiZXIpKTsKK30KKwogdm9pZCBTdGFja21hcFZhbHVlOjpzZXRDb25z
dHJhaW5lZENoaWxkKHVuc2lnbmVkIGluZGV4LCBjb25zdCBDb25zdHJhaW5lZFZhbHVlJiBjb25z
dHJhaW5lZFZhbHVlKQogewogICAgIGNoaWxkKGluZGV4KSA9IGNvbnN0cmFpbmVkVmFsdWUudmFs
dWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDcgKzk5LDggQEAgcHVibGljOgogICAgIC8v
IFRoaXMgaXMgYSBoZWxwZXIgZm9yIHNvbWV0aGluZyB5b3UgbWlnaHQgZG8gYSBsb3Qgb2Y6IGFw
cGVuZCBhIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGNvbnN0cmFpbmVkCiAgICAgLy8gdG8gU29tZVJl
Z2lzdGVyLgogICAgIHZvaWQgYXBwZW5kU29tZVJlZ2lzdGVyKFZhbHVlKik7Ci0KKyAgICB2b2lk
IGFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKFZhbHVlKik7CisgICAgCiAgICAgY29uc3Qg
VmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQogCiAgICAg
Ly8gU3RhY2ttYXBzIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoYXQgdGhlIG9wZXJhdGlvbiBtYXkg
Y2xvYmJlciBzb21lIHJlZ2lzdGVycy4gQ2xvYmJlcmluZyBhIHJlZ2lzdGVyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzMiwyMSArNDMyLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1
ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IFZvaWQpCiAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFpbnQgPT0gVmFs
dWVSZXA6Oldhcm1BbnksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4o
KS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6V2FybUFueToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlS
ZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICp2YWx1ZSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0ZVN0YWNrbWFwQ29uc3RyYWludCh2YWx1ZSwgQ29uc3RyYWluZWRWYWx1ZSh2
YWx1ZSwgdmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludCksIENv
bnN0cmFpbnRSb2xlOjpEZWYpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB2
YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tBZGQ6CkBAIC01NzEsMTYgKzU1OCwyNCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsKICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6V2FybUFueToKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKLSAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToKKyAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29u
c3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xv
YmJlcjoKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwg
KCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAgICAgICAgIFZBTElEQVRFKGNv
bnRleHQtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKSwgKCJBdCAiLCAqY29udGV4dCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgog
ICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6RGVmLCAoIkF0ICIs
ICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0
ZXI6CisgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkua2luZCgpID09IFZhbHVlUmVwOjpMYXRl
UmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9s
ZTo6VXNlLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgaWYg
KHZhbHVlLnJlcCgpLnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJ
bnQodmFsdWUudmFsdWUoKS0+dHlwZSgpKSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUp
KTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZVJlcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAgdm9pZCBWYWx1
ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvKFJlZ2lzdAogICAgIGNhc2UgQ29sZEFueToKICAgICBj
YXNlIExhdGVDb2xkQW55OgogICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgIGNhc2UgU29tZVJl
Z2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBTb21lRWFybHlSZWdpc3RlcjoKICAgICBjYXNl
IENvbnN0YW50OgogICAgICAgICByZXR1cm47CkBAIC03MSw2ICs3Miw3IEBAIHZvaWQgVmFsdWVS
ZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2Fz
ZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICBjYXNlIFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIExhdGVSZWdpc3RlcjoKQEAgLTE3NSw2ICsxNzcsOSBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CisgICAg
ICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIiKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJp
bnQoIlNvbWVFYXJseVJlZ2lzdGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDYgKzY1
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBh
CiAgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKICAgICAg
ICAgU29tZVJlZ2lzdGVyLAorICAgICAgICAKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVz
ZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyIGJ1
dCB0aGF0IHRoaXMKKyAgICAgICAgLy8gcmVnaXN0ZXIgaXMgdGhlbiBjb2JiZXJlZCB3aXRoIGdh
cmJhZ2UuIFRoaXMgb25seSB3b3JrcyBmb3IgcGF0Y2hwb2ludHMuCisgICAgICAgIFNvbWVSZWdp
c3RlcldpdGhDbG9iYmVyLAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGlt
cGxpZXMKICAgICAgICAgLy8gdGhhdCB0aGUgZGVmIGhhcHBlbnMgYmVmb3JlIGFueSBvZiB0aGUg
ZWZmZWN0cyBvZiB0aGUgc3RhY2ttYXAuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IKQEAgLTEwNyw3
ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWVSZXAoS2luZCBraW5kKQogICAgICAgICA6IG1f
a2luZChraW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFueSB8fCBraW5k
ID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNvbWVSZWdpc3Rl
ciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0g
V2FybUFueSB8fCBraW5kID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5k
ID09IFNvbWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyIHx8IGtp
bmQgPT0gU29tZUVhcmx5UmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZVJlcCBy
ZWcoUmVnIHJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NTUsMTUgKzk1NSw5IEBAIHZv
aWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNpemVf
dCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAgICAgICBpZiAo
IWFsbG9jYXRvcikgewotICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291
bGQgc3VjayEKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5qdW1wKCkp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAg
ICAgICAgaml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2Nh
dGUoc2NyYXRjaEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9j
YXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw4ICs0Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
Ci0gICAgICAgIDogbV9hbGxvY2F0b3IoMCkKLSAgICAgICAgLCBtX2lubGluZUNhcGFjaXR5KDAp
CisgICAgICAgIDogbV9pbmxpbmVDYXBhY2l0eSgwKQogICAgIHsKICAgICB9CiAKQEAgLTYzLDcg
KzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBtX2Fs
bG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxsb2NhdG9yKCk7CiAg
ICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSAw
OwogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwpAQCAtNzcsNyArNzYsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291bnQoVk0mLCBK
U09iamVjdCogcHJvdG90eXBlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBtX2FsbG9jYXRvcjsg
Ly8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4K
KyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdz
IGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9zdHJ1Y3R1cmU7CiAgICAgdW5zaWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVj
dEFsbG9jYXRpb25Qcm9maQogCiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4
ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEZpbmFsT2JqZWN0VHlw
ZSk7Ci0gICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2Fs
bG9jYXRvciA9IEFsbG9jYXRvcigpOwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05OSwxMSArOTks
MTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQogICAgIEFTU0VS
VChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsK
IAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0u
Y2VsbFNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcik7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZt
LmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2Yg
ZXh0cmEgaW5saW5lIGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KICAgICBp
ZiAoYWxsb2NhdG9yKSB7Ci0gICAgICAgIHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci0+Y2VsbFNp
emUoKSAtIGFsbG9jYXRpb25TaXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwor
ICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3IuY2VsbFNpemUodm0uaGVhcCkgLSBhbGxv
Y2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAgICAgICAgaW5s
aW5lQ2FwYWNpdHkgKz0gc2xvcDsKICAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5ID4gSlNGaW5h
bE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgIGlubGluZUNhcGFjaXR5
ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKQEAgLTExMyw3ICsxMTMsNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAKICAgICBpZiAoaXNQ
b2x5UHJvdG8pIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzUG9seVByb3RvKCkpOwot
ICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxs
b2NhdG9yKCk7CiAgICAgICAgIGV4ZWN1dGFibGUtPnNldENhY2hlZFBvbHlQcm90b1N0cnVjdHVy
ZSh2bSwgc3RydWN0dXJlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXhlY3V0YWJsZSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEzLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBp
ZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5lbWl0
QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2ppdC52bSgp
LT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgeworICAgICAgICAgICAg
bV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1faml0LmFkZFB0cigKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1t
MzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKSwKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRB
bGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKLSAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9q
aXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2NhdG9yKSB7CiAgICAg
ICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2sodmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIs
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3Rl
ZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3Rl
ZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1p
dEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwpAQCAtNDIwOCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1h
a2VSb3BlKE5vZAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAK
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tEaXJlY3Rvcnkq
IGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9qaXQudm0oKSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
YmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChy
ZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIobV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JW
YWx1ZSA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgSklUQWxs
b2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwgVHJ1c3RlZElt
bVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgIG1f
aml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyArODM4MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGlu
aXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRv
ciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwpAQCAtODQwOCw5ICs4NDA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAgICAKLSAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc2Ny
YXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7
CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwogICAg
IG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgIAogICAgIGZvciAocHRyZGlmZl90IG9m
ZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNldCAr
PSBzaXplb2Yodm9pZCopKQpAQCAtODQyOCw3ICs4NDI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91
dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0
aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAg
IAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1NpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ1Niw4ICs4NDUyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIEdQUlJlZyBzY3JhdGNoR1BS
MyA9IHNjcmF0Y2gzLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
UGF0aDsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIpOwotICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgYWxsb2NhdG9yLCBzY3Jh
dGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5lbWl0QWxsb2NhdGUo
c2NyYXRjaEdQUjEsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CiAgICAgICAgIApAQCAtMTE0NDEsMTQgKzExNDM2LDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE4KICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0
YUdQUik7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxs
b2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2Nh
dG9yKCkpLCBhbGxvY2F0b3JHUFIpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpKSwgc3RydWN0dXJlR1BSKTsKIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBhbGxvY2F0b3JH
UFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVk
SW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBh
bGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBz
bG93UGF0aCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0
b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHksIG1h
c2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBy
YXJlRGF0YUdQUik7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVE
YXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwg
aW5saW5lQ2FwYWNpdHlHUFIpOwpAQCAtMTE0NzQsMTQgKzExNDY5LDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNG
aW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRp
b25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvclZhbHVlID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZt
KCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
YWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JH
UFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BS
LCBzbG93UGF0aCk7Ci0gICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBtX2ppdC5tdXRhdG9yRmVu
Y2UoKm1faml0LnZtKCkpOworICAgIGlmICghYWxsb2NhdG9yVmFsdWUpCisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFzayA9IFRydXN0
ZWRJbW0zMigwKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
Km1faml0LnZtKCkpOworICAgIH0KIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVj
dHVyZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTQxLDcgKzMxNDEsNyBA
QCBwdWJsaWM6CiAgICAgLy8gQWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVjaWZpYyBzaXpl
LgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBl
IGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKAotICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JH
UFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBz
dHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTMxNTAsNyArMzE1MCw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNpZmljIHNpemUu
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VU
eXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFnZVR5cGUgYW5k
LCBNYXNrVHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJl
ZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBTdG9yYWdl
VHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0LmVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAg
ICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vi
c3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxs
b2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwKKyAgICBtYWNy
byhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNl
OjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihBbGxvY2F0b3IpKSBcCiAg
ICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2Fs
RW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01ODU3LDEwICs1ODU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAg
ICAgICAgIAotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3Bl
U3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciks
IHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdl
dCgpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5p
bnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQpAQCAtOTg4NSw3ICs5ODg1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAgICAg
ICAgIEFsbG9jYXRvciBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
dm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleGluZ0hlYWRlclNpemUgPSAwOwpA
QCAtOTk0NCw3ICs5OTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIExWYWx1ZSBt
YXNrID0gY29tcHV0ZUJ1dHRlcmZseUluZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgpOwogICAgICAg
ICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY2VsbEFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoY2VsbEFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CiAKICAgICAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFu
Y2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOwpAQCAtMTA5MzEsOCArMTA5MzEsOCBAQCBwcml2YXRl
OgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShzbG93UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFs
dWVzICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0g
ICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29u
c3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xvd1BhdGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQu
Y29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzbG93UGF0aCk7CiAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291
dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwpAQCAtMTE5NjQsMTYgKzExOTY0LDI4IEBAIHByaXZhdGU6CiAKICAgICBMVmFsdWUgYWxsb2Nh
dGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxscHRyOwotICAg
ICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJbnRQdHIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9j
YXRvciA9IGJpdHdpc2VfY2FzdDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+YXNJbnRQdHIo
KSk7CisgICAgICAgIEpJVEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3I7CisgICAgICAgIGlmIChh
bGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRB
bGxvY2F0b3I6OmNvbnN0YW50KEFsbG9jYXRvcihhbGxvY2F0b3ItPmFzSW50MzIoKSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRBbGxvY2F0b3I6OnZh
cmlhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgeworICAg
ICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYg
KCFhY3R1YWxBbGxvY2F0b3IuYWxsb2NhdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBoYXZlQWxsb2NhdG9yID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShoYXZlQWxs
b2NhdG9yKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNsb3dQYXRoKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhoYXZlQWxsb2NhdG9yLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZWl0aGVyIHdlIGtub3cg
dGhhdCB0aGUgYWxsb2NhdG9yIGlzIG51bGwgb3Igd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQogICAg
ICAgICAgICAgLy8gYWxsb2NhdG9yIGlzLiBJbiBlaXRoZXIgY2FzZSwgd2UgbmVlZCB0aGUgbnVs
bCBjaGVjay4KICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhhdmVBbGxvY2F0b3IgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoaGF2ZUFsbG9jYXRvcik7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goYWxsb2NhdG9yLCB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xvd1BhdGgpKTsK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVh
bChhbGxvY2F0b3IsIG1fb3V0LmNvbnN0SW50MzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSwKKyAg
ICAgICAgICAgICAgICB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xvd1BhdGgpKTsK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhdmVBbGxvY2F0b3IsIGxhc3ROZXh0KTsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTExOTgzLDcgKzExOTk1LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KHBvaW50ZXJUeXBlKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnRlcm1pbmFs
ID0gdHJ1ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGFsbG9jYXRv
cik7CisgICAgICAgIGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFudCgpKQorICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKGFsbG9j
YXRvcik7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOwogICAg
ICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OlNvbWVFYXJseVJl
Z2lzdGVyOwogICAgICAgICAKQEAgLTExOTk0LDYgKzEyMDA5LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
anVtcFRvU2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVn
IGFsbG9jYXRvckdQUjsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2Ny
YXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFsbG9j
YXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRpb24gcGF0aCBi
ZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRp
b24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1hY2hpbmUgY29k
ZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hhdCBpbnN0cnVj
dGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBjb21waWxlcgpA
QCAtMTIwMDEsNyArMTIwMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBvcHRpbWl6ZWQg
cGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGNvbXBpbGVy
IHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9j
YXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0
b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgcGFy
YW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xvd1BhdGgpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1w
VG9TdWNjZXNzOwpAQCAtMTIwOTMsOCArMTIxMTQsOCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBh
bGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3RydWN0
dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFzaWNCbG9jayBz
bG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwo
c2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICByZXR1
cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlw
ZT4KQEAgLTEyMTEzLDE2ICsxMjEzNCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29tcGxl
dGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFj
ZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXpl
ID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tEaXJl
Y3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
KyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdC
bG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNs
b3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0dWFsQWxsb2Nh
dG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVhbEFsbG9jYXRv
ci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHN0ZXBT
aGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIxNDEsNyArMTIx
NjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0
cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9y
Rm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1YihzaXplQ2xh
c3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxNTYsOCArMTIxNzcsNyBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAgICAgICAgIExW
YWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAg
ICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKLSAgICAg
ICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7Cisg
ICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJzcGFjZUZvcjxD
bGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJmbHlJbmRleGlu
Z01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTY1LDE1ICsxMjE4NSwxNCBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAgICAgICBMVmFs
dWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAg
IHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUoCi0gICAgICAg
ICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOworICAg
ICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3BhY2VGb3I8Q2xh
c3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVD
ZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIExW
YWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkKICAgICB7
CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRp
b25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNp
bXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGlu
c3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxODUsNyArMTIyMDQs
NyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJa
ZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywg
bV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1
ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Vuc2ln
bmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0KS0+Y2VsbFNp
emUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZNOworCitjbGFz
cyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAgIAorICAgIGV4
cGxpY2l0IEFsbG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAgCisgICAgLy8g
VGhpcyB2ZXJzaW9uIGNhbGxzIEZhaWx1cmVGdW5jIGlmIHdlIGhhdmUgYSBudWxsIGFsbG9jYXRv
ciBvciBpZiB0aGUgVExDIGhhc24ndCBiZWVuIHJlc2l6ZWQKKyAgICAvLyB0byBpbmNsdWRlIHRo
aXMgYWxsb2NhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZhaWx1cmVGdW5jPgorICAgIHZv
aWQqIHRyeUFsbG9jYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUsIGNvbnN0IEZhaWx1cmVGdW5jJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgY2Vs
bFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFsbG9j
YXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldCgpOyB9
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRv
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworaW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoVk0mIHZtLCBHQ0Rl
ZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcih2bSwgbV9vZmZzZXQp
LmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGYWlsdXJl
RnVuYz4KK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoVk0mIHZtLCBHQ0RlZmVycmFsQ29u
dGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUsIGNvbnN0IEZhaWx1cmVG
dW5jJiBmYWlsdXJlRnVuYykgY29uc3QKK3sKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgVGhyZWFk
TG9jYWxDYWNoZTo6dHJ5R2V0QWxsb2NhdG9yKAorICAgICAgICB2bSwgbV9vZmZzZXQsCisgICAg
ICAgIFsmXSAoTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0
ID0gYWxsb2NhdG9yLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworICAgICAgICB9LAorICAgICAg
ICBbJl0gKCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFpbHVyZUZ1bmMoKTsKKyAgICAgICAg
fSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlz
aW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAKLSNpbmNsdWRlICJBbGxvY2F0aW5nU2Nv
cGUuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0zOSwxNSArMzgsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0
b3JCbG9ja3MgPSB0cnVlOwotCiBCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3RvcnkoSGVhcCog
aGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKLSAgICAs
IG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQotICAgICwgbV9j
ZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQorICAgIDogbV9jZWxsU2l6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9oZWFwKGhlYXApCiB7
CisgICAgaGVhcC0+dGhyZWFkTG9jYWxDYWNoZUxheW91dCgpLmFsbG9jYXRlT2Zmc2V0KHRoaXMp
OwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpzZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3Bh
Y2UpCkBAIC04MSwxNDMgKzc2LDE0IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0
b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1cnNvcl07CiB9CiAKLXZvaWQg
QmxvY2tEaXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCgpCi17Ci0gICAgaWYgKG1fY3VycmVu
dEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0g
ICAgCi0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0
cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmcoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0ZvckFs
bG9jYXRpb24oKQogewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKLSAgICAKLSAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQobV9m
cmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAg
ICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9l
bXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgICAgICBpZiAobV9h
bGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKLSAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXSkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAoT3B0aW9uczo6
c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQotICAgICAgICAmJiAodHJhZGVE
ZXN0cnVjdG9yQmxvY2tzIHx8ICFuZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAgICAgIGlmIChN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9T
dGVhbCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpID09IG1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2Nh
dGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAgICAgICAgLy8g
YmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJv
dGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBh
dCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3Rvcnko
KTsKLSAgICAgICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZUluKGJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2spCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihibG9jayk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jaykKLXsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxp
c3RlZCgpKTsKLSAgICAKLSAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwotICAgIAotICAg
IC8vIEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4g
TWFya2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAotICAgIC8vIHRoYXQgYWxnb3JpdGht
IGlzIHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmIChtX2Zy
ZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7Ci0gICAgICAgIEFTU0VSVChibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwotICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVk
KCk7Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAgICAgICAgQVNT
RVJUKCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKLSAgICAgICAgQVNTRVJU
KCFpc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwor
ICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2Vt
cHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKG1fYWxsb2Nh
dGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAotICAgIHZvaWQq
IHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+IEhlYXBDZWxs
KiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0pOwotICAgIHNldElzRWRlbihOb0xvY2tpbmdO
ZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKLSAgICBtYXJrZWRTcGFjZSgpLmRpZEFs
bG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVl
ZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgaWYgKCFPcHRp
b25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7Ci0gICAgaWYgKCFhbGxvY2F0aW9u
Q291bnQpIHsKLSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgewotICAgICAgICAg
ICAgaWYgKGRlZmVycmFsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQt
Pm1fc2hvdWxkR0MgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
aGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFs
bG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKLX0KLQotdm9p
ZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQotewotICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBBU1NFUlQo
bV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBkb1Rl
c3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBBU1NFUlQoIW1h
cmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2Zy
ZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsK
LSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7Ci0KLSAgICBt
X2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAK
LSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBu
b3cgdGhpcyBkaXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAvLyBo
YXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNr
IGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRC
bG9jaykpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0
aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxv
Y2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFpbHVyZU1vZGUg
PT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9jYXRl
SW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
c2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0
aW9uQ3Vyc29yLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNv
cl07CiB9CiAKIHN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKQEAgLTMxMywyNCArMTc5
LDE5IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAgICBpZiAo
ZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJlY3Rv
cnk6OnN0b3BBbGxvY2F0aW5nIVxuIik7Ci0gICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7
Ci0gICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
bV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAg
IG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAg
ICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9j
YXRvci0+c3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBtX2xhc3RBY3RpdmVCbG9jayA9
IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotICAgIG1fZnJlZUxpc3Qu
Y2xlYXIoKTsKLQorICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAo
TG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5wcmVw
YXJlRm9yQWxsb2NhdGlvbigpOworICAgICAgICB9KTsKKyAgICAKICAgICBtX2FsbG9jYXRpb25D
dXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1fdW5zd2VwdEN1cnNvciA9
IDA7CkBAIC0zNDQsNiArMjA1LDIxIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW8KICAgICB9CiB9CiAKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5n
Rm9yR29vZCgpCit7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
dGhpcyksICI6IEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QhXG4iKTsKKyAg
ICAKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2FsQWxs
b2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+c3RvcEFsbG9jYXRp
bmdGb3JHb29kKCk7CisgICAgICAgIH0pOworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgIHdoaWxlICghbV9sb2NhbEFsbG9jYXRvcnMuaXNF
bXB0eSgpKQorICAgICAgICBtX2xvY2FsQWxsb2NhdG9ycy5iZWdpbigpLT5yZW1vdmUoKTsKK30K
Kwogdm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogewogICAgIGZv
ckVhY2hCbG9jaygKQEAgLTM1NCwxMiArMjMwLDEwIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6Omxh
c3RDaGFuY2VUb0ZpbmFsaXoKIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1lQWxsb2NhdGlu
ZygpCiB7Ci0gICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAg
bV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RBY3RpdmVCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZd
IChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3ItPnJl
c3VtZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKQEAgLTM3OSw3ICsyNTMsNyBAQCB2b2lk
IEJsb2NrRGlyZWN0b3J5OjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBvZiBj
b2xsZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhl
IG1fbWFya2luZ1hZWgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgaWYgKCF0cmFkZURlc3Ry
dWN0b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgaWYgKCFPcHRpb25zOjp0
cmFkZURlc3RydWN0b3JCbG9ja3MoKSAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsKICAgICAgICAg
QVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKICAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVt
cHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CiAgICAgfSBlbHNlIHsKQEAgLTUxMiw1
ICszODYsMTUgQEAgTWFya2VkU3BhY2UmIEJsb2NrRGlyZWN0b3J5OjptYXJrZWRTcGFjZQogICAg
IHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQogCitib29sIEJsb2NrRGlyZWN0b3J5Ojpp
c0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkKK3sKKyAgICBib29sIHJlc3VsdCA9
IGZhbHNlOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAoTG9j
YWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0IHw9IGFsbG9jYXRv
ci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDZWxsQXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQzLDcgQEAgY2xhc3MgSGVhcDsK
IGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUgRk9S
X0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxpdmUsIExpdmUp
IC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJsb2Nrcy4gKi9c
CkBAIC03NiwxNCArNzksMTIgQEAgY2xhc3MgQmxvY2tEaXJlY3RvcnkgewogICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mRnJlZUxpc3QoKTsKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2Vs
bFNpemUoKTsKLQogICAgIEJsb2NrRGlyZWN0b3J5KEhlYXAqLCBzaXplX3QgY2VsbFNpemUpOwog
ICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsKICAgICB2b2lkIGxhc3RDaGFuY2VUb0Zp
bmFsaXplKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIHZvaWQgc3Rv
cEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOwogICAgIHZv
aWQgcmVzdW1lQWxsb2NhdGluZygpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nRm9yRnVsbENvbGxl
Y3Rpb24oKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKQEAgLTk3LDEwICs5OCw5IEBAIHB1Ymxp
YzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsg
fQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7
IH0KIAotICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0
OworICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5
QmxvY2soY29uc3QgRnVuY3RvciYpOwpAQCAtMTU3LDI0ICsxNTcsMjAgQEAgcHVibGljOgogICAg
IFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KICAgICBN
YXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKICAgICAKLSAgICBjb25zdCBGcmVlTGlz
dCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CisgICAgQWxsb2NhdG9y
IGFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIEFsbG9jYXRvcihtX3RsY09mZnNldCk7IH0KICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBCaXRz
KFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiBwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsK
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFRocmVhZExv
Y2FsQ2FjaGVMYXlvdXQ7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2Nh
dGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSk7Ci0gICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICB2b2lkKiB0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5
QWxsb2NhdGVCbG9jaygpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSopOwotICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxD
b250ZXh0Kik7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlv
bigpOwogICAgIAotICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CisgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6
SGFuZGxlKj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGlj
ZXM7CkBAIC0xOTMsMTAgKzE4OSw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZW1wdHlDdXJz
b3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRl
IGZvciBlbXB0eSBhbGxvY2F0aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCiAgICAg
c2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2Nr
IHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgogICAgIAotICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrOwotICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrOwotCi0gICAgTG9jayBtX2xvY2s7CiAgICAgdW5zaWdu
ZWQgbV9jZWxsU2l6ZTsKICAgICBDZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8g
RklYTUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KQEAgLTIw
NiwxNiArMTk4LDEwIEBAIHByaXZhdGU6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVj
dG9yeSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5T
dWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OworICAgIAorICAgIExvY2sgbV9s
b2NhbEFsbG9jYXRvcnNMb2NrOworICAgIHNpemVfdCBtX3RsY09mZnNldDsKKyAgICBTZW50aW5l
bExpbmtlZExpc3Q8TG9jYWxBbGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxs
b2NhdG9yPj4gbV9sb2NhbEFsbG9jYXRvcnM7CiB9OwogCi1pbmxpbmUgcHRyZGlmZl90IEJsb2Nr
RGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEJsb2NrRGlyZWN0b3J5LCBtX2ZyZWVMaXN0KTsKLX0KLQotaW5saW5lIHB0cmRpZmZfdCBC
bG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCi17Ci0gICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJl
Y3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCAr
MzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgQmxvY2tEaXJlY3Rvcnk6
OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewotICAgIHJldHVy
biBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOwot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpCi17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFsmXSAo
KSAtPiBIZWFwQ2VsbCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+
dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKLSAgICAgICAgfSk7Ci19
Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBCbG9ja0RpcmVjdG9y
eTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgbV9saXZlLmZv
ckVhY2hTZXRCaXQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21w
bGV0ZVN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDE1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKIAorI2luY2x1
ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1h
cmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIK
ICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzgsNDAgKzQyLDM4IEBAIENvbXBs
ZXRlU3Vic3BhY2U6OkNvbXBsZXRlU3Vic3BhY2UoQ1N0cmkKICAgICA6IFN1YnNwYWNlKG5hbWUs
IGhlYXApCiB7CiAgICAgaW5pdGlhbGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM7
IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOwogfQog
CiBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAKLUJsb2NrRGly
ZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9j
YXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JG
b3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9pZCogQ29tcGxldGVTdWJz
cGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsK
LSAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFp
bHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBs
ZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpCiB7Ci0gICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cykpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2Nh
dGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0gICAgZWxzZQotICAgICAgICByZXN1
bHQgPSBhbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Cisg
ICAgcmV0dXJuIGFsbG9jYXRvci50cnlBbGxvY2F0ZSgKKyAgICAgICAgdm0sIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUsCisgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAg
ICAgICAgfSk7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKICAgICBpZiAoIXNpemVDbGFz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBBbGxvY2F0b3IoKTsK
ICAgICAKICAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sg
Zm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKICAgICAvLyB0
byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVu
IHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0KQEAgLTgyLDcgKzg0LDcgQEAgQmxvY2tE
aXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQgYW55ICJmb3JF
YWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0
ZXIgaXQncyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwotICAgIGlmIChC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0p
CisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2lu
ZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxzZSkKQEAgLTk4
LDcgKzEwMCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2EKICAg
ICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBz
aXplQ2xhc3MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX2FsbG9jYXRvckZvclNp
emVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtpbmRleF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpbmRleC0tKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsMjMgKzEwOSwyMyBAQCBCbG9j
a0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9maXJzdERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICByZXR1
cm4gZGlyZWN0b3J5OworICAgIHJldHVybiBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogfQogCi12
b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVT
bG93KHNpemUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9
PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZt
LCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIHNhbml0aXpl
U3RhY2tGb3JWTSgmdm0pOwogICAgIAotICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikp
Ci0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0
b3IpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgCiAgICAgaWYgKHNp
emUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8
PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKQEAgLTEzMiwxNSArMTM0LDE1IEBAIHZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5oZWFwLmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAgICBzaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0g
ICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVh
dGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFs
bG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBzaXplLCB0aGlz
KTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBt
X3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5kaWRBbGxvY2F0
ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAKICAgICBtX2xh
cmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJWE1FOiBDdXJy
ZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFsbG9jYXRvcnMi
LCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihz
aXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwor
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9y
TW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4
dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwgc2l6ZV90LCBH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9
CiAgICAgCi0gICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0
dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CiAK
IHByaXZhdGU6Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsK
KyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAogICAgIC8vIFRo
ZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBh
bGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQqIHRyeUFsbG9j
YXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCogYWxsb2NhdGVT
bG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29u
dGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBNYXJrZWRTcGFj
ZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgc3RkOjphcnJh
eTxBbGxvY2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0b3J5Pj4gbV9k
aXJlY3RvcmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZv
ck1vZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkK
IHsKICAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXpl
KV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9jYXRvckZvck1v
ZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9B
U1NFUlQobW9kZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3Ip
OwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07
CiAKIGNsYXNzIEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7
Ci0gICAgCiBwdWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5G
cmVlTGlzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVy
cmFsQ29udGV4dC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworY2xh
c3MgTG9jYWxBbGxvY2F0b3I7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKICAgICBmcmll
bmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgZnJp
ZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVycmFs
Q29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2
OCw3IEBACiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNsdWRlICJTd2Vl
cGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6SGVhcChWTSog
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQ
b29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1f
dGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCisgICAg
LCBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApAQCAtNDQ2LDcg
KzQ0OCw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogICAgICAgICBkYXRh
TG9nKCI1ICIpOwogICAgIAogICAgIG1fYXJyYXlCdWZmZXJzLmxhc3RDaGFuY2VUb0ZpbmFsaXpl
KCk7Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1fb2JqZWN0U3Bh
Y2Uuc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgbV9vYmplY3RTcGFjZS5sYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogICAgIHJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
NyBAQCBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7
CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7CitjbGFz
cyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogY2xhc3MgVk07CiBjbGFzcyBXZWFrR0NNYXBCYXNl
Owogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKQEAgLTM3Miw2ICszNzMsOCBAQCBwdWJsaWM6
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNsb3RWaXNp
dG9yKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlTGF5b3V0JiB0aHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNoZUxheW91dDsg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC03MTQs
NiArNzE3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBDdXJyZW50VGhyZWFkU3RhdGUqIG1fY3Vy
cmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9OwogICAgIFdURjo6VGhyZWFkKiBtX2N1cnJlbnRU
aHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3MgT0sgaWYgdGhpcyBiZWNvbWVzIGEgZGFuZ2xpbmcg
cG9pbnRlci4KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkTG9jYWxDYWNoZUxheW91
dD4gbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDkgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0NvbmN1
cnJlbnRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCiAKKyNpbmNsdWRl
ICJBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkxvY2Fs
QWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSw2ICszOCw3IEBAIElzb1N1YnNwYWNlOjpJc29T
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEgKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiAgICAg
LCBtX3NpemUoc2l6ZSkKICAgICAsIG1fZGlyZWN0b3J5KCZoZWFwLCBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKKyAgICAsIG1fYWxsb2NhdG9y
KG1fZGlyZWN0b3J5LmFsbG9jYXRvcigpKQogICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKHN0ZDo6bWFrZV91bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKIHsKICAg
ICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmdl
dCgpKTsKQEAgLTUwLDIwICs1NCwyMCBAQCBJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKIHsK
IH0KIAotQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNp
emUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJu
IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZvaWQqIElzb1N1YnNw
YWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogSXNvU3Vic3Bh
Y2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAgICBy
ZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25W
aXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgdm9pZCogcmVzdWx0
ID0gbV9kaXJlY3RvcnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cisg
ICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4
dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTEgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwg
QWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQWxs
b2NhdG9yIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsK
IAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFs
bG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBJc29DZWxsU2V0OwpAQCAtNTYsMTQgKzU2LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
c2l6ZV90IG1fc2l6ZTsKICAgICBCbG9ja0RpcmVjdG9yeSBtX2RpcmVjdG9yeTsKKyAgICBBbGxv
Y2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAgICBTZW50aW5lbExpbmtl
ZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNldD4+IG1fY2Vs
bFNldHM7CiB9OwogCi1pbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQoraW5saW5lIEFs
bG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNp
emUoKSk7Ci0gICAgcmV0dXJuICZtX2RpcmVjdG9yeTsKKyAgICByZXR1cm4gbV9hbGxvY2F0b3I7
CiB9CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENlbGxUeXBlLCB0eXBl
KSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhlYXBDZWxsVHlwZSksIHNp
emVvZih0eXBlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiQWxsb2NhdGlu
Z1Njb3BlLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
T3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxs
b2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBtX2RpcmVjdG9yeShkaXJl
Y3RvcnkpCisgICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKKyAgICAsIG1f
ZnJlZUxpc3QobV9jZWxsU2l6ZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpcmVj
dG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fbG9jYWxBbGxv
Y2F0b3JzLmFwcGVuZCh0aGlzKTsKK30KKworTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9y
KExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCisgICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVj
dG9yeSkKKyAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKKyAgICAsIG1fZnJlZUxp
c3QoV1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKKyAgICAsIG1fY3VycmVudEJsb2NrKG90aGVy
Lm1fY3VycmVudEJsb2NrKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIubV9sYXN0QWN0
aXZlQmxvY2spCit7CisgICAgb3RoZXIucmVzZXQoKTsKKyAgICBpZiAob3RoZXIuaXNPbkxpc3Qo
KSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2Fs
QWxsb2NhdG9yc0xvY2spOworICAgICAgICBvdGhlci5yZW1vdmUoKTsKKyAgICAgICAgbV9kaXJl
Y3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKK30KKworTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCit7CisgICAgaWYgKGlz
T25MaXN0KCkpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2RpcmVjdG9yeS0+
bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICAgICAgcmVtb3ZlKCk7CisgICAgfQorICAgIAor
ICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0IGhvbGRpbmcgb250byBhbnkg
bWVtb3J5LiBUaGlzIGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0aGUKKyAgICAvLyBmb2xsb3dp
bmcgdHdvIHVzZSBjYXNlczoKKyAgICAvLyAKKyAgICAvLyAtIEltbW9ydGFsIFRMQy4gVGhvc2Ug
ZGVzdHJ1Y3QgYWZ0ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVjdGluZywgc28gdGhleSBzaG91
bGQgbm90IGhhdmUKKyAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGluIHRoZW0uCisgICAgLy8KKyAg
ICAvLyAtIFRMQyBvd25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBUTEMgZ2V0cyBkZXN0cm95ZWQg
YWZ0ZXIgYSBHQyBmbGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQKKyAgICAvLyAgIHRoYXQgaXQg
aXMgbm90IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBh
IGZ1bGx5IHJlc2V0IHN0YXRlIGF0IHRoZQorICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBi
ZWNhdXNlIGZvciBpdCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBo
YXZlIGFsbG9jYXRlZAorICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVz
ZSBpdCdzIHN1cHBvc2VkbHkgdW5yZWFjaGFibGUpLgorICAgIGJvb2wgb2sgPSB0cnVlOworICAg
IGlmICghbV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgICAgICBkYXRhTG9n
KCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24t
ZW1wdHkgZnJlZS1saXN0LlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRl
cih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBjdXJyZW50IGJsb2NrLlxu
Iik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2xhc3RBY3RpdmVCbG9j
aykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxv
Y2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBsYXN0IGFjdGl2ZSBibG9jay5cbiIpOworICAgICAg
ICBvayA9IGZhbHNlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fbGFzdEFj
dGl2ZUJsb2NrKTsKKyAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgIEFTU0VSVCht
X2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Cisg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKyAgICBtX2N1cnJlbnRCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworfQorCit2b2lkIExvY2FsQWxs
b2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKK3sKKyAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2Nr
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2Nh
dGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2Nr
OworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbEFsbG9j
YXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpCit7CisgICAgc3RvcEFsbG9j
YXRpbmcoKTsKKyAgICByZXNldCgpOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2Nh
dGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOworICAgIEhlYXAmIGhlYXAgPSAqbV9kaXJlY3RvcnktPm1faGVh
cDsKKyAgICBBU1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
KTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CisKKyAg
ICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOworICAg
IGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7CisgICAgCisgICAg
ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdI
ZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFs
Q29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQg
YSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRCbG9jay4gVGhp
cyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBp
bmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlvbi4KKyAgICBpZiAoVU5M
SUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxD
b250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDAp
KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxvY2soKTsKKyAgICBpZiAoIWJsb2Nr
KSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBtX2RpcmVjdG9y
eS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOworICAg
IEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxv
Y2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVudEJsb2NrKQor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAg
bV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKK30KKwor
dm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQorewor
ICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2VkIGZvciByZWFsIG11bHRp
LXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0bworICAgIC8vIGNvbWUg
dXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRoYXQgcHJvdG9jb2wgd291
bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAvLworICAgIC8vIC0gVGhlIGJhc2lj
IGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRyeWluZyB0byBkbyBhbiBhbGxvY2F0
aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNhbWUgYml0dmVjdG9yLiBUaGF0IHBy
b2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBsZWFzdC4KKyAgICAvLworICAgIC8v
IC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxvY2F0b3IgdHJpZ2dlcmluZyBhIHN0
ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkKKyAgICAvLyAgIHZpYSBhIHNlYXJj
aCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxpc3QuIFdobyBrbm93cyB3aGF0IGxv
Y2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25lIHdheSB0byBtYWtlIHRoaXMgd29y
ayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sgdGhhdCBwcm90ZWN0cyBhbGwgbXV0
YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBhdGhzLiBUaGF0IHdvdWxkIHByb2Jh
Ymx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0IHdvdWxkIGNlcnRhaW5seSBiZQor
ICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24gZnJvbSBKSVQgdGhyZWFkcy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNjM1CisgICAg
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAor
ICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9j
YXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9ja0ZvckFsbG9jYXRpb24o
KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
ICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tz
RnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmIChPcHRpb25zOjp0cmFkZURlc3RydWN0
b3JCbG9ja3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKKyAgICAg
ICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPm1fc3Vic3Bh
Y2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fZGlyZWN0b3J5LT5tX3N1YnNw
YWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0
J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBh
cyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1v
dGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1w
dHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAg
ICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAgICBtX2RpcmVj
dG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxv
Y2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCit2
b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
aykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIExvY2Fs
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQorewor
ICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwor
ICAgIAorICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7CisgICAgCisgICAgLy8gSXQncyBw
b3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRy
aWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CisgICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBh
bmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCisgICAgaWYgKG1fZnJlZUxpc3QuYWxs
b2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQo
KSk7CisgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKKyAgICAg
ICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICBBU1NFUlQoIW1fZGly
ZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgQVNT
RVJUKCFtX2RpcmVjdG9yeS0+aXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vz
c2FyeSwgYmxvY2spKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAg
IG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVl
TGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfSk7CisgICAgbV9kaXJlY3RvcnktPnNldElzRWRlbihOb0xvY2tpbmdOZWNl
c3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKKyAgICBtX2RpcmVjdG9yeS0+bWFya2VkU3Bh
Y2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6
OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKKyAgICBpZiAoIWFsbG9jYXRpb25Db3Vu
dCkgeworICAgICAgICBpZiAoIW1fZGlyZWN0b3J5LT5tX2hlYXAtPmlzRGVmZXJyZWQoKSkgewor
ICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICBkZWZlcnJh
bENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fZGlyZWN0b3J5LT5tX2hlYXAtPmNvbGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNj
b3BlOjpGdWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKythbGxvY2F0aW9uQ291bnQg
Pj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgICAgIGFsbG9jYXRp
b25Db3VudCA9IDA7Cit9CisKK2Jvb2wgTG9jYWxBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIC8vIFRoaXMgYWJvbWluYXRpb24gZXhp
c3RzIHRvIGRldGVjdCB3aGVuIGFuIG9iamVjdCBpcyBpbiB0aGUgZGVhZC1idXQtbm90LWRlc3Ry
dWN0ZWQgc3RhdGUuCisgICAgLy8gVGhlcmVmb3JlLCBpdCdzIG5vdCBldmVuIGNsZWFyIHRoYXQg
dGhpcyBuZWVkcyB0byBkbyBhbnl0aGluZyBiZXlvbmQgcmV0dXJuaW5nICJmYWxzZSIsIHNpbmNl
CisgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25pbmcgdGhlIG9iamVjdCBpcyBm
cmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFueQorICAgIC8vIG9iamVjdHMg
dG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0YXRlLgorICAgIC8vIEZJWE1F
OiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODE2NTUKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlz
dC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKK2NsYXNzIEdD
RGVmZXJyYWxDb250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jh
d1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KExvY2FsQWxsb2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAgICBMb2NhbEFsbG9jYXRvcihCbG9j
a0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOworICAg
IH5Mb2NhbEFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQgc3RvcEFsbG9jYXRp
bmcoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgdm9pZCByZXN1bWVB
bGxvY2F0aW5nKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQ2VsbFNpemUoKTsKKyAgICAKKyAgICBib29sIGlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCopIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXQoKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICB2b2lk
KiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOworCisgICAg
QmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OworICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Cisg
ICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3Rp
dmVCbG9jayB7IG51bGxwdHIgfTsKK307CisKK2lubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQoreworICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9j
YWxBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQorCitpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KExvY2FsQWxsb2NhdG9yLCBtX2NlbGxTaXplKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQUxX
QVlTX0lOTElORSB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQor
eworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVh
cENlbGwqIHsKKyAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShtX2RpcmVjdG9yeS0+aGVh
cCgpLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFs
bG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgICAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYg
KzMwMiwxNiBAQCB2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZygpCiAgICAgICAgIH0p
OwogfQogCit2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKQoreworICAg
IEFTU0VSVCghaXNJdGVyYXRpbmcoKSk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgKKyAgICAgICAg
WyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAg
ICAgICAgICAgZGlyZWN0b3J5LnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOworICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOworfQorCiB2b2lk
IE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpCiB7CiAgICAgbV9sYXJn
ZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxlY3Rpb25CZWdpbiA9IG1fbGFyZ2VBbGxvY2F0aW9ucy5i
ZWdpbigpICsgbV9sYXJnZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rpb247CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNzI3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgIAogICAgIEhlYXAqIGhlYXAoKSBj
b25zdCB7IHJldHVybiBtX2hlYXA7IH0KICAgICAKLSAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFs
aXplKCk7IC8vIFlvdSBtdXN0IGNhbGwgc3RvcEFsbG9jYXRpbmcgYmVmb3JlIHlvdSBjYWxsIHRo
aXMuCisgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOyAvLyBNdXN0IGNhbGwgc3RvcEFs
bG9jYXRpbmdGb3JHb29kIGZpcnN0LgogICAgIHZvaWQgZnJlZU1lbW9yeSgpOwogCiAgICAgc3Rh
dGljIHNpemVfdCBvcHRpbWFsU2l6ZUZvcihzaXplX3QpOwpAQCAtMTExLDYgKzExMSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygpOwogCiAgICAgdm9pZCBzdG9wQWxs
b2NhdGluZygpOworICAgIHZvaWQgc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgdm9pZCBy
ZXN1bWVBbGxvY2F0aW5nKCk7IC8vIElmIHdlIGp1c3Qgc3RvcHBlZCBhbGxvY2F0aW9uIGJ1dCB3
ZSBkaWRuJ3QgZG8gYSBjb2xsZWN0aW9uLCB3ZSBuZWVkIHRvIHJlc3VtZSBhbGxvY2F0aW9uLgog
ICAgIAogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0NvbnN0cmFpbnRT
b2x2ZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdG9w
SWZOZWNlc3NhcnlUaW1lci5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQxLDYgKzQyLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBDZWxs
OwogY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRlcjsKIGNsYXNzIE1hcmtlZEJsb2NrOworY2xhc3Mg
TWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZlcjsKIGNsYXNz
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUu
aCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCisjaW5jbHVkZSAiQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTU2LDggKzU3LDggQEAgcHVibGljOgogICAg
IHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIEJsb2NrRGlyZWN0b3J5
KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoVk0m
LCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7
CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRocmVhZExvY2FsQ2FjaGUuaCIKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZlB0cjxUaHJlYWRMb2NhbENh
Y2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworfQorCitUaHJlYWRMb2NhbENh
Y2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKK3sK
KyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6flRo
cmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Cit9CisKK1RocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCit7Cisg
ICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOworICAgIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENh
Y2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAgICBEYXRhKiByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxEYXRhKj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2NhdG9yKSAr
IGxheW91dC5zaXplKSk7CisgICAgcmVzdWx0LT5zaXplID0gbGF5b3V0LnNpemU7CisgICAgcmVz
dWx0LT5jYWNoZSA9IHRoaXM7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
b2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAo
JmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9j
YXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6
ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3Ip
KQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0
b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lE
YXRhKERhdGEqIGRhdGEpCit7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg
ZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIGFs
bG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBmYXN0RnJlZShk
YXRhKTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0pCit7
CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2VGbGFnLAorICAgICAgICBb
XSAoKSB7CisgICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwgZGVzdHJ1Y3Rv
cik7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgCisgICAgcmVmKCk7CisgICAgCisgICAgaWYg
KFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSkpCisgICAgICAgIG9s
ZENhY2hlLT5kZXJlZigpOworICAgIAorICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEpOworfQor
Cit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxEYXRhKFZNJiB2bSwgRGF0YSogZGF0YSkK
K3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAg
X3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSwgZGF0YSk7CisjZWxzZQorICAgIHZt
LnRocmVhZExvY2FsQ2FjaGUgPSBkYXRhOworI2VuZGlmCit9CisKK0xvY2FsQWxsb2NhdG9yJiBU
aHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sK
KyAgICBEYXRhKiBvbGREYXRhID0gbV9kYXRhOworICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgp
OworICAgIGRlc3Ryb3lEYXRhKG9sZERhdGEpOworICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEp
OworICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA8IG1fZGF0YS0+c2l6ZSk7CisgICAgcmV0dXJu
IGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6
OmRlc3RydWN0b3Iodm9pZCogYXJnKQoreworICAgIGlmICghYXJnKQorICAgICAgICByZXR1cm47
CisgICAgRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihhcmcpOworICAgIGRhdGEtPmNh
Y2hlLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgVk07CisK
K2NsYXNzIFRocmVhZExvY2FsQ2FjaGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhy
ZWFkTG9jYWxDYWNoZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZExvY2FsQ2Fj
aGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmKTsKKyAgICAKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB+VGhyZWFkTG9jYWxDYWNoZSgpOworCisgICAgc3RhdGljIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBnZXQoVk0mKTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGRlc2ln
bmVkIHRvIGJlIGZhc3QgZW5vdWdoIHRoYXQgeW91IGNvdWxkIGV2ZW4gY2FsbCBpdCBiZWZvcmUg
ZXZlcnkgYWxsb2NhdGlvbiwgYnkKKyAgICAvLyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0
IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcgdGhlIGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxs
ZWQuIFRoaXMKKyAgICAvLyBhc3N1bWVzIGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2Fj
aGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0dWFsIGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCisgICAg
Ly8gd2l0aCBwb3NzaWJseSBoaWdoIHJhdGUgb2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hl
ZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMgb3V0IG9mIHBhcmFub2lhLgorICAgIHZvaWQgaW5zdGFs
bChWTSYpOworICAgIAorICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKFZNJiwg
c2l6ZV90IG9mZnNldCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc0Z1bmMs
IHR5cGVuYW1lIEZhaWx1cmVGdW5jPgorICAgIHN0YXRpYyB2b2lkIHRyeUdldEFsbG9jYXRvcihW
TSYsIHNpemVfdCBvZmZzZXQsIGNvbnN0IFN1Y2Nlc3NGdW5jJiwgY29uc3QgRmFpbHVyZUZ1bmMm
KTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihEYXRhLCBzaXplKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGaXJzdEFsbG9jYXRvcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0
b3IpOyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICAKKyAgICBU
aHJlYWRMb2NhbENhY2hlKEhlYXAmKTsKKyAgICAKKyAgICBzdHJ1Y3QgRGF0YSB7CisgICAgICAg
IHNpemVfdCBzaXplOworICAgICAgICBUaHJlYWRMb2NhbENhY2hlKiBjYWNoZTsKKyAgICAgICAg
TG9jYWxBbGxvY2F0b3IgYWxsb2NhdG9yWzFdOworICAgIH07CisKKyAgICBzdGF0aWMgRGF0YSog
Z2V0SW1wbChWTSYpOworICAgIAorICAgIERhdGEqIGFsbG9jYXRlRGF0YSgpOworICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3lEYXRhKERhdGEqKTsKKyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFs
bG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgIHZvaWQgaW5zdGFsbFNs
b3coVk0mKTsKKyAgICBzdGF0aWMgdm9pZCBpbnN0YWxsRGF0YShWTSYsIERhdGEqKTsKKyAgICAK
KyAgICBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yU2xvdyhWTSYsIHNpemVfdCBvZmZzZXQpOwor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0b3Iodm9pZCopOworICAgIAorICAgIC8vIFdo
ZW4gaW5zdGFsbGVkLCB3ZSByZWYoKSB0aGUgY2FjaGUuIFVuaW5zdGFsbGluZyBkZXJlZigpcyB0
aGUgY2FjaGUuIFRMUyBkZXN0cnVjdGlvbiBkZXJlZigpcworICAgIC8vIHRoZSBjYWNoZS4gV2hl
biB0aGUgY2FjaGUgaXMgZGVzdHJ1Y3RlZCwgaXQgbmVlZHMgdG8gcmV0dXJuIGFsbCBvZiBpdHMg
c3RhdGUgdG8gdGhlIEdDLiBJCisgICAgLy8gdGhpbmsgdGhhdCBqdXN0IG1lYW5zIHN0b3BBbGxv
Y2F0aW5nKCksIGJ1dCB3aXRoIHNvbWUgc2VyaW91c2x5IGhlYXZ5IGNhdmVhdHMgaGF2aW5nIHRv
IGRvCisgICAgLy8gd2l0aCB3aGVuIGl0J3MgdmFsaWQgdG8gbWFrZSB0aGF0IGNhbGwuIEFsdGVy
bmF0aXZlbHksIHdlIGNvdWxkIFJFTEVBU0VfQVNTRVJUIHRoYXQgdGhlIGNhY2hlCisgICAgLy8g
aXMgZW1wdHkgd2hlbiB3ZSBkZXN0cnVjdCBpdC4gVGhpcyBpcyBjb3JyZWN0IGZvciBjYWNoZXMg
dGhhdCBhcmUga2VwdCBsaXZlIGJ5IEdDIG9iamVjdHMgYW5kCisgICAgLy8gaXQncyBjb3JyZWN0
IGZvciBpbW1vcnRhbCBjYWNoZXMuCisgICAgSGVhcCYgbV9oZWFwOworICAgIERhdGEqIG1fZGF0
YSB7IG51bGxwdHIgfTsKKworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgc3RhdGljIGNv
bnN0IHB0aHJlYWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19LRVk7CisjZW5kaWYKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9U
aHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNo
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEq
IFRocmVhZExvY2FsQ2FjaGU6OmdldEltcGwoVk0mIHZtKQoreworI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0
YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdCh0bHNLZXkpKTsKKyNlbHNlCisgICAgcmV0
dXJuIHZtLnRocmVhZExvY2FsQ2FjaGU7CisjZW5kaWYKK30KKworaW5saW5lIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpnZXQoVk0mIHZtKQoreworICAgIFRocmVh
ZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsKKyAgICBpZiAoZGF0YSkKKyAg
ICAgICAgcmV0dXJuIGRhdGEtPmNhY2hlOworICAgIHJldHVybiBudWxscHRyOworfQorCitpbmxp
bmUgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSkKK3sKKyAgICBpZiAoZ2V0
SW1wbCh2bSkgPT0gbV9kYXRhKQorICAgICAgICByZXR1cm47CisgICAgaW5zdGFsbFNsb3codm0p
OworfQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRv
cihWTSYgdm0sIHNpemVfdCBvZmZzZXQpCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSog
ZGF0YSA9IGdldEltcGwodm0pOworICAgIGlmIChMSUtFTFkob2Zmc2V0IDwgZGF0YS0+c2l6ZSkp
CisgICAgICAgIHJldHVybiBhbGxvY2F0b3IoKmRhdGEsIG9mZnNldCk7CisgICAgcmV0dXJuIGRh
dGEtPmNhY2hlLT5hbGxvY2F0b3JTbG93KHZtLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBTdWNjZXNzRnVuYywgdHlwZW5hbWUgRmFpbHVyZUZ1bmM+Cit2b2lkIFRocmVhZExvY2Fs
Q2FjaGU6OnRyeUdldEFsbG9jYXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQsIGNvbnN0IFN1Y2Nl
c3NGdW5jJiBzdWNjZXNzRnVuYywgY29uc3QgRmFpbHVyZUZ1bmMmIGZhaWx1cmVGdW5jKQorewor
ICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsKKyAgICBpZiAo
TElLRUxZKG9mZnNldCA8IGRhdGEtPnNpemUpKQorICAgICAgICBzdWNjZXNzRnVuYyhhbGxvY2F0
b3IoKmRhdGEsIG9mZnNldCkpOworICAgIGVsc2UKKyAgICAgICAgZmFpbHVyZUZ1bmMoKTsKK30K
KworaW5saW5lIExvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoRGF0
YSYgZGF0YSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxMb2Nh
bEFsbG9jYXRvcio+KGJpdHdpc2VfY2FzdDxjaGFyKj4oJmRhdGEuYWxsb2NhdG9yWzBdKSArIG9m
ZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgiCisKKyNpbmNsdWRlICJCbG9ja0RpcmVjdG9y
eS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6VGhyZWFk
TG9jYWxDYWNoZUxheW91dCgpCit7Cit9CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6On5UaHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlTGF5b3V0
OjphbGxvY2F0ZU9mZnNldChCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fdGxjT2Zmc2V0ID0g
bV9zaXplOworICAgIG1fc2l6ZSArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpOworICAgIG1fZGly
ZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6
OlNuYXBzaG90IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OnNuYXBzaG90KCkKK3sKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgU25hcHNob3QgcmVzdWx0OworICAgIHJl
c3VsdC5zaXplID0gbV9zaXplOworICAgIHJlc3VsdC5kaXJlY3RvcmllcyA9IG1fZGlyZWN0b3Jp
ZXM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQmxvY2tEaXJlY3RvcnkqIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQ6OmRpcmVjdG9yeSh1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIHJldHVybiBtX2RpcmVjdG9yaWVzW29mZnNldCAv
IHNpemVvZihMb2NhbEFsbG9jYXRvcildOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVM
YXlvdXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJl
YWRMb2NhbENhY2hlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKKworLy8gRWFjaCBIZWFwIGhh
cyBhIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQgdGhhdCBoZWxwcyB1cyBmaWd1cmUgb3V0IGhvdyB0
byBhbGxvY2F0ZSBhIFRocmVhZExvY2FsQ2FjaGUKKy8vIGZvciB0aGF0IEhlYXAuCisKK2NsYXNz
IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAor
cHVibGljOgorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKTsKKyAgICB+VGhyZWFkTG9jYWxD
YWNoZUxheW91dCgpOworCisgICAgLy8gQmxvY2tEaXJlY3RvcnkgY2FsbHMgdGhpcyBkdXJpbmcg
Y3JlYXRpb24gYW5kIHRoaXMgZmlsbHMgaW4gQmxvY2tEaXJlY3Rvcnk6Om9mZnNldC4KKyAgICB2
b2lkIGFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5Kik7CisgICAgCisgICAgc3RydWN0IFNu
YXBzaG90IHsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIFZlY3RvcjxCbG9ja0RpcmVj
dG9yeSo+IGRpcmVjdG9yaWVzOworICAgIH07CisgICAgCisgICAgU25hcHNob3Qgc25hcHNob3Qo
KTsKKyAgICAKKyAgICBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KHVuc2lnbmVkIG9mZnNldCk7
CisgICAgCitwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOworICAgIHNpemVfdCBtX3NpemUgeyAw
IH07CisgICAgVmVjdG9yPEJsb2NrRGlyZWN0b3J5Kj4gbV9kaXJlY3RvcmllczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01ODIsNiAr
NTgyLDEwMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNCiB9CiAj
ZW5kaWYKIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxs
b2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBH
UFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRo
KQoreworICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBj
YW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3JhdGNoCisgICAgLy8gcmVnaXN0ZXIgdXNh
Z2UuCisgICAgICAgIAorICAgIGlmIChPcHRpb25zOjpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgSnVtcCBwb3BQYXRoOworICAgIEp1bXAgZG9uZTsKKyAgICAKKyNpZiBFTkFCTEUo
RkFTVF9UTFNfSklUKQorICAgIGxvYWRGcm9tVExTUHRyKGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RG
X0dDX1RMQ19LRVkpLCBzY3JhdGNoR1BSKTsKKyNlbHNlCisgICAgbG9hZFB0cigmdm0oKS50aHJl
YWRMb2NhbENhY2hlRGF0YSwgc2NyYXRjaEdQUik7CisjZW5kaWYKKyAgICBpZiAoYWxsb2NhdG9y
LmlzQ29uc3RhbnQoKSkgeworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQmVsb3dP
ckVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mU2l6
ZSgpKSwgVHJ1c3RlZEltbTMyKGFsbG9jYXRvci5hbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKKyAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0
QWxsb2NhdG9yKCkgKyBhbGxvY2F0b3IuYWxsb2NhdG9yKCkub2Zmc2V0KCkpLCBzY3JhdGNoR1BS
LCBhbGxvY2F0b3JHUFIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2gzMihCZWxvd09yRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgVGhyZWFkTG9jYWxDYWNo
ZTo6b2Zmc2V0T2ZTaXplKCkpLCBhbGxvY2F0b3JHUFIpKTsKKyAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9yKCkpLCBhbGxv
Y2F0b3JHUFIpOworICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgYWxsb2NhdG9yR1BSKTsKKyAg
ICB9CisKKyAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3Vs
dEdQUik7CisgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOworICAg
IGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
LWFsbG9jYXRvci5hbGxvY2F0b3IoKS5jZWxsU2l6ZSh2bSgpLmhlYXApKSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAg
ICAgIG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN1YjMyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIH0KKyAgICB9CisgICAgbmVnUHRyKHJlc3VsdEdQUik7CisgICAgc3RvcmUz
MihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7CisgICAgQWRk
cmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsK
KyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRH
UFIpOworICAgIGVsc2UgeworICAgICAgICBsb2FkUHRyKHBheWxvYWRFbmRBZGRyLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgfQorICAg
ICAgICAKKyAgICBkb25lID0ganVtcCgpOworICAgICAgICAKKyAgICBwb3BQYXRoLmxpbmsodGhp
cyk7CisgICAgICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRI
ZWFkKCkpLCByZXN1bHRHUFIpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICB4b3JQdHIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CisgICAgZWxzZSB7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICB4b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICB9CisgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIAorICAg
IC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlz
IGEgZnJlc2ggb2JqZWN0LCBidXQKKyAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUg
bGlzdC4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CisgICAg
c3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkp
KTsKKyAgICAgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCit2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYg
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExp
c3QmIHNsb3dQYXRoKQoreworICAgIGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKSB7CisgICAg
ICAgIGlmICghYWxsb2NhdG9yLmFsbG9jYXRvcigpKSB7CisgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihyZXN1bHRHUFIsIGFsbG9jYXRvciwg
YWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Cit9CisKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBs
ZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3Jh
dGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCit7CisgICAg
c3RhdGljX2Fzc2VydCghKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAmIChNYXJrZWRTcGFjZTo6c2l6
ZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3
by4iKTsKKyAgICAKKyAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBnZXRMU0JTZXQoTWFya2VkU3Bh
Y2U6OnNpemVTdGVwKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6
OnNpemVTdGVwIC0gMSksIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSk7CisgICAgdXJzaGlm
dDMyKFRydXN0ZWRJbW0zMihzdGVwU2hpZnQpLCBzY3JhdGNoR1BSMSk7CisgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSMSwgVHJ1c3RlZEltbTMyKE1hcmtlZFNw
YWNlOjpsYXJnZUN1dG9mZiA+PiBzdGVwU2hpZnQpKSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KHN1YnNwYWNlLmFsbG9jYXRvckZvclNpemVTdGVwKCkgLSAxKSwgc2NyYXRjaEdQUjIpOworICAg
IGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBUaW1lc0ZvdXIpLCBz
Y3JhdGNoR1BSMSk7CisgICAgCisgICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQUiwgSklUQWxsb2Nh
dG9yOjp2YXJpYWJsZSgpLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKK30K
Kwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUpCiB7CiAjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkhlYXAuaCIK
ICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKSVRBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNs
dWRlICJNYXJrZWRTcGFjZS5oIgpAQCAtNTksNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQorICAgIFZN
JiB2bSgpIHsgcmV0dXJuICptX2NvZGVCbG9jay0+dm0oKTsgfQogICAgIEFzc2VtYmxlclR5cGVf
VCYgYXNzZW1ibGVyKCkgeyByZXR1cm4gbV9hc3NlbWJsZXI7IH0KIAogICAgIHZvaWQgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKQpAQCAtMTQ4OCw4MyArMTQ5MCwyNCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBlbWl0UmFuZG9tVGh1bmsoSlNHbG9iYWxPYmplY3QqLCBHUFJSZWcgc2NyYXRjaDAs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBGUFJSZWcgcmVzdWx0KTsKICAgICB2
b2lkIGVtaXRSYW5kb21UaHVuayhWTSYsIEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gx
LCBHUFJSZWcgc2NyYXRjaDIsIEdQUlJlZyBzY3JhdGNoMywgRlBSUmVnIHJlc3VsdCk7CiAjZW5k
aWYKLQorICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSB2YWx1ZSBo
ZWxkIGluIGFsbG9jYXRvckdQUiBpcyBub24tbnVsbC4gVGhpcyBET0VTIE5PVCBtZWFuCiAgICAg
Ly8gdGhhdCBhbGxvY2F0b3IgaXMgbm9uLW51bGw7IGFsbG9jYXRvciBjYW4gYmUgbnVsbCBhcyBh
IHNpZ25hbCB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUKLSAgICAvLyB2YWx1ZSBvZiBhbGxv
Y2F0b3JHUFIgaXMuCi0gICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihH
UFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2Nh
dG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAg
ICAgICAgLy8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3JpdHRlbiBzbyB0aGF0IHdlIGNhbiBj
YWxsIGl0IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKLSAgICAgICAgLy8gcmVnaXN0ZXIgdXNh
Z2UuCi0gICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSnVtcCBwb3BQYXRoOwotICAgICAgICBK
dW1wIGRvbmU7Ci0gICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIs
IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZS
ZW1haW5pbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIo
WmVybywgcmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGFsbG9jYXRvcikKLSAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNYODYoKSkgewotICAg
ICAgICAgICAgICAgIG1vdmUocmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2Vs
bFNpemUoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzdWIzMihyZXN1bHRH
UFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFk
ZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsg
RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKLSAgICAgICAgQWRkcmVzcyBwYXlsb2Fk
RW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKLSAgICAgICAgaWYg
KGlzWDg2KCkpCi0gICAgICAgICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIsIHJlc3VsdEdQUik7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZFB0cihwYXlsb2FkRW5kQWRkciwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG9uZSA9IGp1bXAoKTsKLSAgICAgICAgCi0gICAg
ICAgIHBvcFBhdGgubGluayh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVl
TGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBpZiAo
aXNYODYoKSkKLSAgICAgICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tE
aXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgp
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHhvclB0
cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwotICAgICAgICB9Ci0gICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICAKLSAgICAgICAg
Ly8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMg
YSBmcmVzaCBvYmplY3QsIGJ1dAotICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZy
ZWUgbGlzdC4KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIp
OwotICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxv
Y2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFt
YmxlZEhlYWQoKSkpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIH0K
KyAgICAvLyB2YWx1ZSBvZiBhbGxvY2F0b3JHUFIgaXMuIEFkZGl0aW9uYWxseSwgaWYgdGhlIGFs
bG9jYXRvciBpcyBub3QgbnVsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkCisgICAgLy8gdG8gcG9w
dWxhdGUgYWxsb2NhdG9yR1BSIC0gdGhpcyBjb2RlIHdpbGwgaWdub3JlIHRoZSBjb250ZW50cyBv
ZiBhbGxvY2F0b3JHUFIuCisgICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRv
cihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVn
IGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7CiAg
ICAgCi0gICAgdm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1
bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yKQotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yR1BSKSk7
Ci0gICAgICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3VsdEdQUiwgYWxs
b2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKLSAgICB9CisgICAg
dm9pZCBlbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlz
dCYgc2xvd1BhdGgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+
Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJl
Y3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBl
bWl0QWxsb2NhdGVKU0NlbGwoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBh
bGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBH
UFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgZW1p
dEFsbG9jYXRlKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIs
IHNsb3dQYXRoKTsKICAgICAgICAgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKHN0cnVj
dHVyZSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUsIHR5cGVuYW1lIE1h
c2tUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3VsdEdQUiwg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJl
VHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJl
ZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVK
U09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwg
R1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VUeXBl
IHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpCiAgICAgewogICAgICAgICBlbWl0QWxsb2NhdGVKU0NlbGwocmVzdWx0R1BSLCBhbGxv
Y2F0b3IsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAg
ICAgICAgIHN0b3JlUHRyKHN0b3JhZ2UsIEFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKQEAgLTE1NzYsMTMgKzE1MTksOCBAQCBwdWJsaWM6CiAgICAgICAg
IFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3Jh
Z2VUeXBlIHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSMSwKICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXplKQog
ICAgIHsKLSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENs
YXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKLSAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBz
Y3JhdGNoR1BSMSwgc3RydWN0dXJlLCBzdG9yYWdlLCBtYXNrLCBzY3JhdGNoR1BSMiwgc2xvd1Bh
dGgpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBl
Pih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOworICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjEsIHN0cnVjdHVy
ZSwgc3RvcmFnZSwgbWFzaywgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0
eXBlbmFtZSBTdG9yYWdlVHlwZSwgdHlwZW5hbWUgTWFza1R5cGU+CkBAIC0xNTkzLDIwICsxNTMx
LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIGFsbG9jYXRpb25TaXplIGNhbiBiZSBhbGlhc2Vk
IHdpdGggYW55IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJZiBpdCdzIG5vdCBhbGlhc2VkIHRo
ZW4gaXQKICAgICAvLyB3b24ndCBiZSBjbG9iYmVyZWQuCi0gICAgdm9pZCBlbWl0QWxsb2NhdGVW
YXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNl
LCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0
Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0
KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpKSwg
Ik1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwotICAgICAg
ICAKLSAgICAgICAgdW5zaWduZWQgc3RlcFNoaWZ0ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpz
aXplU3RlcCk7Ci0gICAgICAgIAotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoTWFya2VkU3Bh
Y2U6OnNpemVTdGVwIC0gMSksIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
IHVyc2hpZnQzMihUcnVzdGVkSW1tMzIoc3RlcFNoaWZ0KSwgc2NyYXRjaEdQUjEpOwotICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVzdGVkSW1t
MzIoTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHN1YnNwYWNlLmFsbG9jYXRvckZvclNpemVTdGVwKCkgLSAxKSwgc2Ny
YXRjaEdQUjIpOwotICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRj
aEdQUjEsIHRpbWVzUHRyKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIAotICAgICAgICBlbWl0
QWxsb2NhdGUocmVzdWx0R1BSLCBudWxscHRyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNs
b3dQYXRoKTsKLSAgICB9CisgICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJl
ZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlv
blNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYg
c2xvd1BhdGgpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5h
bWUgU3RydWN0dXJlVHlwZT4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxs
KFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJl
ZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIs
IEp1bXBMaXN0JiBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
bGxvY2F0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpJVEFsbG9jYXRv
ciB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgQ29uc3RhbnQsCisgICAgICAg
IFZhcmlhYmxlCisgICAgfTsKKyAgICAKKyAgICBKSVRBbGxvY2F0b3IoKSB7IH0KKyAgICAKKyAg
ICBzdGF0aWMgSklUQWxsb2NhdG9yIGNvbnN0YW50KEFsbG9jYXRvciBhbGxvY2F0b3IpCisgICAg
eworICAgICAgICBKSVRBbGxvY2F0b3IgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
Q29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpJVEFsbG9jYXRvciB2
YXJpYWJsZSgpCisgICAgeworICAgICAgICBKSVRBbGxvY2F0b3IgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gVmFyaWFibGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKSVRBbGxvY2F0b3ImIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAg
ICAgICYmIG1fYWxsb2NhdG9yID09IG90aGVyLm1fYWxsb2NhdG9yOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgSklUQWxsb2NhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
IT0gSklUQWxsb2NhdG9yKCk7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQorICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZCA9PSBDb25zdGFudDsgfQorICAgIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZCA9PSBWYXJpYWJsZTsgfQorICAgIAorICAgIEFsbG9jYXRvciBhbGxvY2F0b3IoKSBj
b25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNDb25zdGFudCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fYWxsb2NhdG9yOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgS2luZCBt
X2tpbmQgeyBDb25zdGFudCB9OworICAgIEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc5LDIyICs3OSwyMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1f
dm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNw
YWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZXR1cm5WYWx1ZUdQUjsKICAgICBSZWdpc3RlcklEIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIGFsbG9jYXRvclJlZyk7Ci0gICAg
aWYgKGFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoSnVtcCgpKTsKLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwotICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFN0b3JlQ2Vs
bChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOworICAgIGlmICgh
YWxsb2NhdG9yKQorICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgIGVsc2UgeworICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKKyAgICAgICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwor
ICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdFN0b3Jl
Q2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTg1Niw5ICs4NTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhjYWxsZWVSZWcsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUp
KSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZS
YXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmFyZURhdGFSZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsK
KyAgICBsb2FkMzIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
YXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBz
dHJ1Y3R1cmVSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2Nh
dG9yUmVnKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvclJlZywg
VHJ1c3RlZEltbTMyKEFsbG9jYXRvcigpLm9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1Q
dHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKQEAgLTg2OCw3ICs4Njks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBudWxscHRyLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0
dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcs
IHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwog
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04MSwyMiArODEsMjMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+
KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwo
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcpOwotICAgIGlmIChh
bGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7Ci0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAg
ICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBhbGxvY2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgaWYgKCFhbGxvY2F0
b3IpCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgZWxzZSB7CisgICAgICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRy
KG51bGxwdHIpOworICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChh
bGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVy
Zmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAgICBlbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwor
ICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTc2Niw5ICs3
NjcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhjYWxsZWVSZWcsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgp
KSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFy
ZURhdGFSZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxs
b2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJl
ZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVS
ZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIGFsbG9jYXRvclJlZywgVHJ1c3RlZElt
bTMyKEFsbG9jYXRvcigpLm9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihjYWNoZWRGdW5jdGlv
biwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9
IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxs
OjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKQEAgLTc3OCw3ICs3NzksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBh
dXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVz
dWx0UmVnLCBudWxscHRyLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBt
YXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVy
ZVJlZywgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKICAgICBsb2FkUHRyKEFkZHJl
c3Moc2NyYXRjaFJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2NyYXRjaFJl
Zyk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24g
MjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWdu
ZWQgQnV0dGVyZmx5OjpvcHRpbWEKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
VW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9t
QmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZt
LCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6
ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdI
ZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0u
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51
bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogYmFz
ZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2
bSwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAg
ICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAt
MTY1LDcgKzE2NSw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkK
ICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hl
YWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXpl
ID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbmV3U2l6ZSwg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIW5l
d0Jhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2Jh
Ymx5IHNob3VsZG4ndCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJp
ZGVUaGluZ3MoVk0mCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUs
IG1fY2FsbGVlLmdldCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
clN5bWJvbCwgZ2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0g
ICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBl
ZEFyZ3VtZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwobWFwcGVkQXJndW1lbnRzU2l6ZSgp
LCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgdm9pZCogYmFj
a2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5r
aW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIG1hcHBlZEFyZ3VtZW50c1NpemUoKSwgbnVsbHB0
ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIGJvb2wqIG92ZXJyaWRlcyA9
IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVkQXJndW1lbnRz
LnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0
aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmluaXRNb2RpZmllCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNj
cmlwdG9yKTsKIAogICAgIGlmIChhcmdzTGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQqIGJhY2tpbmdT
dG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rlc2Ny
aXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4
PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwor
ICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1f
bW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIGJvb2wqIG1vZGlmaWVkQXJndW1lbnRz
ID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgICAgIG1fbW9kaWZpZWRB
cmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwgdGhpcywgbW9kaWZpZWRBcmd1bWVudHMpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcmdzTGVuZ3RoOyBpLS07KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2
b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25W
aXJ0dWFsKGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOworICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBhbGxvY2F0aW9uU2l6ZSwgbnVsbHB0ciwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFkYXRhKSB7
CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3Au
Y29tKQogICoKQEAgLTgxLDcgKzgxLDEwIEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7
CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29u
dGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2
b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25W
aXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAg
ICAgICAgICB2bSwKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGlu
ZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLAor
ICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVy
bk51bGwpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwg
MCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC05OCw3ICsxMDEsMTAgQEAgSlNBcnJheSogSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbmRleEJpYXMgPSAwOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1
cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXpl
KGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KHZlY3Rvckxlbmd0aCkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwKKyAgICAgICAg
ICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1
ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLAorICAgICAgICAgICAgZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRP
ZkxpbmVTdG9yYWdlKTsKQEAgLTM2OCw3ICszNzQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRD
b3VudFNsb3dDYXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsK
ICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNp
cmVkQ2FwYWNpdHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAg
ICAgICAgIHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVy
bk51bGwpOwogICAgICAgICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjI3Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0yMzgsNiArMjM4LDcgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYg
dgogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENv
bnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2ZWN0b3JMZW5ndGhIaW50KTsKICAgICAg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbCgKKyAgICAgICAgICAgIHZtLAogICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksCiAgICAgICAgICAgICBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIXRlbXApCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lv
biAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAgICAgICBz
aXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAgaWYgKHNp
emUpIHsKLSAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OlJldHVybk51bGwpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICAgICAgaWYgKCF0ZW1wKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMjcyNzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNDUsMTQgKzE0NSwxNSBAQCBDb21wbGV0ZVN1YnNwYWNlKiBKU0NlbGw6
OnN1YnNwYWNlRm9yKFZNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQUxXQVlTX0lOTElORSB2b2lk
KiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKIHsKKyAgICBWTSYgdm0gPSAqaGVhcC52bSgpOwogICAgIEFTU0VSVChkZWZlcnJhbENv
bnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAg
QVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZU5vblZpcnR1
YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgIEpTQ2VsbCogcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4odm0pLT5hbGxvY2F0ZU5v
blZpcnR1YWwodm0sIHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKICAgICBp
ZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsICYmICFy
ZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9O
KQotICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLSAgICBo
ZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6OmluZm8oKSk7CisgICAgQVNT
RVJUKCF2bS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKyAgICB2bS5zZXRJbml0aWFsaXppbmdP
YmplY3RDbGFzcyhUOjppbmZvKCkpOwogI2VuZGlmCiAgICAgcmVzdWx0LT5jbGVhclN0cnVjdHVy
ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNSw3ICszMzUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBlbnF1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSkKK0pTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKQogICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV92bSh2bSkKICAgICAsIG1fbWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRj
aGVkKSkpCkBAIC0zNTMsNiArMzUzLDcgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0
KFZNJiB2bSwgUwogICAgICwgbV90ZW1wbGF0ZVJlZ2lzdHJ5KHZtKQogICAgICwgbV9ydW50aW1l
RmxhZ3MoKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUpCisgICAgLCBtX3RocmVhZExvY2FsQ2FjaGUodGhyZWFkTG9jYWxDYWNoZSA/IFdURk1v
dmUodGhyZWFkTG9jYWxDYWNoZSkgOiB2bS5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZSkKIHsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAgcHVibGlj
OgogICAgIGNvbnN0IFJ1bnRpbWVGbGFncyYgcnVudGltZUZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9ydW50aW1lRmxhZ3M7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4
cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9i
YWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSog
PSAwLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApAQCAtODkzLDYgKzg5Myw4IEBA
IHB1YmxpYzoKICAgICBKU1dyYXBwZXJNYXAqIHdyYXBwZXJNYXAoKSBjb25zdCB7IHJldHVybiBt
X3dyYXBwZXJNYXAuZ2V0KCk7IH0KICAgICB2b2lkIHNldFdyYXBwZXJNYXAoSlNXcmFwcGVyTWFw
KiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAjZW5kaWYKKyAgICAKKyAgICBUaHJlYWRM
b2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1cm4gKm1fdGhyZWFkTG9j
YWxDYWNoZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEdsb2JhbFByb3BlcnR5
SW5mbyB7CkBAIC05MjQsNiArOTI2LDggQEAgcHJpdmF0ZToKICNpZiBKU0NfT0JKQ19BUElfRU5B
QkxFRAogICAgIFJldGFpblB0cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsKICNlbmRpZgor
ICAgIAorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3RocmVhZExvY2FsQ2FjaGU7CiB9
OwogCiBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01h
cmtlci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRM
b2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2lu
Y2x1ZGUgPHRocmVhZD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xNDUsNyArMTQ2
LDkgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKIAogICAgIG1fdm0tPnNldExhc3RT
dGFja1RvcCh0aHJlYWQuc2F2ZWRMYXN0U3RhY2tUb3AoKSk7CiAgICAgQVNTRVJUKHRocmVhZC5z
dGFjaygpLmNvbnRhaW5zKG1fdm0tPmxhc3RTdGFja1RvcCgpKSk7Ci0KKyAgICAKKyAgICBtX3Zt
LT5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZS0+aW5zdGFsbCgqbV92bSk7CisgICAgCiAgICAgbV92
bS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIyNzI3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjM2LDYgKzIzNiw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZUFzeW5jSXRlcmF0
aW9uID0gZmEKICAgICB2KGJvb2wsIGR1bXBTaXplQ2xhc3NlcywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgdXNlQnVtcEFsbG9jYXRvciwgdHJ1ZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCBzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycywg
dHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB0cmFkZURlc3RydWN0b3JCbG9j
a3MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZWFnZXJseVVwZGF0ZVRv
cENhbGxGcmFtZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2ws
IHVzZU9TUkVudHJ5VG9ERkcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJl
dmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1h
dGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBBTFdBWVNfSU5MSU5FIEpTQXJy
YXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKICAgICBib29sIGNyZWF0ZVVuaW5pdGlhbGl6
ZWQgPSBnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwot
ICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
ZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAg
IHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwodm0sIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSw2ICsxMjEsNyBAQAogI2luY2x1ZGUgIlN0
cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
VGVzdFJ1bm5lclV0aWxzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIK
ICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKQEAgLTMwNiw2ICszMDcsOSBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgdXBkYXRlU29mdFJlc2VydmVk
Wm9uZVNpemUoT3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSk7CiAgICAgc2V0TGFzdFN0
YWNrVG9wKHN0YWNrLm9yaWdpbigpKTsKIAorICAgIGRlZmF1bHRUaHJlYWRMb2NhbENhY2hlID0g
VGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKGhlYXApOworICAgIGRlZmF1bHRUaHJlYWRMb2NhbENh
Y2hlLT5pbnN0YWxsKCp0aGlzKTsKKwogICAgIC8vIE5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVw
IGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodGhpcyk7
CiAgICAgQXRvbWljU3RyaW5nVGFibGUqIGV4aXN0aW5nRW50cnlBdG9taWNTdHJpbmdUYWJsZSA9
IFRocmVhZDo6Y3VycmVudCgpLnNldEN1cnJlbnRBdG9taWNTdHJpbmdUYWJsZShtX2F0b21pY1N0
cmluZ1RhYmxlKTsKQEAgLTM4Myw3ICszODcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAjZW5kaWYKICAgICAKICAgICBHaWdhY2FnZTo6YWRkUHJpbWl0aXZl
RGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJsZWRDYWxsYmFjaywgdGhpcyk7
Ci0KKyAgICAKICAgICBoZWFwLm5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAgIAogICAgIExM
SW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucygqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRl
ICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgi
CiAjaW5jbHVkZSAiVk1UcmFwcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKICNp
bmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRl
IDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY1Niw2ICs2NTcsMTEgQEAgcHVibGlj
OgogCiAgICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxs
cHRyIH07CiAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRl
ZE9iamVjdHM7CisgICAgCisjaWYgIUVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVGhyZWFkTG9j
YWxDYWNoZTo6RGF0YSogdGhyZWFkTG9jYWxDYWNoZURhdGE7CisjZW5kaWYKKyAgICBSZWZQdHI8
VGhyZWFkTG9jYWxDYWNoZT4gZGVmYXVsdFRocmVhZExvY2FsQ2FjaGU7CiAKICAgICBMb2NhbFRp
bWVPZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAyMjcyNzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpc2FsbG93Vk1SZWVudHJ5
LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIK
KyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KQEAgLTQw
LDYgKzQxLDcgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAg
IDogbV92bSh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKKyAgICBn
bG9iYWxPYmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtKTsKICAgICBBU1NFUlQo
IURpc2FsbG93Vk1SZWVudHJ5Ojppc0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFT
U0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAg
IGlmICghdm0uZW50cnlTY29wZSkgewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTgtMDEt
MjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBKU0MgR0Mgc2hv
dWxkIHN1cHBvcnQgVExDcyAodGhyZWFkIGxvY2FsIGNhY2hlcykKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTU1OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JpdG1hcC5oOiBKdXN0IGZpeGlu
ZyBhIGNvbXBpbGUgZXJyb3IuCisKIDIwMTgtMDEtMTkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXgganNjLW9ubHkgYnVpbGQKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jp
dG1hcC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVk
ZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxz
dHJpbmcuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331959</attachid>
            <date>2018-01-22 13:46:30 -0800</date>
            <delta_ts>2018-01-22 13:54:17 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>180386</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMCBA
QAorMjAxOC0wMS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBHQyBzaG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwgY2FjaGVzKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlz
IGEgYmlnIHN0ZXAgdG93YXJkcyBvYmplY3QgZGlzdGFuY2luZyBieSBzaXRlIG9yaWdpbi4gVGhp
cyBwYXRjaCBpbXBsZW1lbnRzIFRMQ3MsIG9yCisgICAgICAgIHRocmVhZC1sb2NhbCBjYWNoZXMs
IHdoaWNoIGFsbG93IGVhY2ggdGhyZWFkIHRvIGFsbG9jYXRlIGZyb20gaXRzIG93biBmcmVlIGxp
c3RzLiBJdCBhbHNvCisgICAgICAgIG1lYW5zIHRoYXQgYW55IGdpdmVuIHRocmVhZCBjYW4gY29u
dGV4dC1zd2l0Y2ggVExDcy4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGRvIHNlcGFyYXRlCisgICAg
ICAgIGFsbG9jYXRpb24gZm9yIHNlcGFyYXRlIHNpdGUgb3JpZ2lucy4gRXZlbnR1YWxseSwgb25j
ZSB3ZSByZXNoYXBlIGhvdyBNYXJrZWRCbG9jayBsb29rcywgdGhpcworICAgICAgICB3aWxsIGFs
bG93IHVzIHRvIGhhdmUgYSBoYXJkIGRpc3RhbmNpbmcgY29uc3RyYWludCBiZXR3ZWVuIG9iamVj
dHMgZnJvbSBkaWZmZXJlbnQgb3JpZ2lucy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBk
ZWZpbml0ZSBzbG93LWRvd24gb24gR0MtaGVhdnkgYmVuY2htYXJrcywgYnV0IGJ5IGEgc21hbGwg
bWFyZ2luLCBhbmQgb25seSBvbgorICAgICAgICB1bnVzdWFsbHkgaGVhdnkgdGVzdHMuIEZvciBl
eGFtcGxlLCBib3llciBhbmQgc3BsYXkgYXJlIGJvdGggMyUgcmVncmVzc2VkLCBidXQgdGhlIE9j
dGFuZQorICAgICAgICBnZW9tZWFuIGlzIGp1c3QgZmluZS4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNocG9p
bnRTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1p
dHNTdGFjayk6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXApOgorICAgICAgICAqIGIzL0Iz
U3RhY2ttYXBWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjphcHBl
bmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVl
Lmg6CisgICAgICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpkdW1wIGNvbnN0KToKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5oOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlND
OjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAg
ICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6Y2xlYXIpOgorICAgICAgICAqIGJ5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEFsbG9jYXRlSlNDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YWxsb2NhdGVIZWFwQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmFsbG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YWxsb2NhdG9yRm9yU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgorICAgICAg
ICAqIGhlYXAvQWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6
Y2VsbFNpemUgY29uc3QpOgorICAgICAgICAqIGhlYXAvQWxsb2NhdG9yLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFsbG9jYXRv
cjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvcj09IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKiBoZWFw
L0FsbG9jYXRvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6YWxs
b2NhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OkJsb2NrRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OmZpbmRCbG9ja0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9y
eTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6cHJlcGFy
ZUZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9j
YXRpbmdGb3JHb29kKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZW5kTWFya2luZyk6CisgICAg
ICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpT
Qzo6QmxvY2tEaXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nh
c2UpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoKKyAgICAgICAg
KEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmNlbGxLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OmFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0
b3J5OjpmcmVlTGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0
b3J5OjpvZmZzZXRPZkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tE
aXJlY3RvcnlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVM
aXN0ZWRDZWxsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3Bw
OgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjpDb21wbGV0ZVN1YnNwYWNlKToKKyAg
ICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpT
Qzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNw
YWNlOjphbGxvY2F0b3JGb3JTbG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6
YWxsb2NhdGVTbG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93KToKKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuaDoKKyAgICAgICAgKEpT
Qzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlND
OjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBo
ZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAgICogaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oOgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAg
ICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZExvY2FsQ2FjaGVMYXlvdXQpOgorICAgICAg
ICAqIGhlYXAvSXNvQ2VsbFNldC5oOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOgor
ICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFs
bG9jYXRlKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbCk6
CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0
b3IpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cmVzZXQpOgorICAgICAgICAoSlND
OjpMb2NhbEFsbG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TG9jYWxB
bGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cHJlcGFy
ZUZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9j
YXRpbmdGb3JHb29kKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0
KToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxl
Y3RpbmcpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbik6CisgICAg
ICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6
TG9jYWxBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlND
OjpMb2NhbEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVh
cC9Mb2NhbEFsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0
T2ZDZWxsU2l6ZSk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICog
aGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzdG9wQWxs
b2NhdGluZ0Zvckdvb2QpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAg
KiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6Cisg
ICAgICAgICogaGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKToKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAo
SlNDOjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJl
YWRMb2NhbENhY2hlOjpkZXN0cm95RGF0YSk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2Fj
aGU6Omluc3RhbGxTbG93KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFs
bERhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KToK
KyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcik6CisgICAgICAgICog
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2Nh
bENhY2hlOjpvZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpv
ZmZzZXRPZkZpcnN0QWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpnZXRJbXBs
KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6
VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2Fj
aGU6OmFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnRyeUdldEFs
bG9jYXRvcik6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhyZWFk
TG9jYWxDYWNoZUxheW91dCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6
OmFsbG9jYXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZUxheW91dDo6
c25hcHNob3QpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3Rv
cnkpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKToKKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dm0pOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxv
Y2F0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxv
Y2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9j
YXRlVmFyaWFibGVTaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRl
cmZseUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0cnlDcmVhdGUpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGlu
Z3MpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlND
OjpIYXNoTWFwQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZXN0cmljdGVk
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29u
dGV4dCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6dGhyZWFkTG9jYWxDYWNoZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0xv
Y2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKToKKyAgICAgICAg
KiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oOgorICAgICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0Fy
cmF5KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2NvcGUu
Y3BwOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6CisKIDIwMTgt
MDEtMjAgIENhaW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0Nd
IE51bWJlclByb3RvdHlwZTo6ZXh0cmFjdFJhZGl4RnJvbUFyZ3MgaW5jb3JyZWN0bHkgY2FzdCBk
b3VibGUgdG8gaW50MzJfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC00NjYsNiArNDY2LDcgQEAgZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1
ZVJhbmdlLmNwcAogCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCitoZWFwL0FsbG9j
YXRvci5jcHAKIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCiBoZWFwL0NlbGxBdHRyaWJ1dGVzLmNw
cAogaGVhcC9DZWxsQ29udGFpbmVyLmNwcApAQCAtNTAwLDYgKzUwMSw3IEBAIGhlYXAvSXNvQ2Vs
bFNldC5jcHAKIGhlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNw
cAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCitoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAogaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCiBoZWFwL01hcmtTdGFjay5jcHAKIGhlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCkBAIC01MTgsNiArNTIwLDggQEAgaGVhcC9TdG9wSWZO
ZWNlc3NhcnlUaW1lci5jcHAKIGhlYXAvU3Vic3BhY2UuY3BwCiBoZWFwL1N5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3luY2hyb25vdXNuZXNzLmNwcAor
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAoraGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNw
cAogaGVhcC9WaXNpdFJhY2VLZXkuY3BwCiBoZWFwL1dlYWsuY3BwCiBoZWFwL1dlYWtCbG9jay5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSwxMyBAQAogCQkwRjcyNUNBQTFD
NTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NF
LmggKi87IH07CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3Rh
bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcy
NUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkw
Rjc0QjkzQjFGODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMg
LyogUHJvdG90eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU1
MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjAyMDBEMjYwQjAwMzhFMkNG
IC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2Nh
dG9ySW5saW5lcy5oICovOyB9OworCQkwRjc1QTA2MTIwMEQyNjE4MDAzOEUyQ0YgLyogTG9jYWxB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVBMDYyMjAwRDI2MUQw
MDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9y
SW5saW5lcy5oICovOyB9OworCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1
NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hl
TGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY3NUEwNjYyMDEzRTRGMTAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNjUyMDEzRTRFRjAwMzhF
MkNGIC8qIEpJVEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGlu
ZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAw
OEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdh
cmVKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMx
NUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0MTksNiArMjQyNiwxNyBAQAogCQkwRjcy
NUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0
aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBh
dGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNzVBMDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENh
Y2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNG
IC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRM
b2NhbENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBE
MjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExvY2FsQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhF
MkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBE
MjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjkx
NUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NDcsNiArNTQ2NSw3IEBACiAJCQkJMTQyOUQ5MkUwRUQyMkQ3
MDAwQjg5NjE5IC8qIEpJVC5oICovLAogCQkJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBK
SVRBZGRHZW5lcmF0b3IuY3BwICovLAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBK
SVRBZGRHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklU
QWxsb2NhdG9yLmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRo
bWV0aWMuY3BwICovLAogCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1l
dGljMzJfNjQuY3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRB
bmRHZW5lcmF0b3IuY3BwICovLApAQCAtNTU0MCw2ICs1NTU5LDE2IEBACiAJCTE0MkUzMTJBMTM0
RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8s
CisJCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywK
KwkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAor
CQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJ
CTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywK
KwkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8s
CisJCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywK
KwkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMu
aCAqLywKKwkJCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxh
eW91dC5jcHAgKi8sCisJCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8q
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0Ey
RkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCkBAIC04MDQ4LDYgKzgwNzcsNyBAQAogCQkJCTBG
MkFDNTcxMUU4RUU0NTQwMDAxRUUzRiAvKiBBaXJGb3JtVGFibGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdDMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MjEzLDYgKzgyNDMsNyBAQAogCQkJCTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAv
KiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjc1QTA2NDIwMEQyNjI4MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8q
IEIzU3RhY2ttYXBWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAw
NDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFD
REFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTgzODIsNiArODQxMyw3IEBACiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0Fy
Z3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODEyMUFCM0Q4QkUwMEJC
QjhFOCAvKiBERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJERDgxNDFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyMjE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhN
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZH
QXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUx
NUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjYy
LDYgKzg2OTQsNyBAQAogCQkJCUZFQTBDNDAzMUNERDdEMUQwMDQ4MTk5MSAvKiBGdW5jdGlvbldo
aXRlbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVB
QTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjAy
MDBEMjYwQjAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NE
ZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtODc0Niw2ICs4Nzc5LDcgQEAKIAkJ
CQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3OTFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJl
Y3RFdmFsRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjIyMDBEMjYxRDAw
MzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkY5MkI5
MUZENzZGRkYwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCRjkyQkExRkQ3NzAwNDAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVy
cmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTMxLDYgKzg5NjUsNyBAQAogCQkJCUUzM0Y1
MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFBy
b21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3
QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjc1QTA1RTIwMEQyNUY2MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9t
aXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBG
MTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBpbiBIZWFkZXJzICovLApAQCAt
OTQzMCw2ICs5NDY1LDcgQEAKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0lt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkU3RDMzMTcxMzVDRjQwMEQxODA3QSAvKiBXZWFr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFGIC8q
IFdlYWtNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjYyMDEzRTRG
MTAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMzJCQzcx
RkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkz
QUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNiArMTI3NywxMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAg
ICAgIGFyZyA9IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CisgICAg
ICAgICAgICAgICAgVG1wIGRzdFRtcCA9IG1fY29kZS5uZXdUbXAodmFsdWUudmFsdWUoKS0+cmVz
dWx0QmFuaygpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKHZh
bHVlLnZhbHVlKCktPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBkc3RUbXApOwor
ICAgICAgICAgICAgICAgIGFyZyA9IGRzdFRtcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKICAg
ICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIHN0YWNr
bWFwLT5lYXJseUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHJl
dmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBAIGJvb2wgUGF0Y2hw
b2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3Rh
Y2tBcmd1bWVudDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcldp
dGhDbG9iYmVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6Okxh
dGVSZWdpc3RlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw2ICsxMTAs
OSBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgICAgICBj
YXNlIFZhbHVlUmVwOjpDb25zdGFudDoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2U7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXJXaXRoQ2xvYmJlcjoKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2VEZWY7
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRl
UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyOCw2ICsxMzEsMTAgQEAgdm9pZCBTdGFja21hcFNwZWNpYWw6
OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgLy8gYmUgYWJsZSB0byByZWNvdmVyIHRoZSBz
dGFja21hcCB2YWx1ZS4gU28sIGZvcmNlIExhdGVDb2xkVXNlIHRvIHByZXNlcnZlIHRoZQogICAg
ICAgICAgICAgLy8gb3JpZ2luYWwgc3RhY2ttYXAgdmFsdWUgYWNyb3NzIHRoZSBTcGVjaWFsIG9w
ZXJhdGlvbi4KICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgb3B0aW9u
YWxEZWZBcmdXaWR0aCAmJiAqb3B0aW9uYWxEZWZBcmdXaWR0aCA8IGNoaWxkLnZhbHVlKCktPnJl
c3VsdFdpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcm9sZSBjYW4gb25seSBiZSBz
b21lIGtpbmQgb2YgZGVmIGlmIHdlIGRpZCBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwgd2hpY2gg
aXMKKyAgICAgICAgICAgICAgICAvLyBvbmx5IGFsbG93ZWQgZm9yIHBhdGNocG9pbnRzLiBQYXRj
aHBvaW50cyBkb24ndCB1c2UgdGhlIGRlZkFyZ1dpZHRoIGZlYXR1cmUuCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIUFyZzo6aXNBbnlEZWYocm9sZSkpOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKICAgICAgICAgICAg
ICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0y
NDUsNiArMjUyLDcgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQQog
ICAgICAgICAvLyBXZSBhbHJlYWR5IHZlcmlmaWVkIGJ5IGlzQXJnVmFsaWRGb3JWYWx1ZSgpLgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Cisg
ICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBhcmcuaXNUbXAoKTsKICAg
ICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMs
NiArNTMsMTEgQEAgdm9pZCBTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVnaXN0ZXIoVgogICAg
IGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7
CiB9CiAKK3ZvaWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIo
VmFsdWUqIHZhbHVlKQoreworICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXIpKTsKK30KKwogdm9pZCBTdGFja21hcFZhbHVl
OjpzZXRDb25zdHJhaW5lZENoaWxkKHVuc2lnbmVkIGluZGV4LCBjb25zdCBDb25zdHJhaW5lZFZh
bHVlJiBjb25zdHJhaW5lZFZhbHVlKQogewogICAgIGNoaWxkKGluZGV4KSA9IGNvbnN0cmFpbmVk
VmFsdWUudmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFZhbHVlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDcgKzk5LDggQEAgcHVibGlj
OgogICAgIC8vIFRoaXMgaXMgYSBoZWxwZXIgZm9yIHNvbWV0aGluZyB5b3UgbWlnaHQgZG8gYSBs
b3Qgb2Y6IGFwcGVuZCBhIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGNvbnN0cmFpbmVkCiAgICAgLy8g
dG8gU29tZVJlZ2lzdGVyLgogICAgIHZvaWQgYXBwZW5kU29tZVJlZ2lzdGVyKFZhbHVlKik7Ci0K
KyAgICB2b2lkIGFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKFZhbHVlKik7CisgICAgCiAg
ICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsg
fQogCiAgICAgLy8gU3RhY2ttYXBzIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoYXQgdGhlIG9wZXJh
dGlvbiBtYXkgY2xvYmJlciBzb21lIHJlZ2lzdGVycy4gQ2xvYmJlcmluZyBhIHJlZ2lzdGVyCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzMiwyMSArNDMyLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElE
QVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IFZvaWQpCiAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFp
bnQgPT0gVmFsdWVSZXA6Oldhcm1BbnksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPmFzPFBhdGNocG9p
bnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpT
b21lRWFybHlSZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVn
aXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICp2
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwQ29uc3RyYWludCh2YWx1ZSwgQ29uc3RyYWlu
ZWRWYWx1ZSh2YWx1ZSwgdmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3Ry
YWludCksIENvbnN0cmFpbnRSb2xlOjpEZWYpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CkBAIC01NzEsMTYgKzU1OCwyNCBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6V2FybUFueToKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToK
LSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKKyAgICAgICAgICAgIFZBTElEQVRFKHJv
bGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXJXaXRoQ2xvYmJlcjoKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJv
bGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAgICAgICAgIFZB
TElEQVRFKGNvbnRleHQtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKSwgKCJBdCAiLCAqY29udGV4dCkp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJl
Z2lzdGVyOgogICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6RGVm
LCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpM
YXRlUmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkua2luZCgpID09IFZhbHVl
UmVwOjpMYXRlUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25z
dHJhaW50Um9sZTo6VXNlLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAg
ICAgICAgaWYgKHZhbHVlLnJlcCgpLnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAgICAgVkFM
SURBVEUoaXNJbnQodmFsdWUudmFsdWUoKS0+dHlwZSgpKSwgKCJBdCAiLCAqY29udGV4dCwgIjog
IiwgdmFsdWUpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAg
dm9pZCBWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvKFJlZ2lzdAogICAgIGNhc2UgQ29sZEFu
eToKICAgICBjYXNlIExhdGVDb2xkQW55OgogICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgIGNh
c2UgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBTb21lRWFybHlSZWdpc3RlcjoK
ICAgICBjYXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm47CkBAIC03MSw2ICs3Miw3IEBAIHZv
aWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIENvbGRBbnk6
CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICBjYXNl
IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIExhdGVSZWdpc3RlcjoKQEAgLTE3NSw2ICsxNzcsOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2Ji
ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAg
ICBvdXQucHJpbnQoIlNvbWVFYXJseVJlZ2lzdGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMjI3MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1LDYgKzY1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBj
b3VsZCBiZSBhCiAgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJl
ciEKICAgICAgICAgU29tZVJlZ2lzdGVyLAorICAgICAgICAKKyAgICAgICAgLy8gQXMgYW4gaW5w
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJl
Z2lzdGVyIGJ1dCB0aGF0IHRoaXMKKyAgICAgICAgLy8gcmVnaXN0ZXIgaXMgdGhlbiBjb2JiZXJl
ZCB3aXRoIGdhcmJhZ2UuIFRoaXMgb25seSB3b3JrcyBmb3IgcGF0Y2hwb2ludHMuCisgICAgICAg
IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyLAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rl
ciwgYnV0IGltcGxpZXMKICAgICAgICAgLy8gdGhhdCB0aGUgZGVmIGhhcHBlbnMgYmVmb3JlIGFu
eSBvZiB0aGUgZWZmZWN0cyBvZiB0aGUgc3RhY2ttYXAuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IK
QEAgLTEwNyw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWVSZXAoS2luZCBraW5kKQogICAg
ICAgICA6IG1fa2luZChraW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFu
eSB8fCBraW5kID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNv
bWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJU
KGtpbmQgPT0gV2FybUFueSB8fCBraW5kID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFu
eSB8fCBraW5kID09IFNvbWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVSZWdpc3RlcldpdGhDbG9i
YmVyIHx8IGtpbmQgPT0gU29tZUVhcmx5UmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBW
YWx1ZVJlcCByZWcoUmVnIHJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NTUsMTUgKzk1
NSw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7
Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9yIGFsbG9j
YXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdT
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoIWFsbG9jYXRvcikgewotICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlz
IGNhc2Ugd291bGQgc3VjayEKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5qdW1wKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7Ci0g
ICAgICAgICAgICAgICAgaml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSLCBhbGxvY2F0b3IsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3Ip
LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw4ICs0Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5saW5lQ2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpCi0gICAgICAgIDogbV9hbGxvY2F0b3IoMCkKLSAgICAgICAgLCBtX2lubGluZUNh
cGFjaXR5KDApCisgICAgICAgIDogbV9pbmxpbmVDYXBhY2l0eSgwKQogICAgIHsKICAgICB9CiAK
QEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAg
ICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxsb2Nh
dG9yKCk7CiAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1faW5saW5lQ2Fw
YWNpdHkgPSAwOwogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwpAQCAtNzcsNyArNzYsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291
bnQoVk0mLCBKU09iamVjdCogcHJvdG90eXBlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBtX2Fs
bG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0
ZWQgY29kZS4KKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1h
a2UgdGhpbmdzIGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAgICAgdW5zaWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQogCiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGV4ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSgpKSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEZpbmFs
T2JqZWN0VHlwZSk7Ci0gICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAg
ICAgICBtX2FsbG9jYXRvciA9IEFsbG9jYXRvcigpOwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkg
PSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05
OSwxMSArOTksMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQog
ICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBh
Y2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcik7CisgICAgQWxsb2NhdG9yIGFsbG9j
YXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGFrZSBhZHZh
bnRhZ2Ugb2YgZXh0cmEgaW5saW5lIGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFz
cy4KICAgICBpZiAoYWxsb2NhdG9yKSB7Ci0gICAgICAgIHNpemVfdCBzbG9wID0gKGFsbG9jYXRv
ci0+Y2VsbFNpemUoKSAtIGFsbG9jYXRpb25TaXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pOworICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3IuY2VsbFNpemUodm0uaGVh
cCkgLSBhbGxvY2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAg
ICAgICAgaW5saW5lQ2FwYWNpdHkgKz0gc2xvcDsKICAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5
ID4gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgIGlubGlu
ZUNhcGFjaXR5ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKQEAgLTExMyw3
ICsxMTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAKICAg
ICBpZiAoaXNQb2x5UHJvdG8pIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzUG9seVBy
b3RvKCkpOwotICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2Nh
dG9yID0gQWxsb2NhdG9yKCk7CiAgICAgICAgIGV4ZWN1dGFibGUtPnNldENhY2hlZFBvbHlQcm90
b1N0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXhl
Y3V0YWJsZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEz
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAKICAgICBpZiAoc2l6ZSkgewot
ICAgICAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBt
X2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBt
X2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgeworICAg
ICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmFkZFB0cigKICAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+
KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQdHIp
IHsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0
Y2hHUFIpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2Jq
ZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2NhdG9y
KSB7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2sodmVj
dG9yTGVuZ3RoKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxv
Y2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQ
UiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQ
UiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAg
bV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwpAQCAtNDIwOCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1ha2VSb3BlKE5vZAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tE
aXJlY3RvcnkqIGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9q
aXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0
ZUpTQ2VsbChyZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JWYWx1ZSA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQ
UiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwg
VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAg
IAogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyArODM4MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qg
c2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAg
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBpZiAo
IWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQwOCw5ICs4NDA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gy
LmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAg
ICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIp
OwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5lbWl0QWxs
b2NhdGUoc2NyYXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBz
bG93UGF0aCk7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBKSVRBbGxvY2F0
b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1Bh
dGgpOwogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgIAogICAgIGZvciAocHRy
ZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7
IG9mZnNldCArPSBzaXplb2Yodm9pZCopKQpAQCAtODQyOCw3ICs4NDI0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0gb2xk
U2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2Rl
LT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1
ZSkpOwogICAgIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1Np
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnBy
ZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ1Niw4ICs4NDUyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOwotICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgYWxsb2Nh
dG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5lbWl0
QWxsb2NhdGUoc2NyYXRjaEdQUjEsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgCiAgICAgbV9qaXQuYWRk
UHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIApAQCAtMTE0NDEsMTQgKzExNDM2LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE4KICAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkp
LCByYXJlRGF0YUdQUik7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBh
bGxvY2F0b3JHUFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAg
IGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1hc2sg
PSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBu
dWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNrLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBK
SVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0
ZXJmbHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAogICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVE
YXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBh
Y2l0eSgpKSwgaW5saW5lQ2FwYWNpdHlHUFIpOwpAQCAtMTE0NzQsMTQgKzExNDY5LDE3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIAogICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Cisg
ICAgQWxsb2NhdG9yIGFsbG9jYXRvclZhbHVlID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
Km1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMy
KDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBh
bGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7Ci0gICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBtX2ppdC5t
dXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIGlmICghYWxsb2NhdG9yVmFsdWUpCisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFz
ayA9IFRydXN0ZWRJbW0zMigwKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BS
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwg
c2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5tdXRh
dG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIH0KIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRH
UFIsIHN0cnVjdHVyZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTQxLDcg
KzMxNDEsNyBAQCBwdWJsaWM6CiAgICAgLy8gQWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVj
aWZpYyBzaXplLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1
Y3R1cmVUeXBlIGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlND
ZWxsKAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
LCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBh
bGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAg
ICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2Nh
dG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTMxNTAsNyArMzE1
MCw3IEBAIHB1YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNp
ZmljIHNpemUuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1l
IFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFn
ZVR5cGUgYW5kLCBNYXNrVHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVy
ZSwKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAg
ICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNzI3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFj
cm8pIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAotICAgIG1hY3JvKENv
bXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9m
ZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwK
KyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0
ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihBbGxvY2F0
b3IpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8o
SlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMs
IDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI3MjczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01ODU3LDEwICs1ODU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93
UGF0aCk7CiAgICAgICAgIAotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
b2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwor
ICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFs
bG9jYXRvciksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CisgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHZtKCkuc3RyaW5nU3Ry
dWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZVB0
cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQpAQCAtOTg4NSw3ICs5
ODg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleGluZ0hlYWRlclNp
emUgPSAwOwpAQCAtOTk0NCw3ICs5OTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
IExWYWx1ZSBtYXNrID0gY29tcHV0ZUJ1dHRlcmZseUluZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgp
OwogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVj
dCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY2VsbEFsbG9jYXRvciks
IHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2VsbEFsbG9jYXRvci5vZmZzZXQoKSksIHN0
cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CiAKICAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmpl
Y3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9
IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOwpAQCAtMTA5MzEsOCArMTA5MzEsOCBA
QCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
c2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7Ci0gICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwo
bV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xvd1BhdGgpOworICAgICAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENl
bGwobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzbG93UGF0aCk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAg
ICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwpAQCAtMTE5NjQsMTYgKzExOTY0LDI4IEBAIHByaXZhdGU6CiAKICAgICBMVmFs
dWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxs
cHRyOwotICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJbnRQdHIoKSkKLSAgICAgICAgICAgIGFj
dHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+
YXNJbnRQdHIoKSk7CisgICAgICAgIEpJVEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3I7CisgICAg
ICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0
b3IgPSBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KEFsbG9jYXRvcihhbGxvY2F0b3ItPmFzSW50MzIo
KSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRBbGxv
Y2F0b3I6OnZhcmlhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgeworICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgeworICAgICAg
ICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IuYWxsb2NhdG9yKCkpIHsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBoYXZlQWxsb2NhdG9yID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShoYXZlQWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNsb3dQYXRoKTsK
KyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhoYXZlQWxsb2NhdG9yLCBsYXN0TmV4dCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZWl0aGVy
IHdlIGtub3cgdGhhdCB0aGUgYWxsb2NhdG9yIGlzIG51bGwgb3Igd2UgZG9uJ3Qga25vdyB3aGF0
IHRoZQogICAgICAgICAgICAgLy8gYWxsb2NhdG9yIGlzLiBJbiBlaXRoZXIgY2FzZSwgd2UgbmVl
ZCB0aGUgbnVsbCBjaGVjay4KICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhhdmVBbGxvY2F0b3Ig
PSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoaGF2ZUFsbG9jYXRvcik7Ci0gICAgICAgICAgICBt
X291dC5icmFuY2goYWxsb2NhdG9yLCB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xv
d1BhdGgpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291
dC5ub3RFcXVhbChhbGxvY2F0b3IsIG1fb3V0LmNvbnN0SW50MzIoQWxsb2NhdG9yKCkub2Zmc2V0
KCkpKSwKKyAgICAgICAgICAgICAgICB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xv
d1BhdGgpKTsKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhdmVBbGxvY2F0b3IsIGxhc3RO
ZXh0KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTExOTgzLDcgKzExOTk1LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291
dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
LnRlcm1pbmFsID0gdHJ1ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVy
KGFsbG9jYXRvcik7CisgICAgICAgIGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFudCgpKQor
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9i
YmVyKGFsbG9jYXRvcik7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cysrOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OlNv
bWVFYXJseVJlZ2lzdGVyOwogICAgICAgICAKQEAgLTExOTk0LDYgKzEyMDA5LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QganVtcFRvU2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgR1BSUmVnIGFsbG9jYXRvckdQUjsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2Nh
dG9yLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFy
YW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRp
b24gcGF0aCBiZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8v
IGFsbG9jYXRpb24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1h
Y2hpbmUgY29kZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hh
dCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBj
b21waWxlcgpAQCAtMTIwMDEsNyArMTIwMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IC8vIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBv
cHRpbWl6ZWQgcGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhl
IGNvbXBpbGVyIHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1
YWxBbGxvY2F0b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9TdWNjZXNzOwpAQCAtMTIwOTMsOCArMTIxMTQsOCBAQCBwcml2YXRlOgogICAg
IExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0
dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4KQEAgLTEyMTEzLDE2ICsxMjEzNCwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxl
dGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBh
Y3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxT
dWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVy
bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0
dWFsQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVh
bEFsbG9jYXRvci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIx
NDEsNyArMTIxNjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQubG9hZFB0cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1f
b3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2Vf
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1
YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxNTYsOCArMTIxNzcs
NyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAg
ICAgICAgIExWYWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVl
IGJ1dHRlcmZseSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xv
d1BhdGgpCiAgICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6
ZSgKLSAgICAgICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93
UGF0aCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJm
bHlJbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTY1LDE1ICsxMjE4NSwx
NCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAg
ICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUo
Ci0gICAgICAgICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1Bh
dGgpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4g
YWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0
Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdl
IGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAg
ICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxODUs
NyArMTIyMDQsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291
dC5pbnRQdHJaZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50
UHRyWmVybywgbV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3Vuc2lnbmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0
KS0+Y2VsbFNpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgSGVhcDsKK2NsYXNzIFZN
OworCitjbGFzcyBBbGxvY2F0b3IgeworcHVibGljOgorICAgIEFsbG9jYXRvcigpIHsgfQorICAg
IAorICAgIGV4cGxpY2l0IEFsbG9jYXRvcih1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9v
ZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCogYWxsb2NhdGUoVk0m
LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgY29uc3Q7CisgICAg
CisgICAgLy8gVGhpcyB2ZXJzaW9uIGNhbGxzIEZhaWx1cmVGdW5jIGlmIHdlIGhhdmUgYSBudWxs
IGFsbG9jYXRvciBvciBpZiB0aGUgVExDIGhhc24ndCBiZWVuIHJlc2l6ZWQKKyAgICAvLyB0byBp
bmNsdWRlIHRoaXMgYWxsb2NhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZhaWx1cmVGdW5j
PgorICAgIHZvaWQqIHRyeUFsbG9jYXRlKFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUsIGNvbnN0IEZhaWx1cmVGdW5jJikgY29uc3Q7CisgICAgCisgICAgdW5z
aWduZWQgY2VsbFNpemUoSGVhcCYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9m
ZnNldCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFsbG9jYXRvcigpOyB9CisgICAgCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlOVF9NQVggfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0FsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoVk0m
IHZtLCBHQ0RlZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1v
ZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcih2bSwg
bV9vZmZzZXQpLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGYWlsdXJlRnVuYz4KK3ZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoVk0mIHZtLCBHQ0Rl
ZmVycmFsQ29udGV4dCogY29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUsIGNvbnN0
IEZhaWx1cmVGdW5jJiBmYWlsdXJlRnVuYykgY29uc3QKK3sKKyAgICB2b2lkKiByZXN1bHQ7Cisg
ICAgVGhyZWFkTG9jYWxDYWNoZTo6dHJ5R2V0QWxsb2NhdG9yKAorICAgICAgICB2bSwgbV9vZmZz
ZXQsCisgICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAg
ICAgcmVzdWx0ID0gYWxsb2NhdG9yLmFsbG9jYXRlKGNvbnRleHQsIG1vZGUpOworICAgICAgICB9
LAorICAgICAgICBbJl0gKCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFpbHVyZUZ1bmMoKTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5j
cHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2Nr
RGlyZWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAKLSNpbmNsdWRlICJBbGxv
Y2F0aW5nU2NvcGUuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0zOSwxNSAr
MzgsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFk
ZURlc3RydWN0b3JCbG9ja3MgPSB0cnVlOwotCiBCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3Rv
cnkoSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9mcmVlTGlzdChjZWxsU2l6
ZSkKLSAgICAsIG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQot
ICAgICwgbV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQorICAgIDog
bV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9oZWFw
KGhlYXApCiB7CisgICAgaGVhcC0+dGhyZWFkTG9jYWxDYWNoZUxheW91dCgpLmFsbG9jYXRlT2Zm
c2V0KHRoaXMpOwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpzZXRTdWJzcGFjZShTdWJzcGFj
ZSogc3Vic3BhY2UpCkBAIC04MSwxNDMgKzc2LDE0IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJs
b2NrRGlyZWN0b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1cnNvcl07CiB9
CiAKLXZvaWQgQmxvY2tEaXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCgpCi17Ci0gICAgaWYg
KG1fY3VycmVudEJsb2NrKQotICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVM
aXN0KCk7Ci0gICAgCi0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotICAgIG1fY3VycmVudEJsb2Nr
ID0gbnVsbHB0cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlV2l0aG91
dENvbGxlY3RpbmcoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRC
bG9ja0ZvckFsbG9jYXRpb24oKQogewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBB
U1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgCi0gICAgZm9yICg7
OykgewotICAgICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVt
cHR5IHwgbV9lbXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgICAg
ICBpZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAKLSAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5v
TG9ja2luZ05lY2Vzc2FyeSwgbV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0KLSAgICAgICAg
aWYgKHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4obV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vy
c29yXSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAo
T3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQotICAgICAgICAm
JiAodHJhZGVEZXN0cnVjdG9yQmxvY2tzIHx8ICFuZWVkc0Rlc3RydWN0aW9uKCkpKSB7Ci0gICAg
ICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fc3Vic3BhY2UtPmZpbmRFbXB0
eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+YWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMg
Y2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAotICAgICAg
ICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1h
eSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAgICAgICAgICAgLy8gYW5kIGVt
cHR5IHNldCBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21E
aXJlY3RvcnkoKTsKLSAgICAgICAgICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4oTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2spCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJ
bihibG9jayk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6
SGFuZGxlKiBibG9jaykKLXsKLSAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2st
PmlzRnJlZUxpc3RlZCgpKTsKLSAgICAKLSAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwot
ICAgIAotICAgIC8vIEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVs
bCBibG9jay4gTWFya2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAotICAgIC8vIHRoYXQg
YWxnb3JpdGhtIGlzIHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAg
IGlmIChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7Ci0gICAgICAgIEFTU0VSVChi
bG9jay0+aXNGcmVlTGlzdGVkKCkpOwotICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5
QWxsb2NhdGVkKCk7Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAg
ICAgICAgQVNTRVJUKCFpc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKLSAgICAg
ICAgQVNTRVJUKCFpc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBi
bG9jaykpOworICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1w
dHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgaWYg
KG1fYWxsb2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIAot
ICAgIHZvaWQqIHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFtdICgpIC0+
IEhlYXBDZWxsKiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0pOwotICAgIHNldElzRWRlbihO
b0xvY2tpbmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKLSAgICBtYXJrZWRTcGFj
ZSgpLmRpZEFsbG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0
aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAg
aWYgKCFPcHRpb25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGFsbG9jYXRpb25Db3VudCA9IDA7Ci0gICAgaWYgKCFh
bGxvY2F0aW9uQ291bnQpIHsKLSAgICAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkgewot
ICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKLSAgICAgICAgICAgICAgICBkZWZlcnJh
bENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1faGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpz
bG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsK
LX0KLQotdm9pZCogQmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAg
ICBBU1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
LSAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBB
U1NFUlQoIW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxv
Y2F0ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKLSAgICAKLSAgICBkaWRDb25zdW1lRnJl
ZUxpc3QoKTsKLSAgICAKLSAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoKm1faGVhcCk7
Ci0KLSAgICBtX2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0
KTsKICAgICAKLSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxi
YWNrIGFuZCBub3cgdGhpcyBkaXJlY3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkK
LSAgICAvLyBoYXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBh
IGNhbGxiYWNrIGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWSht
X2N1cnJlbnRCbG9jaykpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQs
IGZhaWx1cmVNb2RlKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhv
dXRDb2xsZWN0aW5nKCk7Ci0gICAgCi0gICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sg
PSB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoZmFp
bHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgYWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9
IGFsbG9jYXRlSW4oYmxvY2spOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwg
bV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7CisgICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2Nh
dGlvbkN1cnNvcl07CiB9CiAKIHN0YXRpYyBzaXplX3QgYmxvY2tIZWFkZXJTaXplKCkKQEAgLTMx
MywyNCArMTc5LDE5IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nKCkKIHsK
ICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxv
Y2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nIVxuIik7Ci0gICAgQVNTRVJUKCFtX2xhc3RBY3Rp
dmVCbG9jayk7Ci0gICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICBBU1NFUlQobV9m
cmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwotICAg
IG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7Ci0gICAgbV9jdXJyZW50QmxvY2sg
PSAwOwotICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JF
YWNoKAorICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAg
ICAgIGFsbG9jYXRvci0+c3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQg
QmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKLSAgICBtX2xhc3RBY3Rp
dmVCbG9jayA9IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotICAgIG1f
ZnJlZUxpc3QuY2xlYXIoKTsKLQorICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAg
ICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2Nh
dG9yLT5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgICAgICB9KTsKKyAgICAKICAgICBtX2Fs
bG9jYXRpb25DdXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1fdW5zd2Vw
dEN1cnNvciA9IDA7CkBAIC0zNDQsNiArMjA1LDIxIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnBy
ZXBhcmVGb3JBbGxvY2F0aW8KICAgICB9CiB9CiAKK3ZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BB
bGxvY2F0aW5nRm9yR29vZCgpCit7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJh
d1BvaW50ZXIodGhpcyksICI6IEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZ0Zvckdvb2Qh
XG4iKTsKKyAgICAKKyAgICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0g
KExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+c3Rv
cEFsbG9jYXRpbmdGb3JHb29kKCk7CisgICAgICAgIH0pOworCisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgIHdoaWxlICghbV9sb2NhbEFsbG9j
YXRvcnMuaXNFbXB0eSgpKQorICAgICAgICBtX2xvY2FsQWxsb2NhdG9ycy5iZWdpbigpLT5yZW1v
dmUoKTsKK30KKwogdm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQog
ewogICAgIGZvckVhY2hCbG9jaygKQEAgLTM1NCwxMiArMjMwLDEwIEBAIHZvaWQgQmxvY2tEaXJl
Y3Rvcnk6Omxhc3RDaGFuY2VUb0ZpbmFsaXoKIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cmVzdW1l
QWxsb2NhdGluZygpCiB7Ci0gICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlz
dCk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKLSAgICBtX2xhc3RB
Y3RpdmVCbG9jayA9IG51bGxwdHI7CisgICAgbV9sb2NhbEFsbG9jYXRvcnMuZm9yRWFjaCgKKyAg
ICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxv
Y2F0b3ItPnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQmxvY2tE
aXJlY3Rvcnk6OmJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCkKQEAgLTM3OSw3ICsyNTMs
NyBAQCB2b2lkIEJsb2NrRGlyZWN0b3J5OjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQg
a2luZCBvZiBjb2xsZWN0aW9uIGl0IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29k
ZWQgaW4gdGhlIG1fbWFya2luZ1hZWgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgaWYgKCF0
cmFkZURlc3RydWN0b3JCbG9ja3MgJiYgbmVlZHNEZXN0cnVjdGlvbigpKSB7CisgICAgaWYgKCFP
cHRpb25zOjp0cmFkZURlc3RydWN0b3JCbG9ja3MoKSAmJiBuZWVkc0Rlc3RydWN0aW9uKCkpIHsK
ICAgICAgICAgQVNTRVJUKG1fZW1wdHkuaXNFbXB0eSgpKTsKICAgICAgICAgbV9jYW5BbGxvY2F0
ZUJ1dE5vdEVtcHR5ID0gbV9saXZlICYgfm1fbWFya2luZ1JldGlyZWQ7CiAgICAgfSBlbHNlIHsK
QEAgLTUxMiw1ICszODYsMTUgQEAgTWFya2VkU3BhY2UmIEJsb2NrRGlyZWN0b3J5OjptYXJrZWRT
cGFjZQogICAgIHJldHVybiBtX3N1YnNwYWNlLT5zcGFjZSgpOwogfQogCitib29sIEJsb2NrRGly
ZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkKK3sKKyAgICBib29s
IHJlc3VsdCA9IGZhbHNlOworICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAg
IFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0IHw9
IGFsbG9jYXRvci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOworICAgICAgICB9KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw4ICsyNiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBbGxvY2F0
aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDZWxs
QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTG9jYWxBbGxv
Y2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAgLTQxLDYgKzQzLDcgQEAgY2xh
c3MgSGVhcDsKIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNk
ZWZpbmUgRk9SX0VBQ0hfQkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXAogICAgIG1hY3JvKGxp
dmUsIExpdmUpIC8qIFRoZSBzZXQgb2YgYmxvY2sgaW5kaWNlcyB0aGF0IGhhdmUgYWN0dWFsIGJs
b2Nrcy4gKi9cCkBAIC03NiwxNCArNzksMTIgQEAgY2xhc3MgQmxvY2tEaXJlY3RvcnkgewogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIHB1YmxpYzoKLSAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ2VsbFNpemUoKTsKLQogICAgIEJsb2NrRGlyZWN0b3J5KEhlYXAqLCBzaXplX3QgY2Vs
bFNpemUpOwogICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsKICAgICB2b2lkIGxhc3RD
aGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAg
IHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHN0b3BBbGxvY2F0aW5nRm9yR29vZCgp
OwogICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZygpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nRm9y
RnVsbENvbGxlY3Rpb24oKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKQEAgLTk3LDEwICs5OCw5
IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3Ry
dWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0
cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVy
biBtX2hlYXA7IH0KIAotICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJn
ZXQpIGNvbnN0OworICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQp
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29u
c3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwpAQCAtMTU3LDI0ICsxNTcsMjAgQEAgcHVi
bGljOgogICAgIFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7
IH0KICAgICBNYXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKICAgICAKLSAgICBjb25z
dCBGcmVlTGlzdCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CisgICAg
QWxsb2NhdG9yIGFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIEFsbG9jYXRvcihtX3RsY09mZnNl
dCk7IH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lk
IGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCiBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3MgSXNv
Q2VsbFNldDsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CisgICAgZnJpZW5kIGNsYXNz
IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSk7Ci0gICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICB2
b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7Ci0gICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFya2Vk
QmxvY2s6OkhhbmRsZSopOwotICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSopOwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdD
RGVmZXJyYWxDb250ZXh0Kik7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9y
QWxsb2NhdGlvbigpOwogICAgIAotICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CisgICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIAogICAgIFZlY3RvcjxNYXJr
ZWRCbG9jazo6SGFuZGxlKj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVC
bG9ja0luZGljZXM7CkBAIC0xOTMsMTAgKzE4OSw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1f
ZW1wdHlDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEg
Y2FuZGlkYXRlIGZvciBlbXB0eSBhbGxvY2F0aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2Nr
cykuCiAgICAgc2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBu
ZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgog
ICAgIAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrOwotICAgIE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrOwotCi0gICAgTG9jayBtX2xvY2s7CiAg
ICAgdW5zaWduZWQgbV9jZWxsU2l6ZTsKICAgICBDZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7
CiAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNl
cy4KQEAgLTIwNiwxNiArMTk4LDEwIEBAIHByaXZhdGU6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1f
bmV4dERpcmVjdG9yeSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGly
ZWN0b3J5SW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0
RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OworICAgIAorICAg
IExvY2sgbV9sb2NhbEFsbG9jYXRvcnNMb2NrOworICAgIHNpemVfdCBtX3RsY09mZnNldDsKKyAg
ICBTZW50aW5lbExpbmtlZExpc3Q8TG9jYWxBbGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2Rl
PExvY2FsQWxsb2NhdG9yPj4gbV9sb2NhbEFsbG9jYXRvcnM7CiB9OwogCi1pbmxpbmUgcHRyZGlm
Zl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkKLXsKLSAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEJsb2NrRGlyZWN0b3J5LCBtX2ZyZWVMaXN0KTsKLX0KLQotaW5saW5lIHB0
cmRpZmZfdCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCi17Ci0gICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJl
Y3RvcnlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwyMCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIGJvb2wgQmxvY2tE
aXJlY3Rvcnk6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewot
ICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRh
cmdldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0
ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCi17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAg
ICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZN
KGhlYXAoKS0+dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwq
PihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKLSAgICAg
ICAgfSk7Ci19Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBCbG9j
a0RpcmVjdG9yeTo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAg
bV9saXZlLmZvckVhY2hTZXRCaXQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
MTEgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIK
IAorI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJBbGxvY2F0
b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9ySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9u
U2NvcGUuaCIKICNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRM
b2NhbENhY2hlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzgsNDAgKzQyLDM4
IEBAIENvbXBsZXRlU3Vic3BhY2U6OkNvbXBsZXRlU3Vic3BhY2UoQ1N0cmkKICAgICA6IFN1YnNw
YWNlKG5hbWUsIGhlYXApCiB7CiAgICAgaW5pdGlhbGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6
ZUNsYXNzZXM7IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxs
cHRyOwogfQogCiBDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAK
LUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNp
emUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKIHsKICAgICBy
ZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBtb2RlKTsKIH0KIAotdm9pZCogQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQq
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKIHsKLSAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNp
emUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3Zv
aWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChWTSYgdm0sIHNpemVfdCBz
aXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cykpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0gICAgZWxzZQotICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJl
TW9kZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CisgICAgcmV0dXJuIGFsbG9jYXRvci50cnlBbGxvY2F0ZSgKKyAgICAgICAgdm0sIGRl
ZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUsCisgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKKyAgICAgICAgfSk7CiB9CiAKLUJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQorQWxsb2NhdG9yIENvbXBsZXRlU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0g
TWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFz
cyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKICAgICBpZiAo
IXNpemVDbGFzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBBbGxv
Y2F0b3IoKTsKICAgICAKICAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0
IGl0J3MgT0sgZm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQK
ICAgICAvLyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhh
ZG4ndCBiZWVuIHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0KQEAgLTgyLDcgKzg0LDcg
QEAgQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgIC8vIHRoYXQg
YW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxv
Y2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAogICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZl
IAogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5kaXJlY3RvcnlMb2NrKCkpOwot
ICAgIGlmIChCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtpbmRleF0pCisgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNp
emVTdGVwW2luZGV4XSkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKIAogICAgIGlmIChmYWxz
ZSkKQEAgLTk4LDcgKzEwMCw3IEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2EKICAgICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2lu
ZGV4XSAhPSBzaXplQ2xhc3MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX2FsbG9j
YXRvckZvclNpemVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbV9hbGxvY2F0b3JG
b3JTaXplU3RlcFtpbmRleF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOwogICAgICAgICAKICAg
ICAgICAgaWYgKCFpbmRleC0tKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDcsMjMgKzEwOSwy
MyBAQCBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhCiAgICAgbV9hbGln
bmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9maXJzdERpcmVjdG9yeSA9IGRpcmVjdG9yeTsK
LSAgICByZXR1cm4gZGlyZWN0b3J5OworICAgIHJldHVybiBkaXJlY3RvcnktPmFsbG9jYXRvcigp
OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUs
IEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhWTSYg
dm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5
QWxsb2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgdm9pZCogcmVzdWx0ID0g
dHJ5QWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQpOwogICAgIGlmIChmYWls
dXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBDb21wbGV0
ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQpCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNs
b3coVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCkKIHsKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAg
IHNhbml0aXplU3RhY2tGb3JWTSgmdm0pOwogICAgIAotICAgIGlmIChCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFs
bG9jYXRvcikpCi0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICBpZiAoQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1
cmVBbGxvY2F0b3IpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKHZtLCBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgCiAg
ICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKICAgICAgICAg
JiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKQEAgLTEzMiwxNSArMTM0LDE1
IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdygKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgbV9zcGFjZS5oZWFw
KCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICB2bS5o
ZWFwLmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAKICAg
ICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4o
c2l6ZSk7Ci0gICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9u
Ojp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBMYXJnZUFsbG9j
YXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSh2bS5oZWFwLCBz
aXplLCB0aGlzKTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIAogICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9u
KTsKLSAgICBtX3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgdm0uaGVhcC5k
aWRBbGxvY2F0ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAgICAK
ICAgICBtX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3
MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSwzMSArMzksMzEgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZJ
WE1FOiBDdXJyZW50bHkgc3Vic3BhY2VzIHNwZWFrIG9mIEJsb2NrRGlyZWN0b3JpZXMgYXMgImFs
bG9jYXRvcnMiLCBidXQgdGhhdCdzIHRlbXBvcmFyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92ZXJyaWRlOwotICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSk7
CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpIG92
ZXJyaWRlOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxs
b2NhdG9yRm9yTW9kZSk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwg
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJp
ZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKFZNJiwg
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAg
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6
ZVN0ZXApOyB9CiAgICAgCi0gICAgQmxvY2tEaXJlY3RvcnkqKiBhbGxvY2F0b3JGb3JTaXplU3Rl
cCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisgICAgQWxsb2NhdG9y
KiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVw
WzBdOyB9CiAKIHByaXZhdGU6Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvclNsb3co
c2l6ZV90KTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwogICAgIAog
ICAgIC8vIFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRp
b25zIGFuZCBhbGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVf
dCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwotICAgIHZvaWQq
IHRyeUFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgdm9pZCog
YWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KFZNJiwgc2l6ZV90LCBHQ0Rl
ZmVycmFsQ29udGV4dCopOwogICAgIAotICAgIHN0ZDo6YXJyYXk8QmxvY2tEaXJlY3RvcnkqLCBN
YXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAg
c3RkOjphcnJheTxBbGxvY2F0b3IsIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxv
Y2F0b3JGb3JTaXplU3RlcDsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJsb2NrRGlyZWN0
b3J5Pj4gbV9kaXJlY3RvcmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFs
bG9jYXRvckZvck1vZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgQWxsb2NhdG9yIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1v
ZGUgbW9kZSkKIHsKICAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsK
LSAgICAgICAgQmxvY2tEaXJlY3RvcnkqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
TWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBBbGxvY2F0b3Ig
cmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9J
bmRleChzaXplKV07CiAgICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICBjYXNlIEFsbG9j
YXRvckZvck1vZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcjoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdCk7CkBAIC03OCw3ICs3OCw3IEBAIEFMV0FZU19JTkxJTkUgQmxvY2tE
aXJlY3RvcnkqIENvbXBsZXRlU3UKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlQobW9kZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVB
bGxvY2F0b3IpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBbGxvY2F0b3IoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9GcmVlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Zy
ZWVMaXN0LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0ZyZWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgc3RydWN0IEZyZWVD
ZWxsIHsKIH07CiAKIGNsYXNzIEZyZWVMaXN0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShG
cmVlTGlzdCk7Ci0gICAgCiBwdWJsaWM6CiAgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUp
OwogICAgIH5GcmVlTGlzdCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NE
ZWZlcnJhbENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0RlZmVycmFsQ29udGV4dC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsy
OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0
b3J5OworY2xhc3MgTG9jYWxBbGxvY2F0b3I7CiAKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0IHsK
ICAgICBmcmllbmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7
CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogcHVibGljOgogICAgIGlubGluZSBH
Q0RlZmVycmFsQ29udGV4dChIZWFwJik7CiAgICAgaW5saW5lIH5HQ0RlZmVycmFsQ29udGV4dCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIyNzI3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAiU3RvcElmTmVjZXNzYXJ5VGltZXIuaCIKICNpbmNs
dWRlICJTd2VlcGluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgog
I2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0zMTIsNiArMzEzLDcgQEAgSGVhcDo6
SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhl
YXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkK
ICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRl
KCkpCisgICAgLCBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQoc3RkOjptYWtlX3VuaXF1ZTxUaHJl
YWRMb2NhbENhY2hlTGF5b3V0PigpKQogewogICAgIG1fd29ybGRTdGF0ZS5zdG9yZSgwKTsKIApA
QCAtNDQ2LDcgKzQ0OCw3IEBAIHZvaWQgSGVhcDo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogICAg
ICAgICBkYXRhTG9nKCI1ICIpOwogICAgIAogICAgIG1fYXJyYXlCdWZmZXJzLmxhc3RDaGFuY2VU
b0ZpbmFsaXplKCk7Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1f
b2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgbV9vYmplY3RTcGFjZS5s
YXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHJlbGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3Rz
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIyNzI3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNiArODQsNyBAQCBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFNwYWNlVGltZU11dGF0b3JT
Y2hlZHVsZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2Nv
cGU7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogY2xhc3MgVk07CiBjbGFzcyBXZWFr
R0NNYXBCYXNlOwogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKQEAgLTM3Miw2ICszNzMsOCBA
QCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aFNsb3RWaXNpdG9yKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0JiB0aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNo
ZUxheW91dDsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7
CkBAIC03MTQsNiArNzE3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBDdXJyZW50VGhyZWFkU3Rh
dGUqIG1fY3VycmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9OwogICAgIFdURjo6VGhyZWFkKiBt
X2N1cnJlbnRUaHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3MgT0sgaWYgdGhpcyBiZWNvbWVzIGEg
ZGFuZ2xpbmcgcG9pbnRlci4KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkTG9jYWxD
YWNoZUxheW91dD4gbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5oCShyZXZp
c2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbmN1cnJlbnRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvU2hhcmVk
VGFzay5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsy
NiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCiAK
KyNpbmNsdWRlICJBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorI2luY2x1
ZGUgIkxvY2FsQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSw2ICszOCw3IEBAIElzb1N1YnNw
YWNlOjpJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEgKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhl
YXApCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fZGlyZWN0b3J5KCZoZWFwLCBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKKyAgICAsIG1f
YWxsb2NhdG9yKG1fZGlyZWN0b3J5LmFsbG9jYXRvcigpKQogICAgICwgbV9pc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4o
KSkKIHsKICAgICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmdldCgpKTsKQEAgLTUwLDIwICs1NCwyMCBAQCBJc29TdWJzcGFjZTo6fklzb1N1YnNw
YWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Io
c2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0FsbG9jYXRvciBJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlIG1vZGUpCiB7CiAg
ICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgbW9kZSk7CiB9CiAKLXZvaWQq
IElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCog
SXNvU3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
IHsKLSAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwg
ZmFpbHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIGRl
ZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogfQogCi12b2lkKiBJc29TdWJzcGFjZTo6YWxs
b2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJz
cGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9k
ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Ci0gICAgdm9p
ZCogcmVzdWx0ID0gbV9kaXJlY3RvcnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJl
TW9kZSk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUodm0sIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI3Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsMTEgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CiAKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9y
KHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgQmxvY2tEaXJlY3Rvcnkq
IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7
CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JG
b3JNb2RlKTsKIAotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQq
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwpAQCAtNTYsMTQgKzU2LDE1IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBCbG9ja0RpcmVjdG9yeSBtX2RpcmVjdG9yeTsK
KyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKICAgICBTZW50
aW5lbExpbmtlZExpc3Q8SXNvQ2VsbFNldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8SXNvQ2VsbFNl
dD4+IG1fY2VsbFNldHM7CiB9OwogCi1pbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNl
OjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQor
aW5saW5lIEFsbG9jYXRvciBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
X3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChzaXplID09
IHRoaXMtPnNpemUoKSk7Ci0gICAgcmV0dXJuICZtX2RpcmVjdG9yeTsKKyAgICByZXR1cm4gbV9h
bGxvY2F0b3I7CiB9CiAKICNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENlbGxU
eXBlLCB0eXBlKSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhlYXBDZWxs
VHlwZSksIHNpemVvZih0eXBlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Mb2NhbEFsbG9jYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAi
QWxsb2NhdGluZ1Njb3BlLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgiCisj
aW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxBbGxvY2F0b3I6
OkxvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBtX2RpcmVj
dG9yeShkaXJlY3RvcnkpCisgICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkK
KyAgICAsIG1fZnJlZUxpc3QobV9jZWxsU2l6ZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKGRpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJlY3RvcnktPm1f
bG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKK30KKworTG9jYWxBbGxvY2F0b3I6OkxvY2Fs
QWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCisgICAgOiBtX2RpcmVjdG9yeShvdGhl
ci5tX2RpcmVjdG9yeSkKKyAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKKyAgICAs
IG1fZnJlZUxpc3QoV1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKKyAgICAsIG1fY3VycmVudEJs
b2NrKG90aGVyLm1fY3VycmVudEJsb2NrKQorICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIu
bV9sYXN0QWN0aXZlQmxvY2spCit7CisgICAgb3RoZXIucmVzZXQoKTsKKyAgICBpZiAob3RoZXIu
aXNPbkxpc3QoKSkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5
LT5tX2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAgICAgICBvdGhlci5yZW1vdmUoKTsKKyAgICAg
ICAgbV9kaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKKyAgICB9Cit9
CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKK3sKKyAgICBtX2ZyZWVMaXN0LmNsZWFy
KCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fbGFzdEFjdGl2ZUJsb2Nr
ID0gbnVsbHB0cjsKK30KKworTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCit7Cisg
ICAgaWYgKGlzT25MaXN0KCkpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2Rp
cmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICAgICAgcmVtb3ZlKCk7CisgICAg
fQorICAgIAorICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0IGhvbGRpbmcg
b250byBhbnkgbWVtb3J5LiBUaGlzIGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0aGUKKyAgICAv
LyBmb2xsb3dpbmcgdHdvIHVzZSBjYXNlczoKKyAgICAvLyAKKyAgICAvLyAtIEltbW9ydGFsIFRM
Qy4gVGhvc2UgZGVzdHJ1Y3QgYWZ0ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVjdGluZywgc28g
dGhleSBzaG91bGQgbm90IGhhdmUKKyAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGluIHRoZW0uCisg
ICAgLy8KKyAgICAvLyAtIFRMQyBvd25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBUTEMgZ2V0cyBk
ZXN0cm95ZWQgYWZ0ZXIgYSBHQyBmbGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQKKyAgICAvLyAg
IHRoYXQgaXQgaXMgbm90IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGls
bCBiZSBpbiBhIGZ1bGx5IHJlc2V0IHN0YXRlIGF0IHRoZQorICAgIC8vICAgdGltZSBvZiBkZXN0
cnVjdGlvbiBiZWNhdXNlIGZvciBpdCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVv
bmUgbXVzdCBoYXZlIGFsbG9jYXRlZAorICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2li
bGUgYmVjYXVzZSBpdCdzIHN1cHBvc2VkbHkgdW5yZWFjaGFibGUpLgorICAgIGJvb2wgb2sgPSB0
cnVlOworICAgIGlmICghbV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgICAg
ICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9y
IGhhcyBub24tZW1wdHkgZnJlZS1saXN0LlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAg
fQorICAgIGlmIChtX2N1cnJlbnRCbG9jaykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwg
UmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBjdXJyZW50
IGJsb2NrLlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2xhc3RB
Y3RpdmVCbG9jaykgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlz
KSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBsYXN0IGFjdGl2ZSBibG9jay5cbiIp
OworICAgICAgICBvayA9IGZhbHNlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChvayk7Cit9
CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKK3sKKyAgICBBU1NFUlQo
IW1fbGFzdEFjdGl2ZUJsb2NrKTsKKyAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAg
IEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVl
TGlzdCk7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKKyAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworfQorCit2b2lk
IExvY2FsQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKK3sKKyAgICBpZiAoIW1fbGFzdEFj
dGl2ZUJsb2NrKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVz
dW1lQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFj
dGl2ZUJsb2NrOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKK30KKwordm9pZCBM
b2NhbEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQoreworICAgIHJlc2V0KCk7Cit9
CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpCit7CisgICAg
c3RvcEFsbG9jYXRpbmcoKTsKKyAgICByZXNldCgpOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRv
cjo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIEhlYXAmIGhlYXAgPSAqbV9kaXJlY3Rv
cnktPm1faGVhcDsKKyAgICBBU1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4
dCk7CisKKyAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5n
KCkpOworICAgIGhlYXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7Cisg
ICAgCisgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgCisgICAgQWxsb2NhdGluZ1Njb3Bl
IGhlbHBpbmdIZWFwKGhlYXApOworCisgICAgaGVhcC5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVy
KGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgLy8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBH
QyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRC
bG9jay4gVGhpcyBvbmx5CisgICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3Rz
LCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlvbi4KKyAg
ICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUo
ZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0g
dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIAorICAgIGlmIChMSUtFTFkocmVz
dWx0ICE9IDApKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxvY2soKTsKKyAgICBp
ZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OkFzc2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBt
X2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxv
Y2spOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
TG9jYWxBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCit7CisgICAgaWYgKG1fY3VycmVu
dEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Cisg
ICAgCisgICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0
cjsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3Rp
bmcoKQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2VkIGZvciBy
ZWFsIG11bHRpLXRocmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0bworICAg
IC8vIGNvbWUgdXAgd2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRoYXQgcHJv
dG9jb2wgd291bGQgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKKyAgICAvLworICAgIC8vIC0g
VGhlIGJhc2ljIGNhc2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRyeWluZyB0byBkbyBh
biBhbGxvY2F0aW9uQ3Vyc29yIHNlYXJjaCBvbiB0aGUKKyAgICAvLyAgIHNhbWUgYml0dmVjdG9y
LiBUaGF0IHByb2JhYmx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBsZWFzdC4KKyAgICAv
LworICAgIC8vIC0gVGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxvY2F0b3IgdHJpZ2dl
cmluZyBhIHN0ZWFsIGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkKKyAgICAvLyAgIHZp
YSBhIHNlYXJjaCBpbiB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxpc3QuIFdobyBrbm93
cyB3aGF0IGxvY2tzIHRoYXQgbmVlZHMuCisgICAgLy8gCisgICAgLy8gT25lIHdheSB0byBtYWtl
IHRoaXMgd29yayBpcyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sgdGhhdCBwcm90ZWN0
cyBhbGwgbXV0YXRvciBsb2NrCisgICAgLy8gYWxsb2NhdGlvbiBzbG93IHBhdGhzLiBUaGF0IHdv
dWxkIHByb2JhYmx5IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0IHdvdWxkIGNlcnRh
aW5seSBiZQorICAgIC8vIGZvciBmb3IgdXNpbmcgVExDIGFsbG9jYXRpb24gZnJvbSBKSVQgdGhy
ZWFkcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgx
NjM1CisgICAgCisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OworICAgIAorICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOworICAgIEFTU0VSVChtX2ZyZWVM
aXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9ja0ZvckFs
bG9jYXRpb24oKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChPcHRpb25zOjpzdGVhbEVt
cHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCisgICAgICAgICYmIChPcHRpb25zOjp0cmFk
ZURlc3RydWN0b3JCbG9ja3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVzdHJ1Y3Rpb24oKSkp
IHsKKyAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3Rvcnkt
Pm1fc3Vic3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChibG9jay0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpID09IG1fZGlyZWN0b3J5
LT5tX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkg
YXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUg
aXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRl
QnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGlt
ZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAg
ICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgcmV0dXJuIGFsbG9j
YXRlSW4oYmxvY2spOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFu
ZGxlKiBibG9jaykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJs
b2NrKQoreworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlz
dGVkKCkpOworICAgIAorICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7CisgICAgCisgICAg
Ly8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBN
YXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CisgICAgLy8gdGhhdCBhbGdvcml0aG0g
aXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCisgICAgaWYgKG1fZnJl
ZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0Zy
ZWVMaXN0ZWQoKSk7CisgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQo
KTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOworICAgICAgICBBU1NF
UlQoIW1fZGlyZWN0b3J5LT5pc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAg
ICAgICAgQVNTRVJUKCFtX2RpcmVjdG9yeS0+aXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9j
a2luZ05lY2Vzc2FyeSwgYmxvY2spKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIAorICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgCisgICAgdm9pZCogcmVzdWx0
ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfSk7CisgICAgbV9kaXJlY3RvcnktPnNldElzRWRlbihOb0xv
Y2tpbmdOZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKKyAgICBtX2RpcmVjdG9yeS0+
bWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25z
SWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAgICBpZiAo
IU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNvdW50ID0gMDsKKyAgICBpZiAoIWFsbG9j
YXRpb25Db3VudCkgeworICAgICAgICBpZiAoIW1fZGlyZWN0b3J5LT5tX2hlYXAtPmlzRGVmZXJy
ZWQoKSkgeworICAgICAgICAgICAgaWYgKGRlZmVycmFsQ29udGV4dCkKKyAgICAgICAgICAgICAg
ICBkZWZlcnJhbENvbnRleHQtPm1fc2hvdWxkR0MgPSB0cnVlOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5tX2hlYXAtPmNvbGxlY3ROb3coU3luYywgQ29s
bGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKythbGxvY2F0
aW9uQ291bnQgPj0gT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkpCisgICAgICAg
IGFsbG9jYXRpb25Db3VudCA9IDA7Cit9CisKK2Jvb2wgTG9jYWxBbGxvY2F0b3I6OmlzRnJlZUxp
c3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIC8vIFRoaXMgYWJvbWlu
YXRpb24gZXhpc3RzIHRvIGRldGVjdCB3aGVuIGFuIG9iamVjdCBpcyBpbiB0aGUgZGVhZC1idXQt
bm90LWRlc3RydWN0ZWQgc3RhdGUuCisgICAgLy8gVGhlcmVmb3JlLCBpdCdzIG5vdCBldmVuIGNs
ZWFyIHRoYXQgdGhpcyBuZWVkcyB0byBkbyBhbnl0aGluZyBiZXlvbmQgcmV0dXJuaW5nICJmYWxz
ZSIsIHNpbmNlCisgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25pbmcgdGhlIG9i
amVjdCBpcyBmcmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFueQorICAgIC8v
IG9iamVjdHMgdG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0YXRlLgorICAg
IC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2NTUKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250
YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0
b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsK
K2NsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworCitjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1Ymxp
YyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4geworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKExvY2FsQWxsb2NhdG9yKTsKKyAgICAKK3B1YmxpYzoKKyAgICBMb2NhbEFsbG9j
YXRvcihCbG9ja0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9y
JiYpOworICAgIH5Mb2NhbEFsbG9jYXRvcigpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKEdD
RGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQgc3Rv
cEFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgdm9p
ZCByZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgdm9pZCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsK
KyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKKyAgICAKKyAgICBib29sIGlzRnJlZUxp
c3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXQo
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJy
YWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lk
IGRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxl
Y3RpbmcoKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
KyAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCop
OworCisgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OworICAgIHVuc2lnbmVkIG1fY2Vs
bFNpemU7CisgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBt
X2xhc3RBY3RpdmVCbG9jayB7IG51bGxwdHIgfTsKK307CisKK2lubGluZSBwdHJkaWZmX3QgTG9j
YWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQoreworICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoTG9jYWxBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOworfQorCitpbmxpbmUgcHRyZGlmZl90
IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkKK3sKKyAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKExvY2FsQWxsb2NhdG9yLCBtX2NlbGxTaXplKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2Fs
QWxsb2NhdG9ySW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworQUxXQVlTX0lOTElORSB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1
cmVNb2RlKQoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0g
KCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShtX2RpcmVj
dG9yeS0+aGVhcCgpLT52bSgpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFw
Q2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOwor
ICAgICAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAyLDYgKzMwMiwxNiBAQCB2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZygpCiAg
ICAgICAgIH0pOwogfQogCit2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zvckdvb2Qo
KQoreworICAgIEFTU0VSVCghaXNJdGVyYXRpbmcoKSk7CisgICAgZm9yRWFjaERpcmVjdG9yeSgK
KyAgICAgICAgWyZdIChCbG9ja0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0
dXMgeworICAgICAgICAgICAgZGlyZWN0b3J5LnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOworICAg
ICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOwor
fQorCiB2b2lkIE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpCiB7CiAg
ICAgbV9sYXJnZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxlY3Rpb25CZWdpbiA9IG1fbGFyZ2VBbGxv
Y2F0aW9ucy5iZWdpbigpICsgbV9sYXJnZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rp
b247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlz
aW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgIAogICAgIEhlYXAq
IGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hlYXA7IH0KICAgICAKLSAgICB2b2lkIGxhc3RDaGFu
Y2VUb0ZpbmFsaXplKCk7IC8vIFlvdSBtdXN0IGNhbGwgc3RvcEFsbG9jYXRpbmcgYmVmb3JlIHlv
dSBjYWxsIHRoaXMuCisgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOyAvLyBNdXN0IGNh
bGwgc3RvcEFsbG9jYXRpbmdGb3JHb29kIGZpcnN0LgogICAgIHZvaWQgZnJlZU1lbW9yeSgpOwog
CiAgICAgc3RhdGljIHNpemVfdCBvcHRpbWFsU2l6ZUZvcihzaXplX3QpOwpAQCAtMTExLDYgKzEx
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygpOwogCiAgICAgdm9p
ZCBzdG9wQWxsb2NhdGluZygpOworICAgIHZvaWQgc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAg
ICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7IC8vIElmIHdlIGp1c3Qgc3RvcHBlZCBhbGxvY2F0
aW9uIGJ1dCB3ZSBkaWRuJ3QgZG8gYSBjb2xsZWN0aW9uLCB3ZSBuZWVkIHRvIHJlc3VtZSBhbGxv
Y2F0aW9uLgogICAgIAogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIyNzI3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2luZ0Nv
bnN0cmFpbnRTb2x2ZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAy
MjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiVmlzaXRSYWNlS2V5LmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgor
I2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQxLDYgKzQyLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNz
IEhlYXBDZWxsOwogY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRlcjsKIGNsYXNzIE1hcmtlZEJsb2Nr
OworY2xhc3MgTWFya2luZ0NvbnN0cmFpbnQ7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludFNvbHZl
cjsKIGNsYXNzIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBXZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZp
c2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBbGxvY2F0aW9uRmFp
bHVyZU1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JGb3JNb2RlLmgiCisjaW5jbHVkZSAiQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTU2LDggKzU3LDggQEAgcHVi
bGljOgogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0
Kik7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CiAKLSAgICB2aXJ0dWFsIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCBBbGxvY2F0b3IgYWxsb2NhdG9y
Rm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxs
b2NhdGUoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlKSA9IDA7CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKworI2luY2x1ZGUgIlRocmVhZExvY2FsQ2Fj
aGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworfQorCitUaHJl
YWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCisgICAgOiBtX2hlYXAo
aGVhcCkKK3sKKyAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKK30KKworVGhyZWFkTG9jYWxD
YWNoZTo6flRocmVhZExvY2FsQ2FjaGUoKQoreworICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Cit9
CisKK1RocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0
YSgpCit7CisgICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOwor
ICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJl
YWRMb2NhbENhY2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAgICAKKyAgICBEYXRhKiByZXN1bHQg
PSBzdGF0aWNfY2FzdDxEYXRhKj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxs
b2NhdG9yKSArIGxheW91dC5zaXplKSk7CisgICAgcmVzdWx0LT5zaXplID0gbGF5b3V0LnNpemU7
CisgICAgcmVzdWx0LT5jYWNoZSA9IHRoaXM7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsg
b2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAg
ICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZN
b3ZlKGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0
ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxB
bGxvY2F0b3IpKQorICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9j
YWxBbGxvY2F0b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9j
YXRvcildKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6
OmRlc3Ryb3lEYXRhKERhdGEqIGRhdGEpCit7CisgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsg
b2Zmc2V0IDwgZGF0YS0+c2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisg
ICAgICAgIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKKyAgICBm
YXN0RnJlZShkYXRhKTsKK30KKwordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhW
TSYgdm0pCit7CisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2VGbGFnLAor
ICAgICAgICBbXSAoKSB7CisgICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwg
ZGVzdHJ1Y3Rvcik7CisgICAgICAgIH0pOworI2VuZGlmCisgICAgCisgICAgcmVmKCk7CisgICAg
CisgICAgaWYgKFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSkpCisg
ICAgICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIAorICAgIGluc3RhbGxEYXRhKHZtLCBtX2Rh
dGEpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxEYXRhKFZNJiB2bSwgRGF0
YSogZGF0YSkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQorICAgIFVOVVNFRF9QQVJBTSh2
bSk7CisgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSwgZGF0YSk7CisjZWxz
ZQorICAgIHZtLnRocmVhZExvY2FsQ2FjaGVEYXRhID0gZGF0YTsKKyNlbmRpZgorfQorCitMb2Nh
bEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yU2xvdyhWTSYgdm0sIHNpemVf
dCBvZmZzZXQpCit7CisgICAgRGF0YSogb2xkRGF0YSA9IG1fZGF0YTsKKyAgICBtX2RhdGEgPSBh
bGxvY2F0ZURhdGEoKTsKKyAgICBkZXN0cm95RGF0YShvbGREYXRhKTsKKyAgICBpbnN0YWxsRGF0
YSh2bSwgbV9kYXRhKTsKKyAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPCBtX2RhdGEtPnNpemUp
OworICAgIHJldHVybiBhbGxvY2F0b3IoKm1fZGF0YSwgb2Zmc2V0KTsKK30KKwordm9pZCBUaHJl
YWRMb2NhbENhY2hlOjpkZXN0cnVjdG9yKHZvaWQqIGFyZykKK3sKKyAgICBpZiAoIWFyZykKKyAg
ICAgICAgcmV0dXJuOworICAgIERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oYXJnKTsK
KyAgICBkYXRhLT5jYWNoZS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsK
K2NsYXNzIFZNOworCitjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFRocmVhZExvY2FsQ2FjaGU+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShU
aHJlYWRMb2NhbENhY2hlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGNyZWF0ZShIZWFwJik7
CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflRocmVhZExvY2FsQ2FjaGUoKTsKKworICAg
IHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gZ2V0KFZNJik7CisgICAgCisgICAgLy8g
VGhpcyBpcyBkZXNpZ25lZCB0byBiZSBmYXN0IGVub3VnaCB0aGF0IHlvdSBjb3VsZCBldmVuIGNh
bGwgaXQgYmVmb3JlIGV2ZXJ5IGFsbG9jYXRpb24sIGJ5CisgICAgLy8gb3B0aW1pemluZyBmb3Ig
dGhlIGNhc2UgdGhhdCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlzIGFs
cmVhZHkgaW5zdGFsbGVkLiBUaGlzCisgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21hbGwg
bnVtYmVyIG9mIGNhY2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRjaCBj
b21iaW5lZAorICAgIC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZlIGNv
bnRleHQgc3dpdGNoZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4KKyAg
ICB2b2lkIGluc3RhbGwoVk0mKTsKKyAgICAKKyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFs
bG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFN1Y2Nlc3NGdW5jLCB0eXBlbmFtZSBGYWlsdXJlRnVuYz4KKyAgICBzdGF0aWMgdm9pZCB0cnlH
ZXRBbGxvY2F0b3IoVk0mLCBzaXplX3Qgb2Zmc2V0LCBjb25zdCBTdWNjZXNzRnVuYyYsIGNvbnN0
IEZhaWx1cmVGdW5jJik7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgc2l6ZSk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRmlyc3RBbGxvY2F0b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RGF0YSwgYWxsb2NhdG9yKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVk07
CisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZShIZWFwJik7CisgICAgCisgICAgc3RydWN0IERh
dGEgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgVGhyZWFkTG9jYWxDYWNoZSogY2Fj
aGU7CisgICAgICAgIExvY2FsQWxsb2NhdG9yIGFsbG9jYXRvclsxXTsKKyAgICB9OworCisgICAg
c3RhdGljIERhdGEqIGdldEltcGwoVk0mKTsKKyAgICAKKyAgICBEYXRhKiBhbGxvY2F0ZURhdGEo
KTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95RGF0YShEYXRhKik7CisgICAgc3RhdGljIExvY2Fs
QWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYgZGF0YSwgc2l6ZV90IG9mZnNldCk7CisKKyAgICB2
b2lkIGluc3RhbGxTbG93KFZNJik7CisgICAgc3RhdGljIHZvaWQgaW5zdGFsbERhdGEoVk0mLCBE
YXRhKik7CisgICAgCisgICAgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvclNsb3coVk0mLCBzaXpl
X3Qgb2Zmc2V0KTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdG9yKHZvaWQqKTsKKyAg
ICAKKyAgICAvLyBXaGVuIGluc3RhbGxlZCwgd2UgcmVmKCkgdGhlIGNhY2hlLiBVbmluc3RhbGxp
bmcgZGVyZWYoKXMgdGhlIGNhY2hlLiBUTFMgZGVzdHJ1Y3Rpb24gZGVyZWYoKXMKKyAgICAvLyB0
aGUgY2FjaGUuIFdoZW4gdGhlIGNhY2hlIGlzIGRlc3RydWN0ZWQsIGl0IG5lZWRzIHRvIHJldHVy
biBhbGwgb2YgaXRzIHN0YXRlIHRvIHRoZSBHQy4gSQorICAgIC8vIHRoaW5rIHRoYXQganVzdCBt
ZWFucyBzdG9wQWxsb2NhdGluZygpLCBidXQgd2l0aCBzb21lIHNlcmlvdXNseSBoZWF2eSBjYXZl
YXRzIGhhdmluZyB0byBkbworICAgIC8vIHdpdGggd2hlbiBpdCdzIHZhbGlkIHRvIG1ha2UgdGhh
dCBjYWxsLiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBSRUxFQVNFX0FTU0VSVCB0aGF0IHRoZSBj
YWNoZQorICAgIC8vIGlzIGVtcHR5IHdoZW4gd2UgZGVzdHJ1Y3QgaXQuIFRoaXMgaXMgY29ycmVj
dCBmb3IgY2FjaGVzIHRoYXQgYXJlIGtlcHQgbGl2ZSBieSBHQyBvYmplY3RzIGFuZAorICAgIC8v
IGl0J3MgY29ycmVjdCBmb3IgaW1tb3J0YWwgY2FjaGVzLgorICAgIEhlYXAmIG1faGVhcDsKKyAg
ICBEYXRhKiBtX2RhdGEgeyBudWxscHRyIH07CisKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQor
ICAgIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRsc0tleSA9IFdURl9HQ19UTENfS0VZOwor
I2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRo
cmVhZExvY2FsQ2FjaGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBUaHJlYWRMb2Nh
bENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlOjpnZXRJbXBsKFZNJiB2bSkKK3sKKyNpZiBF
TkFCTEUoRkFTVF9UTFNfSklUKQorICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PERhdGEqPihfcHRocmVhZF9nZXRzcGVjaWZpY19kaXJlY3QodGxzS2V5KSk7Cisj
ZWxzZQorICAgIHJldHVybiB2bS50aHJlYWRMb2NhbENhY2hlRGF0YTsKKyNlbmRpZgorfQorCitp
bmxpbmUgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmdldChWTSYg
dm0pCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldEltcGwodm0pOwor
ICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gZGF0YS0+Y2FjaGU7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK2lubGluZSB2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGwoVk0mIHZt
KQoreworICAgIGlmIChnZXRJbXBsKHZtKSA9PSBtX2RhdGEpCisgICAgICAgIHJldHVybjsKKyAg
ICBpbnN0YWxsU2xvdyh2bSk7Cit9CisKK2lubGluZSBMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9j
YWxDYWNoZTo6YWxsb2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBUaHJlYWRM
b2NhbENhY2hlOjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKExJS0VMWShvZmZz
ZXQgPCBkYXRhLT5zaXplKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0
KTsKKyAgICByZXR1cm4gZGF0YS0+Y2FjaGUtPmFsbG9jYXRvclNsb3codm0sIG9mZnNldCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NGdW5jLCB0eXBlbmFtZSBGYWlsdXJlRnVuYz4K
K3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6dHJ5R2V0QWxsb2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9m
ZnNldCwgY29uc3QgU3VjY2Vzc0Z1bmMmIHN1Y2Nlc3NGdW5jLCBjb25zdCBGYWlsdXJlRnVuYyYg
ZmFpbHVyZUZ1bmMpCit7CisgICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogZGF0YSA9IGdldElt
cGwodm0pOworICAgIGlmIChMSUtFTFkob2Zmc2V0IDwgZGF0YS0+c2l6ZSkpCisgICAgICAgIHN1
Y2Nlc3NGdW5jKGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KSk7CisgICAgZWxzZQorICAgICAgICBm
YWlsdXJlRnVuYygpOworfQorCitpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2Fj
aGU6OmFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiAq
Yml0d2lzZV9jYXN0PExvY2FsQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PGNoYXIqPigmZGF0YS5h
bGxvY2F0b3JbMF0pICsgb2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVM
YXlvdXQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworI2luY2x1
ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0OjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0KCkKK3sKK30KKworVGhyZWFkTG9jYWxD
YWNoZUxheW91dDo6flRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKQoreworfQorCit2b2lkIFRocmVh
ZExvY2FsQ2FjaGVMYXlvdXQ6OmFsbG9jYXRlT2Zmc2V0KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3Rv
cnkpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIGRpcmVjdG9y
eS0+bV90bGNPZmZzZXQgPSBtX3NpemU7CisgICAgbV9zaXplICs9IHNpemVvZihMb2NhbEFsbG9j
YXRvcik7CisgICAgbV9kaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKK30KKworVGhyZWFk
TG9jYWxDYWNoZUxheW91dDo6U25hcHNob3QgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6c25hcHNo
b3QoKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBTbmFwc2hv
dCByZXN1bHQ7CisgICAgcmVzdWx0LnNpemUgPSBtX3NpemU7CisgICAgcmVzdWx0LmRpcmVjdG9y
aWVzID0gbV9kaXJlY3RvcmllczsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9ja0RpcmVj
dG9yeSogVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6ZGlyZWN0b3J5KHVuc2lnbmVkIG9mZnNldCkK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgcmV0dXJuIG1fZGly
ZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2Nh
bENhY2hlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZUxheW91dC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJsb2NrRGlyZWN0b3J5Owor
CisvLyBFYWNoIEhlYXAgaGFzIGEgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB0aGF0IGhlbHBzIHVz
IGZpZ3VyZSBvdXQgaG93IHRvIGFsbG9jYXRlIGEgVGhyZWFkTG9jYWxDYWNoZQorLy8gZm9yIHRo
YXQgSGVhcC4KKworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVGhyZWFkTG9jYWxDYWNoZUxheW91dCk7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dCgpOwor
ICAgIH5UaHJlYWRMb2NhbENhY2hlTGF5b3V0KCk7CisKKyAgICAvLyBCbG9ja0RpcmVjdG9yeSBj
YWxscyB0aGlzIGR1cmluZyBjcmVhdGlvbiBhbmQgdGhpcyBmaWxscyBpbiBCbG9ja0RpcmVjdG9y
eTo6b2Zmc2V0LgorICAgIHZvaWQgYWxsb2NhdGVPZmZzZXQoQmxvY2tEaXJlY3RvcnkqKTsKKyAg
ICAKKyAgICBzdHJ1Y3QgU25hcHNob3QgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAg
VmVjdG9yPEJsb2NrRGlyZWN0b3J5Kj4gZGlyZWN0b3JpZXM7CisgICAgfTsKKyAgICAKKyAgICBT
bmFwc2hvdCBzbmFwc2hvdCgpOworICAgIAorICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3Rvcnko
dW5zaWduZWQgb2Zmc2V0KTsKKyAgICAKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CisgICAg
c2l6ZV90IG1fc2l6ZSB7IDAgfTsKKyAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBtX2RpcmVj
dG9yaWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU4Miw2ICs1ODIsMTAzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFu
ZG9tVGh1bmsoVk0KIH0KICNlbmRpZgogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9j
YXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2Nh
dG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBK
dW1wTGlzdCYgc2xvd1BhdGgpCit7CisgICAgLy8gTk9URTogVGhpcyBpcyBjYXJlZnVsbHkgd3Jp
dHRlbiBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0IHdoaWxlIHdlIGRpc2FsbG93IHNjcmF0Y2gKKyAg
ICAvLyByZWdpc3RlciB1c2FnZS4KKyAgICAgICAgCisgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NT
bG93UGF0aHMoKSkgeworICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBKdW1wIHBvcFBhdGg7CisgICAgSnVtcCBkb25lOwor
ICAgIAorI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgbG9hZEZyb21UTFNQdHIoZmFzdFRM
U09mZnNldEZvcktleShXVEZfR0NfVExDX0tFWSksIHNjcmF0Y2hHUFIpOworI2Vsc2UKKyAgICBs
b2FkUHRyKCZ2bSgpLnRocmVhZExvY2FsQ2FjaGVEYXRhLCBzY3JhdGNoR1BSKTsKKyNlbmRpZgor
ICAgIGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKSB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2gzMihCZWxvd09yRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgVGhyZWFkTG9jYWxD
YWNoZTo6b2Zmc2V0T2ZTaXplKCkpLCBUcnVzdGVkSW1tMzIoYWxsb2NhdG9yLmFsbG9jYXRvcigp
Lm9mZnNldCgpKSkpOworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFRocmVhZExvY2FsQ2Fj
aGU6Om9mZnNldE9mRmlyc3RBbGxvY2F0b3IoKSArIGFsbG9jYXRvci5hbGxvY2F0b3IoKS5vZmZz
ZXQoKSksIHNjcmF0Y2hHUFIsIGFsbG9jYXRvckdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BS
LCBUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZlNpemUoKSksIGFsbG9jYXRvckdQUikpOworICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mRmlyc3RB
bGxvY2F0b3IoKSksIGFsbG9jYXRvckdQUik7CisgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCBh
bGxvY2F0b3JHUFIpOworICAgIH0KKworICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwg
TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJl
bWFpbmluZygpKSwgcmVzdWx0R1BSKTsKKyAgICBwb3BQYXRoID0gYnJhbmNoVGVzdDMyKFplcm8s
IHJlc3VsdEdQUik7CisgICAgaWYgKGFsbG9jYXRvci5pc0NvbnN0YW50KCkpCisgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLmFsbG9jYXRvcigpLmNlbGxTaXplKHZtKCkuaGVh
cCkpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOworICAgIGVsc2UgeworICAgICAgICBpZiAoaXNY
ODYoKSkgeworICAgICAgICAgICAgbW92ZShyZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgc3ViMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2Vs
bFNpemUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc3ViMzIocmVzdWx0R1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZWdQdHIocmVzdWx0
R1BSKTsKKyAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2Nh
bEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWlu
aW5nKCkpKTsKKyAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0
T2ZQYXlsb2FkRW5kKCkpOworICAgIGlmIChpc1g4NigpKQorICAgICAgICBhZGRQdHIocGF5bG9h
ZEVuZEFkZHIsIHJlc3VsdEdQUik7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRQdHIocGF5bG9h
ZEVuZEFkZHIsIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKKyAgICB9CisgICAgICAgIAorICAgIGRvbmUgPSBqdW1wKCk7CisgICAgICAgIAorICAg
IHBvcFBhdGgubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0Ojpv
ZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSksIHJlc3VsdEdQUik7CisgICAgaWYgKGlzWDg2KCkpCisg
ICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3JldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHhvclB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwor
ICAgIH0KKyAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIp
KTsKKyAgICAgICAgCisgICAgLy8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2
ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVzaCBvYmplY3QsIGJ1dAorICAgIC8vIGl0J3Mgc3RpbGwg
b24gdGhlIEdDJ3MgZnJlZSBsaXN0LgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIpLCBz
Y3JhdGNoR1BSKTsKKyAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQ
UiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
ZlNjcmFtYmxlZEhlYWQoKSkpOworICAgICAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGUoR1BSUmVnIHJlc3VsdEdQUiwgY29u
c3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCit7CisgICAgaWYgKGFsbG9jYXRvci5pc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgaWYgKCFhbGxvY2F0b3IuYWxsb2NhdG9yKCkpIHsKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKHJlc3Vs
dEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKK30K
Kwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVn
IHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9u
U2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBz
bG93UGF0aCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYg
KE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0
IGJlIGEgcG93ZXIgb2YgdHdvLiIpOworICAgIAorICAgIHVuc2lnbmVkIHN0ZXBTaGlmdCA9IGdl
dExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOworICAgIAorICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMihNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hH
UFIxKTsKKyAgICB1cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIx
KTsKKyAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHNjcmF0Y2hHUFIxLCBUcnVz
dGVkSW1tMzIoTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmID4+IHN0ZXBTaGlmdCkpKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBz
Y3JhdGNoR1BSMik7CisgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQ
UjEsIFRpbWVzRm91ciksIHNjcmF0Y2hHUFIxKTsKKyAgICAKKyAgICBlbWl0QWxsb2NhdGUocmVz
dWx0R1BSLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
Miwgc2xvd1BhdGgpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNh
dmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlG
cmFtZSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgorI2luY2x1ZGUg
IkpJVEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCkBAIC01OSw2ICs2MCw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29k
ZUJsb2NrOyB9CisgICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fY29kZUJsb2NrLT52bSgpOyB9CiAg
ICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQog
CiAgICAgdm9pZCBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpCkBAIC0xNDg4LDgzICsxNDkw
LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIGVtaXRSYW5kb21UaHVuayhKU0dsb2JhbE9iamVjdCos
IEdQUlJlZyBzY3JhdGNoMCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIEZQUlJl
ZyByZXN1bHQpOwogICAgIHZvaWQgZW1pdFJhbmRvbVRodW5rKFZNJiwgR1BSUmVnIHNjcmF0Y2gw
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMiwgR1BSUmVnIHNjcmF0Y2gzLCBGUFJS
ZWcgcmVzdWx0KTsKICNlbmRpZgotCisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93
IHRoYXQgdGhlIHZhbHVlIGhlbGQgaW4gYWxsb2NhdG9yR1BSIGlzIG5vbi1udWxsLiBUaGlzIERP
RVMgTk9UIG1lYW4KICAgICAvLyB0aGF0IGFsbG9jYXRvciBpcyBub24tbnVsbDsgYWxsb2NhdG9y
IGNhbiBiZSBudWxsIGFzIGEgc2lnbmFsIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQotICAg
IC8vIHZhbHVlIG9mIGFsbG9jYXRvckdQUiBpcy4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZVdpdGhO
b25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpCi0gICAgewotICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGNhcmVmdWxseSB3cml0dGVu
IHNvIHRoYXQgd2UgY2FuIGNhbGwgaXQgd2hpbGUgd2UgZGlzYWxsb3cgc2NyYXRjaAotICAgICAg
ICAvLyByZWdpc3RlciB1c2FnZS4KLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpmb3Jj
ZUdDU2xvd1BhdGhzKCkpIHsKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKdW1wIHBv
cFBhdGg7Ci0gICAgICAgIEp1bXAgZG9uZTsKLSAgICAgICAgCi0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgcG9wUGF0
aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOwotICAgICAgICBpZiAoYWxsb2NhdG9y
KQotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkp
LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChpc1g4NigpKSB7Ci0gICAgICAgICAgICAgICAgbW92ZShyZXN1bHRHUFIsIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgICAgIHN1YjMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVj
dG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tE
aXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgbmVnUHRyKHJlc3VsdEdQUik7Ci0gICAgICAgIHN0b3Jl
MzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZz
ZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkpOwotICAgICAg
ICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGly
ZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5k
KCkpOwotICAgICAgICBpZiAoaXNYODYoKSkKLSAgICAgICAgICAgIGFkZFB0cihwYXlsb2FkRW5k
QWRkciwgcmVzdWx0R1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsb2FkUHRyKHBh
eWxvYWRFbmRBZGRyLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoR1BS
LCByZXN1bHRHUFIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb25lID0ganVtcCgp
OwotICAgICAgICAKLSAgICAgICAgcG9wUGF0aC5saW5rKHRoaXMpOwotICAgICAgICAKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIGlmIChpc1g4NigpKQotICAgICAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIH0KLSAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZl
IHdoYXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0Ci0gICAgICAgIC8vIGl0J3Mgc3Rp
bGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0LgotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
R1BSKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgfQorICAgIC8vIHZhbHVlIG9mIGFsbG9jYXRvckdQUiBpcy4gQWRkaXRp
b25hbGx5LCBpZiB0aGUgYWxsb2NhdG9yIGlzIG5vdCBudWxsLCB0aGVuIHRoZXJlIGlzIG5vIG5l
ZWQKKyAgICAvLyB0byBwb3B1bGF0ZSBhbGxvY2F0b3JHUFIgLSB0aGlzIGNvZGUgd2lsbCBpZ25v
cmUgdGhlIGNvbnRlbnRzIG9mIGFsbG9jYXRvckdQUi4KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYg
YWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExp
c3QmIHNsb3dQYXRoKTsKICAgICAKLSAgICB2b2lkIGVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0
R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAgaWYgKCFh
bGxvY2F0b3IpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJv
LCBhbGxvY2F0b3JHUFIpKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0
b3IocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2NyYXRjaEdQUiwgc2xvd1Bh
dGgpOwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBjb25z
dCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgU3RydWN0dXJlVHlwZT4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVz
dWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBT
dHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93
UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJSZWcgcmVzdWx0R1BSLCBjb25z
dCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgU3RydWN0dXJl
VHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAg
ICAgewogICAgICAgICBlbWl0QWxsb2NhdGUocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVX
aXRoVHlwZUluZm8oc3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlLCB0eXBlbmFtZSBTdG9yYWdl
VHlwZSwgdHlwZW5hbWUgTWFza1R5cGU+Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVKU09iamVjdChH
UFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2Nh
dG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFz
a1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2
b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9j
YXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVj
dHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hH
UFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTQ2Vs
bChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hH
UFIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoc3RvcmFnZSwgQWRkcmVzcyhyZXN1bHRH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtMTU3NiwxMyArMTUxOSw4IEBA
IHB1YmxpYzoKICAgICAgICAgVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBl
IHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNj
cmF0Y2hHUFIxLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0
aCwgc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgICAgICBpZiAoIWFs
bG9jYXRvcikgewotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9j
YXRvciksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIxLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIG1hc2ssIHNj
cmF0Y2hHUFIyLCBzbG93UGF0aCk7CisgICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBzY3Jh
dGNoR1BSMSwgc3RydWN0dXJlLCBzdG9yYWdlLCBtYXNrLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgp
OwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4K
QEAgLTE1OTMsMjAgKzE1MzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gYWxsb2NhdGlvblNp
emUgY2FuIGJlIGFsaWFzZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGlucHV0IEdQUnMuIElmIGl0
J3Mgbm90IGFsaWFzZWQgdGhlbiBpdAogICAgIC8vIHdvbid0IGJlIGNsb2JiZXJlZC4KLSAgICB2
b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVT
dWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hH
UFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6
OnNpemVTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uIik7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBnZXRMU0JT
ZXQoTWFya2VkU3BhY2U6OnNpemVTdGVwKTsKLSAgICAgICAgCi0gICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMihNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNpemUsIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMihzdGVwU2hpZnQpLCBzY3Jh
dGNoR1BSMSk7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihBYm92ZSwgc2NyYXRj
aEdQUjEsIFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYgPj4gc3RlcFNoaWZ0
KSkpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2UuYWxsb2NhdG9yRm9yU2l6
ZVN0ZXAoKSAtIDEpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgdGltZXNQdHIoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgCi0gICAgICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIG51bGxwdHIsIHNjcmF0Y2hHUFIx
LCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwotICAgIH0KKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZh
cmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2Us
IEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRj
aEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgogICAgIHZvaWQgZW1pdEFsbG9jYXRl
VmFyaWFibGVTaXplZENlbGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBl
IHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSklUQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBD
b25zdGFudCwKKyAgICAgICAgVmFyaWFibGUKKyAgICB9OworICAgIAorICAgIEpJVEFsbG9jYXRv
cigpIHsgfQorICAgIAorICAgIHN0YXRpYyBKSVRBbGxvY2F0b3IgY29uc3RhbnQoQWxsb2NhdG9y
IGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIEpJVEFsbG9jYXRvciByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fYWxsb2NhdG9yID0g
YWxsb2NhdG9yOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgSklUQWxsb2NhdG9yIHZhcmlhYmxlKCkKKyAgICB7CisgICAgICAgIEpJVEFsbG9jYXRvciBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBWYXJpYWJsZTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVEFsbG9j
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVy
Lm1fa2luZAorICAgICAgICAgICAgJiYgbV9hbGxvY2F0b3IgPT0gb3RoZXIubV9hbGxvY2F0b3I7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKSVRBbGxvY2F0b3ImIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAqdGhpcyAhPSBKSVRBbGxvY2F0b3IoKTsKKyAgICB9CisgICAgCisgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgYm9vbCBpc0NvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kID09IENvbnN0YW50OyB9CisgICAgYm9vbCBpc1ZhcmlhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFZhcmlhYmxlOyB9CisgICAgCisgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvcigpIGNvbnN0CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0Nv
bnN0YW50KCkpOworICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBLaW5kIG1fa2luZCB7IENvbnN0YW50IH07CisgICAgQWxsb2NhdG9yIG1fYWxs
b2NhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0
cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
NzksMjIgKzc5LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24K
IHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9i
amVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxK
U0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJldHVyblZhbHVlR1BSOwog
ICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnID0gcmVnVDM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgYWxs
b2NhdG9yUmVnKTsKLSAgICBpZiAoYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShKdW1w
KCkpOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOwotICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgYWxsb2NhdG9yLCBhbGxvY2F0b3JSZWcs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwotICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3Vs
dFJlZyk7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CisgICAgZWxzZSB7CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgYXV0byBi
dXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBhdXRvIG1hc2sgPSBU
cnVzdGVkSW1tMzIoMCk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
SklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OworICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwor
ICAgICAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJl
c3VsdFJlZyk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtODU2LDkgKzg1Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRy
ZXNzKGNhbGxlZVJlZywgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihKU0Z1bmN0aW9uVHlwZSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZykpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkp
LCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihaZXJvLCBhbGxvY2F0b3JSZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVh
bCwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CiAK
ICAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVt
cCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlv
blJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkp
OwpAQCAtODY4LDcgKzg2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3Ry
dWN0aW8KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywg
c3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Cisg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxl
KCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hS
ZWcsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0U3Rv
cmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDIy
NzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEw
IFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTgxLDIyICs4MSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0
aW9uCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vic3BhY2VG
b3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRp
b25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBS
ZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJl
ZyA9IHJlZ1QyOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIGFsbG9jYXRv
clJlZyk7Ci0gICAgaWYgKGFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoSnVtcCgpKTsK
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1t
UHRyKG51bGxwdHIpOwotICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0
QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIGFsbG9jYXRvciwgYWxsb2NhdG9yUmVnLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nh
c2VzKTsKLSAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJ
bW0zMigwKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxv
Y2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAg
ICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQpAQCAtNzY2LDkgKzc2Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKElu
c3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxl
ZVJlZywgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihKU0Z1bmN0
aW9uVHlwZSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZykpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0
YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0
b3JSZWcpOworICAgIGxvYWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSksIHN0cnVjdHVyZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCBhbGxvY2F0b3JSZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgYWxsb2Nh
dG9yUmVnLCBUcnVzdGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CiAKICAgICBsb2Fk
UHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVu
TXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1
c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwpAQCAtNzc4
LDcgKzc3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW8KICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRy
KG51bGxwdHIpOwogICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIG51bGxwdHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJl
UmVnLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9j
YXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHNjcmF0Y2hSZWcpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVE
YXRhKCkpLCBzY3JhdGNoUmVnKTsKICAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lcy5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYQogaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNpemVfdCBzaXpl
ID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVs
bHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOworICAgIHZvaWQqIGJhc2UgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNp
emUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtODcsNyArODcsNyBAQCBpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OnRyeUNyZWF0ZShWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVh
ZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQog
ewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAg
IHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxs
KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgIGlmICghYmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSk7CkBAIC0xNjUsNyArMTY1LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2Fw
YWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNp
dHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAg
ICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6ZSwg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICB2b2lkKiBu
ZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0
dWFsKHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51
bGwpOwogICAgIGlmICghbmV3QmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8g
RklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIGEgbWVtY3B5LgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCShyZXZp
c2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1
bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgRGlyZWN0
QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVl
c0Z1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pKTsKICAgICAKLSAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGls
aWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbChtYXBw
ZWRBcmd1bWVudHNTaXplKCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0
KTsKKyAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1f
bWFwcGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbWFwcGVkQXJndW1l
bnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAg
Ym9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAg
bV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAy
MjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYzLDcgKzI2Myw3IEBAIHZvaWQgR2VuZXJp
Y0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWUKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tb2Rp
ZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOwogCiAgICAgaWYgKGFyZ3NMZW5ndGgpIHsKLSAgICAg
ICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlm
aWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwoV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OkFzc2VydCk7CisgICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iua2luZCkuYWxsb2Nh
dGVOb25WaXJ0dWFsKHZtLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCks
IG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgYm9vbCog
bW9kaWZpZWRBcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKICAg
ICAgICAgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iuc2V0KHZtLCB0aGlzLCBtb2RpZmll
ZEFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFyZ3NMZW5ndGg7IGktLTsp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJl
dmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBh
Y2l0eSk7Ci0gICAgICAgIHZvaWQqIGRhdGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIG51bGxwdHIsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgIHZvaWQqIGRhdGEgPSB2bS5qc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIGFsbG9jYXRp
b25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAg
ICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtODEsNyArODEsMTAgQEAgSlNBcnJheSogSlNB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91
cyhpbmRleGluZ1R5cGUpKTsKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0
ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlhbExl
bmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5l
U3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbCgKKyAgICAgICAgICAgIHZtLAorICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksCisgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5
Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTk4LDcgKzEwMSwxMCBA
QCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBlbHNlIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAgICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aChp
bmRleEJpYXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAg
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0
dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAg
ICAgIHZtLAorICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRP
ZkxpbmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSks
CisgICAgICAgICAgICBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCBpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtMzY4LDcgKzM3NCw4IEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoY29uc3QKICAgICAgICAgYWxsb2NhdGVkTmV3
U3RvcmFnZSA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCBuZXdTaXplID0g
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOwotICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6
ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAg
bmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sIG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmICghbmV3QWxsb2NCYXNlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNp
cmVkQ2FwYWNpdHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTIzOCw2ICsyMzgsNyBAQCBpbmxpbmUgSlNBcnJheSogSlNBcnJh
eTo6dHJ5Q3JlYXRlKFZNJiB2CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0
dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIHZlY3Rvckxl
bmd0aEhpbnQpOwogICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sCiAgICAgICAgICAg
ICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JM
ZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwKICAgICAgICAgICAgIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmICghdGVtcCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBA
QCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgICAgIHZvaWQq
IHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUp
OwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgICAgICAgICB0ZW1wID0gdm0u
cHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNp
emUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAg
ICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0NSwxNCArMTQ1LDE1IEBAIENvbXBsZXRl
U3Vic3BhY2UqIEpTQ2VsbDo6c3Vic3BhY2VGb3IoVk0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBB
TFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogeworICAgIFZNJiB2bSA9ICpoZWFwLnZtKCk7CiAgICAg
QVNTRVJUKGRlZmVycmFsQ29udGV4dCB8fCAhRGlzYWxsb3dHQzo6aXNJbkVmZmVjdE9uQ3VycmVu
dFRocmVhZCgpKTsKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwotICAgIEpTQ2VsbCog
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSkt
PmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7
CisgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxU
Pih2bSktPmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWls
dXJlTW9kZSkpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwgJiYgIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjaWYgRU5B
QkxFKEdDX1ZBTElEQVRJT04pCi0gICAgQVNTRVJUKCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5n
T2JqZWN0KCkpOwotICAgIGhlYXAudm0oKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6
aW5mbygpKTsKKyAgICBBU1NFUlQoIXZtLmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgIHZt
LnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6OmluZm8oKSk7CiAjZW5kaWYKICAgICByZXN1
bHQtPmNsZWFyU3RydWN0dXJlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMzNSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGVucXUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCi1KU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKQorSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBn
bG9iYWxPYmplY3RNZXRob2RUYWJsZSwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IHRocmVhZExv
Y2FsQ2FjaGUpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIDApCiAgICAgLCBtX3ZtKHZtKQog
ICAgICwgbV9tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0
Y2hwb2ludFNldChJc1dhdGNoZWQpKSkKQEAgLTM1Myw2ICszNTMsNyBAQCBKU0dsb2JhbE9iamVj
dDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTCiAgICAgLCBtX3RlbXBsYXRlUmVnaXN0cnkodm0p
CiAgICAgLCBtX3J1bnRpbWVGbGFncygpCiAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICAsIG1fdGhyZWFkTG9jYWxDYWNoZSh0aHJlYWRM
b2NhbENhY2hlID8gV1RGTW92ZSh0aHJlYWRMb2NhbENhY2hlKSA6IHZtLmRlZmF1bHRUaHJlYWRM
b2NhbENhY2hlKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3
ICs0OTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1lRmxhZ3Mo
KSBjb25zdCB7IHJldHVybiBtX3J1bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKiA9IDAsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiA9IG51bGxwdHIp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCkBA
IC04OTMsNiArODkzLDggQEAgcHVibGljOgogICAgIEpTV3JhcHBlck1hcCogd3JhcHBlck1hcCgp
IGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlck1hcC5nZXQoKTsgfQogICAgIHZvaWQgc2V0V3JhcHBl
ck1hcChKU1dyYXBwZXJNYXAqIG1hcCkgeyBtX3dyYXBwZXJNYXAgPSBtYXA7IH0KICNlbmRpZgor
ICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGUmIHRocmVhZExvY2FsQ2FjaGUoKSBjb25zdCB7IHJl
dHVybiAqbV90aHJlYWRMb2NhbENhY2hlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBzdHJ1
Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKQEAgLTkyNCw2ICs5MjYsOCBAQCBwcml2YXRlOgogI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgUmV0YWluUHRyPEpTV3JhcHBlck1hcD4gbV93cmFw
cGVyTWFwOwogI2VuZGlmCisgICAgCisgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG1fdGhy
ZWFkTG9jYWxDYWNoZTsKIH07CiAKIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1Zh
bHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2
aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgor
I2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hp
bmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KQEAgLTE0NSw3ICsxNDYsOSBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogCiAg
ICAgbV92bS0+c2V0TGFzdFN0YWNrVG9wKHRocmVhZC5zYXZlZExhc3RTdGFja1RvcCgpKTsKICAg
ICBBU1NFUlQodGhyZWFkLnN0YWNrKCkuY29udGFpbnMobV92bS0+bGFzdFN0YWNrVG9wKCkpKTsK
LQorICAgIAorICAgIG1fdm0tPmRlZmF1bHRUaHJlYWRMb2NhbENhY2hlLT5pbnN0YWxsKCptX3Zt
KTsKKyAgICAKICAgICBtX3ZtLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVh
ZCgpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3Vy
cmVudFRocmVhZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDcgQEAgY29uc3RleHByIGJvb2wg
ZW5hYmxlQXN5bmNJdGVyYXRpb24gPSBmYQogICAgIHYoYm9vbCwgZHVtcFNpemVDbGFzc2VzLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VCdW1wQWxsb2NhdG9yLCB0
cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHN0ZWFsRW1wdHlCbG9ja3NGcm9t
T3RoZXJBbGxvY2F0b3JzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHRy
YWRlRGVzdHJ1Y3RvckJsb2NrcywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCBlYWdlcmx5VXBkYXRlVG9wQ2FsbEZyYW1lLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgXAogICAgIHYoYm9vbCwgdXNlT1NSRW50cnlUb0RGRywgdHJ1ZSwgTm9ybWFsLCBudWxscHRy
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Miw3ICs0Miw3IEBAIEFM
V0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wg
Y3JlYXRlVW5pbml0aWFsaXplZCA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0
dXJlKHN0cnVjdHVyZSk7Ci0gICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
UmV0dXJuTnVsbCk7CisgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0
ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDYgKzEyMSw3
IEBACiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2Nh
bENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgpAQCAtMzA2LDYg
KzMwNyw5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1
cGRhdGVTb2Z0UmVzZXJ2ZWRab25lU2l6ZShPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRab25lU2l6ZSgp
KTsKICAgICBzZXRMYXN0U3RhY2tUb3Aoc3RhY2sub3JpZ2luKCkpOwogCisgICAgZGVmYXVsdFRo
cmVhZExvY2FsQ2FjaGUgPSBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoaGVhcCk7CisgICAgZGVm
YXVsdFRocmVhZExvY2FsQ2FjaGUtPmluc3RhbGwoKnRoaXMpOworCiAgICAgLy8gTmVlZCB0byBi
ZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUKICAgICBKU0xvY2tI
b2xkZXIgbG9jayh0aGlzKTsKICAgICBBdG9taWNTdHJpbmdUYWJsZSogZXhpc3RpbmdFbnRyeUF0
b21pY1N0cmluZ1RhYmxlID0gVGhyZWFkOjpjdXJyZW50KCkuc2V0Q3VycmVudEF0b21pY1N0cmlu
Z1RhYmxlKG1fYXRvbWljU3RyaW5nVGFibGUpOwpAQCAtMzgzLDcgKzM4Nyw3IEBAIFZNOjpWTShW
TVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNlbmRpZgogICAgIAogICAgIEdpZ2Fj
YWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2socHJpbWl0aXZlR2lnYWNhZ2VEaXNhYmxl
ZENhbGxiYWNrLCB0aGlzKTsKLQorICAgIAogICAgIGhlYXAubm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCk7CiAgICAgCiAgICAgTExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKCp0aGlzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjI3MjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiAr
NTQsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUg
IlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCisjaW5jbHVkZSAiVGhyZWFk
TG9jYWxDYWNoZS5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hw
b2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgpAQCAtNjU2LDYg
KzY1NywxMSBAQCBwdWJsaWM6CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tG
aXJzdE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gc3RyaW5nUmVj
dXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKKyAgICAKKyNpZiAhRU5BQkxFKEZBU1RfVExTX0pJ
VCkKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiB0aHJlYWRMb2NhbENhY2hlRGF0YSB7IG51
bGxwdHIgfTsKKyNlbmRpZgorICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBkZWZhdWx0VGhy
ZWFkTG9jYWxDYWNoZTsKIAogICAgIExvY2FsVGltZU9mZnNldENhY2hlIGxvY2FsVGltZU9mZnNl
dENhY2hlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50
cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiRGlzYWxsb3dWTVJlZW50cnkuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAj
aW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1
ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAtNDAsNiArNDEsNyBAQCBWTUVudHJ5U2NvcGU6OlZN
RW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAgIGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxDYWNo
ZSgpLmluc3RhbGwodm0pOwogICAgIEFTU0VSVCghRGlzYWxsb3dWTVJlZW50cnk6OmlzSW5FZmZl
Y3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNr
KCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgaWYgKCF2bS5lbnRyeVNjb3BlKSB7CkluZGV4
OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAxOC0wMS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgorCisgICAgICAgIEpTQyBHQyBzaG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9j
YWwgY2FjaGVzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgxNTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3dGYvQml0bWFwLmg6IEp1c3QgZml4aW5nIGEgY29tcGlsZSBlcnJvci4KKwogMjAxOC0w
MS0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEZpeCBqc2Mtb25seSBidWlsZApJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDIyNzI3MykKKysr
IFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBA
CiAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331961</attachid>
            <date>2018-01-22 13:54:17 -0800</date>
            <delta_ts>2018-01-24 12:00:27 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>180695</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMCBA
QAorMjAxOC0wMS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBHQyBzaG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwgY2FjaGVzKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlz
IGEgYmlnIHN0ZXAgdG93YXJkcyBvYmplY3QgZGlzdGFuY2luZyBieSBzaXRlIG9yaWdpbi4gVGhp
cyBwYXRjaCBpbXBsZW1lbnRzIFRMQ3MsIG9yCisgICAgICAgIHRocmVhZC1sb2NhbCBjYWNoZXMs
IHdoaWNoIGFsbG93IGVhY2ggdGhyZWFkIHRvIGFsbG9jYXRlIGZyb20gaXRzIG93biBmcmVlIGxp
c3RzLiBJdCBhbHNvCisgICAgICAgIG1lYW5zIHRoYXQgYW55IGdpdmVuIHRocmVhZCBjYW4gY29u
dGV4dC1zd2l0Y2ggVExDcy4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGRvIHNlcGFyYXRlCisgICAg
ICAgIGFsbG9jYXRpb24gZm9yIHNlcGFyYXRlIHNpdGUgb3JpZ2lucy4gRXZlbnR1YWxseSwgb25j
ZSB3ZSByZXNoYXBlIGhvdyBNYXJrZWRCbG9jayBsb29rcywgdGhpcworICAgICAgICB3aWxsIGFs
bG93IHVzIHRvIGhhdmUgYSBoYXJkIGRpc3RhbmNpbmcgY29uc3RyYWludCBiZXR3ZWVuIG9iamVj
dHMgZnJvbSBkaWZmZXJlbnQgb3JpZ2lucy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBk
ZWZpbml0ZSBzbG93LWRvd24gb24gR0MtaGVhdnkgYmVuY2htYXJrcywgYnV0IGJ5IGEgc21hbGwg
bWFyZ2luLCBhbmQgb25seSBvbgorICAgICAgICB1bnVzdWFsbHkgaGVhdnkgdGVzdHMuIEZvciBl
eGFtcGxlLCBib3llciBhbmQgc3BsYXkgYXJlIGJvdGggMyUgcmVncmVzc2VkLCBidXQgdGhlIE9j
dGFuZQorICAgICAgICBnZW9tZWFuIGlzIGp1c3QgZmluZS4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9CM1BhdGNocG9p
bnRTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1p
dHNTdGFjayk6CisgICAgICAgICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXApOgorICAgICAgICAqIGIzL0Iz
U3RhY2ttYXBWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFZhbHVlOjphcHBl
bmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcik6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVl
Lmg6CisgICAgICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpkdW1wIGNvbnN0KToKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5oOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlND
OjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAg
ICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6Y2xlYXIpOgorICAgICAgICAqIGJ5
dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRBbGxvY2F0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEFsbG9jYXRlSlNDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYWtlUm9wZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YWxsb2NhdGVIZWFwQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmFsbG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6YWxsb2NhdG9yRm9yU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgorICAgICAg
ICAqIGhlYXAvQWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6
Y2VsbFNpemUgY29uc3QpOgorICAgICAgICAqIGhlYXAvQWxsb2NhdG9yLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFsbG9jYXRv
cjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvcj09IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QWxsb2NhdG9yOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKiBoZWFw
L0FsbG9jYXRvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFsbG9jYXRvcjo6YWxs
b2NhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OkJsb2NrRGlyZWN0b3J5KToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rv
cnk6OmZpbmRCbG9ja0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9y
eTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6cHJlcGFy
ZUZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9j
YXRpbmdGb3JHb29kKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnJlc3VtZUFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6ZW5kTWFya2luZyk6CisgICAg
ICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpT
Qzo6QmxvY2tEaXJlY3Rvcnk6OmRpZENvbnN1bWVGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlSW4pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVJbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojpkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmFsbG9jYXRlU2xvd0Nh
c2UpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoKKyAgICAgICAg
KEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmNlbGxLaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qmxv
Y2tEaXJlY3Rvcnk6OmFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0
b3J5OjpmcmVlTGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0
b3J5OjpvZmZzZXRPZkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJl
Y3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tE
aXJlY3RvcnlJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5Ojppc0ZyZWVM
aXN0ZWRDZWxsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6
OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3Bw
OgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjpDb21wbGV0ZVN1YnNwYWNlKToKKyAg
ICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpT
Qzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNw
YWNlOjphbGxvY2F0b3JGb3JTbG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6
YWxsb2NhdGVTbG93KToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93KToKKyAgICAgICAgKiBoZWFwL0NvbXBsZXRlU3Vic3BhY2UuaDoKKyAgICAgICAgKEpT
Qzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlND
OjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKToKKyAgICAgICAgKiBo
ZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAgICogaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oOgorICAg
ICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAg
ICAoSlNDOjpIZWFwOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgICogaGVhcC9IZWFw
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZExvY2FsQ2FjaGVMYXlvdXQpOgorICAgICAg
ICAqIGhlYXAvSXNvQ2VsbFNldC5oOgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOgor
ICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFs
bG9jYXRlKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbCk6
CisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZS5oOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0
b3IpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cmVzZXQpOgorICAgICAgICAoSlND
OjpMb2NhbEFsbG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TG9jYWxB
bGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6cHJlcGFy
ZUZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9j
YXRpbmdGb3JHb29kKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0
KToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxl
Y3RpbmcpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVJbik6CisgICAg
ICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6
TG9jYWxBbGxvY2F0b3I6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQpOgorICAgICAgICAoSlND
OjpMb2NhbEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVh
cC9Mb2NhbEFsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0
T2ZDZWxsU2l6ZSk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvcklubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICog
aGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzdG9wQWxs
b2NhdGluZ0Zvckdvb2QpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAg
KiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6Cisg
ICAgICAgICogaGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKToKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAo
SlNDOjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJl
YWRMb2NhbENhY2hlOjpkZXN0cm95RGF0YSk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2Fj
aGU6Omluc3RhbGxTbG93KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFs
bERhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3JTbG93KToK
KyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcik6CisgICAgICAgICog
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2Nh
bENhY2hlOjpvZmZzZXRPZlNpemUpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpv
ZmZzZXRPZkZpcnN0QWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpnZXRJbXBs
KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6
VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2Fj
aGU6OmFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnRyeUdldEFs
bG9jYXRvcik6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhyZWFk
TG9jYWxDYWNoZUxheW91dCk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6
OmFsbG9jYXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZUxheW91dDo6
c25hcHNob3QpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3Rv
cnkpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKToKKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6dm0pOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTQ2VsbCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlSlNPYmplY3QpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxv
Y2F0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxv
Y2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9j
YXRlVmFyaWFibGVTaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRl
cmZseUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0cnlDcmVhdGUpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGlu
Z3MpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlND
OjpIYXNoTWFwQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZXN0cmljdGVk
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29u
dGV4dCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6dGhyZWFkTG9jYWxDYWNoZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0xv
Y2suY3BwOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKToKKyAgICAgICAg
KiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oOgorICAgICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0Fy
cmF5KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2NvcGUu
Y3BwOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6CisKIDIwMTgt
MDEtMjAgIENhaW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0Nd
IE51bWJlclByb3RvdHlwZTo6ZXh0cmFjdFJhZGl4RnJvbUFyZ3MgaW5jb3JyZWN0bHkgY2FzdCBk
b3VibGUgdG8gaW50MzJfdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC00NjYsNiArNDY2LDcgQEAgZnRsL0ZUTFRodW5rcy5jcHAKIGZ0bC9GVExWYWx1
ZVJhbmdlLmNwcAogCiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCitoZWFwL0FsbG9j
YXRvci5jcHAKIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCiBoZWFwL0NlbGxBdHRyaWJ1dGVzLmNw
cAogaGVhcC9DZWxsQ29udGFpbmVyLmNwcApAQCAtNTAwLDYgKzUwMSw3IEBAIGhlYXAvSXNvQ2Vs
bFNldC5jcHAKIGhlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNw
cAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCitoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAogaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCiBoZWFwL01hcmtTdGFjay5jcHAKIGhlYXAvTWFya1N0
YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCkBAIC01MTgsNiArNTIwLDggQEAgaGVhcC9TdG9wSWZO
ZWNlc3NhcnlUaW1lci5jcHAKIGhlYXAvU3Vic3BhY2UuY3BwCiBoZWFwL1N5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvU3luY2hyb25vdXNuZXNzLmNwcAor
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAoraGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNw
cAogaGVhcC9WaXNpdFJhY2VLZXkuY3BwCiBoZWFwL1dlYWsuY3BwCiBoZWFwL1dlYWtCbG9jay5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSwxMyBAQAogCQkwRjcyNUNBQTFD
NTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBNjFDNTAzREVEMDBBRDk0M0EgLyogQjNQdXJlQ1NF
LmggKi87IH07CiAJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3Rh
bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcy
NUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICovOyB9OwogCQkw
Rjc0QjkzQjFGODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMg
LyogUHJvdG90eXBlS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDU1
MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjAyMDBEMjYwQjAwMzhFMkNG
IC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2Nh
dG9ySW5saW5lcy5oICovOyB9OworCQkwRjc1QTA2MTIwMEQyNjE4MDAzOEUyQ0YgLyogTG9jYWxB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzVBMDYyMjAwRDI2MUQw
MDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9y
SW5saW5lcy5oICovOyB9OworCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1
NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hl
TGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY3NUEwNjYyMDEzRTRGMTAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNjUyMDEzRTRFRjAwMzhF
MkNGIC8qIEpJVEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGlu
ZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NjZEMzAxNUE4RENFMjAw
OEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdh
cmVKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMUMx
NUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0MTksNiArMjQyNiwxNyBAQAogCQkwRjcy
NUNBRDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgcGF0
aCA9IGIzL0IzRm9sZFBhdGhDb25zdGFudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjcyNUNBRTFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHBh
dGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNzRCOTNBMUY4OTYxNDUwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNzVBMDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENh
Y2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNG
IC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRM
b2NhbENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNTkyMDBE
MjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExvY2FsQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEFsbG9jYXRvcklubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUIyMDBEMjVGMTAwMzhF
MkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NUEwNUQyMDBE
MjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMjkx
NUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NDcsNiArNTQ2NSw3IEBACiAJCQkJMTQyOUQ5MkUwRUQyMkQ3
MDAwQjg5NjE5IC8qIEpJVC5oICovLAogCQkJCUZFMTIyMDI1MUJFN0Y1NjQwMDM5RTZGMiAvKiBK
SVRBZGRHZW5lcmF0b3IuY3BwICovLAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBK
SVRBZGRHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklU
QWxsb2NhdG9yLmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRo
bWV0aWMuY3BwICovLAogCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1l
dGljMzJfNjQuY3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRB
bmRHZW5lcmF0b3IuY3BwICovLApAQCAtNTU0MCw2ICs1NTU5LDE2IEBACiAJCTE0MkUzMTJBMTM0
RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8s
CisJCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywK
KwkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAor
CQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJ
CTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywK
KwkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8s
CisJCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywK
KwkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMu
aCAqLywKKwkJCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxh
eW91dC5jcHAgKi8sCisJCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8q
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0Ey
RkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCkBAIC04MDQ4LDYgKzgwNzcsNyBAQAogCQkJCTBG
MkFDNTcxMUU4RUU0NTQwMDAxRUUzRiAvKiBBaXJGb3JtVGFibGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExvY2FsQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdDMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04MjEzLDYgKzgyNDMsNyBAQAogCQkJCTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAv
KiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjc1QTA2NDIwMEQyNjI4MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjIxQkU5M0FEMTAwMTNDODhGIC8q
IEIzU3RhY2ttYXBWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NDk1ODgxQzU3RjQ3NTAw
NDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUzNjFCREFD
REFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTgzODIsNiArODQxMyw3IEBACiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0Fy
Z3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODEyMUFCM0Q4QkUwMEJC
QjhFOCAvKiBERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJERDgxNDFBQjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjc1QTA2MzIwMEQyNjFGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyMjE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhN
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZH
QXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUx
NUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjYy
LDYgKzg2OTQsNyBAQAogCQkJCUZFQTBDNDAzMUNERDdEMUQwMDQ4MTk5MSAvKiBGdW5jdGlvbldo
aXRlbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRTJDQUUxNEU5ODVB
QTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjAy
MDBEMjYwQjAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdDQ29uZHVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI0NzY3RTFEOTlBRUE5MDA4RUE2Q0IgLyogR0NE
ZWZlcnJhbENvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtODc0Niw2ICs4Nzc5LDcgQEAKIAkJ
CQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3OTFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJl
Y3RFdmFsRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjIyMDBEMjYxRDAw
MzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkY5MkI5
MUZENzZGRkYwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCRjkyQkExRkQ3NzAwNDAwQUMyOEE4IC8qIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVy
cmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTMxLDYgKzg5NjUsNyBAQAogCQkJCUUzM0Y1
MDc5MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFBy
b21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDg1MUI4NDM3
QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjc1QTA1RTIwMEQyNUY2MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTMzRjUwNzUxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9t
aXNlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBG
MTQgLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBpbiBIZWFkZXJzICovLApAQCAt
OTQzMCw2ICs5NDY1LDcgQEAKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0lt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkU3RDMzMTcxMzVDRjQwMEQxODA3QSAvKiBXZWFr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFGIC8q
IFdlYWtNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NUEwNjYyMDEzRTRG
MTAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMzJCQzcx
RkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkz
QUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNiArMTI3NywxMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICAgICAg
ICAgIGFyZyA9IHRtcCh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOiB7CisgICAg
ICAgICAgICAgICAgVG1wIGRzdFRtcCA9IG1fY29kZS5uZXdUbXAodmFsdWUudmFsdWUoKS0+cmVz
dWx0QmFuaygpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKHZh
bHVlLnZhbHVlKCktPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlLnZhbHVlKCkpLCBkc3RUbXApOwor
ICAgICAgICAgICAgICAgIGFyZyA9IGRzdFRtcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3RlcjoKICAg
ICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICAgICAgICAgIHN0YWNr
bWFwLT5lYXJseUNsb2JiZXJlZCgpLmNsZWFyKHZhbHVlLnJlcCgpLnJlZygpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHJl
dmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBAIGJvb2wgUGF0Y2hw
b2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3Rh
Y2tBcmd1bWVudDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcldp
dGhDbG9iYmVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6Okxh
dGVSZWdpc3RlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw2ICsxMTAs
OSBAQCB2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgICAgICBj
YXNlIFZhbHVlUmVwOjpDb25zdGFudDoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2U7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXJXaXRoQ2xvYmJlcjoKKyAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2VEZWY7
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRl
UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyOCw2ICsxMzEsMTAgQEAgdm9pZCBTdGFja21hcFNwZWNpYWw6
OmZvckVhY2hBcmdJbXBsKAogICAgICAgICAgICAgLy8gYmUgYWJsZSB0byByZWNvdmVyIHRoZSBz
dGFja21hcCB2YWx1ZS4gU28sIGZvcmNlIExhdGVDb2xkVXNlIHRvIHByZXNlcnZlIHRoZQogICAg
ICAgICAgICAgLy8gb3JpZ2luYWwgc3RhY2ttYXAgdmFsdWUgYWNyb3NzIHRoZSBTcGVjaWFsIG9w
ZXJhdGlvbi4KICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgb3B0aW9u
YWxEZWZBcmdXaWR0aCAmJiAqb3B0aW9uYWxEZWZBcmdXaWR0aCA8IGNoaWxkLnZhbHVlKCktPnJl
c3VsdFdpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcm9sZSBjYW4gb25seSBiZSBz
b21lIGtpbmQgb2YgZGVmIGlmIHdlIGRpZCBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwgd2hpY2gg
aXMKKyAgICAgICAgICAgICAgICAvLyBvbmx5IGFsbG93ZWQgZm9yIHBhdGNocG9pbnRzLiBQYXRj
aHBvaW50cyBkb24ndCB1c2UgdGhlIGRlZkFyZ1dpZHRoIGZlYXR1cmUuCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIUFyZzo6aXNBbnlEZWYocm9sZSkpOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKICAgICAgICAgICAg
ICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0y
NDUsNiArMjUyLDcgQEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQQog
ICAgICAgICAvLyBXZSBhbHJlYWR5IHZlcmlmaWVkIGJ5IGlzQXJnVmFsaWRGb3JWYWx1ZSgpLgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Cisg
ICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgICAgIHJldHVybiBhcmcuaXNUbXAoKTsKICAg
ICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMs
NiArNTMsMTEgQEAgdm9pZCBTdGFja21hcFZhbHVlOjphcHBlbmRTb21lUmVnaXN0ZXIoVgogICAg
IGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7
CiB9CiAKK3ZvaWQgU3RhY2ttYXBWYWx1ZTo6YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIo
VmFsdWUqIHZhbHVlKQoreworICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXIpKTsKK30KKwogdm9pZCBTdGFja21hcFZhbHVl
OjpzZXRDb25zdHJhaW5lZENoaWxkKHVuc2lnbmVkIGluZGV4LCBjb25zdCBDb25zdHJhaW5lZFZh
bHVlJiBjb25zdHJhaW5lZFZhbHVlKQogewogICAgIGNoaWxkKGluZGV4KSA9IGNvbnN0cmFpbmVk
VmFsdWUudmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFZhbHVlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDcgKzk5LDggQEAgcHVibGlj
OgogICAgIC8vIFRoaXMgaXMgYSBoZWxwZXIgZm9yIHNvbWV0aGluZyB5b3UgbWlnaHQgZG8gYSBs
b3Qgb2Y6IGFwcGVuZCBhIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGNvbnN0cmFpbmVkCiAgICAgLy8g
dG8gU29tZVJlZ2lzdGVyLgogICAgIHZvaWQgYXBwZW5kU29tZVJlZ2lzdGVyKFZhbHVlKik7Ci0K
KyAgICB2b2lkIGFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyKFZhbHVlKik7CisgICAgCiAg
ICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsg
fQogCiAgICAgLy8gU3RhY2ttYXBzIGFsbG93IHlvdSB0byBzcGVjaWZ5IHRoYXQgdGhlIG9wZXJh
dGlvbiBtYXkgY2xvYmJlciBzb21lIHJlZ2lzdGVycy4gQ2xvYmJlcmluZyBhIHJlZ2lzdGVyCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzMiwyMSArNDMyLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElE
QVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IFZvaWQpCiAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3VsdENvbnN0cmFp
bnQgPT0gVmFsdWVSZXA6Oldhcm1BbnksICgiQXQgIiwgKnZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPmFzPFBhdGNocG9p
bnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3RyYWludC5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpT
b21lRWFybHlSZWdpc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVn
aXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGZhbHNlLCAoIkF0ICIsICp2
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwQ29uc3RyYWludCh2YWx1ZSwgQ29uc3RyYWlu
ZWRWYWx1ZSh2YWx1ZSwgdmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+cmVzdWx0Q29uc3Ry
YWludCksIENvbnN0cmFpbnRSb2xlOjpEZWYpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CkBAIC01NzEsMTYgKzU1OCwyNCBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5raW5kKCkpIHsKICAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6V2FybUFueToKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToK
LSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlQ29sZEFueToK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKKyAgICAgICAgICAgIFZBTElEQVRFKHJv
bGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXJXaXRoQ2xvYmJlcjoKKyAgICAgICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJv
bGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKKyAgICAgICAgICAgIFZB
TElEQVRFKGNvbnRleHQtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKSwgKCJBdCAiLCAqY29udGV4dCkp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJl
Z2lzdGVyOgogICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6RGVm
LCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpM
YXRlUmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAodmFsdWUucmVwKCkua2luZCgpID09IFZhbHVl
UmVwOjpMYXRlUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBDb25z
dHJhaW50Um9sZTo6VXNlLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAgICAg
ICAgICAgaWYgKHZhbHVlLnJlcCgpLnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAgICAgVkFM
SURBVEUoaXNJbnQodmFsdWUudmFsdWUoKS0+dHlwZSgpKSwgKCJBdCAiLCAqY29udGV4dCwgIjog
IiwgdmFsdWUpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAg
dm9pZCBWYWx1ZVJlcDo6YWRkVXNlZFJlZ2lzdGVyc1RvKFJlZ2lzdAogICAgIGNhc2UgQ29sZEFu
eToKICAgICBjYXNlIExhdGVDb2xkQW55OgogICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgIGNh
c2UgU29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6CiAgICAgY2FzZSBTb21lRWFybHlSZWdpc3RlcjoK
ICAgICBjYXNlIENvbnN0YW50OgogICAgICAgICByZXR1cm47CkBAIC03MSw2ICs3Miw3IEBAIHZv
aWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY28KICAgICBjYXNlIENvbGRBbnk6
CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICBjYXNl
IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAgIGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIExhdGVSZWdpc3RlcjoKQEAgLTE3NSw2ICsxNzcsOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsCiAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2Ji
ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAg
ICBvdXQucHJpbnQoIlNvbWVFYXJseVJlZ2lzdGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMjI3MjczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY1LDYgKzY1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBj
b3VsZCBiZSBhCiAgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJl
ciEKICAgICAgICAgU29tZVJlZ2lzdGVyLAorICAgICAgICAKKyAgICAgICAgLy8gQXMgYW4gaW5w
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJl
Z2lzdGVyIGJ1dCB0aGF0IHRoaXMKKyAgICAgICAgLy8gcmVnaXN0ZXIgaXMgdGhlbiBjb2JiZXJl
ZCB3aXRoIGdhcmJhZ2UuIFRoaXMgb25seSB3b3JrcyBmb3IgcGF0Y2hwb2ludHMuCisgICAgICAg
IFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyLAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rl
ciwgYnV0IGltcGxpZXMKICAgICAgICAgLy8gdGhhdCB0aGUgZGVmIGhhcHBlbnMgYmVmb3JlIGFu
eSBvZiB0aGUgZWZmZWN0cyBvZiB0aGUgc3RhY2ttYXAuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IK
QEAgLTEwNyw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgVmFsdWVSZXAoS2luZCBraW5kKQogICAg
ICAgICA6IG1fa2luZChraW5kKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFu
eSB8fCBraW5kID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNv
bWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVFYXJseVJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJU
KGtpbmQgPT0gV2FybUFueSB8fCBraW5kID09IENvbGRBbnkgfHwga2luZCA9PSBMYXRlQ29sZEFu
eSB8fCBraW5kID09IFNvbWVSZWdpc3RlciB8fCBraW5kID09IFNvbWVSZWdpc3RlcldpdGhDbG9i
YmVyIHx8IGtpbmQgPT0gU29tZUVhcmx5UmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBW
YWx1ZVJlcCByZWcoUmVnIHJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NTUsMTUgKzk1
NSw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7
Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9yIGFsbG9j
YXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdT
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoIWFsbG9jYXRvcikgewotICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlz
IGNhc2Ugd291bGQgc3VjayEKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5qdW1wKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSMik7Ci0g
ICAgICAgICAgICAgICAgaml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSLCBhbGxvY2F0b3IsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3Ip
LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw4ICs0Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5saW5lQ2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpCi0gICAgICAgIDogbV9hbGxvY2F0b3IoMCkKLSAgICAgICAgLCBtX2lubGluZUNh
cGFjaXR5KDApCisgICAgICAgIDogbV9pbmxpbmVDYXBhY2l0eSgwKQogICAgIHsKICAgICB9CiAK
QEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAg
ICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2NhdG9yID0gQWxsb2Nh
dG9yKCk7CiAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1faW5saW5lQ2Fw
YWNpdHkgPSAwOwogICAgICAgICBBU1NFUlQoaXNOdWxsKCkpOwpAQCAtNzcsNyArNzYsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIHBvc3NpYmxlRGVmYXVsdFByb3BlcnR5Q291
bnQoVk0mLCBKU09iamVjdCogcHJvdG90eXBlKTsKIAotICAgIEJsb2NrRGlyZWN0b3J5KiBtX2Fs
bG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0
ZWQgY29kZS4KKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1h
a2UgdGhpbmdzIGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiAgICAgdW5zaWduZWQgbV9pbmxpbmVDYXBhY2l0eTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjcyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQogCiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGV4ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSgpKSB7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEZpbmFs
T2JqZWN0VHlwZSk7Ci0gICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAg
ICAgICBtX2FsbG9jYXRvciA9IEFsbG9jYXRvcigpOwogICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
c2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkg
PSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05
OSwxMSArOTksMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maQog
ICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBh
Y2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcik7CisgICAgQWxsb2NhdG9yIGFsbG9j
YXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpOwogCiAgICAgLy8gVGFrZSBhZHZh
bnRhZ2Ugb2YgZXh0cmEgaW5saW5lIGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFz
cy4KICAgICBpZiAoYWxsb2NhdG9yKSB7Ci0gICAgICAgIHNpemVfdCBzbG9wID0gKGFsbG9jYXRv
ci0+Y2VsbFNpemUoKSAtIGFsbG9jYXRpb25TaXplKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pOworICAgICAgICBzaXplX3Qgc2xvcCA9IChhbGxvY2F0b3IuY2VsbFNpemUodm0uaGVh
cCkgLSBhbGxvY2F0aW9uU2l6ZSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKICAg
ICAgICAgaW5saW5lQ2FwYWNpdHkgKz0gc2xvcDsKICAgICAgICAgaWYgKGlubGluZUNhcGFjaXR5
ID4gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgIGlubGlu
ZUNhcGFjaXR5ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsKQEAgLTExMyw3
ICsxMTMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpCiAKICAg
ICBpZiAoaXNQb2x5UHJvdG8pIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzUG9seVBy
b3RvKCkpOwotICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1fYWxsb2Nh
dG9yID0gQWxsb2NhdG9yKCk7CiAgICAgICAgIGV4ZWN1dGFibGUtPnNldENhY2hlZFBvbHlQcm90
b1N0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXhl
Y3V0YWJsZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOSArMTEz
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFnZUdQUik7CiAKICAgICBpZiAoc2l6ZSkgewot
ICAgICAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKSB7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBt
X2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgaWYgKEFsbG9jYXRvciBhbGxvY2F0b3IgPSBt
X2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkgeworICAg
ICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmFkZFB0cigKICAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tMzIob3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwKQEAgLTEyOCwxMSArMTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAg
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+
KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3JQdHIp
IHsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0
Y2hHUFIpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2Jq
ZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBpZiAoYWxsb2NhdG9y
KSB7CiAgICAgICAgIHVpbnQzMl90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2sodmVj
dG9yTGVuZ3RoKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxv
Y2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQ
UiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQ
UiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAg
bV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwpAQCAtNDIwOCw5ICs0MjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1ha2VSb3BlKE5vZAogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgQmxvY2tE
aXJlY3RvcnkqIGJsb2NrRGlyZWN0b3J5ID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPigqbV9q
aXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYmxvY2tEaXJlY3RvcnkpLCBhbGxvY2F0b3JHUFIpOwotICAgIGVtaXRBbGxvY2F0
ZUpTQ2VsbChyZXN1bHRHUFIsIGJsb2NrRGlyZWN0b3J5LCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJ
bW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEFsbG9jYXRvciBh
bGxvY2F0b3JWYWx1ZSA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0LnZtKCkpLT5h
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQ
UiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQUiwg
VHJ1c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAg
IAogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1PcEdQUnM7ICsraSkKQEAgLTgzODMsNyArODM4MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qg
c2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAg
IEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBpZiAo
IWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQwOCw5ICs4NDA1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gy
LmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAg
ICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIp
OwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5lbWl0QWxs
b2NhdGUoc2NyYXRjaEdQUjEsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBz
bG93UGF0aCk7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBKSVRBbGxvY2F0
b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1Bh
dGgpOwogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgIAogICAgIGZvciAocHRy
ZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7
IG9mZnNldCArPSBzaXplb2Yodm9pZCopKQpAQCAtODQyOCw3ICs4NDI0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0gb2xk
U2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2Rl
LT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1
ZSkpOwogICAgIAotICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKG5ld1Np
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnBy
ZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ1Niw4ICs4NDUyLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIpOwotICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgYWxsb2Nh
dG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5lbWl0
QWxsb2NhdGUoc2NyYXRjaEdQUjEsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgCiAgICAgbV9qaXQuYWRk
UHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIApAQCAtMTE0NDEsMTQgKzExNDM2LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKE4KICAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkp
LCByYXJlRGF0YUdQUik7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBh
bGxvY2F0b3JHUFIsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKIAogICAg
IGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1hc2sg
PSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBu
dWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNrLCBzY3Jh
dGNoR1BSLCBzbG93UGF0aCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBK
SVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0
ZXJmbHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAogICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVE
YXRhKCkpLCByYXJlRGF0YUdQUik7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBh
Y2l0eSgpKSwgaW5saW5lQ2FwYWNpdHlHUFIpOwpAQCAtMTE0NzQsMTQgKzExNDY5LDE3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QoTm8KIAogICAgIFJlZ2lzdGVyZWRT
dHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Cisg
ICAgQWxsb2NhdG9yIGFsbG9jYXRvclZhbHVlID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
Km1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKLSAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3RlZEltbTMy
KDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBh
bGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7Ci0gICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBtX2ppdC5t
dXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIGlmICghYWxsb2NhdG9yVmFsdWUpCisgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgICAgIGF1dG8gbWFz
ayA9IFRydXN0ZWRJbW0zMigwKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvclZhbHVlKSwgYWxsb2NhdG9yR1BS
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwg
c2xvd1BhdGgpOworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5tdXRh
dG9yRmVuY2UoKm1faml0LnZtKCkpOworICAgIH0KIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRH
UFIsIHN0cnVjdHVyZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMTQxLDcg
KzMxNDEsNyBAQCBwdWJsaWM6CiAgICAgLy8gQWxsb2NhdG9yIGZvciBhIGNlbGwgb2YgYSBzcGVj
aWZpYyBzaXplLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiAvLyBTdHJ1
Y3R1cmVUeXBlIGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlND
ZWxsKAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
LCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBh
bGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAg
ICAgIG1faml0LmVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2Nh
dG9yR1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTMxNTAsNyArMzE1
MCw3IEBAIHB1YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGFuIG9iamVjdCBvZiBhIHNwZWNp
ZmljIHNpemUuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5cGVuYW1l
IFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4gLy8gU3RydWN0dXJlVHlwZSwgU3RvcmFn
ZVR5cGUgYW5kLCBNYXNrVHlwZSBjYW4gYmUgR1BSIG9yIEltbVB0ci4KICAgICB2b2lkIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVy
ZSwKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLAogICAgICAg
ICBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIG1faml0
LmVtaXRBbGxvY2F0ZUpTT2JqZWN0KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNzI3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFj
cm8pIFwKICAgICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAotICAgIG1hY3JvKENv
bXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9m
ZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEJsb2NrRGlyZWN0b3J5KikpIFwK
KyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0
ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihBbGxvY2F0
b3IpKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8o
SlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMs
IDAsIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI3MjczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01ODU3LDEwICs1ODU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93
UGF0aCk7CiAgICAgICAgIAotICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
b2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwor
ICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFs
bG9jYXRvciksIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CisgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHZtKCkuc3RyaW5nU3Ry
dWN0dXJlLmdldCgpLCBzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5zdG9yZVB0
cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQpAQCAtOTg4NSw3ICs5
ODg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICAgICAgICAgIEFsbG9jYXRvciBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5h
bE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgICAgICAgICAgICAgIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleGluZ0hlYWRlclNp
emUgPSAwOwpAQCAtOTk0NCw3ICs5OTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAg
IExWYWx1ZSBtYXNrID0gY29tcHV0ZUJ1dHRlcmZseUluZGV4aW5nTWFzayh2ZWN0b3JMZW5ndGgp
OwogICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVj
dCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY2VsbEFsbG9jYXRvciks
IHN0cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2VsbEFsbG9jYXRvci5vZmZzZXQoKSksIHN0
cnVjdHVyZSwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtYXNrLCBzbG93UGF0aCk7CiAKICAgICAgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmpl
Y3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9
IG1fb3V0LmFuY2hvcihmYXN0QnV0dGVyZmx5VmFsdWUpOwpAQCAtMTA5MzEsOCArMTA5MzEsOCBA
QCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
c2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBCbG9ja0RpcmVjdG9yeSog
YWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7Ci0gICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENlbGwo
bV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xvd1BhdGgpOworICAgICAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CisgICAgICAgIExWYWx1ZSBzdGFydE9mU3RvcmFnZSA9IGFsbG9jYXRlSGVhcENl
bGwobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzbG93UGF0aCk7CiAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCiAgICAgICAg
ICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwpAQCAtMTE5NjQsMTYgKzExOTY0LDI4IEBAIHByaXZhdGU6CiAKICAgICBMVmFs
dWUgYWxsb2NhdGVIZWFwQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhY3R1YWxBbGxvY2F0b3IgPSBudWxs
cHRyOwotICAgICAgICBpZiAoYWxsb2NhdG9yLT5oYXNJbnRQdHIoKSkKLSAgICAgICAgICAgIGFj
dHVhbEFsbG9jYXRvciA9IGJpdHdpc2VfY2FzdDxCbG9ja0RpcmVjdG9yeSo+KGFsbG9jYXRvci0+
YXNJbnRQdHIoKSk7CisgICAgICAgIEpJVEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3I7CisgICAg
ICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludDMyKCkpCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0
b3IgPSBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KEFsbG9jYXRvcihhbGxvY2F0b3ItPmFzSW50MzIo
KSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhY3R1YWxBbGxvY2F0b3IgPSBKSVRBbGxv
Y2F0b3I6OnZhcmlhYmxlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgeworICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgeworICAgICAg
ICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IuYWxsb2NhdG9yKCkpIHsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBoYXZlQWxsb2NhdG9yID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShoYXZlQWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKHNsb3dQYXRoKTsK
KyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhoYXZlQWxsb2NhdG9yLCBsYXN0TmV4dCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZWl0aGVy
IHdlIGtub3cgdGhhdCB0aGUgYWxsb2NhdG9yIGlzIG51bGwgb3Igd2UgZG9uJ3Qga25vdyB3aGF0
IHRoZQogICAgICAgICAgICAgLy8gYWxsb2NhdG9yIGlzLiBJbiBlaXRoZXIgY2FzZSwgd2UgbmVl
ZCB0aGUgbnVsbCBjaGVjay4KICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhhdmVBbGxvY2F0b3Ig
PSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoaGF2ZUFsbG9jYXRvcik7Ci0gICAgICAgICAgICBt
X291dC5icmFuY2goYWxsb2NhdG9yLCB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xv
d1BhdGgpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291
dC5ub3RFcXVhbChhbGxvY2F0b3IsIG1fb3V0LmNvbnN0SW50MzIoQWxsb2NhdG9yKCkub2Zmc2V0
KCkpKSwKKyAgICAgICAgICAgICAgICB1c3VhbGx5KGhhdmVBbGxvY2F0b3IpLCByYXJlbHkoc2xv
d1BhdGgpKTsKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhdmVBbGxvY2F0b3IsIGxhc3RO
ZXh0KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTExOTgzLDcgKzExOTk1LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291
dC5wYXRjaHBvaW50KHBvaW50ZXJUeXBlKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3Rz
LnRlcm1pbmFsID0gdHJ1ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVy
KGFsbG9jYXRvcik7CisgICAgICAgIGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFudCgpKQor
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhDbG9i
YmVyKGFsbG9jYXRvcik7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cysrOwogICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OlNv
bWVFYXJseVJlZ2lzdGVyOwogICAgICAgICAKQEAgLTExOTk0LDYgKzEyMDA5LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QganVtcFRvU2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgR1BSUmVnIGFsbG9jYXRvckdQUjsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2Nh
dG9yLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFy
YW1zLmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBXZSB1c2UgYSBwYXRjaHBvaW50IHRvIGVtaXQgdGhlIGFsbG9jYXRp
b24gcGF0aCBiZWNhdXNlIHdoZW5ldmVyIHdlIG1lc3Mgd2l0aAogICAgICAgICAgICAgICAgIC8v
IGFsbG9jYXRpb24gcGF0aHMsIHdlIGFscmVhZHkgcmVhc29uIGFib3V0IHRoZW0gYXQgdGhlIG1h
Y2hpbmUgY29kZSBsZXZlbC4gV2Uga25vdwogICAgICAgICAgICAgICAgIC8vIGV4YWN0bHkgd2hh
dCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB3ZSB3YW50LiBXZSdyZSBjb25maWRlbnQgdGhhdCBubyBj
b21waWxlcgpAQCAtMTIwMDEsNyArMTIwMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IC8vIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlKCkuIFRoYXQgd2F5LCB0aGUgc2FtZSBv
cHRpbWl6ZWQgcGF0aCBpcyBzaGFyZWQgYnkKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhl
IGNvbXBpbGVyIHRpZXJzLgogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcigKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1
YWxBbGxvY2F0b3IsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9TdWNjZXNzOwpAQCAtMTIwOTMsOCArMTIxMTQsOCBAQCBwcml2YXRlOgogICAg
IExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5
cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgaW5kZXhpbmdNYXNrLCBMQmFz
aWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgcmV0
dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAg
ICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CiAg
ICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4KQEAgLTEyMTEzLDE2ICsxMjEzNCwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxl
dGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBh
Y3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICAgICAgICAgIEFsbG9jYXRvciBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxT
dWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRv
cikgewogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVy
bzsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0
dWFsQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVh
bEFsbG9jYXRvci5vZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwpAQCAtMTIx
NDEsNyArMTIxNjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQubG9hZFB0cigKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQzMigKICAgICAgICAgICAgIG1f
b3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2Vf
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1
YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwpAQCAtMTIxNTYsOCArMTIxNzcs
NyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCiAg
ICAgICAgIExWYWx1ZSBzaXplLCBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSwgTFZhbHVl
IGJ1dHRlcmZseSwgTFZhbHVlIGJ1dHRlcmZseUluZGV4aW5nTWFzaywgTEJhc2ljQmxvY2sgc2xv
d1BhdGgpCiAgICAgewotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6
ZSgKLSAgICAgICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93
UGF0aCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJz
cGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBidXR0ZXJm
bHlJbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAKQEAgLTEyMTY1LDE1ICsxMjE4NSwx
NCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKAogICAg
ICAgICBMVmFsdWUgc2l6ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvclNpemUo
Ci0gICAgICAgICAgICAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1Bh
dGgpOworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgICAgICByZXR1cm4g
YWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7CiAgICAgfQogICAg
IAogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0
Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBBbGxvY2F0b3IgYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdl
IGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2FsbCB0byB0aGUgYWxsb2NhdG9yCiAgICAg
ICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0aGUgc2xvdyBwYXRoLgpAQCAtMTIxODUs
NyArMTIyMDQsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291
dC5pbnRQdHJaZXJvLCBtX291dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50
UHRyWmVybywgbV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3Vuc2lnbmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUoSGVhcCYgaGVhcCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0
KS0+Y2VsbFNpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlIDxj
bGltaXRzPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7Citj
bGFzcyBIZWFwOworY2xhc3MgVk07CisKK2NsYXNzIEFsbG9jYXRvciB7CitwdWJsaWM6CisgICAg
QWxsb2NhdG9yKCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgQWxsb2NhdG9yKHVuc2lnbmVkIG9m
ZnNldCkKKyAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkKiBhbGxvY2F0ZShWTSYsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGlzIHZlcnNpb24gY2FsbHMgRmFpbHVyZUZ1
bmMgaWYgd2UgaGF2ZSBhIG51bGwgYWxsb2NhdG9yIG9yIGlmIHRoZSBUTEMgaGFzbid0IGJlZW4g
cmVzaXplZAorICAgIC8vIHRvIGluY2x1ZGUgdGhpcyBhbGxvY2F0b3IuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRmFpbHVyZUZ1bmM+CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoVk0mLCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSwgY29uc3QgRmFpbHVyZUZ1bmMmKSBj
b25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBjZWxsU2l6ZShIZWFwJikgY29uc3Q7CisgICAgCisg
ICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWxsb2NhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQgPT0gb3RoZXIub2Zmc2V0KCk7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QWxsb2NhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQWxsb2Nh
dG9yKCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9vZmZzZXQgeyBVSU5UX01B
WCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0FsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJU
aHJlYWRMb2NhbENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCogQWxs
b2NhdG9yOjphbGxvY2F0ZShWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBjb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gVGhyZWFkTG9jYWxD
YWNoZTo6YWxsb2NhdG9yKHZtLCBtX29mZnNldCkuYWxsb2NhdGUoY29udGV4dCwgbW9kZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZhaWx1cmVGdW5jPgordm9pZCogQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZShWTSYgdm0sIEdDRGVmZXJyYWxDb250ZXh0KiBjb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgbW9kZSwgY29uc3QgRmFpbHVyZUZ1bmMmIGZhaWx1cmVGdW5jKSBjb25zdAorewor
ICAgIHZvaWQqIHJlc3VsdDsKKyAgICBUaHJlYWRMb2NhbENhY2hlOjp0cnlHZXRBbGxvY2F0b3Io
CisgICAgICAgIHZtLCBtX29mZnNldCwKKyAgICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciYgYWxs
b2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUoY29udGV4
dCwgbW9kZSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoKSB7CisgICAgICAgICAgICByZXN1
bHQgPSBmYWlsdXJlRnVuYygpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QmxvY2tEaXJlY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvY2tEaXJlY3Rvcnku
aCIKIAotI2luY2x1ZGUgIkFsbG9jYXRpbmdTY29wZS5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0
b3J5SW5saW5lcy5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUg
IkhlYXAuaCIKQEAgLTM5LDE1ICszOCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGlj
IGNvbnN0ZXhwciBib29sIHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyA9IHRydWU7Ci0KIEJsb2NrRGly
ZWN0b3J5OjpCbG9ja0RpcmVjdG9yeShIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAg
OiBtX2ZyZWVMaXN0KGNlbGxTaXplKQotICAgICwgbV9jdXJyZW50QmxvY2soMCkKLSAgICAsIG1f
bGFzdEFjdGl2ZUJsb2NrKDApCi0gICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihjZWxsU2l6ZSkpCisgICAgOiBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxs
U2l6ZSkpCiAgICAgLCBtX2hlYXAoaGVhcCkKIHsKKyAgICBoZWFwLT50aHJlYWRMb2NhbENhY2hl
TGF5b3V0KCkuYWxsb2NhdGVPZmZzZXQodGhpcyk7CiB9CiAKIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKQEAgLTgxLDE0MyArNzYsMTQgQEAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nr
c1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAotdm9pZCBCbG9ja0RpcmVjdG9yeTo6ZGlkQ29uc3VtZUZy
ZWVMaXN0KCkKLXsKLSAgICBpZiAobV9jdXJyZW50QmxvY2spCi0gICAgICAgIG1fY3VycmVudEJs
b2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7
Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9y
eTo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpCitNYXJrZWRCbG9jazo6SGFuZGxlKiBC
bG9ja0RpcmVjdG9yeTo6ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpCiB7Ci0gICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAotICAgIEFTU0VSVCghbV9j
dXJyZW50QmxvY2spOwotICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgp
KTsKLSAgICAKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9ICht
X2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1
cnNvciwgdHJ1ZSk7Ci0gICAgICAgIGlmIChtX2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Mu
c2l6ZSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBzZXRJc0NhbkFs
bG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3Is
IGZhbHNlKTsKLQotICAgICAgICBpZiAodm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVJbihtX2Js
b2Nrc1ttX2FsbG9jYXRpb25DdXJzb3JdKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotICAgIAotICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxs
b2NhdG9ycygpCi0gICAgICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVz
dHJ1Y3Rpb24oKSkpIHsKLSAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0g
bV9zdWJzcGFjZS0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJsb2NrLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9zdWJzcGFjZS0+
YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYmxv
Y2stPnN3ZWVwKG51bGxwdHIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJdCdzIGdv
b2QgdGhhdCB0aGlzIGNsZWFycyBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxs
IG90aGVyIGJpdHMsCi0gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNo
YW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5Ci0g
ICAgICAgICAgICAvLyBhbmQgZW1wdHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgICAg
ICBibG9jay0+cmVtb3ZlRnJvbURpcmVjdG9yeSgpOwotICAgICAgICAgICAgYWRkQmxvY2soYmxv
Y2spOwotICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9y
eTo6YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLXsKLSAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZUluKGJsb2NrKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxv
Y2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7
Ci0gICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwotICAgIAotICAgIGJsb2NrLT5z
d2VlcCgmbV9mcmVlTGlzdCk7Ci0gICAgCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxl
IG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVz
ZSwgYnV0Ci0gICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBk
byBpdCBzb21ldGltZXMuCi0gICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkp
IHsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIGJsb2Nr
LT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+
aXNGcmVlTGlzdGVkKCkpOwotICAgICAgICBBU1NFUlQoIWlzRW1wdHkoTm9Mb2NraW5nTmVjZXNz
YXJ5LCBibG9jaykpOwotICAgICAgICBBU1NFUlQoIWlzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShO
b0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1f
Y2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vy
c29yLCB0cnVlKTsKKyAgICBpZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIG1fY3VycmVudEJs
b2NrID0gYmxvY2s7Ci0gICAgCi0gICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0
ZSgKLSAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
fSk7Ci0gICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRy
dWUpOwotICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2Nr
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCkKLXsKLSAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdD
cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNv
dW50ID0gMDsKLSAgICBpZiAoIWFsbG9jYXRpb25Db3VudCkgewotICAgICAgICBpZiAoIW1faGVh
cC0+aXNEZWZlcnJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAg
ICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxl
Y3Rpb25TY29wZTo6RnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrYWxsb2NhdGlv
bkNvdW50ID49IE9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQotICAgICAgICBh
bGxvY2F0aW9uQ291bnQgPSAwOwotfQotCi12b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVT
bG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOwotICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJy
YWxDb250ZXh0KTsKLQotICAgIEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsK
LSAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwotICAg
IAotICAgIGRpZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIAotICAgIEFsbG9jYXRpbmdTY29wZSBo
ZWxwaW5nSGVhcCgqbV9oZWFwKTsKLQotICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JE
ZWZlcihkZWZlcnJhbENvbnRleHQpOwogICAgIAotICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0
aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBoYXMgYSBjdXJy
ZW50QmxvY2suIFRoaXMgb25seQotICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0
ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24u
Ci0gICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwotICAgIAotICAgIHZvaWQqIHJlc3Vs
dCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICAKLSAgICBpZiAoTElLRUxZ
KHJlc3VsdCAhPSAwKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jayA9IHRyeUFsbG9jYXRlQmxvY2soKTsKLSAgICBpZiAoIWJsb2Nr
KSB7Ci0gICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCkKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBhZGRCbG9jayhi
bG9jayk7Ci0gICAgcmVzdWx0ID0gYWxsb2NhdGVJbihibG9jayk7Ci0gICAgQVNTRVJUKHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHko
Tm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKKyAgICByZXR1
cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXTsKIH0KIAogc3RhdGljIHNpemVfdCBibG9j
a0hlYWRlclNpemUoKQpAQCAtMzEzLDI0ICsxNzksMTkgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6
c3RvcEFsbG9jYXRpbmcoKQogewogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQ
b2ludGVyKHRoaXMpLCAiOiBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAg
ICBBU1NFUlQoIW1fbGFzdEFjdGl2ZUJsb2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7
Ci0gICAgICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRp
bmcobV9mcmVlTGlzdCk7Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsK
LSAgICBtX2N1cnJlbnRCbG9jayA9IDA7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOworICAgIG1f
bG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCisgICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFs
bG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLT5zdG9wQWxsb2NhdGluZygpOworICAg
ICAgICB9KTsKIH0KIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpb24o
KQogewotICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRCbG9j
ayA9IG51bGxwdHI7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotCisgICAgbV9sb2NhbEFsbG9j
YXRvcnMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7
CisgICAgICAgICAgICBhbGxvY2F0b3ItPnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgICAg
IH0pOworICAgIAogICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNv
ciA9IDA7CiAgICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsKQEAgLTM0NCw2ICsyMDUsMjEgQEAgdm9p
ZCBCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpbwogICAgIH0KIH0KIAordm9pZCBC
bG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmdGb3JHb29kKCkKK3sKKyAgICBpZiAoZmFsc2Up
CisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJlY3Rvcnk6OnN0
b3BBbGxvY2F0aW5nRm9yR29vZCFcbiIpOworICAgIAorICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZv
ckVhY2goCisgICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICAgICAg
ICAgICAgYWxsb2NhdG9yLT5zdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKKyAgICAgICAgfSk7CisK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jYWxBbGxvY2F0b3JzTG9jayk7CisgICAg
d2hpbGUgKCFtX2xvY2FsQWxsb2NhdG9ycy5pc0VtcHR5KCkpCisgICAgICAgIG1fbG9jYWxBbGxv
Y2F0b3JzLmJlZ2luKCktPnJlbW92ZSgpOworfQorCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpsYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpCiB7CiAgICAgZm9yRWFjaEJsb2NrKApAQCAtMzU0LDEyICsyMzAs
MTAgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpegogCiB2b2lkIEJs
b2NrRGlyZWN0b3J5OjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAgICBpZiAoIW1fbGFzdEFjdGl2
ZUJsb2NrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1l
QWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2
ZUJsb2NrOwotICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2xvY2FsQWxs
b2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3Ip
IHsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+cmVzdW1lQWxsb2NhdGluZygpOworICAgICAgICB9
KTsKIH0KIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6YmVnaW5NYXJraW5nRm9yRnVsbENvbGxlY3Rp
b24oKQpAQCAtMzc5LDcgKzI1Myw3IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmVuZE1hcmtpbmco
KQogICAgIC8vIGtub3cgd2hhdCBraW5kIG9mIGNvbGxlY3Rpb24gaXQgaXMuIFRoYXQga25vd2xl
ZGdlIGlzIGFscmVhZHkgZW5jb2RlZCBpbiB0aGUgbV9tYXJraW5nWFlaCiAgICAgLy8gdmVjdG9y
cy4KICAgICAKLSAgICBpZiAoIXRyYWRlRGVzdHJ1Y3RvckJsb2NrcyAmJiBuZWVkc0Rlc3RydWN0
aW9uKCkpIHsKKyAgICBpZiAoIU9wdGlvbnM6OnRyYWRlRGVzdHJ1Y3RvckJsb2NrcygpICYmIG5l
ZWRzRGVzdHJ1Y3Rpb24oKSkgewogICAgICAgICBBU1NFUlQobV9lbXB0eS5pc0VtcHR5KCkpOwog
ICAgICAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgPSBtX2xpdmUgJiB+bV9tYXJraW5nUmV0
aXJlZDsKICAgICB9IGVsc2UgewpAQCAtNTEyLDUgKzM4NiwxNSBAQCBNYXJrZWRTcGFjZSYgQmxv
Y2tEaXJlY3Rvcnk6Om1hcmtlZFNwYWNlCiAgICAgcmV0dXJuIG1fc3Vic3BhY2UtPnNwYWNlKCk7
CiB9CiAKK2Jvb2wgQmxvY2tEaXJlY3Rvcnk6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCog
dGFyZ2V0KQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgbV9sb2NhbEFsbG9jYXRv
cnMuZm9yRWFjaCgKKyAgICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICByZXN1bHQgfD0gYWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRDZWxsKHRhcmdldCk7
CisgICAgICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJ
KHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGly
ZWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDEwIEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgorI2luY2x1ZGUgIkFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIkNlbGxBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRnJlZUxpc3QuaCIK
KyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAj
aW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgpA
QCAtNDEsNiArNDMsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1h
cmtlZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgVGhyZWFkTG9j
YWxDYWNoZUxheW91dDsKIAogI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKG1h
Y3JvKSBcCiAgICAgbWFjcm8obGl2ZSwgTGl2ZSkgLyogVGhlIHNldCBvZiBibG9jayBpbmRpY2Vz
IHRoYXQgaGF2ZSBhY3R1YWwgYmxvY2tzLiAqL1wKQEAgLTc2LDE0ICs3OSwxMiBAQCBjbGFzcyBC
bG9ja0RpcmVjdG9yeSB7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IAogcHVibGljOgotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlzdCgpOwotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwotCiAgICAgQmxvY2tEaXJlY3Rv
cnkoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CiAgICAgdm9pZCBzZXRTdWJzcGFjZShTdWJzcGFj
ZSopOwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHByZXBhcmVG
b3JBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOworICAgIHZvaWQgc3Rv
cEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7CiAgICAg
dm9pZCBiZWdpbk1hcmtpbmdGb3JGdWxsQ29sbGVjdGlvbigpOwogICAgIHZvaWQgZW5kTWFya2lu
ZygpOwpAQCAtOTcsMTAgKzk4LDkgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3Ry
dWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2b2lkKiBh
bGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAg
SGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogCi0gICAgYm9vbCBpc0ZyZWVMaXN0ZWRD
ZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxs
KGNvbnN0IHZvaWQqIHRhcmdldCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7CkBAIC0x
NTcsMjQgKzE1NywyMCBAQCBwdWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNv
bnN0OwogICAgIAotICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJlZUxpc3Q7IH0KKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
QWxsb2NhdG9yKG1fdGxjT2Zmc2V0KTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmls
ZSgpKTsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwog
ICAgIGZyaWVuZCBjbGFzcyBJc29DZWxsU2V0OwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKLSAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
LSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Ci0gICAgdm9pZCog
dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgdm9pZCogYWxsb2NhdGVJ
bihNYXJrZWRCbG9jazo6SGFuZGxlKik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENv
bGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgbV9m
cmVlTGlzdDsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CiAg
ICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKICAgICBWZWN0
b3I8dW5zaWduZWQ+IG1fZnJlZUJsb2NrSW5kaWNlczsKQEAgLTE5MywxMCArMTg5LDYgQEAgcHJp
dmF0ZToKICAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBu
ZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVtcHR5IGFsbG9jYXRpb24gKGFsbG9j
YXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXplX3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9
OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5j
cmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJy
ZW50QmxvY2s7Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2s7Ci0K
LSAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIENlbGxBdHRy
aWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHNob3VsZCBw
cm9iYWJseSBiZSByZWZlcmVuY2VzLgpAQCAtMjA2LDE2ICsxOTgsMTAgQEAgcHJpdmF0ZToKICAg
ICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5IHsgbnVsbHB0ciB9OwogICAgIEJsb2Nr
RGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlIHsgbnVsbHB0ciB9OwogICAgIEJs
b2NrRGlyZWN0b3J5KiBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBu
dWxscHRyIH07CisgICAgCisgICAgTG9jayBtX2xvY2FsQWxsb2NhdG9yc0xvY2s7CisgICAgc2l6
ZV90IG1fdGxjT2Zmc2V0OworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMb2NhbEFsbG9jYXRvciwg
QmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+PiBtX2xvY2FsQWxsb2NhdG9yczsK
IH07CiAKLWlubGluZSBwdHJkaWZmX3QgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3Qo
KQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQmxvY2tEaXJlY3RvcnksIG1fZnJlZUxp
c3QpOwotfQotCi1pbmxpbmUgcHRyZGlmZl90IEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxT
aXplKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEJsb2NrRGlyZWN0b3J5LCBtX2Nl
bGxTaXplKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAkocmV2aXNpb24gMjI3
MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICszMSw2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1pbmxpbmUgYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lk
KiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMoYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCogQmxv
Y2tEaXJlY3Rvcnk6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKLXsKLSAgICByZXR1cm4gbV9mcmVl
TGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAgICAgICAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBm
YWlsdXJlTW9kZSkpOwotICAgICAgICB9KTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IGlubGluZSB2b2lkIEJsb2NrRGlyZWN0b3J5Ojpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKIHsKICAgICBtX2xpdmUuZm9yRWFjaFNldEJpdCgKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAy
MjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9y
eUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxv
Y2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0zOCw0MCArNDIsMzggQEAgQ29tcGxldGVTdWJzcGFjZTo6Q29tcGxldGVTdWJzcGFj
ZShDU3RyaQogICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKIHsKICAgICBpbml0aWFsaXplKGhl
YXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9
IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKLSAgICAgICAgbV9hbGxvY2F0b3JG
b3JTaXplU3RlcFtpXSA9IG51bGxwdHI7CiB9CiAKIENvbXBsZXRlU3Vic3BhY2U6On5Db21wbGV0
ZVN1YnNwYWNlKCkKIHsKIH0KIAotQmxvY2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQWxsb2NhdG9y
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZSBtb2RlKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIG1v
ZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwg
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoVk0mIHZtLCBz
aXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1
YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIGFsbG9j
YXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiB9
CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0
dWFsKFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAgICB2b2lkICpyZXN1
bHQ7Ci0gICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKSkKLSAgICAg
ICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVN
b2RlKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhzaXplLCBkZWZl
cnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIEFsbG9j
YXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLnRyeUFsbG9j
YXRlKAorICAgICAgICB2bSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSwKKyAgICAgICAg
WyZdICgpIHsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3codm0sIHNpemUsIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgICAgICB9KTsKIH0KIAotQmxvY2tEaXJlY3Rv
cnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCitBbGxv
Y2F0b3IgQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2xvdyhzaXplX3Qgc2l6ZSkKIHsK
ICAgICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKTsK
ICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0
ZXBbaW5kZXhdOwogICAgIGlmICghc2l6ZUNsYXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIEFsbG9jYXRvcigpOwogICAgIAogICAgIC8vIFRoaXMgaXMgd3JpdHRl
biBpbiBzdWNoIGEgd2F5IHRoYXQgaXQncyBPSyBmb3IgdGhlIEpJVCB0aHJlYWRzIHRvIGVuZCB1
cCBoZXJlIGlmIHRoZXkgd2FudAogICAgIC8vIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHNv
bWUgYWxsb2NhdG9yIHRoYXQgaGFkbid0IGJlZW4gdXNlZCB5ZXQuIE5vdGUgdGhhdCBhIHBvc3Np
Ymx5LQpAQCAtODIsNyArODQsNyBAQCBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6
YWxsb2NhCiAgICAgLy8gdGhhdCBhbnkgImZvckVhY2hBbGxvY2F0b3IiIHRyYXZlcnNhbHMgd2ls
bCBvbmx5IHNlZSB0aGlzIGFsbG9jYXRvciBhZnRlciBpdCdzIGluaXRpYWxpemVkCiAgICAgLy8g
ZW5vdWdoOiBpdCB3aWxsIGhhdmUgCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNl
LmRpcmVjdG9yeUxvY2soKSk7Ci0gICAgaWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBt
X2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKKyAgICBpZiAoQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQogICAgICAgICByZXR1cm4gYWxsb2Nh
dG9yOwogCiAgICAgaWYgKGZhbHNlKQpAQCAtOTgsNyArMTAwLDcgQEAgQmxvY2tEaXJlY3Rvcnkq
IENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYQogICAgICAgICBpZiAoTWFya2VkU3BhY2U6OnNfc2l6
ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdID0gZGlyZWN0b3J5Owor
ICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeS0+YWxsb2Nh
dG9yKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWluZGV4LS0pCiAgICAgICAgICAgICBicmVh
azsKQEAgLTEwNywyMyArMTA5LDIzIEBAIEJsb2NrRGlyZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2EKICAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyRGlyZWN0b3J5
KGRpcmVjdG9yeSk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX2ZpcnN0RGly
ZWN0b3J5ID0gZGlyZWN0b3J5OwotICAgIHJldHVybiBkaXJlY3Rvcnk7CisgICAgcmV0dXJuIGRp
cmVjdG9yeS0+YWxsb2NhdG9yKCk7CiB9CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRlU2xvdyhzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFj
ZTo6YWxsb2NhdGVTbG93KFZNJiB2bSwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAg
ICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0KTsK
KyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3codm0sIHNpemUsIGRlZmVycmFsQ29u
dGV4dCk7CiAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNz
ZXJ0KQogICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3ZvaWQqIENvbXBsZXRlU3Vi
c3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0KQogewotICAgIHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNl
LmhlYXAoKS0+dm0oKSk7CisgICAgc2FuaXRpemVTdGFja0ZvclZNKCZ2bSk7CiAgICAgCi0gICAg
aWYgKEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6RW5zdXJlQWxsb2NhdG9yKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+
YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51
bGwpOworICAgIGlmIChBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCisgICAgICAgIHJldHVybiBhbGxvY2F0
b3IuYWxsb2NhdGUodm0sIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsKTsKICAgICAKICAgICBpZiAoc2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRp
b25DdXRvZmYoKQogICAgICAgICAmJiBzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikg
ewpAQCAtMTMyLDE1ICsxMzQsMTUgQEAgdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93KAogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICAKLSAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJh
bENvbnRleHQpOworICAgIHZtLmhlYXAuY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJh
bENvbnRleHQpOwogICAgIAogICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFy
a2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKLSAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRp
b24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9zcGFjZS5tX2hlYXAsIHNpemUsIHRo
aXMpOworICAgIExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6
dHJ5Q3JlYXRlKHZtLmhlYXAsIHNpemUsIHRoaXMpOwogICAgIGlmICghYWxsb2NhdGlvbikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlv
bnMuYXBwZW5kKGFsbG9jYXRpb24pOwotICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShz
aXplKTsKKyAgICB2bS5oZWFwLmRpZEFsbG9jYXRlKHNpemUpOwogICAgIG1fc3BhY2UubV9jYXBh
Y2l0eSArPSBzaXplOwogICAgIAogICAgIG1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2Nh
dGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJz
cGFjZS5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDMxICszOSwzMSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSBzdWJzcGFjZXMgc3BlYWsgb2YgQmxv
Y2tEaXJlY3RvcmllcyBhcyAiYWxsb2NhdG9ycyIsIGJ1dCB0aGF0J3MgdGVtcG9yYXJ5LgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE1NTkKLSAgICBC
bG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3Zl
cnJpZGU7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90
LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yKHNpemVfdCwg
QWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKICAgICAKLSAgICB2b2lkKiBhbGxv
Y2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBv
dmVycmlkZTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAg
dm9pZCogYWxsb2NhdGUoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxv
Y2F0ZU5vblZpcnR1YWwoVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKTsKICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2Nh
dG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29tcGxldGVTdWJzcGFj
ZSwgbV9hbGxvY2F0b3JGb3JTaXplU3RlcCk7IH0KICAgICAKLSAgICBCbG9ja0RpcmVjdG9yeSoq
IGFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
MF07IH0KKyAgICBBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1f
YWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KIAogcHJpdmF0ZToKLSAgICBCbG9ja0RpcmVjdG9y
eSogYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3JT
bG93KHNpemVfdCk7CiAgICAgCiAgICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVk
IHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KLSAgICB2b2lk
KiBhbGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWls
dXJlTW9kZSk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqKTsKKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3coVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxD
b250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZVNs
b3coVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CiAgICAgCi0gICAgc3RkOjphcnJh
eTxCbG9ja0RpcmVjdG9yeSosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0
b3JGb3JTaXplU3RlcDsKKyAgICBzdGQ6OmFycmF5PEFsbG9jYXRvciwgTWFya2VkU3BhY2U6Om51
bVNpemVDbGFzc2VzPiBtX2FsbG9jYXRvckZvclNpemVTdGVwOwogICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QmxvY2tEaXJlY3Rvcnk+PiBtX2RpcmVjdG9yaWVzOwogfTsKIAotQUxXQVlTX0lO
TElORSBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQUxXQVlTX0lOTElORSBB
bGxvY2F0b3IgQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qg
c2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQogewogICAgIGlmIChzaXplIDw9IE1hcmtlZFNw
YWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBCbG9ja0RpcmVjdG9yeSogcmVzdWx0ID0gbV9h
bGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07
CisgICAgICAgIEFsbG9jYXRvciByZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtl
ZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXTsKICAgICAgICAgc3dpdGNoIChtb2RlKSB7
CiAgICAgICAgIGNhc2UgQWxsb2NhdG9yRm9yTW9kZTo6TXVzdEFscmVhZHlIYXZlQWxsb2NhdG9y
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKQEAgLTc4LDcgKzc4LDcgQEAg
QUxXQVlTX0lOTElORSBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVChtb2RlICE9IEFsbG9jYXRvckZvck1v
ZGU6Ok11c3RBbHJlYWR5SGF2ZUFsbG9jYXRvcik7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIEFsbG9jYXRvcigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCAr
NTcsNiBAQCBzdHJ1Y3QgRnJlZUNlbGwgewogfTsKIAogY2xhc3MgRnJlZUxpc3QgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEZyZWVMaXN0KTsKLSAgICAKIHB1YmxpYzoKICAgICBGcmVlTGlz
dCh1bnNpZ25lZCBjZWxsU2l6ZSk7CiAgICAgfkZyZWVMaXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKHJldmlzaW9uIDIyNzI3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMTAgKzI5LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIZWFw
OwogY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CitjbGFzcyBMb2NhbEFsbG9jYXRvcjsKIAogY2xhc3Mg
R0NEZWZlcnJhbENvbnRleHQgewogICAgIGZyaWVuZCBjbGFzcyBIZWFwOwogICAgIGZyaWVuZCBj
bGFzcyBCbG9ja0RpcmVjdG9yeTsKKyAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7CiBw
dWJsaWM6CiAgICAgaW5saW5lIEdDRGVmZXJyYWxDb250ZXh0KEhlYXAmKTsKICAgICBpbmxpbmUg
fkdDRGVmZXJyYWxDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJTdG9wSWZOZWNl
c3NhcnlUaW1lci5oIgogI2luY2x1ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKICNpbmNsdWRlICJTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRM
b2NhbENhY2hlTGF5b3V0LmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKQEAgLTMx
Miw2ICszMTMsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
LCBtX2hlbHBlckNsaWVudCgmaGVhcEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhC
b3g8TG9jaz46OmNyZWF0ZSgpKQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhy
ZWFkQ29uZGl0aW9uOjpjcmVhdGUoKSkKKyAgICAsIG1fdGhyZWFkTG9jYWxDYWNoZUxheW91dChz
dGQ6Om1ha2VfdW5pcXVlPFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ+KCkpCiB7CiAgICAgbV93b3Js
ZFN0YXRlLnN0b3JlKDApOwogCkBAIC00NDYsNyArNDQ4LDcgQEAgdm9pZCBIZWFwOjpsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpCiAgICAgICAgIGRhdGFMb2coIjUgIik7CiAgICAgCiAgICAgbV9hcnJh
eUJ1ZmZlcnMubGFzdENoYW5jZVRvRmluYWxpemUoKTsKLSAgICBtX29iamVjdFNwYWNlLnN0b3BB
bGxvY2F0aW5nKCk7CisgICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsK
ICAgICBtX29iamVjdFNwYWNlLmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgcmVsZWFzZURl
bGF5ZWRSZWxlYXNlZE9iamVjdHMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xh
c3MgU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVy
OwogY2xhc3MgU3dlZXBpbmdTY29wZTsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiBj
bGFzcyBWTTsKIGNsYXNzIFdlYWtHQ01hcEJhc2U7CiBzdHJ1Y3QgQ3VycmVudFRocmVhZFN0YXRl
OwpAQCAtMzcyLDYgKzM3Myw4IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgdm9pZCBmb3JFYWNoU2xvdFZpc2l0b3IoY29uc3QgRnVuYyYpOworICAgIAorICAg
IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQmIHRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKSB7IHJldHVy
biAqbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEFsbG9jYXRpbmdTY29wZTsKQEAgLTcxNCw2ICs3MTcsOCBAQCBwcml2YXRlOgogICAgIAog
ICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSogbV9jdXJyZW50VGhyZWFkU3RhdGUgeyBudWxscHRyIH07
CiAgICAgV1RGOjpUaHJlYWQqIG1fY3VycmVudFRocmVhZCB7IG51bGxwdHIgfTsgLy8gSXQncyBP
SyBpZiB0aGlzIGJlY29tZXMgYSBkYW5nbGluZyBwb2ludGVyLgorICAgIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaHJlYWRMb2NhbENhY2hlTGF5b3V0PiBtX3RocmVhZExvY2FsQ2FjaGVMYXlvdXQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb0NlbGxTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0NlbGxTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTIgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9C
aXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi9GYXN0Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgor
I2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSXNvU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJJc29BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM1
LDYgKzM4LDcgQEAgSXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSAogICAg
IDogU3Vic3BhY2UobmFtZSwgaGVhcCkKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9kaXJl
Y3RvcnkoJmhlYXAsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNp
emU+KHNpemUpKQorICAgICwgbV9hbGxvY2F0b3IobV9kaXJlY3RvcnkuYWxsb2NhdG9yKCkpCiAg
ICAgLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJc29BbGln
bmVkTWVtb3J5QWxsb2NhdG9yPigpKQogewogICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBt
X2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOwpAQCAtNTAsMjAgKzU0LDIwIEBAIElz
b1N1YnNwYWNlOjp+SXNvU3Vic3BhY2UoKQogewogfQogCi1CbG9ja0RpcmVjdG9yeSogSXNvU3Vi
c3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQor
QWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRv
ckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
LCBtb2RlKTsKIH0KIAotdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplLCBH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
ZmFpbHVyZU1vZGUpCit2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoVk0mIHZtLCBzaXplX3Qg
c2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6
ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9u
VmlydHVhbCh2bSwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiB9CiAKLXZv
aWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJy
YWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJl
TW9kZSkKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoVk0mIHZtLCBzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhp
cy0+c2l6ZSgpKTsKLSAgICB2b2lkKiByZXN1bHQgPSBtX2RpcmVjdG9yeS5hbGxvY2F0ZShkZWZl
cnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiByZXN1bHQgPSBtX2FsbG9jYXRv
ci5hbGxvY2F0ZSh2bSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29T
dWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAgcHVibGljOgogCiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAotICAgIEJsb2NrRGly
ZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsK
LSAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9j
YXRvckZvck1vZGUpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0
b3JGb3JNb2RlKSBvdmVycmlkZTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOwogCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90
LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9j
YXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0
dWFsKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CkBAIC01NiwxNCAr
NTYsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICBzaXplX3QgbV9zaXplOwogICAgIEJsb2NrRGly
ZWN0b3J5IG1fZGlyZWN0b3J5OworICAgIEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJc29DZWxsU2V0LCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxJc29DZWxsU2V0Pj4gbV9jZWxsU2V0czsKIH07CiAKLWlubGluZSBCbG9ja0Rp
cmVjdG9yeSogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUs
IEFsbG9jYXRvckZvck1vZGUpCitpbmxpbmUgQWxsb2NhdG9yIElzb1N1YnNwYWNlOjphbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICByZXR1cm4gJm1fZGlyZWN0
b3J5OworICAgIHJldHVybiBtX2FsbG9jYXRvcjsKIH0KIAogI2RlZmluZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwQ2VsbFR5cGUsIHR5cGUpICgiSXNvbGF0ZWQgIiAjdHlwZSAiIFNwYWNl
IiwgKGhlYXApLCAoaGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5cGUpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2Nh
dG9yLmgiCisKKyNpbmNsdWRlICJBbGxvY2F0aW5nU2NvcGUuaCIKKyNpbmNsdWRlICJMb2NhbEFs
bG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqIGRpcmVj
dG9yeSkKKyAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKKyAgICAsIG1fY2VsbFNpemUoZGly
ZWN0b3J5LT5tX2NlbGxTaXplKQorICAgICwgbV9mcmVlTGlzdChtX2NlbGxTaXplKQoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9yc0xvY2sp
OworICAgIGRpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnMuYXBwZW5kKHRoaXMpOworfQorCitM
b2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoTG9jYWxBbGxvY2F0b3ImJiBvdGhlcikKKyAg
ICA6IG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQorICAgICwgbV9jZWxsU2l6ZShvdGhl
ci5tX2NlbGxTaXplKQorICAgICwgbV9mcmVlTGlzdChXVEZNb3ZlKG90aGVyLm1fZnJlZUxpc3Qp
KQorICAgICwgbV9jdXJyZW50QmxvY2sob3RoZXIubV9jdXJyZW50QmxvY2spCisgICAgLCBtX2xh
c3RBY3RpdmVCbG9jayhvdGhlci5tX2xhc3RBY3RpdmVCbG9jaykKK3sKKyAgICBvdGhlci5yZXNl
dCgpOworICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9kaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzTG9jayk7CisgICAgICAgIG90
aGVyLnJlbW92ZSgpOworICAgICAgICBtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnMuYXBw
ZW5kKHRoaXMpOworICAgIH0KK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6cmVzZXQoKQorewor
ICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Cisg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOworfQorCitMb2NhbEFsbG9jYXRvcjo6fkxv
Y2FsQWxsb2NhdG9yKCkKK3sKKyAgICBpZiAoaXNPbkxpc3QoKSkgeworICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2FsQWxsb2NhdG9yc0xvY2spOworICAg
ICAgICByZW1vdmUoKTsKKyAgICB9CisgICAgCisgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyBhbGxv
Y2F0b3IgaXNuJ3QgaG9sZGluZyBvbnRvIGFueSBtZW1vcnkuIFRoaXMgaXMgYSB2YWxpZCBhc3Nl
cnRpb24gZm9yIHRoZQorICAgIC8vIGZvbGxvd2luZyB0d28gdXNlIGNhc2VzOgorICAgIC8vIAor
ICAgIC8vIC0gSW1tb3J0YWwgVExDLiBUaG9zZSBkZXN0cnVjdCBhZnRlciB0aGUgaGVhcCBpcyBk
b25lIGRlc3RydWN0aW5nLCBzbyB0aGV5IHNob3VsZCBub3QgaGF2ZQorICAgIC8vICAgYW55IHN0
YXRlIGxlZnQgaW4gdGhlbS4KKyAgICAvLworICAgIC8vIC0gVExDIG93bmVkIGJ5IGFuIG9iamVj
dC4gU3VjaCBhIFRMQyBnZXRzIGRlc3Ryb3llZCBhZnRlciBhIEdDIGZsaXAgZHVyaW5nIHdoaWNo
IHdlIHByb3ZlZAorICAgIC8vICAgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGVyZWZvcmUs
IHRoZSBUTEMgc2hvdWxkIHN0aWxsIGJlIGluIGEgZnVsbHkgcmVzZXQgc3RhdGUgYXQgdGhlCisg
ICAgLy8gICB0aW1lIG9mIGRlc3RydWN0aW9uIGJlY2F1c2UgZm9yIGl0IHRvIGdldCBpbnRvIGFu
eSBvdGhlciBzdGF0ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxsb2NhdGVkCisgICAgLy8gICBpbiBp
dCAod2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mgc3VwcG9zZWRseSB1bnJlYWNoYWJs
ZSkuCisgICAgYm9vbCBvayA9IHRydWU7CisgICAgaWYgKCFtX2ZyZWVMaXN0LmFsbG9jYXRpb25X
aWxsRmFpbCgpKSB7CisgICAgICAgIGRhdGFMb2coIkZBVEFMOiAiLCBSYXdQb2ludGVyKHRoaXMp
LCAiLT5+TG9jYWxBbGxvY2F0b3IgaGFzIG5vbi1lbXB0eSBmcmVlLWxpc3QuXG4iKTsKKyAgICAg
ICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7CisgICAgICAg
IGRhdGFMb2coIkZBVEFMOiAiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT5+TG9jYWxBbGxvY2F0b3Ig
aGFzIG5vbi1udWxsIGN1cnJlbnQgYmxvY2suXG4iKTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKG1fbGFzdEFjdGl2ZUJsb2NrKSB7CisgICAgICAgIGRhdGFMb2coIkZBVEFM
OiAiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT5+TG9jYWxBbGxvY2F0b3IgaGFzIG5vbi1udWxsIGxh
c3QgYWN0aXZlIGJsb2NrLlxuIik7CisgICAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUKG9rKTsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRp
bmcoKQoreworICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOworICAgIGlmICghbV9jdXJy
ZW50QmxvY2spIHsKKyAgICAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWls
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY3VycmVudEJsb2NrLT5z
dG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG1fY3Vy
cmVudEJsb2NrOworICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKKyAgICBtX2ZyZWVMaXN0
LmNsZWFyKCk7Cit9CisKK3ZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRpbmcoKQor
eworICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBu
dWxscHRyOworfQorCit2b2lkIExvY2FsQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigp
Cit7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRp
bmdGb3JHb29kKCkKK3sKKyAgICBzdG9wQWxsb2NhdGluZygpOworICAgIHJlc2V0KCk7Cit9CisK
K3ZvaWQqIExvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sK
KyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgSGVh
cCYgaGVhcCA9ICptX2RpcmVjdG9yeS0+bV9oZWFwOworICAgIEFTU0VSVChoZWFwLnZtKCktPmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGRvVGVzdENvbGxlY3Rpb25zSWZO
ZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKKworICAgIEFTU0VSVCghbV9kaXJlY3RvcnktPm1hcmtl
ZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7CisgICAgaGVhcC5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0
Lm9yaWdpbmFsU2l6ZSgpKTsKKyAgICAKKyAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAgICAK
KyAgICBBbGxvY2F0aW5nU2NvcGUgaGVscGluZ0hlYXAoaGVhcCk7CisKKyAgICBoZWFwLmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAKKyAgICAvLyBHb29m
eSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBkaXJl
Y3RvcnkgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKKyAgICAvLyBoYXBwZW5zIHdoZW4g
cnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhlIEdD
J3MgZmluYWxpemF0aW9uLgorICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCisgICAg
ICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICAK
KyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CisgICAg
CisgICAgaWYgKExJS0VMWShyZXN1bHQgIT0gMCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgCisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+dHJ5QWxs
b2NhdGVCbG9jaygpOworICAgIGlmICghYmxvY2spIHsKKyAgICAgICAgaWYgKGZhaWx1cmVNb2Rl
ID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KQorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CisgICAgcmVz
dWx0ID0gYWxsb2NhdGVJbihibG9jayk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkK
K3sKKyAgICBpZiAobV9jdXJyZW50QmxvY2spCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRD
b25zdW1lRnJlZUxpc3QoKTsKKyAgICAKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CisgICAgbV9j
dXJyZW50QmxvY2sgPSBudWxscHRyOworfQorCit2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZygpCit7CisgICAgLy8gRklYTUU6IElmIHdlIHdhbnRlZCB0
aGlzIHRvIGJlIHVzZWQgZm9yIHJlYWwgbXVsdGktdGhyZWFkZWQgYWxsb2NhdGlvbnMgdGhlbiB3
ZSB3b3VsZCBoYXZlIHRvCisgICAgLy8gY29tZSB1cCB3aXRoIHNvbWUgY29uY3VycmVuY3kgcHJv
dG9jb2wgaGVyZS4gVGhhdCBwcm90b2NvbCB3b3VsZCBuZWVkIHRvIGJlIGFibGUgdG8gaGFuZGxl
OgorICAgIC8vCisgICAgLy8gLSBUaGUgYmFzaWMgY2FzZSBvZiBtdWx0aXBsZSBMb2NhbEFsbG9j
YXRvcnMgdHJ5aW5nIHRvIGRvIGFuIGFsbG9jYXRpb25DdXJzb3Igc2VhcmNoIG9uIHRoZQorICAg
IC8vICAgc2FtZSBiaXR2ZWN0b3IuIFRoYXQgcHJvYmFibHkgbmVlZHMgdGhlIGJpdHZlY3RvciBs
b2NrIGF0IGxlYXN0LgorICAgIC8vCisgICAgLy8gLSBUaGUgaGFyZGVyIGNhc2Ugb2Ygc29tZSBM
b2NhbEFsbG9jYXRvciB0cmlnZ2VyaW5nIGEgc3RlYWwgZnJvbSBhIGRpZmZlcmVudCBCbG9ja0Rp
cmVjdG9yeQorICAgIC8vICAgdmlhIGEgc2VhcmNoIGluIHRoZSBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yJ3MgbGlzdC4gV2hvIGtub3dzIHdoYXQgbG9ja3MgdGhhdCBuZWVkcy4KKyAgICAvLyAKKyAg
ICAvLyBPbmUgd2F5IHRvIG1ha2UgdGhpcyB3b3JrIGlzIHRvIGhhdmUgYSBzaW5nbGUgcGVyLUhl
YXAgbG9jayB0aGF0IHByb3RlY3RzIGFsbCBtdXRhdG9yIGxvY2sKKyAgICAvLyBhbGxvY2F0aW9u
IHNsb3cgcGF0aHMuIFRoYXQgd291bGQgcHJvYmFibHkgYmUgc2NhbGFibGUgZW5vdWdoIGZvciB5
ZWFycy4gSXQgd291bGQgY2VydGFpbmx5IGJlCisgICAgLy8gZm9yIGZvciB1c2luZyBUTEMgYWxs
b2NhdGlvbiBmcm9tIEpJVCB0aHJlYWRzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODE2MzUKKyAgICAKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgCisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7
CisgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIAorICAg
IGZvciAoOzspIHsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVj
dG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpOworICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRl
SW4oYmxvY2spKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
aWYgKE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKKyAgICAg
ICAgJiYgKE9wdGlvbnM6OnRyYWRlRGVzdHJ1Y3RvckJsb2NrcygpIHx8ICFtX2RpcmVjdG9yeS0+
bmVlZHNEZXN0cnVjdGlvbigpKSkgeworICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSog
YmxvY2sgPSBtX2RpcmVjdG9yeS0+bV9zdWJzcGFjZS0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5hbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKCkgPT0gbV9kaXJlY3RvcnktPm1fc3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2Fu
QWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAorICAgICAgICAg
ICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBo
YXZlIGJvdGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQorICAgICAgICAgICAgLy8gYW5kIGVtcHR5
IHNldCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJl
Y3RvcnkoKTsKKyAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CisgICAg
ICAgICAgICByZXR1cm4gYWxsb2NhdGVJbihibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQqIExvY2FsQWxsb2NhdG9yOjphbGxvY2F0
ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRy
eUFsbG9jYXRlSW4oYmxvY2spOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFy
a2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCit7CisgICAgQVNTRVJUKGJsb2NrKTsKKyAgICBBU1NF
UlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CisgICAgCisgICAgYmxvY2stPnN3ZWVwKCZtX2Zy
ZWVMaXN0KTsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHN0dW1ibGUgb24gYSBjb21w
bGV0ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcgdHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBidXQKKyAg
ICAvLyB0aGF0IGFsZ29yaXRobSBpcyByYWN5IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0IHNvbWV0
aW1lcy4KKyAgICBpZiAobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgICAg
ICBBU1NFUlQoYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgYmxvY2stPnVuc3dlZXBX
aXRoTm9OZXdseUFsbG9jYXRlZCgpOworICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0
ZWQoKSk7CisgICAgICAgIEFTU0VSVCghbV9kaXJlY3RvcnktPmlzRW1wdHkoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCBibG9jaykpOworICAgICAgICBBU1NFUlQoIW1fZGlyZWN0b3J5LT5pc0NhbkFsbG9j
YXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKKyAg
ICAKKyAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbXSAo
KSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KTsKKyAgICBtX2RpcmVj
dG9yeS0+c2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUp
OworICAgIG1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmRpZEFsbG9jYXRlSW5CbG9jayhtX2N1
cnJlbnRCbG9jayk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBMb2NhbEFsbG9jYXRv
cjo6ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0KQoreworICAgIGlmICghT3B0aW9uczo6c2xvd1BhdGhBbGxvY3NCZXR3ZWVuR0NzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBhbGxvY2F0aW9uQ291bnQg
PSAwOworICAgIGlmICghYWxsb2NhdGlvbkNvdW50KSB7CisgICAgICAgIGlmICghbV9kaXJlY3Rv
cnktPm1faGVhcC0+aXNEZWZlcnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250
ZXh0KQorICAgICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9kaXJlY3RvcnktPm1faGVhcC0+
Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICB9CisgICAg
fQorICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRpb25zOjpzbG93UGF0aEFsbG9jc0Jl
dHdlZW5HQ3MoKSkKKyAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKK30KKworYm9vbCBMb2Nh
bEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0Cit7
CisgICAgLy8gVGhpcyBhYm9taW5hdGlvbiBleGlzdHMgdG8gZGV0ZWN0IHdoZW4gYW4gb2JqZWN0
IGlzIGluIHRoZSBkZWFkLWJ1dC1ub3QtZGVzdHJ1Y3RlZCBzdGF0ZS4KKyAgICAvLyBUaGVyZWZv
cmUsIGl0J3Mgbm90IGV2ZW4gY2xlYXIgdGhhdCB0aGlzIG5lZWRzIHRvIGRvIGFueXRoaW5nIGJl
eW9uZCByZXR1cm5pbmcgImZhbHNlIiwgc2luY2UKKyAgICAvLyBpZiB3ZSBrbm93IHRoYXQgdGhl
IGJsb2NrIG93bmluZyB0aGUgb2JqZWN0IGlzIGZyZWUtbGlzdGVkLCB0aGVuIGl0J3MgaW1wb3Nz
aWJsZSBmb3IgYW55CisgICAgLy8gb2JqZWN0cyB0byBiZSBpbiB0aGUgZGVhZC1idXQtbm90LWRl
c3RydWN0ZWQgc3RhdGUuCisgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcyBhYm9taW5hdGlv
bi4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTY1NQorICAgIHJl
dHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTG9jYWxBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2su
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEJsb2NrRGlyZWN0b3J5OworY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CisKK2NsYXNzIExv
Y2FsQWxsb2NhdG9yIDogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxsb2NhdG9y
PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jYWxBbGxvY2F0b3IpOworICAgIAorcHVi
bGljOgorICAgIExvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7CisgICAgTG9jYWxBbGxv
Y2F0b3IoTG9jYWxBbGxvY2F0b3ImJik7CisgICAgfkxvY2FsQWxsb2NhdG9yKCk7CisgICAgCisg
ICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUpOworCisgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOworICAgIHZvaWQgcHJlcGFyZUZvckFs
bG9jYXRpb24oKTsKKyAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICB2b2lkIHN0b3BB
bGxvY2F0aW5nRm9yR29vZCgpOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZG
cmVlTGlzdCgpOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOworICAg
IAorICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgdm9pZCByZXNldCgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9j
YXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFp
bHVyZU1vZGUpOworICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgdm9pZCogdHJ5
QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlSW4oTWFy
a2VkQmxvY2s6OkhhbmRsZSopOworICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6Okhh
bmRsZSopOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVk
KEdDRGVmZXJyYWxDb250ZXh0Kik7CisKKyAgICBCbG9ja0RpcmVjdG9yeSogbV9kaXJlY3Rvcnk7
CisgICAgdW5zaWduZWQgbV9jZWxsU2l6ZTsKKyAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OworICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OworICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrIHsgbnVsbHB0ciB9OworfTsKKwor
aW5saW5lIHB0cmRpZmZfdCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCit7Cisg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMb2NhbEFsbG9jYXRvciwgbV9mcmVlTGlzdCk7Cit9
CisKK2lubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKQor
eworICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9jYWxBbGxvY2F0b3IsIG1fY2VsbFNpemUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9y
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5FIHZvaWQqIExvY2FsQWxsb2Nh
dG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxs
b2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgc2FuaXRp
emVTdGFja0ZvclZNKG1fZGlyZWN0b3J5LT5oZWFwKCktPnZtKCkpOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRl
eHQsIGZhaWx1cmVNb2RlKSk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2
aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDE2IEBAIHZvaWQgTWFya2VkU3BhY2U6
OnN0b3BBbGxvY2F0aW5nKCkKICAgICAgICAgfSk7CiB9CiAKK3ZvaWQgTWFya2VkU3BhY2U6OnN0
b3BBbGxvY2F0aW5nRm9yR29vZCgpCit7CisgICAgQVNTRVJUKCFpc0l0ZXJhdGluZygpKTsKKyAg
ICBmb3JFYWNoRGlyZWN0b3J5KAorICAgICAgICBbJl0gKEJsb2NrRGlyZWN0b3J5JiBkaXJlY3Rv
cnkpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBkaXJlY3Rvcnkuc3RvcEFsbG9j
YXRpbmdGb3JHb29kKCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKKyAgICAgICAgfSk7Cit9CisKIHZvaWQgTWFya2VkU3BhY2U6OnByZXBhcmVGb3JDb25z
ZXJ2YXRpdmVTY2FuKCkKIHsKICAgICBtX2xhcmdlQWxsb2NhdGlvbnNGb3JUaGlzQ29sbGVjdGlv
bkJlZ2luID0gbV9sYXJnZUFsbG9jYXRpb25zLmJlZ2luKCkgKyBtX2xhcmdlQWxsb2NhdGlvbnNP
ZmZzZXRGb3JUaGlzQ29sbGVjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgSGVhcCogaGVhcCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcDsgfQogICAg
IAotICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsgLy8gWW91IG11c3QgY2FsbCBzdG9w
QWxsb2NhdGluZyBiZWZvcmUgeW91IGNhbGwgdGhpcy4KKyAgICB2b2lkIGxhc3RDaGFuY2VUb0Zp
bmFsaXplKCk7IC8vIE11c3QgY2FsbCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QgZmlyc3QuCiAgICAg
dm9pZCBmcmVlTWVtb3J5KCk7CiAKICAgICBzdGF0aWMgc2l6ZV90IG9wdGltYWxTaXplRm9yKHNp
emVfdCk7CkBAIC0xMTEsNiArMTExLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmluaXNoSXRl
cmF0aW5nKCk7CiAKICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CisgICAgdm9pZCBzdG9wQWxs
b2NhdGluZ0Zvckdvb2QoKTsKICAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoKTsgLy8gSWYgd2Ug
anVzdCBzdG9wcGVkIGFsbG9jYXRpb24gYnV0IHdlIGRpZG4ndCBkbyBhIGNvbGxlY3Rpb24sIHdl
IG5lZWQgdG8gcmVzdW1lIGFsbG9jYXRpb24uCiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yTWFy
a2luZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNP
YmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0b3BJZk5lY2Vzc2FyeVRpbWVyLmgiCiAjaW5jbHVk
ZSAiU3VwZXJTYW1wbGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJWaXNpdFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDEsNiArNDIsNyBA
QCBjbGFzcyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBIZWFwU25hcHNob3RCdWlsZGVy
OwogY2xhc3MgTWFya2VkQmxvY2s7CitjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1h
cmtpbmdDb25zdHJhaW50U29sdmVyOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lu
Y2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvckZvck1v
ZGUuaCIKKyNpbmNsdWRlICJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpA
QCAtNTYsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsK
IAotICAgIHZpcnR1YWwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9j
YXRvckZvck1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFs
IEFsbG9jYXRvciBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQq
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKICAgICAKICAgICB2b2lkIHByZXBhcmVGb3JB
bGxvY2F0aW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJl
YWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCisjaW5j
bHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0
ZShIZWFwJiBoZWFwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNo
ZShoZWFwKSk7Cit9CisKK1RocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUoSGVhcCYg
aGVhcCkKKyAgICA6IG1faGVhcChoZWFwKQoreworICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgp
OworfQorCitUaHJlYWRMb2NhbENhY2hlOjp+VGhyZWFkTG9jYWxDYWNoZSgpCit7CisgICAgZGVz
dHJveURhdGEobV9kYXRhKTsKK30KKworVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogVGhyZWFkTG9j
YWxDYWNoZTo6YWxsb2NhdGVEYXRhKCkKK3sKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fZGF0YSA/
IG1fZGF0YS0+c2l6ZSA6IDA7CisgICAgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6U25hcHNob3Qg
bGF5b3V0ID0gbV9oZWFwLnRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKS5zbmFwc2hvdCgpOworICAg
IAorICAgIERhdGEqIHJlc3VsdCA9IHN0YXRpY19jYXN0PERhdGEqPihmYXN0TWFsbG9jKE9CSkVD
VF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpICsgbGF5b3V0LnNpemUpKTsKKyAgICByZXN1bHQt
PnNpemUgPSBsYXlvdXQuc2l6ZTsKKyAgICByZXN1bHQtPmNhY2hlID0gdGhpczsKKyAgICBmb3Ig
KHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKExv
Y2FsQWxsb2NhdG9yKSkKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9mZnNldCkp
IExvY2FsQWxsb2NhdG9yKFdURk1vdmUoYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCkpKTsKKyAg
ICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBsYXlvdXQuc2l6ZTsgb2Zm
c2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCisgICAgICAgIG5ldyAoJmFsbG9jYXRvcigq
cmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihsYXlvdXQuZGlyZWN0b3JpZXNbb2Zmc2V0
IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJveURhdGEoRGF0YSogZGF0YSkKK3sKKyAgICBmb3Ig
KHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBkYXRhLT5zaXplOyBvZmZzZXQgKz0gc2l6ZW9m
KExvY2FsQWxsb2NhdG9yKSkKKyAgICAgICAgYWxsb2NhdG9yKCpkYXRhLCBvZmZzZXQpLn5Mb2Nh
bEFsbG9jYXRvcigpOworICAgIGZhc3RGcmVlKGRhdGEpOworfQorCit2b2lkIFRocmVhZExvY2Fs
Q2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSkKK3sKKyNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZSgK
KyAgICAgICAgb25jZUZsYWcsCisgICAgICAgIFtdICgpIHsKKyAgICAgICAgICAgIHB0aHJlYWRf
a2V5X2luaXRfbnAodGxzS2V5LCBkZXN0cnVjdG9yKTsKKyAgICAgICAgfSk7CisjZW5kaWYKKyAg
ICAKKyAgICByZWYoKTsKKyAgICAKKyAgICBpZiAoUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG9s
ZENhY2hlID0gZ2V0KHZtKSkKKyAgICAgICAgb2xkQ2FjaGUtPmRlcmVmKCk7CisgICAgCisgICAg
aW5zdGFsbERhdGEodm0sIG1fZGF0YSk7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5z
dGFsbERhdGEoVk0mIHZtLCBEYXRhKiBkYXRhKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQp
CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3Qo
dGxzS2V5LCBkYXRhKTsKKyNlbHNlCisgICAgdm0udGhyZWFkTG9jYWxDYWNoZURhdGEgPSBkYXRh
OworI2VuZGlmCit9CisKK0xvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0
b3JTbG93KFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBEYXRhKiBvbGREYXRhID0gbV9k
YXRhOworICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgpOworICAgIGRlc3Ryb3lEYXRhKG9sZERh
dGEpOworICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEpOworICAgIFJFTEVBU0VfQVNTRVJUKG9m
ZnNldCA8IG1fZGF0YS0+c2l6ZSk7CisgICAgcmV0dXJuIGFsbG9jYXRvcigqbV9kYXRhLCBvZmZz
ZXQpOworfQorCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3RydWN0b3Iodm9pZCogYXJnKQor
eworICAgIGlmICghYXJnKQorICAgICAgICByZXR1cm47CisgICAgRGF0YSogZGF0YSA9IHN0YXRp
Y19jYXN0PERhdGEqPihhcmcpOworICAgIGRhdGEtPmNhY2hlLT5kZXJlZigpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFk
TG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0VExT
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBIZWFwOworY2xhc3MgVk07CisKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkTG9jYWxDYWNoZT4geworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZExvY2FsQ2FjaGUpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxD
YWNoZT4gY3JlYXRlKEhlYXAmKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+VGhyZWFk
TG9jYWxDYWNoZSgpOworCisgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBnZXQo
Vk0mKTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGZhc3QgZW5vdWdoIHRo
YXQgeW91IGNvdWxkIGV2ZW4gY2FsbCBpdCBiZWZvcmUgZXZlcnkgYWxsb2NhdGlvbiwgYnkKKyAg
ICAvLyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcg
dGhlIGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFRoaXMKKyAgICAvLyBhc3N1bWVz
IGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2FjaGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0
dWFsIGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCisgICAgLy8gd2l0aCBwb3NzaWJseSBoaWdoIHJh
dGUgb2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hlZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMg
b3V0IG9mIHBhcmFub2lhLgorICAgIHZvaWQgaW5zdGFsbChWTSYpOworICAgIAorICAgIHN0YXRp
YyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCk7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc0Z1bmMsIHR5cGVuYW1lIEZhaWx1cmVGdW5jPgor
ICAgIHN0YXRpYyB2b2lkIHRyeUdldEFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQsIGNvbnN0
IFN1Y2Nlc3NGdW5jJiwgY29uc3QgRmFpbHVyZUZ1bmMmKTsKKyAgICAKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBzaXpl
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpOyB9CisgICAgCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlKEhlYXAmKTsK
KyAgICAKKyAgICBzdHJ1Y3QgRGF0YSB7CisgICAgICAgIHNpemVfdCBzaXplOworICAgICAgICBU
aHJlYWRMb2NhbENhY2hlKiBjYWNoZTsKKyAgICAgICAgTG9jYWxBbGxvY2F0b3IgYWxsb2NhdG9y
WzFdOworICAgIH07CisKKyAgICBzdGF0aWMgRGF0YSogZ2V0SW1wbChWTSYpOworICAgIAorICAg
IERhdGEqIGFsbG9jYXRlRGF0YSgpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lEYXRhKERhdGEq
KTsKKyAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXpl
X3Qgb2Zmc2V0KTsKKworICAgIHZvaWQgaW5zdGFsbFNsb3coVk0mKTsKKyAgICBzdGF0aWMgdm9p
ZCBpbnN0YWxsRGF0YShWTSYsIERhdGEqKTsKKyAgICAKKyAgICBMb2NhbEFsbG9jYXRvciYgYWxs
b2NhdG9yU2xvdyhWTSYsIHNpemVfdCBvZmZzZXQpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGRl
c3RydWN0b3Iodm9pZCopOworICAgIAorICAgIC8vIFdoZW4gaW5zdGFsbGVkLCB3ZSByZWYoKSB0
aGUgY2FjaGUuIFVuaW5zdGFsbGluZyBkZXJlZigpcyB0aGUgY2FjaGUuIFRMUyBkZXN0cnVjdGlv
biBkZXJlZigpcworICAgIC8vIHRoZSBjYWNoZS4gV2hlbiB0aGUgY2FjaGUgaXMgZGVzdHJ1Y3Rl
ZCwgaXQgbmVlZHMgdG8gcmV0dXJuIGFsbCBvZiBpdHMgc3RhdGUgdG8gdGhlIEdDLiBJCisgICAg
Ly8gdGhpbmsgdGhhdCBqdXN0IG1lYW5zIHN0b3BBbGxvY2F0aW5nKCksIGJ1dCB3aXRoIHNvbWUg
c2VyaW91c2x5IGhlYXZ5IGNhdmVhdHMgaGF2aW5nIHRvIGRvCisgICAgLy8gd2l0aCB3aGVuIGl0
J3MgdmFsaWQgdG8gbWFrZSB0aGF0IGNhbGwuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIFJFTEVB
U0VfQVNTRVJUIHRoYXQgdGhlIGNhY2hlCisgICAgLy8gaXMgZW1wdHkgd2hlbiB3ZSBkZXN0cnVj
dCBpdC4gVGhpcyBpcyBjb3JyZWN0IGZvciBjYWNoZXMgdGhhdCBhcmUga2VwdCBsaXZlIGJ5IEdD
IG9iamVjdHMgYW5kCisgICAgLy8gaXQncyBjb3JyZWN0IGZvciBpbW1vcnRhbCBjYWNoZXMuCisg
ICAgSGVhcCYgbV9oZWFwOworICAgIERhdGEqIG1fZGF0YSB7IG51bGxwdHIgfTsKKworI2lmIEVO
QUJMRShGQVNUX1RMU19KSVQpCisgICAgc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgdGxzS2V5
ID0gV1RGX0dDX1RMQ19LRVk7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2Fj
aGVJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmdldElt
cGwoVk0mIHZtKQoreworI2lmIEVOQUJMRShGQVNUX1RMU19KSVQpCisgICAgVU5VU0VEX1BBUkFN
KHZtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YSo+KF9wdGhyZWFkX2dldHNwZWNpZmlj
X2RpcmVjdCh0bHNLZXkpKTsKKyNlbHNlCisgICAgcmV0dXJuIHZtLnRocmVhZExvY2FsQ2FjaGVE
YXRhOworI2VuZGlmCit9CisKK2lubGluZSBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gVGhyZWFk
TG9jYWxDYWNoZTo6Z2V0KFZNJiB2bSkKK3sKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBk
YXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhLT5j
YWNoZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworaW5saW5lIHZvaWQgVGhyZWFkTG9jYWxD
YWNoZTo6aW5zdGFsbChWTSYgdm0pCit7CisgICAgaWYgKGdldEltcGwodm0pID09IG1fZGF0YSkK
KyAgICAgICAgcmV0dXJuOworICAgIGluc3RhbGxTbG93KHZtKTsKK30KKworaW5saW5lIExvY2Fs
QWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoVk0mIHZtLCBzaXplX3Qgb2Zm
c2V0KQoreworICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZtKTsK
KyAgICBpZiAoTElLRUxZKG9mZnNldCA8IGRhdGEtPnNpemUpKQorICAgICAgICByZXR1cm4gYWxs
b2NhdG9yKCpkYXRhLCBvZmZzZXQpOworICAgIHJldHVybiBkYXRhLT5jYWNoZS0+YWxsb2NhdG9y
U2xvdyh2bSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc0Z1bmMsIHR5
cGVuYW1lIEZhaWx1cmVGdW5jPgordm9pZCBUaHJlYWRMb2NhbENhY2hlOjp0cnlHZXRBbGxvY2F0
b3IoVk0mIHZtLCBzaXplX3Qgb2Zmc2V0LCBjb25zdCBTdWNjZXNzRnVuYyYgc3VjY2Vzc0Z1bmMs
IGNvbnN0IEZhaWx1cmVGdW5jJiBmYWlsdXJlRnVuYykKK3sKKyAgICBUaHJlYWRMb2NhbENhY2hl
OjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7CisgICAgaWYgKExJS0VMWShvZmZzZXQgPCBkYXRh
LT5zaXplKSkKKyAgICAgICAgc3VjY2Vzc0Z1bmMoYWxsb2NhdG9yKCpkYXRhLCBvZmZzZXQpKTsK
KyAgICBlbHNlCisgICAgICAgIGZhaWx1cmVGdW5jKCk7Cit9CisKK2lubGluZSBMb2NhbEFsbG9j
YXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yKERhdGEmIGRhdGEsIHNpemVfdCBvZmZz
ZXQpCit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8TG9jYWxBbGxvY2F0b3IqPihiaXR3aXNl
X2Nhc3Q8Y2hhcio+KCZkYXRhLmFsbG9jYXRvclswXSkgKyBvZmZzZXQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oIgorCisjaW5jbHVkZSAiQmxvY2tEaXJlY3RvcnkuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK1RocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKQor
eworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0Ojp+VGhyZWFkTG9jYWxDYWNoZUxheW91dCgp
Cit7Cit9CisKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZUxheW91dDo6YWxsb2NhdGVPZmZzZXQoQmxv
Y2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CisgICAgZGlyZWN0b3J5LT5tX3RsY09mZnNldCA9IG1fc2l6ZTsKKyAgICBtX3NpemUg
Kz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKTsKKyAgICBtX2RpcmVjdG9yaWVzLmFwcGVuZChkaXJl
Y3RvcnkpOworfQorCitUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpTbmFwc2hvdCBUaHJlYWRMb2Nh
bENhY2hlTGF5b3V0OjpzbmFwc2hvdCgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgIFNuYXBzaG90IHJlc3VsdDsKKyAgICByZXN1bHQuc2l6ZSA9IG1fc2l6ZTsK
KyAgICByZXN1bHQuZGlyZWN0b3JpZXMgPSBtX2RpcmVjdG9yaWVzOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0Jsb2NrRGlyZWN0b3J5KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OjpkaXJlY3Rv
cnkodW5zaWduZWQgb2Zmc2V0KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICByZXR1cm4gbV9kaXJlY3Rvcmllc1tvZmZzZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0
b3IpXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUxheW91dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQmxvY2tEaXJlY3Rvcnk7CisKKy8vIEVhY2ggSGVhcCBoYXMgYSBUaHJlYWRMb2NhbENhY2hl
TGF5b3V0IHRoYXQgaGVscHMgdXMgZmlndXJlIG91dCBob3cgdG8gYWxsb2NhdGUgYSBUaHJlYWRM
b2NhbENhY2hlCisvLyBmb3IgdGhhdCBIZWFwLgorCitjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRMb2NhbENhY2hlTGF5b3V0KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1YmxpYzoKKyAgICBUaHJlYWRM
b2NhbENhY2hlTGF5b3V0KCk7CisgICAgflRocmVhZExvY2FsQ2FjaGVMYXlvdXQoKTsKKworICAg
IC8vIEJsb2NrRGlyZWN0b3J5IGNhbGxzIHRoaXMgZHVyaW5nIGNyZWF0aW9uIGFuZCB0aGlzIGZp
bGxzIGluIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXQuCisgICAgdm9pZCBhbGxvY2F0ZU9mZnNldChC
bG9ja0RpcmVjdG9yeSopOworICAgIAorICAgIHN0cnVjdCBTbmFwc2hvdCB7CisgICAgICAgIHNp
emVfdCBzaXplOworICAgICAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBkaXJlY3RvcmllczsK
KyAgICB9OworICAgIAorICAgIFNuYXBzaG90IHNuYXBzaG90KCk7CisgICAgCisgICAgQmxvY2tE
aXJlY3RvcnkqIGRpcmVjdG9yeSh1bnNpZ25lZCBvZmZzZXQpOworICAgIAorcHJpdmF0ZToKKyAg
ICBMb2NrIG1fbG9jazsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworICAgIFZlY3RvcjxCbG9j
a0RpcmVjdG9yeSo+IG1fZGlyZWN0b3JpZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgyLDYgKzU4MiwxMDMgQEAgdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhWTQogfQogI2VuZGlmCiAKK3ZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0
R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sKKyAgICAvLyBOT1RFOiBU
aGlzIGlzIGNhcmVmdWxseSB3cml0dGVuIHNvIHRoYXQgd2UgY2FuIGNhbGwgaXQgd2hpbGUgd2Ug
ZGlzYWxsb3cgc2NyYXRjaAorICAgIC8vIHJlZ2lzdGVyIHVzYWdlLgorICAgICAgICAKKyAgICBp
ZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEp1bXAgcG9wUGF0
aDsKKyAgICBKdW1wIGRvbmU7CisgICAgCisjaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBs
b2FkRnJvbVRMU1B0cihmYXN0VExTT2Zmc2V0Rm9yS2V5KFdURl9HQ19UTENfS0VZKSwgc2NyYXRj
aEdQUik7CisjZWxzZQorICAgIGxvYWRQdHIoJnZtKCkudGhyZWFkTG9jYWxDYWNoZURhdGEsIHNj
cmF0Y2hHUFIpOworI2VuZGlmCisgICAgaWYgKGFsbG9jYXRvci5pc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgQWRkcmVzcyhzY3Jh
dGNoR1BSLCBUaHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZlNpemUoKSksIFRydXN0ZWRJbW0zMihh
bGxvY2F0b3IuYWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoVGhyZWFkTG9jYWxDYWNoZTo6b2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigpICsgYWxsb2Nh
dG9yLmFsbG9jYXRvcigpLm9mZnNldCgpKSwgc2NyYXRjaEdQUiwgYWxsb2NhdG9yR1BSKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoMzIoQmVsb3dPckVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFRocmVhZExvY2FsQ2FjaGU6Om9mZnNldE9mU2l6ZSgpKSwg
YWxsb2NhdG9yR1BSKSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVGhyZWFkTG9jYWxD
YWNoZTo6b2Zmc2V0T2ZGaXJzdEFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKKyAgICAgICAg
YWRkUHRyKHNjcmF0Y2hHUFIsIGFsbG9jYXRvckdQUik7CisgICAgfQorCisgICAgbG9hZDMyKEFk
ZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsg
RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOworICAgIHBvcFBhdGgg
PSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKKyAgICBpZiAoYWxsb2NhdG9yLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3IuYWxsb2NhdG9y
KCkuY2VsbFNpemUodm0oKS5oZWFwKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgZWxz
ZSB7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICBtb3ZlKHJlc3VsdEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdWIzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9j
YWxBbGxvY2F0b3I6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFs
bG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBz
dWIzMihyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICB9CisgICAg
fQorICAgIG5lZ1B0cihyZXN1bHRHUFIpOworICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVl
TGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkpOworICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIg
PSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CisgICAgaWYgKGlzWDg2KCkpCisg
ICAgICAgIGFkZFB0cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbG9hZFB0cihwYXlsb2FkRW5kQWRkciwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFB0
cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgIH0KKyAgICAgICAgCisgICAgZG9uZSA9IGp1
bXAoKTsKKyAgICAgICAgCisgICAgcG9wUGF0aC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICBs
b2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVl
TGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsK
KyAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBM
b2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2Vj
cmV0KCkpLCByZXN1bHRHUFIpOworICAgIGVsc2UgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgeG9yUHRyKHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgfQorICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0
UHRyKFplcm8sIHJlc3VsdEdQUikpOworICAgICAgICAKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGhh
bGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0
CisgICAgLy8gaXQncyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOworICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIs
IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgp
ICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CisgICAgICAgIAorICAgIGRv
bmUubGluayh0aGlzKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZShH
UFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sKKyAg
ICBpZiAoYWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoIWFsbG9jYXRvci5h
bGxvY2F0b3IoKSkgeworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZW1pdEFsbG9jYXRlV2l0aE5v
bk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBhbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgc2NyYXRj
aEdQUiwgc2xvd1BhdGgpOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRl
VmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFj
ZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3Jh
dGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIHN0YXRpY19hc3NlcnQoIShNYXJr
ZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFya2Vk
U3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgCisgICAgdW5z
aWduZWQgc3RlcFNoaWZ0ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3RlcCk7CisgICAg
CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpLCBhbGxv
Y2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEpOworICAgIHVyc2hpZnQzMihUcnVzdGVkSW1tMzIoc3Rl
cFNoaWZ0KSwgc2NyYXRjaEdQUjEpOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihBYm92
ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYgPj4g
c3RlcFNoaWZ0KSkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdWJzcGFjZS5hbGxvY2F0b3JG
b3JTaXplU3RlcCgpIC0gMSksIHNjcmF0Y2hHUFIyKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgVGltZXNGb3VyKSwgc2NyYXRjaEdQUjEpOworICAgIAor
ICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgc2Ny
YXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVu
dHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2Fs
bEZyYW1lLmgiCisjaW5jbHVkZSAiSklUQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIK
QEAgLTU5LDYgKzYwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICBWTSYgdm0oKSB7IHJldHVybiAqbV9j
b2RlQmxvY2stPnZtKCk7IH0KICAgICBBc3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0
dXJuIG1fYXNzZW1ibGVyOyB9CiAKICAgICB2b2lkIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCkKQEAgLTE0ODgsODMgKzE0OTAsMjQgQEAgcHVibGljOgogICAgIHZvaWQgZW1pdFJhbmRvbVRo
dW5rKEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnIHNjcmF0Y2gwLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMiwgRlBSUmVnIHJlc3VsdCk7CiAgICAgdm9pZCBlbWl0UmFuZG9tVGh1bmso
Vk0mLCBHUFJSZWcgc2NyYXRjaDAsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBH
UFJSZWcgc2NyYXRjaDMsIEZQUlJlZyByZXN1bHQpOwogI2VuZGlmCi0KKyAgICAKICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgdmFsdWUgaGVsZCBpbiBhbGxvY2F0b3JHUFIg
aXMgbm9uLW51bGwuIFRoaXMgRE9FUyBOT1QgbWVhbgogICAgIC8vIHRoYXQgYWxsb2NhdG9yIGlz
IG5vbi1udWxsOyBhbGxvY2F0b3IgY2FuIGJlIG51bGwgYXMgYSBzaWduYWwgdGhhdCB3ZSBkb24n
dCBrbm93IHdoYXQgdGhlCi0gICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLgotICAgIHZv
aWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgQmxv
Y2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIC8vIE5PVEU6IFRoaXMg
aXMgY2FyZWZ1bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNh
bGxvdyBzY3JhdGNoCi0gICAgICAgIC8vIHJlZ2lzdGVyIHVzYWdlLgotICAgICAgICAKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMoKSkgewotICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIEp1bXAgcG9wUGF0aDsKLSAgICAgICAgSnVtcCBkb25lOwotICAgICAgICAK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRH
UFIpOwotICAgICAgICBwb3BQYXRoID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7Ci0g
ICAgICAgIGlmIChhbGxvY2F0b3IpCi0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFs
bG9jYXRvci0+Y2VsbFNpemUoKSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaWYgKGlzWDg2KCkpIHsKLSAgICAgICAgICAgICAgICBtb3ZlKHJl
c3VsdEdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3ViMzIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICAgICAgc3ViMzIocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBuZWdQdHIocmVzdWx0
R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwg
QmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJl
bWFpbmluZygpKSk7Ci0gICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFs
bG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0
OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7Ci0gICAgICAgIGlmIChpc1g4NigpKQotICAgICAgICAg
ICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGxvYWRQdHIocGF5bG9hZEVuZEFkZHIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAg
ICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGRvbmUgPSBqdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBwb3BQYXRoLmxpbmsodGhp
cyk7Ci0gICAgICAgIAotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9j
a0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1i
bGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGlzWDg2KCkpCi0gICAgICAgICAg
ICB4b3JQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZy
ZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxv
Y2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNlY3Jl
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICB4b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKLSAgICAgICAgfQotICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZXN1bHRHUFIpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFs
Zi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQK
LSAgICAgICAgLy8gaXQncyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCi0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIo
c2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKLSAgICAg
ICAgCi0gICAgICAgIGRvbmUubGluayh0aGlzKTsKLSAgICB9CisgICAgLy8gdmFsdWUgb2YgYWxs
b2NhdG9yR1BSIGlzLiBBZGRpdGlvbmFsbHksIGlmIHRoZSBhbGxvY2F0b3IgaXMgbm90IG51bGws
IHRoZW4gdGhlcmUgaXMgbm8gbmVlZAorICAgIC8vIHRvIHBvcHVsYXRlIGFsbG9jYXRvckdQUiAt
IHRoaXMgY29kZSB3aWxsIGlnbm9yZSB0aGUgY29udGVudHMgb2YgYWxsb2NhdG9yR1BSLgorICAg
IHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwg
Y29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpOwogICAgIAotICAgIHZvaWQgZW1pdEFs
bG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJl
ZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi0g
ICAgewotICAgICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvckdQUikpOwotICAgICAgICBlbWl0QWxsb2Nh
dGVXaXRoTm9uTnVsbEFsbG9jYXRvcihyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9yR1BS
LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Ci0gICAgfQorICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQ
UlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxs
b2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9j
YXRlSlNDZWxsKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQ
UlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgc2NyYXRj
aEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNDZWxsKEdQ
UlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxs
b2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1
bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIs
IGFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAg
IGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhzdHJ1Y3R1cmUsIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cnVjdHVyZVR5
cGUsIHR5cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4KLSAgICB2b2lkIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9y
YWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExp
c3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmplY3QoR1BSUmVnIHJlc3Vs
dEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIs
IFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAg
ICAgZW1pdEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIs
IHN0cnVjdHVyZSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBzdG9yZVB0cihzdG9y
YWdlLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CkBA
IC0xNTc2LDEzICsxNTE5LDggQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1
bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNr
VHlwZSBtYXNrLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
MiwgSnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7Ci0gICAgICAgIGlmICghYWxsb2NhdG9yKSB7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjEsIHN0cnVjdHVy
ZSwgc3RvcmFnZSwgbWFzaywgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKKyAgICAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0
YW50KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIxLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIG1hc2ssIHNj
cmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUs
IHR5cGVuYW1lIE1hc2tUeXBlPgpAQCAtMTU5MywyMCArMTUzMSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBhbGxvY2F0aW9uU2l6ZSBjYW4gYmUgYWxpYXNlZCB3aXRoIGFueSBvZiB0aGUgb3Ro
ZXIgaW5wdXQgR1BScy4gSWYgaXQncyBub3QgYWxpYXNlZCB0aGVuIGl0CiAgICAgLy8gd29uJ3Qg
YmUgY2xvYmJlcmVkLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcg
cmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25T
aXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNs
b3dQYXRoKQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZFNwYWNlOjpzaXpl
U3RlcCAmIChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6c2l6ZVN0
ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IHN0ZXBTaGlmdCA9IGdldExTQlNldChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXApOwotICAgICAgICAK
LSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpLCBh
bGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEpOwotICAgICAgICB1cnNoaWZ0MzIoVHJ1c3RlZElt
bTMyKHN0ZXBTaGlmdCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSMSwgVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpsYXJn
ZUN1dG9mZiA+PiBzdGVwU2hpZnQpKSk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdWJz
cGFjZS5hbGxvY2F0b3JGb3JTaXplU3RlcCgpIC0gMSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAg
bG9hZFB0cihCYXNlSW5kZXgoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCB0aW1lc1B0cigpKSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICAKLSAgICAgICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQUiwg
bnVsbHB0ciwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7Ci0gICAgfQorICAg
IHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0
ZVN1YnNwYWNlJiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRj
aEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+CiAg
ICAgdm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbChWTSYgdm0sIEdQUlJlZyByZXN1
bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQ
UlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQWxsb2NhdG9yLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxsb2NhdG9yLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRBbGxvY2F0b3IgeworcHVibGljOgorICAgIGVu
dW0gS2luZCB7CisgICAgICAgIENvbnN0YW50LAorICAgICAgICBWYXJpYWJsZQorICAgIH07Cisg
ICAgCisgICAgSklUQWxsb2NhdG9yKCkgeyB9CisgICAgCisgICAgc3RhdGljIEpJVEFsbG9jYXRv
ciBjb25zdGFudChBbGxvY2F0b3IgYWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAgSklUQWxsb2Nh
dG9yIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50OworICAgICAgICBy
ZXN1bHQubV9hbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBKSVRBbGxvY2F0b3IgdmFyaWFibGUoKQorICAgIHsKKyAg
ICAgICAgSklUQWxsb2NhdG9yIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFZhcmlh
YmxlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSklUQWxsb2NhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2FsbG9jYXRvciA9
PSBvdGhlci5tX2FsbG9jYXRvcjsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEpJVEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEpJVEFsbG9jYXRvcigpOwor
ICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAg
ICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gQ29uc3RhbnQ7IH0K
KyAgICBib29sIGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gVmFyaWFibGU7
IH0KKyAgICAKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlzQ29uc3RhbnQoKSk7CisgICAgICAgIHJldHVybiBtX2FsbG9jYXRv
cjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kIHsgQ29uc3RhbnQgfTsK
KyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC03OSwyMiArNzksMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwog
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9u
VmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlz
dHMpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0
PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVn
ID0gcmV0dXJuVmFsdWVHUFI7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
ICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcpOwotICAgIGlmIChhbGxvY2F0b3IpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBhdXRvIG1hc2sgPSBU
cnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBhbGxv
Y2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHks
IG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Cisg
ICAgICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKKyAgICAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFs
bG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNj
cmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC04NTYsOSArODU3LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoTm90RXF1YWwsIEFkZHJlc3MoY2FsbGVlUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRh
UmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwg
YWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEVxdWFsLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW0zMihBbGxvY2F0
b3IoKS5vZmZzZXQoKSkpKTsKIAogICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1
bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIo
RXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBAIC04NjgsNyArODY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgYXV0byBtYXNrID0g
VHJ1c3RlZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgbnVs
bHB0ciwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRj
aFJlZywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRl
cmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwogICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVzdWx0UmVnKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29t
PgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtODEsMjIgKzgxLDIzIEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUo
KTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEJsb2NrRGlyZWN0b3J5KiBh
bGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9i
amVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3Vs
dFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
YWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBpZiAoYWxsb2NhdG9yKQotICAgICAgICBh
ZGRTbG93Q2FzZShKdW1wKCkpOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBhdXRvIGJ1
dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgYXV0byBtYXNrID0gVHJ1c3Rl
ZEltbTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgYWxsb2NhdG9y
LCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNr
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOworICAgIGVsc2UgeworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAgICAg
YXV0byBtYXNrID0gVHJ1c3RlZEltbTMyKDApOworICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9y
UmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC03NjYsOSArNzY3LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90
RXF1YWwsIEFkZHJlc3MoY2FsbGVlUmVnLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxs
ZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZB
bGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmFyZURhdGFS
ZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9y
UmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEVxdWFsLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW0zMihBbGxvY2F0b3IoKS5vZmZz
ZXQoKSkpKTsKIAogICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVn
KTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNh
Y2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVl
T2JqZWN0cygpKSk7CkBAIC03NzgsNyArNzc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoSW5zdHJ1Y3RpbwogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CiAgICAgYXV0byBtYXNrID0gVHJ1c3RlZElt
bTMyKDApOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgbnVsbHB0ciwgYWxs
b2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJlZywgc2xv
d0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFz
aywgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNh
bGxlZSwgc2NyYXRjaFJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hSZWcsIEpTRnVu
Y3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHNjcmF0Y2hSZWcpOwogICAgIGxvYWQzMihBZGRy
ZXNzKHNjcmF0Y2hSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZklubGluZUNhcGFj
aXR5KCkpLCBzY3JhdGNoUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNzksNyArNzksNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1h
CiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZt
LCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
CiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7
CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpB
c3NlcnQpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC04Nyw3ICs4
Nyw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbmkKIGlubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6dHJ5Q3JlYXRlKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFiYXNlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2Us
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKQEAgLTE2NSw3ICsxNjUsNyBAQCBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9
IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNp
emUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9w
ZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
dm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVy
bk51bGwpOworICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBt
ZW1jcHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgsNyAr
MTE4LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVj
dCgpLT5hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIAotICAgIHZvaWQqIGJhY2tpbmdTdG9y
ZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkuYWxs
b2NhdGVOb25WaXJ0dWFsKG1hcHBlZEFyZ3VtZW50c1NpemUoKSwgbnVsbHB0ciwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpOworICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkuYWxsb2NhdGVOb25WaXJ0
dWFsKHZtLCBtYXBwZWRBcmd1bWVudHNTaXplKCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6QXNzZXJ0KTsKICAgICBib29sKiBvdmVycmlkZXMgPSBzdGF0aWNfY2FzdDxib29sKj4o
YmFja2luZ1N0b3JlKTsKICAgICBtX21hcHBlZEFyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG92ZXJy
aWRlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sZW5ndGg7IGktLTspCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjMsNyAr
MjYzLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppbml0TW9kaWZpZQogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7CiAKICAgICBpZiAo
YXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1
eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLmFsbG9jYXRl
Tm9uVmlydHVhbChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCksIG51bGxw
dHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICAgICAgdm9pZCogYmFja2lu
Z1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvci5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjw4PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOwogICAgICAgICBib29sKiBtb2RpZmllZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wq
PihiYWNraW5nU3RvcmUpOwogICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5z
ZXQodm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYXJnc0xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNyw3ICsyMDcs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6
OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKLSAgICAgICAgdm9pZCogZGF0YSA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6
ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAg
dm9pZCogZGF0YSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9u
VmlydHVhbCh2bSwgYWxsb2NhdGlvblNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlz
aW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC04MSw3ICs4
MSwxMCBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgICAg
ICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkpOwogCiAgICAgICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgo
c3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sCisgICAgICAg
ICAgICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwKKyAgICAgICAgICAgIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBi
dXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2Up
OwpAQCAtOTgsNyArMTAxLDEwIEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQKICAgICB9IGVsc2UgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhC
aWFzID0gMDsKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQXJyYXlTdG9yYWdlOjpv
cHRpbWFsVmVjdG9yTGVuZ3RoKGluZGV4Qmlhcywgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsK
LSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGlu
ZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKAorICAgICAgICAgICAgdm0sCisgICAgICAgICAgICBCdXR0ZXJmbHk6OnRvdGFs
U2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpKSwKKyAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1w
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmZyb21CYXNlKHRlbXAsIGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC0z
NjgsNyArMzc0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShjb25zdAog
ICAgICAgICBhbGxvY2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFj
aXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAg
ICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOworICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAgICAgICB2bSwgbmV3U2l6ZSwg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYg
KCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0
b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjM4LDYgKzIzOCw3IEBAIGlu
bGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKIAogICAgICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3Ro
KHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoSGludCk7CiAgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoCisgICAgICAg
ICAgICB2bSwKICAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0
b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLAogICAg
ICAgICAgICAgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAg
ICAgICAgaWYgKCF0ZW1wKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw3IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250
ZXh0OjoKICAgICAgICAgdm9pZCogdGVtcDsKICAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2Yo
bGVuZ3RoLCBlbGVtZW50U2l6ZSk7CiAgICAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgICAgICB0
ZW1wID0gdm0ucHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1
YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAg
ICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbCh2bSwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsKTsKICAgICAgICAgICAgIGlmICghdGVtcCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0gZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDE0
ICsxNDUsMTUgQEAgQ29tcGxldGVTdWJzcGFjZSogSlNDZWxsOjpzdWJzcGFjZUZvcihWTQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIEFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVs
cGVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CisgICAgVk0mIHZt
ID0gKmhlYXAudm0oKTsKICAgICBBU1NFUlQoZGVmZXJyYWxDb250ZXh0IHx8ICFEaXNhbGxvd0dD
Ojppc0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChzaXplID49IHNpemVv
ZihUKSk7Ci0gICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFj
ZUZvcjxUPigqaGVhcC52bSgpKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29u
dGV4dCwgZmFpbHVyZU1vZGUpKTsKKyAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KHN1YnNwYWNlRm9yPFQ+KHZtKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBk
ZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CiAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCAmJiAhcmVzdWx0KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NFUlQoIWhlYXAu
dm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7Ci0gICAgaGVhcC52bSgpLT5zZXRJbml0aWFs
aXppbmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOworICAgIEFTU0VSVCghdm0uaXNJbml0aWFsaXpp
bmdPYmplY3QoKSk7CisgICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygp
KTsKICNlbmRpZgogICAgIHJlc3VsdC0+Y2xlYXJTdHJ1Y3R1cmUoKTsKICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZW5xdQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUpTR2xvYmFsT2JqZWN0OjpKU0ds
b2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0dsb2JhbE9iamVjdDo6
SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gdGhyZWFkTG9jYWxDYWNoZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwg
MCkKICAgICAsIG1fdm0odm0pCiAgICAgLCBtX21hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpKQpAQCAtMzUzLDYgKzM1
Myw3IEBAIEpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFMKICAgICAsIG1f
dGVtcGxhdGVSZWdpc3RyeSh2bSkKICAgICAsIG1fcnVudGltZUZsYWdzKCkKICAgICAsIG1fZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorICAgICwgbV90aHJl
YWRMb2NhbENhY2hlKHRocmVhZExvY2FsQ2FjaGUgPyBXVEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUp
IDogdm0uZGVmYXVsdFRocmVhZExvY2FsQ2FjaGUpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjI3Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSdW50aW1l
RmxhZ3MmIHJ1bnRpbWVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fcnVudGltZUZsYWdzOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVj
dChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0
dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCwgUmVmUHRyPFRocmVhZExv
Y2FsQ2FjaGU+ID0gbnVsbHB0cik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CiAKQEAgLTg5Myw2ICs4OTMsOCBAQCBwdWJsaWM6CiAgICAgSlNXcmFw
cGVyTWFwKiB3cmFwcGVyTWFwKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyTWFwLmdldCgpOyB9
CiAgICAgdm9pZCBzZXRXcmFwcGVyTWFwKEpTV3JhcHBlck1hcCogbWFwKSB7IG1fd3JhcHBlck1h
cCA9IG1hcDsgfQogI2VuZGlmCisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSYgdGhyZWFkTG9j
YWxDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICptX3RocmVhZExvY2FsQ2FjaGUuZ2V0KCk7IH0KIAog
cHJvdGVjdGVkOgogICAgIHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewpAQCAtOTI0LDYgKzky
Niw4IEBAIHByaXZhdGU6CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBSZXRhaW5QdHI8
SlNXcmFwcGVyTWFwPiBtX3dyYXBwZXJNYXA7CiAjZW5kaWYKKyAgICAKKyAgICBSZWZQdHI8VGhy
ZWFkTG9jYWxDYWNoZT4gbV90aHJlYWRMb2NhbENhY2hlOwogfTsKIAogSlNHbG9iYWxPYmplY3Qq
IGFzR2xvYmFsT2JqZWN0KEpTVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlICJT
YW1wbGluZ1Byb2ZpbGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIK
ICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMTQ1LDcgKzE0Niw5IEBAIHZvaWQgSlNMb2NrOjpk
aWRBY3F1aXJlTG9jaygpCiAKICAgICBtX3ZtLT5zZXRMYXN0U3RhY2tUb3AodGhyZWFkLnNhdmVk
TGFzdFN0YWNrVG9wKCkpOwogICAgIEFTU0VSVCh0aHJlYWQuc3RhY2soKS5jb250YWlucyhtX3Zt
LT5sYXN0U3RhY2tUb3AoKSkpOwotCisgICAgCisgICAgbV92bS0+ZGVmYXVsdFRocmVhZExvY2Fs
Q2FjaGUtPmluc3RhbGwoKm1fdm0pOworICAgIAogICAgIG1fdm0tPmhlYXAubWFjaGluZVRocmVh
ZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFdh
c206OnN0YXJ0VHJhY2tpbmdDdXJyZW50VGhyZWFkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYs
NyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVBc3luY0l0ZXJhdGlvbiA9IGZhCiAgICAgdihib29s
LCBkdW1wU2l6ZUNsYXNzZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHVzZUJ1bXBBbGxvY2F0b3IsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoYm9vbCwgdHJhZGVEZXN0cnVjdG9yQmxvY2tzLCB0cnVlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIGVhZ2VybHlVcGRhdGVUb3BDYWxsRnJhbWUsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VPU1JFbnRyeVRvREZHLCB0
cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAyMjcyNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOC0y
MDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTQyLDcgKzQyLDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRp
YQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFs
T2JqZWN0KCk7CiAgICAgYm9vbCBjcmVhdGVVbmluaXRpYWxpemVkID0gZ2xvYmFsT2JqZWN0LT5p
c09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB2b2lkKiB0ZW1wID0gdm0u
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICB2b2lkKiB0ZW1wID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKFVOTElLRUxZKCF0ZW1w
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjcy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMjEsNiArMTIxLDcgQEAKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgor
I2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2Zp
bGVyTG9nLmgiCkBAIC0zMDYsNiArMzA3LDkgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogICAgIHVwZGF0ZVNvZnRSZXNlcnZlZFpvbmVTaXplKE9wdGlvbnM6OnNv
ZnRSZXNlcnZlZFpvbmVTaXplKCkpOwogICAgIHNldExhc3RTdGFja1RvcChzdGFjay5vcmlnaW4o
KSk7CiAKKyAgICBkZWZhdWx0VGhyZWFkTG9jYWxDYWNoZSA9IFRocmVhZExvY2FsQ2FjaGU6OmNy
ZWF0ZShoZWFwKTsKKyAgICBkZWZhdWx0VGhyZWFkTG9jYWxDYWNoZS0+aW5zdGFsbCgqdGhpcyk7
CisKICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3Rl
bnQgaGVyZQogICAgIEpTTG9ja0hvbGRlciBsb2NrKHRoaXMpOwogICAgIEF0b21pY1N0cmluZ1Rh
YmxlKiBleGlzdGluZ0VudHJ5QXRvbWljU3RyaW5nVGFibGUgPSBUaHJlYWQ6OmN1cnJlbnQoKS5z
ZXRDdXJyZW50QXRvbWljU3RyaW5nVGFibGUobV9hdG9taWNTdHJpbmdUYWJsZSk7CkBAIC0zODMs
NyArMzg3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2Vu
ZGlmCiAgICAgCiAgICAgR2lnYWNhZ2U6OmFkZFByaW1pdGl2ZURpc2FibGVDYWxsYmFjayhwcmlt
aXRpdmVHaWdhY2FnZURpc2FibGVkQ2FsbGJhY2ssIHRoaXMpOwotCisgICAgCiAgICAgaGVhcC5u
b3RpZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICAKICAgICBMTEludDo6RGF0YTo6cGVyZm9ybUFz
c2VydGlvbnMoKnRoaXMpOwpAQCAtNDk0LDYgKzQ5OCwxMCBAQCBWTTo6flZNKCkKICAgICBBU1NF
UlQoY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgbV9hcGlMb2NrLT53aWxs
RGVzdHJveVZNKHRoaXMpOwogICAgIGhlYXAubGFzdENoYW5jZVRvRmluYWxpemUoKTsKKyAgICAK
KyNpZiAhRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpkZXN0cnVj
dG9yKHRocmVhZExvY2FsQ2FjaGVEYXRhKTsKKyNlbmRpZgogCiAgICAgZGVsZXRlIGludGVycHJl
dGVyOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0
cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRy
YXBzLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgogI2luY2x1ZGUgIldhc21Db250
ZXh0LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRl
ckFsbG9jYXRvci5oPgpAQCAtNjU2LDYgKzY1NywxMSBAQCBwdWJsaWM6CiAKICAgICBKU09iamVj
dCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBIYXNo
U2V0PEpTT2JqZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKKyAgICAK
KyNpZiAhRU5BQkxFKEZBU1RfVExTX0pJVCkKKyAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiB0
aHJlYWRMb2NhbENhY2hlRGF0YSB7IG51bGxwdHIgfTsKKyNlbmRpZgorICAgIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiBkZWZhdWx0VGhyZWFkTG9jYWxDYWNoZTsKIAogICAgIExvY2FsVGltZU9m
ZnNldENhY2hlIGxvY2FsVGltZU9mZnNldENhY2hlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyNzI3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGlzYWxsb3dWTVJlZW50cnkuaCIK
ICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgpAQCAtNDAsNiAr
NDEsNyBAQCBWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAgICAgOiBt
X3ZtKHZtKQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogeworICAgIGdsb2Jh
bE9iamVjdC0+dGhyZWFkTG9jYWxDYWNoZSgpLmluc3RhbGwodm0pOwogICAgIEFTU0VSVCghRGlz
YWxsb3dWTVJlZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJU
KFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgaWYg
KCF2bS5lbnRyeVNjb3BlKSB7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MjczKQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxOC0wMS0yMCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBHQyBzaG91bGQg
c3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwgY2FjaGVzKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQml0bWFwLmg6IEp1c3QgZml4aW5nIGEg
Y29tcGlsZSBlcnJvci4KKwogMjAxOC0wMS0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBqc2Mtb25seSBidWlsZApJbmRleDogU291
cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFw
LmgJKHJldmlzaW9uIDIyNzI3MykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0cmlu
Zy5oPgo=
</data>
<flag name="review"
          id="350944"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>